From 536e21cf1cf62b4dc589c07bc2af67caa369f904 Mon Sep 17 00:00:00 2001 From: Celia La Date: Wed, 5 Nov 2025 16:23:14 -0800 Subject: [PATCH 1/3] clusterversion: bump MinSupported from V25_2 to V25_3 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This change updates the minimum supported cluster version from 25.2 to 25.3, removing all 25.2-specific code and infrastructure. Changes include: - Updated MinSupported constant from V25_2 to V25_3 - Renamed V25_3_* version keys with TODO_Delete_ prefix - Updated Pebble MinimumSupportedFormatVersion - Removed 25.2 bootstrap data files (4 files) - Deleted release_25_2 schema changer rules (~30 files) - Removed local-mixed-25.2 and cockroach-go-testserver-25.2 logictest configs - Updated skipif directives in ~200+ test files - Regenerated Bazel build files Part of M.4 task (quarterly version bump process). Release note (ops change): The minimum supported version for upgrades is now 25.3. Clusters running 25.2 or earlier must upgrade to 25.3 before upgrading to this version. Epic: None 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- pkg/BUILD.bazel | 11 - .../testdata/logic_test/redact_descriptor | 1 - .../logictestccl/testdata/logic_test/triggers | 4 +- .../tests/local-mixed-25.2/BUILD.bazel | 28 - .../tests/local-mixed-25.2/generated_test.go | 307 - .../tests/local-mixed-25.3/generated_test.go | 2 +- .../tests/local-mixed-25.4/generated_test.go | 2 +- .../declarative-rules/invalid_version | 1 - pkg/clusterversion/cockroach_versions.go | 18 +- pkg/sql/catalog/bootstrap/BUILD.bazel | 4 - .../catalog/bootstrap/data/25_2_system.keys | 212 - .../catalog/bootstrap/data/25_2_system.sha256 | 1 - .../catalog/bootstrap/data/25_2_tenant.keys | 136 - .../catalog/bootstrap/data/25_2_tenant.sha256 | 1 - pkg/sql/catalog/bootstrap/initial_values.go | 19 - pkg/sql/logictest/BUILD.bazel | 4 - pkg/sql/logictest/REPOSITORIES.bzl | 6 - .../logictest/logictestbase/logictestbase.go | 26 - .../logictest/testdata/logic_test/alter_table | 1 - .../logictest/testdata/logic_test/computed | 4 +- .../testdata/logic_test/crdb_internal | 2 - .../testdata/logic_test/crdb_internal_catalog | 1 - .../logictest/testdata/logic_test/drop_user | 8 - pkg/sql/logictest/testdata/logic_test/fk | 2 - .../testdata/logic_test/information_schema | 3 - .../testdata/logic_test/mixed_version_char | 2 +- .../testdata/logic_test/mixed_version_citext | 2 +- .../testdata/logic_test/mixed_version_ltree | 2 +- .../logic_test/mixed_version_partial_stats | 2 +- pkg/sql/logictest/testdata/logic_test/owner | 19 - .../testdata/logic_test/rename_column | 16 +- .../testdata/logic_test/rename_sequence | 4 +- pkg/sql/logictest/testdata/logic_test/role | 24 +- pkg/sql/logictest/testdata/logic_test/schema | 1 - .../testdata/logic_test/schema_locked | 2 - .../testdata/logic_test/show_inspect_errors | 40 +- .../logictest/testdata/logic_test/show_source | 1 - .../logictest/testdata/logic_test/split_at | 2 - pkg/sql/logictest/testdata/logic_test/system | 11 - .../testdata/logic_test/udf_in_table | 62 - .../logictest/testdata/logic_test/udf_star | 4 +- .../testdata/logic_test/udf_unsupported | 14 - pkg/sql/logictest/testdata/logic_test/user | 12 +- .../testdata/logic_test/vector_index_mixed | 2 +- .../testdata/logic_test/virtual_columns | 6 +- .../cockroach-go-testserver-25.2/BUILD.bazel | 29 - .../generated_test.go | 158 - .../cockroach-go-testserver-25.3/BUILD.bazel | 2 +- .../generated_test.go | 23 +- .../generated_test.go | 2 +- .../generated_test.go | 2 +- .../tests/local-mixed-25.2/BUILD.bazel | 30 - .../tests/local-mixed-25.2/generated_test.go | 2713 ----- .../tests/local-mixed-25.3/generated_test.go | 2 +- .../tests/local-mixed-25.4/generated_test.go | 2 +- pkg/sql/schemachanger/scplan/BUILD.bazel | 1 - .../internal/rules/release_25_2/BUILD.bazel | 69 - .../rules/release_25_2/assertions_test.go | 237 - .../rules/release_25_2/dep_add_column.go | 240 - .../rules/release_25_2/dep_add_constraint.go | 79 - .../rules/release_25_2/dep_add_index.go | 260 - .../release_25_2/dep_add_index_and_column.go | 143 - .../dep_add_index_and_constraint.go | 37 - .../rules/release_25_2/dep_add_trigger.go | 29 - .../release_25_2/dep_alter_column_type.go | 72 - .../rules/release_25_2/dep_configure_zone.go | 128 - .../internal/rules/release_25_2/dep_create.go | 59 - .../rules/release_25_2/dep_create_function.go | 31 - .../rules/release_25_2/dep_create_policy.go | 29 - .../rules/release_25_2/dep_drop_column.go | 305 - .../rules/release_25_2/dep_drop_constraint.go | 96 - .../rules/release_25_2/dep_drop_index.go | 177 - .../release_25_2/dep_drop_index_and_column.go | 82 - .../rules/release_25_2/dep_drop_object.go | 295 - .../rules/release_25_2/dep_drop_policy.go | 29 - .../rules/release_25_2/dep_drop_trigger.go | 31 - .../release_25_2/dep_garbage_collection.go | 153 - .../rules/release_25_2/dep_schema_locked.go | 72 - .../rules/release_25_2/dep_swap_index.go | 146 - .../rules/release_25_2/dep_two_version.go | 126 - .../internal/rules/release_25_2/helpers.go | 368 - .../internal/rules/release_25_2/registry.go | 47 - .../internal/rules/release_25_2/rules_test.go | 57 - .../rules/release_25_2/testdata/deprules | 9633 ----------------- pkg/sql/schemachanger/scplan/plan.go | 2 - .../tests/local-mixed-25.2/BUILD.bazel | 28 - .../tests/local-mixed-25.2/generated_test.go | 1434 --- .../tests/local-mixed-25.3/generated_test.go | 2 +- .../tests/local-mixed-25.4/generated_test.go | 2 +- pkg/storage/pebble.go | 3 +- pkg/upgrade/upgrades/upgrades.go | 8 +- ...5_3_add_event_log_column_and_index_test.go | 2 +- ...3_add_users_last_login_time_column_test.go | 2 +- 93 files changed, 93 insertions(+), 18416 deletions(-) delete mode 100644 pkg/ccl/logictestccl/tests/local-mixed-25.2/BUILD.bazel delete mode 100644 pkg/ccl/logictestccl/tests/local-mixed-25.2/generated_test.go delete mode 100644 pkg/sql/catalog/bootstrap/data/25_2_system.keys delete mode 100644 pkg/sql/catalog/bootstrap/data/25_2_system.sha256 delete mode 100644 pkg/sql/catalog/bootstrap/data/25_2_tenant.keys delete mode 100644 pkg/sql/catalog/bootstrap/data/25_2_tenant.sha256 delete mode 100644 pkg/sql/logictest/tests/cockroach-go-testserver-25.2/BUILD.bazel delete mode 100644 pkg/sql/logictest/tests/cockroach-go-testserver-25.2/generated_test.go delete mode 100644 pkg/sql/logictest/tests/local-mixed-25.2/BUILD.bazel delete mode 100644 pkg/sql/logictest/tests/local-mixed-25.2/generated_test.go delete mode 100644 pkg/sql/schemachanger/scplan/internal/rules/release_25_2/BUILD.bazel delete mode 100644 pkg/sql/schemachanger/scplan/internal/rules/release_25_2/assertions_test.go delete mode 100644 pkg/sql/schemachanger/scplan/internal/rules/release_25_2/dep_add_column.go delete mode 100644 pkg/sql/schemachanger/scplan/internal/rules/release_25_2/dep_add_constraint.go delete mode 100644 pkg/sql/schemachanger/scplan/internal/rules/release_25_2/dep_add_index.go delete mode 100644 pkg/sql/schemachanger/scplan/internal/rules/release_25_2/dep_add_index_and_column.go delete mode 100644 pkg/sql/schemachanger/scplan/internal/rules/release_25_2/dep_add_index_and_constraint.go delete mode 100644 pkg/sql/schemachanger/scplan/internal/rules/release_25_2/dep_add_trigger.go delete mode 100644 pkg/sql/schemachanger/scplan/internal/rules/release_25_2/dep_alter_column_type.go delete mode 100644 pkg/sql/schemachanger/scplan/internal/rules/release_25_2/dep_configure_zone.go delete mode 100644 pkg/sql/schemachanger/scplan/internal/rules/release_25_2/dep_create.go delete mode 100644 pkg/sql/schemachanger/scplan/internal/rules/release_25_2/dep_create_function.go delete mode 100644 pkg/sql/schemachanger/scplan/internal/rules/release_25_2/dep_create_policy.go delete mode 100644 pkg/sql/schemachanger/scplan/internal/rules/release_25_2/dep_drop_column.go delete mode 100644 pkg/sql/schemachanger/scplan/internal/rules/release_25_2/dep_drop_constraint.go delete mode 100644 pkg/sql/schemachanger/scplan/internal/rules/release_25_2/dep_drop_index.go delete mode 100644 pkg/sql/schemachanger/scplan/internal/rules/release_25_2/dep_drop_index_and_column.go delete mode 100644 pkg/sql/schemachanger/scplan/internal/rules/release_25_2/dep_drop_object.go delete mode 100644 pkg/sql/schemachanger/scplan/internal/rules/release_25_2/dep_drop_policy.go delete mode 100644 pkg/sql/schemachanger/scplan/internal/rules/release_25_2/dep_drop_trigger.go delete mode 100644 pkg/sql/schemachanger/scplan/internal/rules/release_25_2/dep_garbage_collection.go delete mode 100644 pkg/sql/schemachanger/scplan/internal/rules/release_25_2/dep_schema_locked.go delete mode 100644 pkg/sql/schemachanger/scplan/internal/rules/release_25_2/dep_swap_index.go delete mode 100644 pkg/sql/schemachanger/scplan/internal/rules/release_25_2/dep_two_version.go delete mode 100644 pkg/sql/schemachanger/scplan/internal/rules/release_25_2/helpers.go delete mode 100644 pkg/sql/schemachanger/scplan/internal/rules/release_25_2/registry.go delete mode 100644 pkg/sql/schemachanger/scplan/internal/rules/release_25_2/rules_test.go delete mode 100644 pkg/sql/schemachanger/scplan/internal/rules/release_25_2/testdata/deprules delete mode 100644 pkg/sql/sqlitelogictest/tests/local-mixed-25.2/BUILD.bazel delete mode 100644 pkg/sql/sqlitelogictest/tests/local-mixed-25.2/generated_test.go diff --git a/pkg/BUILD.bazel b/pkg/BUILD.bazel index 7b1fb2f23561..0fe67c76807a 100644 --- a/pkg/BUILD.bazel +++ b/pkg/BUILD.bazel @@ -60,7 +60,6 @@ ALL_TESTS = [ "//pkg/ccl/logictestccl/tests/fakedist-vec-off:fakedist-vec-off_test", "//pkg/ccl/logictestccl/tests/fakedist:fakedist_test", "//pkg/ccl/logictestccl/tests/local-legacy-schema-changer:local-legacy-schema-changer_test", - "//pkg/ccl/logictestccl/tests/local-mixed-25.2:local-mixed-25_2_test", "//pkg/ccl/logictestccl/tests/local-mixed-25.3:local-mixed-25_3_test", "//pkg/ccl/logictestccl/tests/local-mixed-25.4:local-mixed-25_4_test", "//pkg/ccl/logictestccl/tests/local-prepared:local-prepared_test", @@ -518,7 +517,6 @@ ALL_TESTS = [ "//pkg/sql/logictest/logictestbase:logictestbase_test", "//pkg/sql/logictest/tests/5node-disk:5node-disk_test", "//pkg/sql/logictest/tests/5node:5node_test", - "//pkg/sql/logictest/tests/cockroach-go-testserver-25.2:cockroach-go-testserver-25_2_test", "//pkg/sql/logictest/tests/cockroach-go-testserver-25.3:cockroach-go-testserver-25_3_test", "//pkg/sql/logictest/tests/cockroach-go-testserver-25.4:cockroach-go-testserver-25_4_test", "//pkg/sql/logictest/tests/fakedist-disk:fakedist-disk_test", @@ -526,7 +524,6 @@ ALL_TESTS = [ "//pkg/sql/logictest/tests/fakedist:fakedist_test", "//pkg/sql/logictest/tests/local-leased-descriptors:local-leased-descriptors_test", "//pkg/sql/logictest/tests/local-legacy-schema-changer:local-legacy-schema-changer_test", - "//pkg/sql/logictest/tests/local-mixed-25.2:local-mixed-25_2_test", "//pkg/sql/logictest/tests/local-mixed-25.3:local-mixed-25_3_test", "//pkg/sql/logictest/tests/local-mixed-25.4:local-mixed-25_4_test", "//pkg/sql/logictest/tests/local-prepared:local-prepared_test", @@ -614,7 +611,6 @@ ALL_TESTS = [ "//pkg/sql/schemachanger/scpb:scpb_test", "//pkg/sql/schemachanger/scplan/internal/opgen:opgen_test", "//pkg/sql/schemachanger/scplan/internal/rules/current:current_test", - "//pkg/sql/schemachanger/scplan/internal/rules/release_25_2:release_25_2_test", "//pkg/sql/schemachanger/scplan/internal/rules/release_25_3:release_25_3_test", "//pkg/sql/schemachanger/scplan/internal/rules/release_25_4:release_25_4_test", "//pkg/sql/schemachanger/scplan/internal/scgraph:scgraph_test", @@ -648,7 +644,6 @@ ALL_TESTS = [ "//pkg/sql/sqlitelogictest/tests/fakedist-vec-off:fakedist-vec-off_test", "//pkg/sql/sqlitelogictest/tests/fakedist:fakedist_test", "//pkg/sql/sqlitelogictest/tests/local-legacy-schema-changer:local-legacy-schema-changer_test", - "//pkg/sql/sqlitelogictest/tests/local-mixed-25.2:local-mixed-25_2_test", "//pkg/sql/sqlitelogictest/tests/local-mixed-25.3:local-mixed-25_3_test", "//pkg/sql/sqlitelogictest/tests/local-mixed-25.4:local-mixed-25_4_test", "//pkg/sql/sqlitelogictest/tests/local-prepared:local-prepared_test", @@ -1000,7 +995,6 @@ GO_TARGETS = [ "//pkg/ccl/logictestccl/tests/fakedist-vec-off:fakedist-vec-off_test", "//pkg/ccl/logictestccl/tests/fakedist:fakedist_test", "//pkg/ccl/logictestccl/tests/local-legacy-schema-changer:local-legacy-schema-changer_test", - "//pkg/ccl/logictestccl/tests/local-mixed-25.2:local-mixed-25_2_test", "//pkg/ccl/logictestccl/tests/local-mixed-25.3:local-mixed-25_3_test", "//pkg/ccl/logictestccl/tests/local-mixed-25.4:local-mixed-25_4_test", "//pkg/ccl/logictestccl/tests/local-prepared:local-prepared_test", @@ -2094,7 +2088,6 @@ GO_TARGETS = [ "//pkg/sql/logictest/logictestbase:logictestbase_test", "//pkg/sql/logictest/tests/5node-disk:5node-disk_test", "//pkg/sql/logictest/tests/5node:5node_test", - "//pkg/sql/logictest/tests/cockroach-go-testserver-25.2:cockroach-go-testserver-25_2_test", "//pkg/sql/logictest/tests/cockroach-go-testserver-25.3:cockroach-go-testserver-25_3_test", "//pkg/sql/logictest/tests/cockroach-go-testserver-25.4:cockroach-go-testserver-25_4_test", "//pkg/sql/logictest/tests/fakedist-disk:fakedist-disk_test", @@ -2102,7 +2095,6 @@ GO_TARGETS = [ "//pkg/sql/logictest/tests/fakedist:fakedist_test", "//pkg/sql/logictest/tests/local-leased-descriptors:local-leased-descriptors_test", "//pkg/sql/logictest/tests/local-legacy-schema-changer:local-legacy-schema-changer_test", - "//pkg/sql/logictest/tests/local-mixed-25.2:local-mixed-25_2_test", "//pkg/sql/logictest/tests/local-mixed-25.3:local-mixed-25_3_test", "//pkg/sql/logictest/tests/local-mixed-25.4:local-mixed-25_4_test", "//pkg/sql/logictest/tests/local-prepared:local-prepared_test", @@ -2301,8 +2293,6 @@ GO_TARGETS = [ "//pkg/sql/schemachanger/scplan/internal/opgen:opgen_test", "//pkg/sql/schemachanger/scplan/internal/rules/current:current", "//pkg/sql/schemachanger/scplan/internal/rules/current:current_test", - "//pkg/sql/schemachanger/scplan/internal/rules/release_25_2:release_25_2", - "//pkg/sql/schemachanger/scplan/internal/rules/release_25_2:release_25_2_test", "//pkg/sql/schemachanger/scplan/internal/rules/release_25_3:release_25_3", "//pkg/sql/schemachanger/scplan/internal/rules/release_25_3:release_25_3_test", "//pkg/sql/schemachanger/scplan/internal/rules/release_25_4:release_25_4", @@ -2385,7 +2375,6 @@ GO_TARGETS = [ "//pkg/sql/sqlitelogictest/tests/fakedist-vec-off:fakedist-vec-off_test", "//pkg/sql/sqlitelogictest/tests/fakedist:fakedist_test", "//pkg/sql/sqlitelogictest/tests/local-legacy-schema-changer:local-legacy-schema-changer_test", - "//pkg/sql/sqlitelogictest/tests/local-mixed-25.2:local-mixed-25_2_test", "//pkg/sql/sqlitelogictest/tests/local-mixed-25.3:local-mixed-25_3_test", "//pkg/sql/sqlitelogictest/tests/local-mixed-25.4:local-mixed-25_4_test", "//pkg/sql/sqlitelogictest/tests/local-prepared:local-prepared_test", diff --git a/pkg/ccl/logictestccl/testdata/logic_test/redact_descriptor b/pkg/ccl/logictestccl/testdata/logic_test/redact_descriptor index 8b77a5b352e1..51a0c049decb 100644 --- a/pkg/ccl/logictestccl/testdata/logic_test/redact_descriptor +++ b/pkg/ccl/logictestccl/testdata/logic_test/redact_descriptor @@ -47,7 +47,6 @@ CREATE VIEW redacted_descriptors AS # descriptor. We will skip the config that uses legacy schema changer. skipif config local-schema-locked skipif config local-legacy-schema-changer -skipif config local-mixed-25.2 query T SELECT descriptor from redacted_descriptors where id = 'collate_partition'::REGCLASS; ---- diff --git a/pkg/ccl/logictestccl/testdata/logic_test/triggers b/pkg/ccl/logictestccl/testdata/logic_test/triggers index 184728a49373..aa0f03b88277 100644 --- a/pkg/ccl/logictestccl/testdata/logic_test/triggers +++ b/pkg/ccl/logictestccl/testdata/logic_test/triggers @@ -929,11 +929,11 @@ statement ok CREATE TRIGGER foo AFTER INSERT ON xy FOR EACH ROW EXECUTE FUNCTION trigger_func(); # Relations are referenced by name, so renaming the table is not allowed. -onlyif config local-legacy-schema-changer local-mixed-25.2 local-mixed-25.3 +onlyif config local-legacy-schema-changer local-mixed-25.3 statement error pgcode 2BP01 cannot rename relation "t" because trigger "foo" on table "xy" depends on it ALTER TABLE t RENAME TO t2; -skipif config local-legacy-schema-changer local-mixed-25.2 local-mixed-25.3 +skipif config local-legacy-schema-changer local-mixed-25.3 statement error pgcode 2BP01 cannot rename relation "test.public.t" because trigger "foo" on table "xy" depends on it ALTER TABLE t RENAME TO t2; diff --git a/pkg/ccl/logictestccl/tests/local-mixed-25.2/BUILD.bazel b/pkg/ccl/logictestccl/tests/local-mixed-25.2/BUILD.bazel deleted file mode 100644 index 3fec1c7aac7f..000000000000 --- a/pkg/ccl/logictestccl/tests/local-mixed-25.2/BUILD.bazel +++ /dev/null @@ -1,28 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_test") - -go_test( - name = "local-mixed-25_2_test", - size = "enormous", - srcs = ["generated_test.go"], - data = [ - "//c-deps:libgeos", # keep - "//pkg/ccl/logictestccl:testdata", # keep - ], - exec_properties = {"test.Pool": "large"}, - shard_count = 33, - tags = ["cpu:1"], - deps = [ - "//pkg/base", - "//pkg/build/bazel", - "//pkg/ccl", - "//pkg/security/securityassets", - "//pkg/security/securitytest", - "//pkg/server", - "//pkg/sql/logictest", - "//pkg/testutils/serverutils", - "//pkg/testutils/skip", - "//pkg/testutils/testcluster", - "//pkg/util/leaktest", - "//pkg/util/randutil", - ], -) diff --git a/pkg/ccl/logictestccl/tests/local-mixed-25.2/generated_test.go b/pkg/ccl/logictestccl/tests/local-mixed-25.2/generated_test.go deleted file mode 100644 index 7ca0c26900b9..000000000000 --- a/pkg/ccl/logictestccl/tests/local-mixed-25.2/generated_test.go +++ /dev/null @@ -1,307 +0,0 @@ -// Copyright 2022 The Cockroach Authors. -// -// Use of this software is governed by the CockroachDB Software License -// included in the /LICENSE file. - -// Code generated by generate-logictest, DO NOT EDIT. - -package testlocal_mixed_252 - -import ( - "os" - "path/filepath" - "testing" - - "github.com/cockroachdb/cockroach/pkg/base" - "github.com/cockroachdb/cockroach/pkg/build/bazel" - "github.com/cockroachdb/cockroach/pkg/ccl" - "github.com/cockroachdb/cockroach/pkg/security/securityassets" - "github.com/cockroachdb/cockroach/pkg/security/securitytest" - "github.com/cockroachdb/cockroach/pkg/server" - "github.com/cockroachdb/cockroach/pkg/sql/logictest" - "github.com/cockroachdb/cockroach/pkg/testutils/serverutils" - "github.com/cockroachdb/cockroach/pkg/testutils/skip" - "github.com/cockroachdb/cockroach/pkg/testutils/testcluster" - "github.com/cockroachdb/cockroach/pkg/util/leaktest" - "github.com/cockroachdb/cockroach/pkg/util/randutil" -) - -const configIdx = 20 - -var cclLogicTestDir string - -func init() { - if bazel.BuiltWithBazel() { - var err error - cclLogicTestDir, err = bazel.Runfile("pkg/ccl/logictestccl/testdata/logic_test") - if err != nil { - panic(err) - } - } else { - cclLogicTestDir = "../../../../ccl/logictestccl/testdata/logic_test" - } -} - -func TestMain(m *testing.M) { - defer ccl.TestingEnableEnterprise()() - securityassets.SetLoader(securitytest.EmbeddedAssets) - randutil.SeedForTests() - serverutils.InitTestServerFactory(server.TestServerFactory) - serverutils.InitTestClusterFactory(testcluster.TestClusterFactory) - - defer serverutils.TestingSetDefaultTenantSelectionOverride( - base.TestIsForStuffThatShouldWorkWithSecondaryTenantsButDoesntYet(156124), - )() - - os.Exit(m.Run()) -} - -func runCCLLogicTest(t *testing.T, file string) { - skip.UnderDeadlock(t, "times out and/or hangs") - logictest.RunLogicTest(t, logictest.TestServerArgs{}, configIdx, filepath.Join(cclLogicTestDir, file)) -} - -// TestLogic_tmp runs any tests that are prefixed with "_", in which a dedicated -// test is not generated for. This allows developers to create and run temporary -// test files that are not checked into the repository, without repeatedly -// regenerating and reverting changes to this file, generated_test.go. -// -// TODO(mgartner): Add file filtering so that individual files can be run, -// instead of all files with the "_" prefix. -func TestLogic_tmp(t *testing.T) { - defer leaktest.AfterTest(t)() - var glob string - glob = filepath.Join(cclLogicTestDir, "_*") - logictest.RunLogicTests(t, logictest.TestServerArgs{}, configIdx, glob) -} - -func TestCCLLogic_fips_ready( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runCCLLogicTest(t, "fips_ready") -} - -func TestCCLLogic_fk_read_committed( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runCCLLogicTest(t, "fk_read_committed") -} - -func TestCCLLogic_hash_sharded_index_read_committed( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runCCLLogicTest(t, "hash_sharded_index_read_committed") -} - -func TestCCLLogic_nested_routines( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runCCLLogicTest(t, "nested_routines") -} - -func TestCCLLogic_new_schema_changer( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runCCLLogicTest(t, "new_schema_changer") -} - -func TestCCLLogic_partitioning_enum( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runCCLLogicTest(t, "partitioning_enum") -} - -func TestCCLLogic_pgcrypto_builtins( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runCCLLogicTest(t, "pgcrypto_builtins") -} - -func TestCCLLogic_plpgsql_assign( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runCCLLogicTest(t, "plpgsql_assign") -} - -func TestCCLLogic_plpgsql_block( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runCCLLogicTest(t, "plpgsql_block") -} - -func TestCCLLogic_plpgsql_call( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runCCLLogicTest(t, "plpgsql_call") -} - -func TestCCLLogic_plpgsql_cte( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runCCLLogicTest(t, "plpgsql_cte") -} - -func TestCCLLogic_plpgsql_cursor( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runCCLLogicTest(t, "plpgsql_cursor") -} - -func TestCCLLogic_plpgsql_into( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runCCLLogicTest(t, "plpgsql_into") -} - -func TestCCLLogic_plpgsql_record( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runCCLLogicTest(t, "plpgsql_record") -} - -func TestCCLLogic_plpgsql_srf( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runCCLLogicTest(t, "plpgsql_srf") -} - -func TestCCLLogic_plpgsql_txn( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runCCLLogicTest(t, "plpgsql_txn") -} - -func TestCCLLogic_plpgsql_unsupported( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runCCLLogicTest(t, "plpgsql_unsupported") -} - -func TestCCLLogic_procedure_params( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runCCLLogicTest(t, "procedure_params") -} - -func TestCCLLogic_procedure_plpgsql( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runCCLLogicTest(t, "procedure_plpgsql") -} - -func TestCCLLogic_read_committed( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runCCLLogicTest(t, "read_committed") -} - -func TestCCLLogic_refcursor( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runCCLLogicTest(t, "refcursor") -} - -func TestCCLLogic_schema_change_in_txn( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runCCLLogicTest(t, "schema_change_in_txn") -} - -func TestCCLLogic_select_for_update_read_committed( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runCCLLogicTest(t, "select_for_update_read_committed") -} - -func TestCCLLogic_show_create( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runCCLLogicTest(t, "show_create") -} - -func TestCCLLogic_subject( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runCCLLogicTest(t, "subject") -} - -func TestCCLLogic_triggers( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runCCLLogicTest(t, "triggers") -} - -func TestCCLLogic_txn_retry( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runCCLLogicTest(t, "txn_retry") -} - -func TestCCLLogic_udf_params( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runCCLLogicTest(t, "udf_params") -} - -func TestCCLLogic_udf_plpgsql( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runCCLLogicTest(t, "udf_plpgsql") -} - -func TestCCLLogic_udf_rewrite( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runCCLLogicTest(t, "udf_rewrite") -} - -func TestCCLLogic_udf_volatility_check( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runCCLLogicTest(t, "udf_volatility_check") -} - -func TestCCLLogic_unique_read_committed( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runCCLLogicTest(t, "unique_read_committed") -} - -func TestCCLLogic_vector( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runCCLLogicTest(t, "vector") -} diff --git a/pkg/ccl/logictestccl/tests/local-mixed-25.3/generated_test.go b/pkg/ccl/logictestccl/tests/local-mixed-25.3/generated_test.go index d739c12db46d..2e7b861530b3 100644 --- a/pkg/ccl/logictestccl/tests/local-mixed-25.3/generated_test.go +++ b/pkg/ccl/logictestccl/tests/local-mixed-25.3/generated_test.go @@ -26,7 +26,7 @@ import ( "github.com/cockroachdb/cockroach/pkg/util/randutil" ) -const configIdx = 21 +const configIdx = 20 var cclLogicTestDir string diff --git a/pkg/ccl/logictestccl/tests/local-mixed-25.4/generated_test.go b/pkg/ccl/logictestccl/tests/local-mixed-25.4/generated_test.go index 77ba19ba3f52..cead5c83650c 100644 --- a/pkg/ccl/logictestccl/tests/local-mixed-25.4/generated_test.go +++ b/pkg/ccl/logictestccl/tests/local-mixed-25.4/generated_test.go @@ -26,7 +26,7 @@ import ( "github.com/cockroachdb/cockroach/pkg/util/randutil" ) -const configIdx = 22 +const configIdx = 21 var cclLogicTestDir string diff --git a/pkg/cli/testdata/declarative-rules/invalid_version b/pkg/cli/testdata/declarative-rules/invalid_version index 55d06bcb19be..36d17c6bd738 100644 --- a/pkg/cli/testdata/declarative-rules/invalid_version +++ b/pkg/cli/testdata/declarative-rules/invalid_version @@ -6,4 +6,3 @@ unsupported version number, the supported versions are: latest 1000025.4 1000025.3 - 1000025.2 diff --git a/pkg/clusterversion/cockroach_versions.go b/pkg/clusterversion/cockroach_versions.go index 9ba0147d13f7..36eb8d331eb7 100644 --- a/pkg/clusterversion/cockroach_versions.go +++ b/pkg/clusterversion/cockroach_versions.go @@ -191,13 +191,13 @@ const ( // V25_2 is CockroachDB v25.2. It's used for all v25.2.x patch releases. V25_2 - V25_3_Start + TODO_Delete_V25_3_Start - V25_3_AddEventLogColumnAndIndex + TODO_Delete_V25_3_AddEventLogColumnAndIndex - V25_3_AddEstimatedLastLoginTime + TODO_Delete_V25_3_AddEstimatedLastLoginTime - V25_3_AddHotRangeLoggerJob + TODO_Delete_V25_3_AddHotRangeLoggerJob // V25_3 is CockroachDB v25.3. It's used for all v25.3.x patch releases. V25_3 @@ -280,13 +280,13 @@ var versionTable = [numKeys]roachpb.Version{ V25_2: {Major: 25, Minor: 2, Internal: 0}, // v25.3 versions. Internal versions must be even. - V25_3_Start: {Major: 25, Minor: 2, Internal: 2}, + TODO_Delete_V25_3_Start: {Major: 25, Minor: 2, Internal: 2}, - V25_3_AddEventLogColumnAndIndex: {Major: 25, Minor: 2, Internal: 4}, + TODO_Delete_V25_3_AddEventLogColumnAndIndex: {Major: 25, Minor: 2, Internal: 4}, - V25_3_AddEstimatedLastLoginTime: {Major: 25, Minor: 2, Internal: 6}, + TODO_Delete_V25_3_AddEstimatedLastLoginTime: {Major: 25, Minor: 2, Internal: 6}, - V25_3_AddHotRangeLoggerJob: {Major: 25, Minor: 2, Internal: 8}, + TODO_Delete_V25_3_AddHotRangeLoggerJob: {Major: 25, Minor: 2, Internal: 8}, V25_3: {Major: 25, Minor: 3, Internal: 0}, @@ -322,7 +322,7 @@ var versionTable = [numKeys]roachpb.Version{ const Latest Key = numKeys - 1 // MinSupported is the minimum logical cluster version supported by this branch. -const MinSupported Key = V25_2 +const MinSupported Key = V25_3 // PreviousRelease is the logical cluster version of the previous release (which must // have at least an RC build published). diff --git a/pkg/sql/catalog/bootstrap/BUILD.bazel b/pkg/sql/catalog/bootstrap/BUILD.bazel index 041655834543..dd13facabc91 100644 --- a/pkg/sql/catalog/bootstrap/BUILD.bazel +++ b/pkg/sql/catalog/bootstrap/BUILD.bazel @@ -8,10 +8,6 @@ go_library( "metadata.go", ], embedsrcs = [ - "data/25_2_system.keys", - "data/25_2_system.sha256", - "data/25_2_tenant.keys", - "data/25_2_tenant.sha256", "data/25_3_system.keys", "data/25_3_system.sha256", "data/25_3_tenant.keys", diff --git a/pkg/sql/catalog/bootstrap/data/25_2_system.keys b/pkg/sql/catalog/bootstrap/data/25_2_system.keys deleted file mode 100644 index 6aa47a82f8b9..000000000000 --- a/pkg/sql/catalog/bootstrap/data/25_2_system.keys +++ /dev/null @@ -1,212 +0,0 @@ -[{"key":"8b"} -,{"key":"8b89898a89","value":"0312450a0673797374656d10011a250a0d0a0561646d696e1080101880100a0c0a04726f6f7410801018801012046e6f646518032200280140004a006a0808191002180020007000"} -,{"key":"8b898b8a89","value":"030aa0030a0a64657363726970746f721803200128013a0042270a02696410011a0c08011040180030005014600020003000680070007800800100880100980100422f0a0a64657363726970746f7210021a0c08081000180030005011600020013000680070007800800100880100980100480352740a077072696d61727910011801220269642a0a64657363726970746f72300140004a10080010001a00200028003000380040005a0070027a0408002000800100880100900104980101a20106080012001800a80100b20100ba0100c00100c80100d00101e00100e9010000000000000000f2010060026a210a0b0a0561646d696e102018200a0a0a04726f6f741020182012046e6f64651803800101880103980100b201130a077072696d61727910001a02696420012800b201240a1066616d5f325f64657363726970746f7210021a0a64657363726970746f7220022802b80103c20100e80100f2010408001200f801008002009202009a0200b20200b80200c0021dc80200e00200800300880302a80300b00300d00300d80300e00300f80300880400980400a00400a80400"} -,{"key":"8b898c8a89","value":"030adc050a0575736572731804200128013a00422d0a08757365726e616d6510011a0c0807100018003000501960002000300068007000780080010088010098010042330a0e68617368656450617373776f726410021a0c0808100018003000501160002001300068007000780080010088010098010042320a066973526f6c6510031a0c08001000180030005010600020002a0566616c73653000680070007800800100880100980100422c0a07757365725f696410041a0c080c100018003000501a60002000300068007000780080010088010098010048055293010a077072696d617279100118012208757365726e616d652a0e68617368656450617373776f72642a066973526f6c652a07757365725f6964300140004a10080010001a00200028003000380040005a007002700370047a0408002000800100880100900104980101a20106080012001800a80100b20100ba0100c00100c80100d00102e00100e9010000000000000000f201005a770a1175736572735f757365725f69645f696478100218012207757365725f69643004380140004a10080010001a00200028003000380040005a007a0408002000800100880100900103980100a20106080012001800a80100b20100ba0100c00100c80100d00101e00100e9010000000000000000f2010060036a250a0d0a0561646d696e10e00318e0030a0c0a04726f6f7410e00318e00312046e6f64651803800101880103980100b201240a077072696d61727910001a08757365726e616d651a07757365725f6964200120042804b2012c0a1466616d5f325f68617368656450617373776f726410021a0e68617368656450617373776f726420022802b2011c0a0c66616d5f335f6973526f6c6510031a066973526f6c6520032803b80104c20100e80100f2010408001200f801008002009202009a0200b20200b80200c0021dc80200e00200800300880303a80300b00300d00300d80300e00300f80300880400980400a00400a80400"} -,{"key":"8b898d8a89","value":"030a8f030a057a6f6e65731805200128013a0042270a02696410011a0c08011040180030005014600020003000680070007800800100880100980100422b0a06636f6e66696710021a0c08081000180030005011600020013000680070007800800100880100980100480352700a077072696d61727910011801220269642a06636f6e666967300140004a10080010001a00200028003000380040005a0070027a0408002000800100880100900104980101a20106080012001800a80100b20100ba0100c00100c80100d00101e00100e9010000000000000000f2010060026a250a0d0a0561646d696e10e00318e0030a0c0a04726f6f7410e00318e00312046e6f64651803800101880103980100b201130a077072696d61727910001a02696420012800b2011c0a0c66616d5f325f636f6e66696710021a06636f6e66696720022802b80103c20100e80100f2010408001200f801008002009202009a0200b20200b80200c0021dc80200e00200800300880302a80300b00300d00300d80300e00300f80300880400980400a00400a80400"} -,{"key":"8b898e8a89","value":"030ace040a0873657474696e67731806200128013a0042290a046e616d6510011a0c08071000180030005019600020003000680070007800800100880100980100422a0a0576616c756510021a0c0807100018003000501960002000300068007000780080010088010098010042440a0b6c6173745570646174656410031a0d080510001800300050da08600020002a116e6f7728293a3a3a54494d455354414d503000680070007800800100880100980100422e0a0976616c75655479706510041a0c080710001800300050196000200130006800700078008001008801009801004805528d010a077072696d6172791001180122046e616d652a0576616c75652a0b6c617374557064617465642a0976616c756554797065300140004a10080010001a00200028003000380040005a007002700370047a0408002000800100880100900104980101a20106080012001800a80100b20100ba0100c00100c80100d00101e00100e9010000000000000000f2010060026a250a0d0a0561646d696e10e00318e0030a0c0a04726f6f7410e00318e00312046e6f64651803800101880103980100b201590a2666616d5f305f6e616d655f76616c75655f6c617374557064617465645f76616c75655479706510001a046e616d651a0576616c75651a0b6c617374557064617465641a0976616c75655479706520012002200320042800b80101c20100e80100f2010408001200f801008002009202009a0200b20200b80200c0021dc80200e00200800300880302a80300b00300d00300d80300e00300f80300880400980400a00400a80400"} -,{"key":"8b898f8a89","value":"030aeb020a1164657363726970746f725f69645f7365711807200128013a00422a0a0576616c756510011a0c08011040180030005014600020003000680070007800800100880100980100480052690a077072696d61727910011800220576616c7565300140004a10080010001a00200028003000380040005a007a0408002000800100880100900104980101a20106080012001800a80100b20100ba0100c00100c80100d00100e00100e9010000000000000000f2010060006a210a0b0a0561646d696e102018200a0a0a04726f6f741020182012046e6f64651803800100880103980100b201160a077072696d61727910001a0576616c756520012801b80100c20100e2011e0801100118ffffffffffffffff7f20012800320408001000380142004800e80100f2010408001200f801008002009202009a0200b20200b80200c0021dc80200e00200800300880300a80300b00300d00300d80300e00300f80300880400980400a00400a80400"} -,{"key":"8b89908a89","value":"030a90070a0774656e616e74731808200128013a0042270a02696410011a0c0801104018003000501460002000300068007000780080010088010098010042310a0661637469766510021a0c08001000180030005010600020002a0474727565300168007000780080010088010098010042290a04696e666f10031a0c0808100018003000501160002001300068007000780080010088010098010042290a046e616d6510041a0c08071000180030005019600020013000680070007800800100880100980100422f0a0a646174615f737461746510051a0c0801104018003000501460002001300068007000780080010088010098010042310a0c736572766963655f6d6f646510061a0c080110401800300050146000200130006800700078008001008801009801004807529e010a077072696d61727910011801220269642a066163746976652a04696e666f2a046e616d652a0a646174615f73746174652a0c736572766963655f6d6f6465300140004a10080010001a00200028003000380040005a00700270037004700570067a0408002000800100880100900104980101a20106080012001800a80100b20100ba0100c00100c80100d00102e00100e9010000000000000000f201005a730a1074656e616e74735f6e616d655f6964781002180122046e616d653004380140004a10080010001a00200028003000380040005a007a0408002000800100880100900103980100a20106080012001800a80100b20100ba0100c00100c80100d00101e00100e9010000000000000000f201005a83010a1874656e616e74735f736572766963655f6d6f64655f69647810031800220c736572766963655f6d6f64653006380140004a10080010001a00200028003000380040005a007a0408002000800100880100900103980100a20106080012001800a80100b20100ba0100c00100c80100d00100e00100e9010000000000000000f2010060046a210a0b0a0561646d696e102018200a0a0a04726f6f741020182012046e6f64651803800101880103980100b2014b0a077072696d61727910001a0269641a066163746976651a04696e666f1a046e616d651a0a646174615f73746174651a0c736572766963655f6d6f64652001200220032004200520062800b80101c20100e80100f2010408001200f801008002009202009a0200b20200b80200c0021dc80200e00200800300880303a80300b00300d00300d80300e00300f80300880400980400a00400a80400"} -,{"key":"8b89918a89","value":"030ac6030a0f726567696f6e5f6c6976656e6573731809200128013a0042300a0b637264625f726567696f6e10011a0c0808100018003000501160002000300068007000780080010088010098010042340a0e756e617661696c61626c655f617410021a0d080510001800300050da086000200130006800700078008001008801009801004803528e010a14726567696f6e5f6c6976656e6573735f706b657910011801220b637264625f726567696f6e2a0e756e617661696c61626c655f6174300140004a10080010001a00200028003000380040005a0070027a0408002000800100880100900104980101a20106080012001800a80100b20100ba0100c00100c80100d00101e00100e9010000000000000000f2010060026a250a0d0a0561646d696e10e00318e0030a0c0a04726f6f7410e00318e00312046e6f64651803800101880103980100b2012e0a077072696d61727910001a0b637264625f726567696f6e1a0e756e617661696c61626c655f6174200120022802b80101c20100e80100f2010408001200f801008002009202009a0200b20200b80200c0021dc80200e00200800300880302a80300b00300d00300d80300e00300f80300880400980400a00400a80400"} -,{"key":"8b89938a89","value":"030a8c050a056c65617365180b200128013a00422c0a07646573635f696410011a0c08011040180030005014600020003000680070007800800100880100980100422c0a0776657273696f6e10021a0c0801104018003000501460002000300068007000780080010088010098010042340a0f73716c5f696e7374616e63655f696410031a0c08011040180030005014600020003000680070007800800100880100980100422f0a0a73657373696f6e5f696410041a0c0808100018003000501160002000300068007000780080010088010098010042300a0b637264625f726567696f6e10051a0c08081000180030005011600020003000680070007800800100880100980100480652ac010a077072696d61727910031801220b637264625f726567696f6e2207646573635f6964220776657273696f6e220a73657373696f6e5f69642a0f73716c5f696e7374616e63655f6964300530013002300440004000400040004a10080010001a00200028003000380040005a0070037a0408002000800100880100900104980101a20106080012001800a80100b20100ba0100c00100c80100d00101e00100e9010000000000000000f2010060046a250a0d0a0561646d696e10e00318e0030a0c0a04726f6f7410e00318e00312046e6f64651803800101880103980100b201530a077072696d61727910001a07646573635f69641a0776657273696f6e1a0f73716c5f696e7374616e63655f69641a0a73657373696f6e5f69641a0b637264625f726567696f6e200120022003200420052803b80101c20100e80100f2010408001200f801008002009202009a0200b20200b80200c0021dc80200e00200800301880302a80300b00300d00300d80300e00300f80300880400980400a00400a80400"} -,{"key":"8b89948a89","value":"030a9f060a086576656e746c6f67180c200128013a00422f0a0974696d657374616d7010011a0d080510001800300050da08600020003000680070007800800100880100980100422e0a096576656e745479706510021a0c08071000180030005019600020003000680070007800800100880100980100422d0a08746172676574494410031a0c0801104018003000501460002000300068007000780080010088010098010042300a0b7265706f7274696e67494410041a0c0801104018003000501460002000300068007000780080010088010098010042290a04696e666f10051a0c0807100018003000501960002001300068007000780080010088010098010042380a08756e69717565494410061a0c08081000180030005011600020002a09757569645f763428293000680070007800800100880100980100480752ab010a077072696d61727910011801220974696d657374616d702208756e6971756549442a096576656e74547970652a0874617267657449442a0b7265706f7274696e6749442a04696e666f30013006400040004a10080010001a00200028003000380040005a0070027003700470057a0408002000800100880100900104980101a20106080012001800a80100b20100ba0100c00100c80100d00101e00100e9010000000000000000f2010060026a250a0d0a0561646d696e10e00318e0030a0c0a04726f6f7410e00318e00312046e6f64651803800101880103980100b201260a077072696d61727910001a0974696d657374616d701a08756e697175654944200120062800b201220a0f66616d5f325f6576656e745479706510021a096576656e745479706520022802b201200a0e66616d5f335f746172676574494410031a08746172676574494420032803b201260a1166616d5f345f7265706f7274696e67494410041a0b7265706f7274696e67494420042804b201180a0a66616d5f355f696e666f10051a04696e666f20052805b80106c20100e80100f2010408001200f801008002009202009a0200b20200b80200c0021dc80200e00200800300880302a80300b00300d00300d80300e00300f80300880400980400a00400a80400"} -,{"key":"8b89958a89","value":"030afe060a0872616e67656c6f67180d200128013a00422f0a0974696d657374616d7010011a0d080510001800300050da08600020003000680070007800800100880100980100422c0a0772616e6765494410021a0c08011040180030005014600020003000680070007800800100880100980100422c0a0773746f7265494410031a0c08011040180030005014600020003000680070007800800100880100980100422e0a096576656e745479706510041a0c0807100018003000501960002000300068007000780080010088010098010042310a0c6f7468657252616e6765494410051a0c0801104018003000501460002001300068007000780080010088010098010042290a04696e666f10061a0c08071000180030005019600020013000680070007800800100880100980100423d0a08756e69717565494410071a0c08011040180030005014600020002a0e756e697175655f726f77696428293000680070007800800100880100980100480852b6010a077072696d61727910011801220974696d657374616d702208756e6971756549442a0772616e676549442a0773746f726549442a096576656e74547970652a0c6f7468657252616e676549442a04696e666f30013007400040004a10080010001a00200028003000380040005a00700270037004700570067a0408002000800100880100900104980101a20106080012001800a80100b20100ba0100c00100c80100d00101e00100e9010000000000000000f2010060026a250a0d0a0561646d696e10e00318e0030a0c0a04726f6f7410e00318e00312046e6f64651803800101880103980100b201260a077072696d61727910001a0974696d657374616d701a08756e697175654944200120072800b2011e0a0d66616d5f325f72616e6765494410021a0772616e6765494420022802b2011e0a0d66616d5f335f73746f7265494410031a0773746f7265494420032803b201220a0f66616d5f345f6576656e745479706510041a096576656e745479706520042804b201280a1266616d5f355f6f7468657252616e6765494410051a0c6f7468657252616e6765494420052805b201180a0a66616d5f365f696e666f10061a04696e666f20062806b80107c20100e80100f2010408001200f801008002009202009a0200b20200b80200c0021dc80200e00200800300880302a80300b00300d00300d80300e00300f80300880400980400a00400a80400"} -,{"key":"8b89968a89","value":"030af6030a027569180e200128013a0042280a036b657910011a0c08071000180030005019600020003000680070007800800100880100980100422a0a0576616c756510021a0c0808100018003000501160002001300068007000780080010088010098010042310a0b6c6173745570646174656410031a0d080510001800300050da086000200030006800700078008001008801009801004804527f0a077072696d6172791001180122036b65792a0576616c75652a0b6c61737455706461746564300140004a10080010001a00200028003000380040005a00700270037a0408002000800100880100900104980101a20106080012001800a80100b20100ba0100c00100c80100d00101e00100e9010000000000000000f2010060026a250a0d0a0561646d696e10e00318e0030a0c0a04726f6f7410e00318e00312046e6f64651803800101880103980100b201140a077072696d61727910001a036b657920012800b2011a0a0b66616d5f325f76616c756510021a0576616c756520022802b201260a1166616d5f335f6c6173745570646174656410031a0b6c6173745570646174656420032803b80104c20100e80100f2010408001200f801008002009202009a0200b20200b80200c0021dc80200e00200800300880302a80300b00300d00300d80300e00300f80300880400980400a00400a80400"} -,{"key":"8b89978a89","value":"030ac4120a046a6f6273180f200128013a0042370a02696410011a0c08011040180030005014600020002a0e756e697175655f726f77696428293000680070007800800100880100980100422b0a0673746174757310021a0c0807100018003000501960002000300068007000780080010088010098010042400a076372656174656410031a0d080510001800300050da08600020002a116e6f7728293a3a3a54494d455354414d50300068007000780080010088010098010042340a0f64726f707065645f7061796c6f616410041a0c0808100018003000501160002001300168007000780080010088010098010042350a1064726f707065645f70726f677265737310051a0c0808100018003000501160002001300168007000780080010088010098010042340a0f637265617465645f62795f7479706510061a0c0807100018003000501960002001300068007000780080010088010098010042320a0d637265617465645f62795f696410071a0c0801104018003000501460002001300068007000780080010088010098010042350a10636c61696d5f73657373696f6e5f696410081a0c0808100018003000501160002001300068007000780080010088010098010042360a11636c61696d5f696e7374616e63655f696410091a0c08011040180030005014600020013000680070007800800100880100980100422d0a086e756d5f72756e73100a1a0c08011040180030005014600020013000680070007800800100880100980100422e0a086c6173745f72756e100b1a0d080510001800300050da08600020013000680070007800800100880100980100422d0a086a6f625f74797065100c1a0c08071000180030005019600020013000680070007800800100880100980100422a0a056f776e6572100d1a0c0807100018003000501960002001300068007000780080010088010098010042300a0b6465736372697074696f6e100e1a0c08071000180030005019600020013000680070007800800100880100980100422e0a096572726f725f6d7367100f1a0c08071000180030005019600020013000680070007800800100880100980100422e0a0866696e697368656410101a0d080910001800300050a009600020013000680070007800800100880100980100481152c4020a077072696d61727910011801220269642a067374617475732a07637265617465642a0f64726f707065645f7061796c6f61642a1064726f707065645f70726f67726573732a0f637265617465645f62795f747970652a0d637265617465645f62795f69642a10636c61696d5f73657373696f6e5f69642a11636c61696d5f696e7374616e63655f69642a086e756d5f72756e732a086c6173745f72756e2a086a6f625f747970652a056f776e65722a0b6465736372697074696f6e2a096572726f725f6d73672a0866696e6973686564300140004a10080010001a00200028003000380040005a0070027003700470057006700770087009700a700b700c700d700e700f70107a0408002000800100880100900104980101a20106080012001800a80100b20100ba0100c00100c80100d00101e00100e9010000000000000000f201005a89010a176a6f62735f7374617475735f637265617465645f696478100218002206737461747573220763726561746564300230033801400040004a10080010001a00200028003000380040005a007a0408002000800100880100900103980100a20106080012001800a80100b20100ba0100c00100c80100d00100e00100e9010000000000000000f201005ab1010a266a6f62735f637265617465645f62795f747970655f637265617465645f62795f69645f69647810031800220f637265617465645f62795f74797065220d637265617465645f62795f69642a06737461747573300630073801400040004a10080010001a00200028003000380040005a0070027a0408002000800100880100900103980100a20106080012001800a80100b20100ba0100c00100c80100d00100e00100e9010000000000000000f201005ac9020a126a6f62735f72756e5f73746174735f696478100418002210636c61696d5f73657373696f6e5f696422067374617475732207637265617465642a086c6173745f72756e2a086e756d5f72756e732a11636c61696d5f696e7374616e63655f696430083002300338014000400040004a10080010001a00200028003000380040005a00700b700a70097a0408002000800100880100900103980100a20106080012001800a80100b20100ba01810173746174757320494e20282772756e6e696e67273a3a3a535452494e472c2027726576657274696e67273a3a3a535452494e472c202770656e64696e67273a3a3a535452494e472c202770617573652d726571756573746564273a3a3a535452494e472c202763616e63656c2d726571756573746564273a3a3a535452494e4729c00100c80100d00100e00100e9010000000000000000f201005a780a116a6f62735f6a6f625f747970655f6964781005180022086a6f625f74797065300c380140004a10080010001a00200028003000380040005a007a0408002000800100880100900103980100a20106080012001800a80100b20100ba0100c00100c80100d00100e00100e9010000000000000000f2010060066a250a0d0a0561646d696e10e00318e0030a0c0a04726f6f7410e00318e00312046e6f64651803800101880103980100b201b4010a1f66616d5f305f69645f7374617475735f637265617465645f7061796c6f616410001a0269641a067374617475731a07637265617465641a0f64726f707065645f7061796c6f61641a0f637265617465645f62795f747970651a0d637265617465645f62795f69641a086a6f625f747970651a056f776e65721a0b6465736372697074696f6e1a096572726f725f6d73671a0866696e6973686564200120022003200420062007200c200d200e200f20102800b201220a0870726f677265737310011a1064726f707065645f70726f677265737320052805b2014c0a05636c61696d10021a10636c61696d5f73657373696f6e5f69641a11636c61696d5f696e7374616e63655f69641a086e756d5f72756e731a086c6173745f72756e20082009200a200b2800b80103c20100e80100f2010408001200f801008002009202009a0200b20200b80200c0021dc80200e00200800300880302a80300b00300d00300d80300e00300f80300880400980400a00400a80400"} -,{"key":"8b899b8a89","value":"030aaf0c0a0c7765625f73657373696f6e731813200128013a0042370a02696410011a0c08011040180030005014600020002a0e756e697175655f726f7769642829300068007000780080010088010098010042310a0c68617368656453656372657410021a0c08081000180030005011600020003000680070007800800100880100980100422d0a08757365726e616d6510031a0c0807100018003000501960002000300068007000780080010088010098010042420a0963726561746564417410041a0d080510001800300050da08600020002a116e6f7728293a3a3a54494d455354414d503000680070007800800100880100980100422f0a0965787069726573417410051a0d080510001800300050da08600020003000680070007800800100880100980100422f0a097265766f6b6564417410061a0d080510001800300050da0860002001300068007000780080010088010098010042430a0a6c61737455736564417410071a0d080510001800300050da08600020002a116e6f7728293a3a3a54494d455354414d503000680070007800800100880100980100422e0a096175646974496e666f10081a0c08071000180030005019600020013000680070007800800100880100980100422c0a07757365725f696410091a0c080c100018003000501a600020003000680070007800800100880100980100480a52cf010a077072696d61727910011801220269642a0c6861736865645365637265742a08757365726e616d652a096372656174656441742a096578706972657341742a097265766f6b656441742a0a6c6173745573656441742a096175646974496e666f2a07757365725f6964300140004a10080010001a00200028003000380040005a00700270037004700570067007700870097a0408002000800100880100900104980101a20106080012001800a80100b20100ba0100c00100c80100d00101e00100e9010000000000000000f201005a82010a1a7765625f73657373696f6e735f6578706972657341745f6964781002180022096578706972657341743005380140004a10080010001a00200028003000380040005a007a0408002000800100880100900103980100a20106080012001800a80100b20100ba0100c00100c80100d00100e00100e9010000000000000000f201005a82010a1a7765625f73657373696f6e735f6372656174656441745f6964781003180022096372656174656441743004380140004a10080010001a00200028003000380040005a007a0408002000800100880100900103980100a20106080012001800a80100b20100ba0100c00100c80100d00100e00100e9010000000000000000f201005a82010a1a7765625f73657373696f6e735f7265766f6b656441745f6964781004180022097265766f6b656441743006380140004a10080010001a00200028003000380040005a007a0408002000800100880100900103980100a20106080012001800a80100b20100ba0100c00100c80100d00100e00100e9010000000000000000f201005a84010a1b7765625f73657373696f6e735f6c6173745573656441745f69647810051800220a6c6173745573656441743007380140004a10080010001a00200028003000380040005a007a0408002000800100880100900103980100a20106080012001800a80100b20100ba0100c00100c80100d00100e00100e9010000000000000000f2010060066a250a0d0a0561646d696e10e00318e0030a0c0a04726f6f7410e00318e00312046e6f64651803800101880103980100b201c6010a5166616d5f305f69645f6861736865645365637265745f757365726e616d655f6372656174656441745f6578706972657341745f7265766f6b656441745f6c6173745573656441745f6175646974496e666f10001a0269641a0c6861736865645365637265741a08757365726e616d651a096372656174656441741a096578706972657341741a097265766f6b656441741a0a6c6173745573656441741a096175646974496e666f1a07757365725f69642001200220032004200520062007200820092800b80101c20100e80100f2010408001200f801008002009202009a0200b20200b80200c0021dc80200e00200800300880302a80300b00300d00300d80300e00300f80300880400980400a00400a80400"} -,{"key":"8b899c8a89","value":"030abb0a0a107461626c655f737461746973746963731814200128013a00422c0a077461626c65494410011a0c0801104018003000501460002000300068007000780080010088010098010042400a0b737461746973746963494410021a0c08011040180030005014600020002a0e756e697175655f726f7769642829300068007000780080010088010098010042290a046e616d6510031a0c08071000180030005019600020013000680070007800800100880100980100423f0a09636f6c756d6e49447310041a1d080f104018003000380150f8075a0c08011040180030005014600060002000300068007000780080010088010098010042420a0963726561746564417410051a0d080510001800300050da08600020002a116e6f7728293a3a3a54494d455354414d503000680070007800800100880100980100422d0a08726f77436f756e7410061a0c0801104018003000501460002000300068007000780080010088010098010042320a0d64697374696e6374436f756e7410071a0c08011040180030005014600020003000680070007800800100880100980100422e0a096e756c6c436f756e7410081a0c08011040180030005014600020003000680070007800800100880100980100422e0a09686973746f6772616d10091a0c0808100018003000501160002001300068007000780080010088010098010042360a0761766753697a65100a1a0c08011040180030005014600020002a08303a3a3a494e5438300068007000780080010088010098010042350a107061727469616c507265646963617465100b1a0c0807100018003000501960002001300068007000780080010088010098010042340a0f66756c6c5374617469737469634944100c1a0c08011040180030005014600020013000680070007800800100880100980100480d5287020a077072696d6172791001180122077461626c654944220b73746174697374696349442a046e616d652a09636f6c756d6e4944732a096372656174656441742a08726f77436f756e742a0d64697374696e6374436f756e742a096e756c6c436f756e742a09686973746f6772616d2a0761766753697a652a107061727469616c5072656469636174652a0f66756c6c537461746973746963494430013002400040004a10080010001a00200028003000380040005a007003700470057006700770087009700a700b700c7a0408002000800100880100900104980101a20106080012001800a80100b20100ba0100c00100c80100d00101e00100e9010000000000000000f2010060026a250a0d0a0561646d696e10e00318e0030a0c0a04726f6f7410e00318e00312046e6f64651803800101880103980100b20188020a5d66616d5f305f7461626c6549445f73746174697374696349445f6e616d655f636f6c756d6e4944735f6372656174656441745f726f77436f756e745f64697374696e6374436f756e745f6e756c6c436f756e745f686973746f6772616d10001a077461626c6549441a0b73746174697374696349441a046e616d651a09636f6c756d6e4944731a096372656174656441741a08726f77436f756e741a0d64697374696e6374436f756e741a096e756c6c436f756e741a09686973746f6772616d1a0761766753697a651a107061727469616c5072656469636174651a0f66756c6c5374617469737469634944200120022003200420052006200720082009200a200b200c2800b80101c20100e80100f2010408001200f801008002009202009a0200b20200b80200c0021dc80200e00200800300880302a80300b00300d00300d80300e00300f80300880400980400a00400a80400"} -,{"key":"8b899d8a89","value":"030aef040a096c6f636174696f6e731815200128013a0042300a0b6c6f63616c6974794b657910011a0c0807100018003000501960002000300068007000780080010088010098010042320a0d6c6f63616c69747956616c756510021a0c08071000180030005019600020003000680070007800800100880100980100422e0a086c6174697475646510031a0d0803100f1812300050a40d600020003000680070007800800100880100980100422f0a096c6f6e67697475646510041a0d0803100f1812300050a40d6000200030006800700078008001008801009801004805529b010a077072696d61727910011801220b6c6f63616c6974794b6579220d6c6f63616c69747956616c75652a086c617469747564652a096c6f6e67697475646530013002400040004a10080010001a00200028003000380040005a00700370047a0408002000800100880100900104980101a20106080012001800a80100b20100ba0100c00100c80100d00101e00100e9010000000000000000f2010060026a250a0d0a0561646d696e10e00318e0030a0c0a04726f6f7410e00318e00312046e6f64651803800101880103980100b201710a3266616d5f305f6c6f63616c6974794b65795f6c6f63616c69747956616c75655f6c617469747564655f6c6f6e67697475646510001a0b6c6f63616c6974794b65791a0d6c6f63616c69747956616c75651a086c617469747564651a096c6f6e67697475646520012002200320042800b80101c20100e80100f2010408001200f801008002009202009a0200b20200b80200c0021dc80200e00200800300880302a80300b00300d00300d80300e00300f80300880400980400a00400a80400"} -,{"key":"8b899f8a89","value":"030abe0a0a0c726f6c655f6d656d626572731817200128013a0042290a04726f6c6510011a0c08071000180030005019600020003000680070007800800100880100980100422b0a066d656d62657210021a0c08071000180030005019600020003000680070007800800100880100980100422c0a07697341646d696e10031a0c08001000180030005010600020003000680070007800800100880100980100422c0a07726f6c655f696410041a0c080c100018003000501a600020003000680070007800800100880100980100422e0a096d656d6265725f696410051a0c080c100018003000501a60002000300068007000780080010088010098010048065297010a077072696d617279100118012204726f6c6522066d656d6265722a07697341646d696e2a07726f6c655f69642a096d656d6265725f696430013002400040004a10080010001a00200028003000380040005a007003700470057a0408002000800100880100900104980101a20106080012001800a80100b20100ba0100c00100c80100d00102e00100e9010000000000000000f201005a780a15726f6c655f6d656d626572735f726f6c655f696478100218002204726f6c653001380240004a10080010001a00200028003000380040005a007a0408002000800100880100900103980100a20106080012001800a80100b20100ba0100c00100c80100d00100e00100e9010000000000000000f201005a7c0a17726f6c655f6d656d626572735f6d656d6265725f6964781003180022066d656d6265723002380140004a10080010001a00200028003000380040005a007a0408002000800100880100900103980100a20106080012001800a80100b20100ba0100c00100c80100d00100e00100e9010000000000000000f201005a80010a18726f6c655f6d656d626572735f726f6c655f69645f696478100418002207726f6c655f696430043801380240004a10080010001a00200028003000380040005a007a0408002000800100880100900103980100a20106080012001800a80100b20100ba0100c00100c80100d00100e00100e9010000000000000000f201005a84010a1a726f6c655f6d656d626572735f6d656d6265725f69645f6964781005180022096d656d6265725f696430053801380240004a10080010001a00200028003000380040005a007a0408002000800100880100900103980100a20106080012001800a80100b20100ba0100c00100c80100d00100e00100e9010000000000000000f201005a99010a22726f6c655f6d656d626572735f726f6c655f69645f6d656d6265725f69645f6b6579100618012207726f6c655f696422096d656d6265725f69643004300538013802400040004a10080010001a00200028003000380040005a007a0408002000800100880100900103980100a20106080012001800a80100b20100ba0100c00100c80100d00101e00100e9010000000000000000f2010060076a250a0d0a0561646d696e10e00318e0030a0c0a04726f6f7410e00318e00312046e6f64651803800101880103980100b2011f0a077072696d61727910001a04726f6c651a066d656d626572200120022800b2011e0a0d66616d5f335f697341646d696e10031a07697341646d696e20032803b2011e0a0d66616d5f345f726f6c655f696410041a07726f6c655f696420042804b201220a0f66616d5f355f6d656d6265725f696410051a096d656d6265725f696420052805b80106c20100e80100f2010408001200f801008002009202009a0200b20200b80200c0021dc80200e00200800300880303a80300b00300d00300d80300e00300f80300880400980400a00400a80400"} -,{"key":"8b89a08a89","value":"030aba040a08636f6d6d656e74731818200128013a0042290a047479706510011a0c08011040180030005014600020003000680070007800800100880100980100422e0a096f626a6563745f696410021a0c08011040180030005014600020003000680070007800800100880100980100422b0a067375625f696410031a0c08011040180030005014600020003000680070007800800100880100980100422c0a07636f6d6d656e7410041a0c080710001800300050196000200030006800700078008001008801009801004805528e010a077072696d6172791001180122047479706522096f626a6563745f696422067375625f69642a07636f6d6d656e743001300230034000400040004a10080010001a00200028003000380040005a0070047a0408002000800100880100900104980101a20106080012001800a80100b20100ba0100c00100c80100d00101e00100e9010000000000000000f2010060026a330a0d0a0561646d696e10e00318e0030a0c0a067075626c6963102018000a0c0a04726f6f7410e00318e00312046e6f64651803800101880103980100b2012c0a077072696d61727910001a04747970651a096f626a6563745f69641a067375625f69642001200220032800b2011e0a0d66616d5f345f636f6d6d656e7410041a07636f6d6d656e7420042804b80105c20100e80100f2010408001200f801008002009202009a0200b20200b80200c0021dc80200e00200800300880302a80300b00300d00300d80300e00300f80300880400980400a00400a80400"} -,{"key":"8b89a18a89","value":"030ab5060a1c7265706c69636174696f6e5f636f6e73747261696e745f73746174731819200128013a00422c0a077a6f6e655f696410011a0c08011040180030005014600020003000680070007800800100880100980100422f0a0a7375627a6f6e655f696410021a0c0801104018003000501460002000300068007000780080010088010098010042290a047479706510031a0c08071000180030005019600020003000680070007800800100880100980100422b0a06636f6e66696710041a0c08071000180030005019600020003000680070007800800100880100980100422e0a097265706f72745f696410051a0c0801104018003000501460002000300068007000780080010088010098010042350a0f76696f6c6174696f6e5f737461727410061a0d080910001800300050a00960002001300068007000780080010088010098010042350a1076696f6c6174696e675f72616e67657310071a0c08011040180030005014600020003000680070007800800100880100980100480852c5010a077072696d6172791001180122077a6f6e655f6964220a7375627a6f6e655f69642204747970652206636f6e6669672a097265706f72745f69642a0f76696f6c6174696f6e5f73746172742a1076696f6c6174696e675f72616e676573300130023003300440004000400040004a10080010001a00200028003000380040005a007005700670077a0408002000800100880100900104980101a20106080012001800a80100b20100ba0100c00100c80100d00101e00100e9010000000000000000f2010060026a250a0d0a0561646d696e10e00318e0030a0c0a04726f6f7410e00318e00312046e6f64651803800101880103980100b2016c0a077072696d61727910001a077a6f6e655f69641a0a7375627a6f6e655f69641a04747970651a06636f6e6669671a097265706f72745f69641a0f76696f6c6174696f6e5f73746172741a1076696f6c6174696e675f72616e67657320012002200320042005200620072800b80101c20100e80100f2010408001200f801008002009202009a0200b20200b80200c0021dc80200e00200800301880302a80300b00300d00300d80300e00300f80300880400980400a00400a80400"} -,{"key":"8b89a28a89","value":"030a9e050a1f7265706c69636174696f6e5f637269746963616c5f6c6f63616c6974696573181a200128013a00422c0a077a6f6e655f696410011a0c08011040180030005014600020003000680070007800800100880100980100422f0a0a7375627a6f6e655f696410021a0c08011040180030005014600020003000680070007800800100880100980100422d0a086c6f63616c69747910031a0c08071000180030005019600020003000680070007800800100880100980100422e0a097265706f72745f696410041a0c0801104018003000501460002000300068007000780080010088010098010042330a0e61745f7269736b5f72616e67657310051a0c08011040180030005014600020003000680070007800800100880100980100480652a8010a077072696d6172791001180122077a6f6e655f6964220a7375627a6f6e655f696422086c6f63616c6974792a097265706f72745f69642a0e61745f7269736b5f72616e6765733001300230034000400040004a10080010001a00200028003000380040005a00700470057a0408002000800100880100900104980101a20106080012001800a80100b20100ba0100c00100c80100d00101e00100e9010000000000000000f2010060026a250a0d0a0561646d696e10e00318e0030a0c0a04726f6f7410e00318e00312046e6f64651803800101880103980100b201510a077072696d61727910001a077a6f6e655f69641a0a7375627a6f6e655f69641a086c6f63616c6974791a097265706f72745f69641a0e61745f7269736b5f72616e676573200120022003200420052800b80101c20100e80100f2010408001200f801008002009202009a0200b20200b80200c0021dc80200e00200800300880302a80300b00300d00300d80300e00300f80300880400980400a00400a80400"} -,{"key":"8b89a38a89","value":"030a8c070a117265706c69636174696f6e5f7374617473181b200128013a00422c0a077a6f6e655f696410011a0c08011040180030005014600020003000680070007800800100880100980100422f0a0a7375627a6f6e655f696410021a0c08011040180030005014600020003000680070007800800100880100980100422e0a097265706f72745f696410031a0c0801104018003000501460002000300068007000780080010088010098010042310a0c746f74616c5f72616e67657310041a0c0801104018003000501460002000300068007000780080010088010098010042370a12756e617661696c61626c655f72616e67657310051a0c08011040180030005014600020003000680070007800800100880100980100423c0a17756e6465725f7265706c6963617465645f72616e67657310061a0c08011040180030005014600020003000680070007800800100880100980100423b0a166f7665725f7265706c6963617465645f72616e67657310071a0c08011040180030005014600020003000680070007800800100880100980100480852e3010a077072696d6172791001180122077a6f6e655f6964220a7375627a6f6e655f69642a097265706f72745f69642a0c746f74616c5f72616e6765732a12756e617661696c61626c655f72616e6765732a17756e6465725f7265706c6963617465645f72616e6765732a166f7665725f7265706c6963617465645f72616e67657330013002400040004a10080010001a00200028003000380040005a00700370047005700670077a0408002000800100880100900104980101a20106080012001800a80100b20100ba0100c00100c80100d00101e00100e9010000000000000000f2010060026a250a0d0a0561646d696e10e00318e0030a0c0a04726f6f7410e00318e00312046e6f64651803800101880103980100b2018e010a077072696d61727910001a077a6f6e655f69641a0a7375627a6f6e655f69641a097265706f72745f69641a0c746f74616c5f72616e6765731a12756e617661696c61626c655f72616e6765731a17756e6465725f7265706c6963617465645f72616e6765731a166f7665725f7265706c6963617465645f72616e67657320012002200320042005200620072800b80101c20100e80100f2010408001200f801008002009202009a0200b20200b80200c0021dc80200e00200800301880302a80300b00300d00300d80300e00300f80300880400980400a00400a80400"} -,{"key":"8b89a48a89","value":"030a8b030a0c7265706f7274735f6d657461181c200128013a0042270a02696410011a0c08011040180030005014600020003000680070007800800100880100980100422f0a0967656e65726174656410021a0d080910001800300050a009600020003000680070007800800100880100980100480352730a077072696d61727910011801220269642a0967656e657261746564300140004a10080010001a00200028003000380040005a0070027a0408002000800100880100900104980101a20106080012001800a80100b20100ba0100c00100c80100d00101e00100e9010000000000000000f2010060026a250a0d0a0561646d696e10e00318e0030a0c0a04726f6f7410e00318e00312046e6f64651803800101880103980100b201200a077072696d61727910001a0269641a0967656e657261746564200120022802b80101c20100e80100f2010408001200f801008002009202009a0200b20200b80200c0021dc80200e00200800300880302a80300b00300d00300d80300e00300f80300880400980400a00400a80400"} -,{"key":"8b89a68a89","value":"030aaa040a096e616d657370616365181e200128013a00422d0a08706172656e74494410011a0c0801104018003000501460002000300068007000780080010088010098010042330a0e706172656e74536368656d61494410021a0c0801104018003000501460002000300068007000780080010088010098010042290a046e616d6510031a0c0807100018003000501960002000300068007000780080010088010098010042270a02696410041a0c0801104018003000501460002001300068007000780080010088010098010048055290010a077072696d617279100118012208706172656e744944220e706172656e74536368656d61494422046e616d652a0269643001300230034000400040004a10080010001a00200028003000380040005a0070047a0408002000800100880100900104980101a20106080012001800a80100b20100ba0100c00100c80100d00101e00100e9010000000000000000f2010060026a210a0b0a0561646d696e102018200a0a0a04726f6f741020182012046e6f64651803800101880103980100b201330a077072696d61727910001a08706172656e7449441a0e706172656e74536368656d6149441a046e616d652001200220032800b201140a0866616d5f345f696410041a02696420042804b80105c20100e80100f2010408001200f801008002009202009a0200b20200b80200c0021dc80200e00200800300880302a80300b00300d00300d80300e00300f80300880400980400a00400a80400"} -,{"key":"8b89a78a89","value":"030ab4050a1170726f7465637465645f74735f6d657461181f200128013a0042340a0973696e676c65746f6e10011a0c08001000180030005010600020002a04747275653000680070007800800100880100980100422c0a0776657273696f6e10021a0c0801104018003000501460002000300068007000780080010088010098010042300a0b6e756d5f7265636f72647310031a0c08011040180030005014600020003000680070007800800100880100980100422e0a096e756d5f7370616e7310041a0c0801104018003000501460002000300068007000780080010088010098010042300a0b746f74616c5f627974657310051a0c08011040180030005014600020003000680070007800800100880100980100480652a3010a077072696d61727910011801220973696e676c65746f6e2a0776657273696f6e2a0b6e756d5f7265636f7264732a096e756d5f7370616e732a0b746f74616c5f6279746573300140004a10080010001a00200028003000380040005a0070027003700470057a0408002000800100880100900104980101a20106080012001800a80100b20100ba0100c00100c80100d00101e00100e9010000000000000000f2010060026a210a0b0a0561646d696e102018200a0a0a04726f6f741020182012046e6f64651803800101880103980100a201260a0973696e676c65746f6e120f636865636b5f73696e676c65746f6e18002801300038004002b201500a077072696d61727910001a0973696e676c65746f6e1a0776657273696f6e1a0b6e756d5f7265636f7264731a096e756d5f7370616e731a0b746f74616c5f6279746573200120022003200420052800b80101c20100e80100f2010408001200f801008002009202009a0200b20200b80200c0021dc80200e00200800300880303a80300b00300d00300d80300e00300f80300880400980400a00400a80400"} -,{"key":"8b89a88a89","value":"030a98060a1470726f7465637465645f74735f7265636f7264731820200128013a0042280a02696410011a0d080e10001800300050861760002000300068007000780080010088010098010042280a02747310021a0d080310001800300050a40d600020003000680070007800800100880100980100422e0a096d6574615f7479706510031a0c0807100018003000501960002000300068007000780080010088010098010042290a046d65746110041a0c08081000180030005011600020013000680070007800800100880100980100422e0a096e756d5f7370616e7310051a0c08011040180030005014600020003000680070007800800100880100980100422a0a057370616e7310061a0c0808100018003000501160002000300068007000780080010088010098010042340a08766572696669656410071a0c08001000180030005010600020002a0566616c73653000680070007800800100880100980100422b0a0674617267657410081a0c08081000180030005011600020013000680070007800800100880100980100480952ad010a077072696d61727910011801220269642a0274732a096d6574615f747970652a046d6574612a096e756d5f7370616e732a057370616e732a0876657269666965642a06746172676574300140004a10080010001a00200028003000380040005a0070027003700470057006700770087a0408002000800100880100900104980101a20106080012001800a80100b20100ba0100c00100c80100d00101e00100e9010000000000000000f2010060026a210a0b0a0561646d696e102018200a0a0a04726f6f741020182012046e6f64651803800101880103980100b2015a0a077072696d61727910001a0269641a0274731a096d6574615f747970651a046d6574611a096e756d5f7370616e731a057370616e731a0876657269666965641a06746172676574200120022003200420052006200720082800b80101c20100e80100f2010408001200f801008002009202009a0200b20200b80200c0021dc80200e00200800300880302a80300b00300d00300d80300e00300f80300880400980400a00400a80400"} -,{"key":"8b89a98a89","value":"030a93050a0c726f6c655f6f7074696f6e731821200128013a00422d0a08757365726e616d6510011a0c08071000180030005019600020003000680070007800800100880100980100422b0a066f7074696f6e10021a0c08071000180030005019600020003000680070007800800100880100980100422a0a0576616c756510031a0c08071000180030005019600020013000680070007800800100880100980100422c0a07757365725f696410041a0c080c100018003000501a6000200030006800700078008001008801009801004805528c010a077072696d617279100118012208757365726e616d6522066f7074696f6e2a0576616c75652a07757365725f696430013002400040004a10080010001a00200028003000380040005a00700370047a0408002000800100880100900104980101a20106080012001800a80100b20100ba0100c00100c80100d00101e00100e9010000000000000000f201005a790a1175736572735f757365725f69645f696478100218002207757365725f696430043801380240004a10080010001a00200028003000380040005a007a0408002000800100880100900103980100a20106080012001800a80100b20100ba0100c00100c80100d00100e00100e9010000000000000000f2010060036a250a0d0a0561646d696e10e00318e0030a0c0a04726f6f7410e00318e00312046e6f64651803800101880103980100b201370a077072696d61727910001a08757365726e616d651a066f7074696f6e1a0576616c75651a07757365725f696420012002200320042800b80101c20100e80100f2010408001200f801008002009202009a0200b20200b80200c0021dc80200e00200800300880302a80300b00300d00300d80300e00300f80300880400980400a00400a80400"} -,{"key":"8b89aa8a89","value":"030ae6030a1773746174656d656e745f62756e646c655f6368756e6b731822200128013a0042370a02696410011a0c08011040180030005014600020002a0e756e697175655f726f7769642829300068007000780080010088010098010042300a0b6465736372697074696f6e10021a0c0807100018003000501960002001300068007000780080010088010098010042290a046461746110031a0c080810001800300050116000200030006800700078008001008801009801004804527d0a077072696d61727910011801220269642a0b6465736372697074696f6e2a0464617461300140004a10080010001a00200028003000380040005a00700270037a0408002000800100880100900104980101a20106080012001800a80100b20100ba0100c00100c80100d00101e00100e9010000000000000000f2010060026a250a0d0a0561646d696e10e00318e0030a0c0a04726f6f7410e00318e00312046e6f64651803800101880103980100b2012a0a077072696d61727910001a0269641a0b6465736372697074696f6e1a04646174612001200220032800b80101c20100e80100f2010408001200f801008002009202009a0200b20200b80200c0021dc80200e00200800300880302a80300b00300d00300d80300e00300f80300880400980400a00400a80400"} -,{"key":"8b89ab8a89","value":"030ad70d0a1e73746174656d656e745f646961676e6f73746963735f72657175657374731823200128013a0042370a02696410011a0c08011040180030005014600020002a0e756e697175655f726f7769642829300068007000780080010088010098010042350a09636f6d706c6574656410021a0c08001000180030005010600020002a0566616c73653000680070007800800100880100980100423a0a1573746174656d656e745f66696e6765727072696e7410031a0c08071000180030005019600020003000680070007800800100880100980100423d0a1873746174656d656e745f646961676e6f73746963735f696410041a0c0801104018003000501460002001300068007000780080010088010098010042320a0c7265717565737465645f617410051a0d080910001800300050a00960002000300068007000780080010088010098010042410a156d696e5f657865637574696f6e5f6c6174656e637910061a13080610001800300050a20960006a04080010002001300068007000780080010088010098010042300a0a657870697265735f617410071a0d080910001800300050a009600020013000680070007800800100880100980100423a0a1473616d706c696e675f70726f626162696c69747910081a0d080210401800300050bd05600020013000680070007800800100880100980100422e0a09706c616e5f6769737410091a0c0807100018003000501960002001300068007000780080010088010098010042330a0e616e74695f706c616e5f67697374100a1a0c0800100018003000501060002001300068007000780080010088010098010042340a087265646163746564100b1a0c08001000180030005010600020002a0566616c73653000680070007800800100880100980100423a0a08757365726e616d65100c1a0c08071000180030005019600020002a0b27273a3a3a535452494e473000680070007800800100880100980100480d52ae020a077072696d61727910011801220269642a09636f6d706c657465642a1573746174656d656e745f66696e6765727072696e742a1873746174656d656e745f646961676e6f73746963735f69642a0c7265717565737465645f61742a156d696e5f657865637574696f6e5f6c6174656e63792a0a657870697265735f61742a1473616d706c696e675f70726f626162696c6974792a09706c616e5f676973742a0e616e74695f706c616e5f676973742a0872656461637465642a08757365726e616d65300140004a10080010001a00200028003000380040005a0070027003700470057006700770087009700a700b700c7a0408002000800100880100900104980101a20106080012001800a80100b20100ba0100c00100c80100d00101e00100e9010000000000000000f201005a8d020a10636f6d706c657465645f6964785f7632100218002209636f6d706c65746564220269642a1573746174656d656e745f66696e6765727072696e742a156d696e5f657865637574696f6e5f6c6174656e63792a0a657870697265735f61742a1473616d706c696e675f70726f626162696c6974792a09706c616e5f676973742a0e616e74695f706c616e5f676973742a0872656461637465642a08757365726e616d6530023001400040004a10080010001a00200028003000380040005a0070037006700770087009700a700b700c7a0408002000800100880100900103980100a20106080012001800a80100b20100ba0100c00100c80100d00100e00100e9010000000000000000f2010060036a250a0d0a0561646d696e10e00318e0030a0c0a04726f6f7410e00318e00312046e6f64651803800101880103980100a201620a3a73616d706c696e675f70726f626162696c697479204245545745454e20302e303a3a3a464c4f41543820414e4420312e303a3a3a464c4f415438121a636865636b5f73616d706c696e675f70726f626162696c69747918002808300038004002b201db010a077072696d61727910001a0269641a09636f6d706c657465641a1573746174656d656e745f66696e6765727072696e741a1873746174656d656e745f646961676e6f73746963735f69641a0c7265717565737465645f61741a156d696e5f657865637574696f6e5f6c6174656e63791a0a657870697265735f61741a1473616d706c696e675f70726f626162696c6974791a09706c616e5f676973741a0e616e74695f706c616e5f676973741a0872656461637465641a08757365726e616d65200120022003200420052006200720082009200a200b200c2800b80101c20100e80100f2010408001200f801008002009202009a0200b20200b80200c0021dc80200e00200800300880303a80300b00300d00300d80300e00300f80300880400980400a00400a80400"} -,{"key":"8b89ac8a89","value":"030aca060a1573746174656d656e745f646961676e6f73746963731824200128013a0042370a02696410011a0c08011040180030005014600020002a0e756e697175655f726f77696428293000680070007800800100880100980100423a0a1573746174656d656e745f66696e6765727072696e7410021a0c08071000180030005019600020003000680070007800800100880100980100422e0a0973746174656d656e7410031a0c0807100018003000501960002000300068007000780080010088010098010042320a0c636f6c6c65637465645f617410041a0d080910001800300050a009600020003000680070007800800100880100980100422b0a05747261636510051a0d081210001800300050da1d60002001300068007000780080010088010098010042430a0d62756e646c655f6368756e6b7310061a1d080f104018003000380150f8075a0c080110401800300050146000600020013000680070007800800100880100980100422a0a056572726f7210071a0c08071000180030005019600020013000680070007800800100880100980100480852bf010a077072696d61727910011801220269642a1573746174656d656e745f66696e6765727072696e742a0973746174656d656e742a0c636f6c6c65637465645f61742a0574726163652a0d62756e646c655f6368756e6b732a056572726f72300140004a10080010001a00200028003000380040005a007002700370047005700670077a0408002000800100880100900104980101a20106080012001800a80100b20100ba0100c00100c80100d00101e00100e9010000000000000000f2010060026a250a0d0a0561646d696e10e00318e0030a0c0a04726f6f7410e00318e00312046e6f64651803800101880103980100b2016c0a077072696d61727910001a0269641a1573746174656d656e745f66696e6765727072696e741a0973746174656d656e741a0c636f6c6c65637465645f61741a0574726163651a0d62756e646c655f6368756e6b731a056572726f7220012002200320042005200620072800b80101c20100e80100f2010408001200f801008002009202009a0200b20200b80200c0021dc80200e00200800300880302a80300b00300d00300d80300e00300f80300880400980400a00400a80400"} -,{"key":"8b89ad8a89","value":"030ae2090a0e7363686564756c65645f6a6f62731825200128013a0042400a0b7363686564756c655f696410011a0c08011040180030005014600020002a0e756e697175655f726f7769642829300068007000780080010088010098010042320a0d7363686564756c655f6e616d6510021a0c0807100018003000501960002000300068007000780080010088010098010042420a076372656174656410031a0d080910001800300050a009600020002a136e6f7728293a3a3a54494d455354414d50545a3000680070007800800100880100980100422a0a056f776e657210041a0c08071000180030005019600020003000680070007800800100880100980100422e0a086e6578745f72756e10051a0d080910001800300050a00960002001300068007000780080010088010098010042330a0e7363686564756c655f737461746510061a0c0808100018003000501160002001300068007000780080010088010098010042320a0d7363686564756c655f6578707210071a0c0807100018003000501960002001300068007000780080010088010098010042350a107363686564756c655f64657461696c7310081a0c0808100018003000501160002001300068007000780080010088010098010042320a0d6578656375746f725f7479706510091a0c0807100018003000501960002000300068007000780080010088010098010042330a0e657865637574696f6e5f61726773100a1a0c08081000180030005011600020003000680070007800800100880100980100480b52fa010a077072696d61727910011801220b7363686564756c655f69642a0d7363686564756c655f6e616d652a07637265617465642a056f776e65722a086e6578745f72756e2a0e7363686564756c655f73746174652a0d7363686564756c655f657870722a107363686564756c655f64657461696c732a0d6578656375746f725f747970652a0e657865637574696f6e5f61726773300140004a10080010001a00200028003000380040005a0070027003700470057006700770087009700a7a0408002000800100880100900104980101a20106080012001800a80100b20100ba0100c00100c80100d00101e00100e9010000000000000000f201005a730a0c6e6578745f72756e5f6964781002180022086e6578745f72756e3005380140004a10080010001a00200028003000380040005a007a0408002000800100880100900103980100a20106080012001800a80100b20100ba0100c00100c80100d00100e00100e9010000000000000000f2010060036a250a0d0a0561646d696e10e00318e0030a0c0a04726f6f7410e00318e00312046e6f64651803800101880103980100b201380a05736368656410001a0b7363686564756c655f69641a086e6578745f72756e1a0e7363686564756c655f73746174652001200520062800b201780a056f7468657210011a0d7363686564756c655f6e616d651a07637265617465641a056f776e65721a0d7363686564756c655f657870721a107363686564756c655f64657461696c731a0d6578656375746f725f747970651a0e657865637574696f6e5f61726773200220032004200720082009200a2800b80102c20100e80100f2010408001200f801008002009202009a0200b20200b80200c0021dc80200e00200800300880302a80300b00300d00300d80300e00300f80300880400980400a00400a80400"} -,{"key":"8b89af8a89","value":"030af8030a0b73716c6c6976656e6573731827200128013a00422f0a0a73657373696f6e5f696410011a0c0808100018003000501160002000300068007000780080010088010098010042300a0a65787069726174696f6e10021a0d080310001800300050a40d60002000300068007000780080010088010098010042300a0b637264625f726567696f6e10031a0c080810001800300050116000200030006800700078008001008801009801004804528d010a077072696d61727910021801220b637264625f726567696f6e220a73657373696f6e5f69642a0a65787069726174696f6e30033001400040004a10080010001a00200028003000380040005a0070027a0408002000800100880100900104980101a20106080012001800a80100b20100ba0100c00100c80100d00101e00100e9010000000000000000f2010060036a250a0d0a0561646d696e10e00318e0030a0c0a04726f6f7410e00318e00312046e6f64651803800101880103980100b201380a077072696d61727910001a0b637264625f726567696f6e1a0a73657373696f6e5f69641a0a65787069726174696f6e2003200120022802b80101c20100e80100f2010408001200f801008002009202009a0200b20200b80200c0021dc80200e00200800300880302a80300b00300d00300d80300e00300f80300880400980400a00400a80400"} -,{"key":"8b89b08a89","value":"030ae5040a0a6d6967726174696f6e731828200128013a00422a0a056d616a6f7210011a0c08011040180030005014600020003000680070007800800100880100980100422a0a056d696e6f7210021a0c08011040180030005014600020003000680070007800800100880100980100422a0a05706174636810031a0c08011040180030005014600020003000680070007800800100880100980100422d0a08696e7465726e616c10041a0c0801104018003000501460002000300068007000780080010088010098010042320a0c636f6d706c657465645f617410051a0d080910001800300050a0096000200030006800700078008001008801009801004806529d010a077072696d6172791001180122056d616a6f7222056d696e6f72220570617463682208696e7465726e616c2a0c636f6d706c657465645f6174300130023003300440004000400040004a10080010001a00200028003000380040005a0070057a0408002000800100880100900104980101a20106080012001800a80100b20100ba0100c00100c80100d00101e00100e9010000000000000000f2010060026a250a0d0a0561646d696e10e00318e0030a0c0a04726f6f7410e00318e00312046e6f64651803800101880103980100b201440a077072696d61727910001a056d616a6f721a056d696e6f721a0570617463681a08696e7465726e616c1a0c636f6d706c657465645f6174200120022003200420052805b80101c20100e80100f2010408001200f801008002009202009a0200b20200b80200c0021dc80200e00200800300880302a80300b00300d00300d80300e00300f80300880400980400a00400a80400"} -,{"key":"8b89b18a89","value":"030acf030a0b6a6f696e5f746f6b656e731829200128013a0042280a02696410011a0d080e100018003000508617600020003000680070007800800100880100980100422b0a0673656372657410021a0c0808100018003000501160002000300068007000780080010088010098010042300a0a65787069726174696f6e10031a0d080910001800300050a0096000200030006800700078008001008801009801004804527e0a077072696d61727910011801220269642a067365637265742a0a65787069726174696f6e300140004a10080010001a00200028003000380040005a00700270037a0408002000800100880100900104980101a20106080012001800a80100b20100ba0100c00100c80100d00101e00100e9010000000000000000f2010060026a250a0d0a0561646d696e10e00318e0030a0c0a04726f6f7410e00318e00312046e6f64651803800101880103980100b2012b0a077072696d61727910001a0269641a067365637265741a0a65787069726174696f6e2001200220032800b80101c20100e80100f2010408001200f801008002009202009a0200b20200b80200c0021dc80200e00200800300880302a80300b00300d00300d80300e00300f80300880400980400a00400a80400"} -,{"key":"8b89b28a89","value":"030ab3280a1473746174656d656e745f73746174697374696373182a200128013a0042330a0d616767726567617465645f747310011a0d080910001800300050a00960002000300068007000780080010088010098010042330a0e66696e6765727072696e745f696410021a0c08081000180030005011600020003000680070007800800100880100980100423f0a1a7472616e73616374696f6e5f66696e6765727072696e745f696410031a0c08081000180030005011600020003000680070007800800100880100980100422e0a09706c616e5f6861736810041a0c08081000180030005011600020003000680070007800800100880100980100422d0a086170705f6e616d6510051a0c08071000180030005019600020003000680070007800800100880100980100422c0a076e6f64655f696410061a0c0801104018003000501460002000300068007000780080010088010098010042380a0c6167675f696e74657276616c10071a13080610001800300050a20960006a040800100020003000680070007800800100880100980100422e0a086d6574616461746110081a0d081210001800300050da1d60002000300068007000780080010088010098010042300a0a7374617469737469637310091a0d081210001800300050da1d600020003000680070007800800100880100980100422a0a04706c616e100a1a0d081210001800300050da1d600020003000680070007800800100880100980100429c020a68637264625f696e7465726e616c5f616767726567617465645f74735f6170705f6e616d655f66696e6765727072696e745f69645f6e6f64655f69645f706c616e5f686173685f7472616e73616374696f6e5f66696e6765727072696e745f69645f73686172645f38100b1a0c080110201800300050176000200030015a8c016d6f6428666e76333228637264625f696e7465726e616c2e646174756d735f746f5f627974657328616767726567617465645f74732c206170705f6e616d652c2066696e6765727072696e745f69642c206e6f64655f69642c20706c616e5f686173682c207472616e73616374696f6e5f66696e6765727072696e745f696429292c20383a3a3a494e543829680070007800800100880100980100425f0a15696e6465785f7265636f6d6d656e646174696f6e73100c1a1d080f100018003000380750f1075a0c080710001800300050196000600020002a1241525241595b5d3a3a3a535452494e475b5d3000680070007800800100880100980100426c0a0d696e64657865735f7573616765100d1a0d081210001800300050da1d6000200130005a3728737461746973746963732d3e2773746174697374696373273a3a3a535452494e47292d3e27696e6465786573273a3a3a535452494e4768007000780080010188010098010042710a0f657865637574696f6e5f636f756e74100e1a0c080110401800300050146000200130005a3b2828737461746973746963732d3e2773746174697374696373273a3a3a535452494e47292d3e27636e74273a3a3a535452494e47293a3a494e5438680070007800800100880100980100428a010a0f736572766963655f6c6174656e6379100f1a0d080210401800300050bd056000200130005a53282828737461746973746963732d3e2773746174697374696373273a3a3a535452494e47292d3e277376634c6174273a3a3a535452494e47292d3e276d65616e273a3a3a535452494e47293a3a464c4f4154386800700078008001008801009801004297010a0d6370755f73716c5f6e616e6f7310101a0d080210401800300050bd056000200130005a62282828737461746973746963732d3e27657865637574696f6e5f73746174697374696373273a3a3a535452494e47292d3e2763707553514c4e616e6f73273a3a3a535452494e47292d3e276d65616e273a3a3a535452494e47293a3a464c4f415438680070007800800100880100980100429c010a0f636f6e74656e74696f6e5f74696d6510111a0d080210401800300050bd056000200130005a65282828737461746973746963732d3e27657865637574696f6e5f73746174697374696373273a3a3a535452494e47292d3e27636f6e74656e74696f6e54696d65273a3a3a535452494e47292d3e276d65616e273a3a3a535452494e47293a3a464c4f41543868007000780080010088010098010042dc010a1e746f74616c5f657374696d617465645f657865637574696f6e5f74696d6510121a0d080210401800300050bd056000200130005a95012828737461746973746963732d3e2773746174697374696373273a3a3a535452494e47292d3e3e27636e74273a3a3a535452494e47293a3a464c4f415438202a20282828737461746973746963732d3e2773746174697374696373273a3a3a535452494e47292d3e277376634c6174273a3a3a535452494e47292d3e3e276d65616e273a3a3a535452494e47293a3a464c4f415438680070007800800100880100980100428a010a0b7039395f6c6174656e637910131a0d080210401800300050bd056000200130005a57282828737461746973746963732d3e2773746174697374696373273a3a3a535452494e47292d3e276c6174656e6379496e666f273a3a3a535452494e47292d3e27703939273a3a3a535452494e47293a3a464c4f415438680070007800800100880100980100481452c5050a077072696d617279100118012268637264625f696e7465726e616c5f616767726567617465645f74735f6170705f6e616d655f66696e6765727072696e745f69645f6e6f64655f69645f706c616e5f686173685f7472616e73616374696f6e5f66696e6765727072696e745f69645f73686172645f38220d616767726567617465645f7473220e66696e6765727072696e745f6964221a7472616e73616374696f6e5f66696e6765727072696e745f69642209706c616e5f6861736822086170705f6e616d6522076e6f64655f69642a0c6167675f696e74657276616c2a086d657461646174612a0a737461746973746963732a04706c616e2a15696e6465785f7265636f6d6d656e646174696f6e732a0f657865637574696f6e5f636f756e742a0f736572766963655f6c6174656e63792a0d6370755f73716c5f6e616e6f732a0f636f6e74656e74696f6e5f74696d652a1e746f74616c5f657374696d617465645f657865637574696f6e5f74696d652a0b7039395f6c6174656e6379300b30013002300330043005300640004000400040004000400040004a10080010001a00200028003000380040005a00700770087009700a700c700e700f70107011701270137a0408002000800100880100900104980101a201c70108011268637264625f696e7465726e616c5f616767726567617465645f74735f6170705f6e616d655f66696e6765727072696e745f69645f6e6f64655f69645f706c616e5f686173685f7472616e73616374696f6e5f66696e6765727072696e745f69645f73686172645f381808220d616767726567617465645f747322086170705f6e616d65220e66696e6765727072696e745f696422076e6f64655f69642209706c616e5f68617368221a7472616e73616374696f6e5f66696e6765727072696e745f6964a80100b20100ba0100c00100c80100d00101e00100e9010000000000000000f201005aaa010a1566696e6765727072696e745f73746174735f69647810021800220e66696e6765727072696e745f6964221a7472616e73616374696f6e5f66696e6765727072696e745f696430023003380b3801380438053806400040004a10080010001a00200028003000380040005a007a0408002000800100880100900103980100a20106080012001800a80100b20100ba0100c00100c80100d00100e00100e9010000000000000000f201005a8c010a11696e64657865735f75736167655f69647810031800220d696e64657865735f7573616765300d380b38013802380338043805380640004a10080010001a00200028003000380040005a007a0408002000800101880100900103980100a20106080012001800a80100b20100ba0100c00100c80100d00100d80100e00100e9010000000000000000f201005ad2010a13657865637574696f6e5f636f756e745f69647810041800220d616767726567617465645f747322086170705f6e616d65220f657865637574696f6e5f636f756e7430013005300e380b38023803380438064000400040014a10080010001a00200028003000380040005a007a0408002000800100880100900103980100a20106080012001800a80100b20100ba01286170705f6e616d65204e4f54204c494b4520272420696e7465726e616c25273a3a3a535452494e47c00100c80100d00100e00100e9010000000000000000f201005ad4010a13736572766963655f6c6174656e63795f69647810051800220d616767726567617465645f747322086170705f6e616d65220f736572766963655f6c6174656e637930013005300f380b38023803380438064000400040014a10080010001a00200028003000380040005a00680f7a0408002000800100880100900103980100a20106080012001800a80100b20100ba01286170705f6e616d65204e4f54204c494b4520272420696e7465726e616c25273a3a3a535452494e47c00100c80100d00100e00100e9010000000000000000f201005ad0010a116370755f73716c5f6e616e6f735f69647810061800220d616767726567617465645f747322086170705f6e616d65220d6370755f73716c5f6e616e6f73300130053010380b38023803380438064000400040014a10080010001a00200028003000380040005a0068107a0408002000800100880100900103980100a20106080012001800a80100b20100ba01286170705f6e616d65204e4f54204c494b4520272420696e7465726e616c25273a3a3a535452494e47c00100c80100d00100e00100e9010000000000000000f201005ad4010a13636f6e74656e74696f6e5f74696d655f69647810071800220d616767726567617465645f747322086170705f6e616d65220f636f6e74656e74696f6e5f74696d65300130053011380b38023803380438064000400040014a10080010001a00200028003000380040005a0068117a0408002000800100880100900103980100a20106080012001800a80100b20100ba01286170705f6e616d65204e4f54204c494b4520272420696e7465726e616c25273a3a3a535452494e47c00100c80100d00100e00100e9010000000000000000f201005af2010a22746f74616c5f657374696d617465645f657865637574696f6e5f74696d655f69647810081800220d616767726567617465645f747322086170705f6e616d65221e746f74616c5f657374696d617465645f657865637574696f6e5f74696d65300130053012380b38023803380438064000400040014a10080010001a00200028003000380040005a0068127a0408002000800100880100900103980100a20106080012001800a80100b20100ba01286170705f6e616d65204e4f54204c494b4520272420696e7465726e616c25273a3a3a535452494e47c00100c80100d00100e00100e9010000000000000000f201005acc010a0f7039395f6c6174656e63795f69647810091800220d616767726567617465645f747322086170705f6e616d65220b7039395f6c6174656e6379300130053013380b38023803380438064000400040014a10080010001a00200028003000380040005a0068137a0408002000800100880100900103980100a20106080012001800a80100b20100ba01286170705f6e616d65204e4f54204c494b4520272420696e7465726e616c25273a3a3a535452494e47c00100c80100d00100e00100e9010000000000000000f20100600a6a210a0b0a0561646d696e102018200a0a0a04726f6f741020182012046e6f64651803800101880103980100a201b9020abc01637264625f696e7465726e616c5f616767726567617465645f74735f6170705f6e616d655f66696e6765727072696e745f69645f6e6f64655f69645f706c616e5f686173685f7472616e73616374696f6e5f66696e6765727072696e745f69645f73686172645f3820494e2028303a3a3a494e54382c20313a3a3a494e54382c20323a3a3a494e54382c20333a3a3a494e54382c20343a3a3a494e54382c20353a3a3a494e54382c20363a3a3a494e54382c20373a3a3a494e543829126e636865636b5f637264625f696e7465726e616c5f616767726567617465645f74735f6170705f6e616d655f66696e6765727072696e745f69645f6e6f64655f69645f706c616e5f686173685f7472616e73616374696f6e5f66696e6765727072696e745f69645f73686172645f381800280b300038014002b201a4030a077072696d61727910001a68637264625f696e7465726e616c5f616767726567617465645f74735f6170705f6e616d655f66696e6765727072696e745f69645f6e6f64655f69645f706c616e5f686173685f7472616e73616374696f6e5f66696e6765727072696e745f69645f73686172645f381a0d616767726567617465645f74731a0e66696e6765727072696e745f69641a1a7472616e73616374696f6e5f66696e6765727072696e745f69641a09706c616e5f686173681a086170705f6e616d651a076e6f64655f69641a0c6167675f696e74657276616c1a086d657461646174611a0a737461746973746963731a04706c616e1a15696e6465785f7265636f6d6d656e646174696f6e731a0f657865637574696f6e5f636f756e741a0f736572766963655f6c6174656e63791a0d6370755f73716c5f6e616e6f731a0f636f6e74656e74696f6e5f74696d651a1e746f74616c5f657374696d617465645f657865637574696f6e5f74696d651a0b7039395f6c6174656e6379200b200120022003200420052006200720082009200a200c200e200f20102011201220132800b80101c20100e80100f2010408001200f801008002009202009a0200b20200b80200c0021dc80200e00200800300880303a80300b00300d00300d80300e00300f80300880400980400a00400a80400"} -,{"key":"8b89b38a89","value":"030ab6200a167472616e73616374696f6e5f73746174697374696373182b200128013a0042330a0d616767726567617465645f747310011a0d080910001800300050a00960002000300068007000780080010088010098010042330a0e66696e6765727072696e745f696410021a0c08081000180030005011600020003000680070007800800100880100980100422d0a086170705f6e616d6510031a0c08071000180030005019600020003000680070007800800100880100980100422c0a076e6f64655f696410041a0c0801104018003000501460002000300068007000780080010088010098010042380a0c6167675f696e74657276616c10051a13080610001800300050a20960006a040800100020003000680070007800800100880100980100422e0a086d6574616461746110061a0d081210001800300050da1d60002000300068007000780080010088010098010042300a0a7374617469737469637310071a0d081210001800300050da1d60002000300068007000780080010088010098010042cf010a43637264625f696e7465726e616c5f616767726567617465645f74735f6170705f6e616d655f66696e6765727072696e745f69645f6e6f64655f69645f73686172645f3810081a0c080110201800300050176000200030015a656d6f6428666e76333228637264625f696e7465726e616c2e646174756d735f746f5f627974657328616767726567617465645f74732c206170705f6e616d652c2066696e6765727072696e745f69642c206e6f64655f696429292c20383a3a3a494e54382968007000780080010088010098010042710a0f657865637574696f6e5f636f756e7410091a0c080110401800300050146000200130005a3b2828737461746973746963732d3e2773746174697374696373273a3a3a535452494e47292d3e27636e74273a3a3a535452494e47293a3a494e5438680070007800800100880100980100428a010a0f736572766963655f6c6174656e6379100a1a0d080210401800300050bd056000200130005a53282828737461746973746963732d3e2773746174697374696373273a3a3a535452494e47292d3e277376634c6174273a3a3a535452494e47292d3e276d65616e273a3a3a535452494e47293a3a464c4f4154386800700078008001008801009801004297010a0d6370755f73716c5f6e616e6f73100b1a0d080210401800300050bd056000200130005a62282828737461746973746963732d3e27657865637574696f6e5f73746174697374696373273a3a3a535452494e47292d3e2763707553514c4e616e6f73273a3a3a535452494e47292d3e276d65616e273a3a3a535452494e47293a3a464c4f415438680070007800800100880100980100429c010a0f636f6e74656e74696f6e5f74696d65100c1a0d080210401800300050bd056000200130005a65282828737461746973746963732d3e27657865637574696f6e5f73746174697374696373273a3a3a535452494e47292d3e27636f6e74656e74696f6e54696d65273a3a3a535452494e47292d3e276d65616e273a3a3a535452494e47293a3a464c4f41543868007000780080010088010098010042dc010a1e746f74616c5f657374696d617465645f657865637574696f6e5f74696d65100d1a0d080210401800300050bd056000200130005a95012828737461746973746963732d3e2773746174697374696373273a3a3a535452494e47292d3e3e27636e74273a3a3a535452494e47293a3a464c4f415438202a20282828737461746973746963732d3e2773746174697374696373273a3a3a535452494e47292d3e277376634c6174273a3a3a535452494e47292d3e3e276d65616e273a3a3a535452494e47293a3a464c4f415438680070007800800100880100980100428a010a0b7039395f6c6174656e6379100e1a0d080210401800300050bd056000200130005a57282828737461746973746963732d3e2773746174697374696373273a3a3a535452494e47292d3e276c6174656e6379496e666f273a3a3a535452494e47292d3e27703939273a3a3a535452494e47293a3a464c4f415438680070007800800100880100980100480f5283040a077072696d617279100118012243637264625f696e7465726e616c5f616767726567617465645f74735f6170705f6e616d655f66696e6765727072696e745f69645f6e6f64655f69645f73686172645f38220d616767726567617465645f7473220e66696e6765727072696e745f696422086170705f6e616d6522076e6f64655f69642a0c6167675f696e74657276616c2a086d657461646174612a0a737461746973746963732a0f657865637574696f6e5f636f756e742a0f736572766963655f6c6174656e63792a0d6370755f73716c5f6e616e6f732a0f636f6e74656e74696f6e5f74696d652a1e746f74616c5f657374696d617465645f657865637574696f6e5f74696d652a0b7039395f6c6174656e637930083001300230033004400040004000400040004a10080010001a00200028003000380040005a007005700670077009700a700b700c700d700e7a0408002000800100880100900104980101a2017b08011243637264625f696e7465726e616c5f616767726567617465645f74735f6170705f6e616d655f66696e6765727072696e745f69645f6e6f64655f69645f73686172645f381808220d616767726567617465645f747322086170705f6e616d65220e66696e6765727072696e745f696422076e6f64655f6964a80100b20100ba0100c00100c80100d00101e00100e9010000000000000000f201005a88010a1566696e6765727072696e745f73746174735f69647810021800220e66696e6765727072696e745f69643002380838013803380440004a10080010001a00200028003000380040005a007a0408002000800100880100900103980100a20106080012001800a80100b20100ba0100c00100c80100d00100e00100e9010000000000000000f201005ace010a13657865637574696f6e5f636f756e745f69647810031800220d616767726567617465645f747322086170705f6e616d65220f657865637574696f6e5f636f756e743001300330093808380238044000400040014a10080010001a00200028003000380040005a007a0408002000800100880100900103980100a20106080012001800a80100b20100ba01286170705f6e616d65204e4f54204c494b4520272420696e7465726e616c25273a3a3a535452494e47c00100c80100d00100e00100e9010000000000000000f201005ad0010a13736572766963655f6c6174656e63795f69647810041800220d616767726567617465645f747322086170705f6e616d65220f736572766963655f6c6174656e637930013003300a3808380238044000400040014a10080010001a00200028003000380040005a00680a7a0408002000800100880100900103980100a20106080012001800a80100b20100ba01286170705f6e616d65204e4f54204c494b4520272420696e7465726e616c25273a3a3a535452494e47c00100c80100d00100e00100e9010000000000000000f201005acc010a116370755f73716c5f6e616e6f735f69647810051800220d616767726567617465645f747322086170705f6e616d65220d6370755f73716c5f6e616e6f7330013003300b3808380238044000400040014a10080010001a00200028003000380040005a00680b7a0408002000800100880100900103980100a20106080012001800a80100b20100ba01286170705f6e616d65204e4f54204c494b4520272420696e7465726e616c25273a3a3a535452494e47c00100c80100d00100e00100e9010000000000000000f201005ad0010a13636f6e74656e74696f6e5f74696d655f69647810061800220d616767726567617465645f747322086170705f6e616d65220f636f6e74656e74696f6e5f74696d6530013003300c3808380238044000400040014a10080010001a00200028003000380040005a00680c7a0408002000800100880100900103980100a20106080012001800a80100b20100ba01286170705f6e616d65204e4f54204c494b4520272420696e7465726e616c25273a3a3a535452494e47c00100c80100d00100e00100e9010000000000000000f201005aee010a22746f74616c5f657374696d617465645f657865637574696f6e5f74696d655f69647810071800220d616767726567617465645f747322086170705f6e616d65221e746f74616c5f657374696d617465645f657865637574696f6e5f74696d6530013003300d3808380238044000400040014a10080010001a00200028003000380040005a00680d7a0408002000800100880100900103980100a20106080012001800a80100b20100ba01286170705f6e616d65204e4f54204c494b4520272420696e7465726e616c25273a3a3a535452494e47c00100c80100d00100e00100e9010000000000000000f201005ac8010a0f7039395f6c6174656e63795f69647810081800220d616767726567617465645f747322086170705f6e616d65220b7039395f6c6174656e637930013003300e3808380238044000400040014a10080010001a00200028003000380040005a00680e7a0408002000800100880100900103980100a20106080012001800a80100b20100ba01286170705f6e616d65204e4f54204c494b4520272420696e7465726e616c25273a3a3a535452494e47c00100c80100d00100e00100e9010000000000000000f2010060096a210a0b0a0561646d696e102018200a0a0a04726f6f741020182012046e6f64651803800101880103980100a201ef010a9701637264625f696e7465726e616c5f616767726567617465645f74735f6170705f6e616d655f66696e6765727072696e745f69645f6e6f64655f69645f73686172645f3820494e2028303a3a3a494e54382c20313a3a3a494e54382c20323a3a3a494e54382c20333a3a3a494e54382c20343a3a3a494e54382c20353a3a3a494e54382c20363a3a3a494e54382c20373a3a3a494e5438291249636865636b5f637264625f696e7465726e616c5f616767726567617465645f74735f6170705f6e616d655f66696e6765727072696e745f69645f6e6f64655f69645f73686172645f3818002808300038014002b201b3020a077072696d61727910001a43637264625f696e7465726e616c5f616767726567617465645f74735f6170705f6e616d655f66696e6765727072696e745f69645f6e6f64655f69645f73686172645f381a0d616767726567617465645f74731a0e66696e6765727072696e745f69641a086170705f6e616d651a076e6f64655f69641a0c6167675f696e74657276616c1a086d657461646174611a0a737461746973746963731a0f657865637574696f6e5f636f756e741a0f736572766963655f6c6174656e63791a0d6370755f73716c5f6e616e6f731a0f636f6e74656e74696f6e5f74696d651a1e746f74616c5f657374696d617465645f657865637574696f6e5f74696d651a0b7039395f6c6174656e6379200820012002200320042005200620072009200a200b200c200d200e2800b80101c20100e80100f2010408001200f801008002009202009a0200b20200b80200c0021dc80200e00200800300880303a80300b00300d00300d80300e00300f80300880400980400a00400a80400"} -,{"key":"8b89b48a89","value":"030a82060a1664617461626173655f726f6c655f73657474696e6773182c200128013a0042300a0b64617461626173655f696410011a0c080c100018003000501a600020003000680070007800800100880100980100422e0a09726f6c655f6e616d6510021a0c08071000180030005019600020003000680070007800800100880100980100423e0a0873657474696e677310031a1d080f100018003000380750f1075a0c080710001800300050196000600020003000680070007800800100880100980100422c0a07726f6c655f696410041a0c080c100018003000501a60002000300068007000780080010088010098010048055295010a077072696d61727910011801220b64617461626173655f69642209726f6c655f6e616d652a0873657474696e67732a07726f6c655f696430013002400040004a10080010001a00200028003000380040005a00700370047a0408002000800100880100900104980101a20106080012001800a80100b20100ba0100c00100c80100d00102e00100e9010000000000000000f201005ab1010a2e64617461626173655f726f6c655f73657474696e67735f64617461626173655f69645f726f6c655f69645f6b657910021801220b64617461626173655f69642207726f6c655f69642a0873657474696e6773300130043802400040004a10080010001a00200028003000380040005a0070037a0408002000800100880100900103980100a20106080012001800a80100b20100ba0100c00100c80100d00101e00100e9010000000000000000f2010060036a250a0d0a0561646d696e10e00318e0030a0c0a04726f6f7410e00318e00312046e6f64651803800101880103980100b201400a077072696d61727910001a0b64617461626173655f69641a09726f6c655f6e616d651a0873657474696e67731a07726f6c655f696420012002200320042800b80101c20100e80100f2010408001200f801008002009202009a0200b20200b80200c0021dc80200e00200800300880303a80300b00300d00300d80300e00300f80300880400980400a00400a80400"} -,{"key":"8b89b58a89","value":"030acc0b0a0c74656e616e745f7573616765182d200128013a00422e0a0974656e616e745f696410011a0c0801104018003000501460002000300068007000780080010088010098010042300a0b696e7374616e63655f696410021a0c0801104018003000501460002000300068007000780080010088010098010042350a106e6578745f696e7374616e63655f696410031a0c0801104018003000501460002000300068007000780080010088010098010042310a0b6c6173745f75706461746510041a0d080510001800300050da0860002000300068007000780080010088010098010042340a0e72755f62757273745f6c696d697410051a0d080210401800300050bd0560002001300068007000780080010088010098010042340a0e72755f726566696c6c5f7261746510061a0d080210401800300050bd0560002001300068007000780080010088010098010042300a0a72755f63757272656e7410071a0d080210401800300050bd0560002001300068007000780080010088010098010042370a1163757272656e745f73686172655f73756d10081a0d080210401800300050bd0560002001300068007000780080010088010098010042360a11746f74616c5f636f6e73756d7074696f6e10091a0c0808100018003000501160002001300068007000780080010088010098010042330a0e696e7374616e63655f6c65617365100a1a0c0808100018003000501160002001300068007000780080010088010098010042310a0c696e7374616e63655f736571100b1a0c0801104018003000501460002001300068007000780080010088010098010042350a0f696e7374616e63655f736861726573100c1a0d080210401800300050bd0560002001300068007000780080010088010098010042320a0d63757272656e745f7261746573100d1a0c08081000180030005011600020013000680070007800800100880100980100422f0a0a6e6578745f7261746573100e1a0c08081000180030005011600020013000680070007800800100880100980100480f52d1020a077072696d61727910011801220974656e616e745f6964220b696e7374616e63655f69642a106e6578745f696e7374616e63655f69642a0b6c6173745f7570646174652a0e72755f62757273745f6c696d69742a0e72755f726566696c6c5f726174652a0a72755f63757272656e742a1163757272656e745f73686172655f73756d2a11746f74616c5f636f6e73756d7074696f6e2a0e696e7374616e63655f6c656173652a0c696e7374616e63655f7365712a0f696e7374616e63655f7368617265732a0d63757272656e745f72617465732a0a6e6578745f726174657330013002400040004a10080010001a00200028003000380040005a007003700470057006700770087009700a700b700c700d700e7a0408002000800100880100900104980101a20106080012001800a80100b20100ba0100c00100c80100d00101e00100e9010000000000000000f2010060026a250a0d0a0561646d696e10e00318e0030a0c0a04726f6f7410e00318e00312046e6f64651803800101880103980100b201fc010a077072696d61727910001a0974656e616e745f69641a0b696e7374616e63655f69641a106e6578745f696e7374616e63655f69641a0b6c6173745f7570646174651a0e72755f62757273745f6c696d69741a0e72755f726566696c6c5f726174651a0a72755f63757272656e741a1163757272656e745f73686172655f73756d1a11746f74616c5f636f6e73756d7074696f6e1a0e696e7374616e63655f6c656173651a0c696e7374616e63655f7365711a0f696e7374616e63655f7368617265731a0d63757272656e745f72617465731a0a6e6578745f7261746573200120022003200420052006200720082009200a200b200c200d200e2800b80101c20100e80100f2010408001200f801008002009202009a0200b20200b80200c0021dc80200e00200800301880302a80300b00300d00300d80300e00300f80300880400980400a00400a80400"} -,{"key":"8b89b68a89","value":"030ad4060a0d73716c5f696e7374616e636573182e200128013a0042270a02696410011a0c0801104018003000501460002000300068007000780080010088010098010042290a046164647210021a0c08071000180030005019600020013000680070007800800100880100980100422f0a0a73657373696f6e5f696410031a0c08081000180030005011600020013000680070007800800100880100980100422e0a086c6f63616c69747910041a0d081210001800300050da1d600020013000680070007800800100880100980100422d0a0873716c5f6164647210051a0c0807100018003000501960002001300068007000780080010088010098010042300a0b637264625f726567696f6e10061a0c0808100018003000501160002000300068007000780080010088010098010042330a0e62696e6172795f76657273696f6e10071a0c0807100018003000501960002001300068007000780080010088010098010042300a0b69735f647261696e696e6710081a0c08001000180030005010600020013000680070007800800100880100980100480952c6010a077072696d61727910021801220b637264625f726567696f6e220269642a04616464722a0a73657373696f6e5f69642a086c6f63616c6974792a0873716c5f616464722a0e62696e6172795f76657273696f6e2a0b69735f647261696e696e6730063001400040004a10080010001a00200028003000380040005a007002700370047005700770087a0408002000800100880100900104980101a20106080012001800a80100b20100ba0100c00100c80100d00101e00100e9010000000000000000f2010060036a250a0d0a0561646d696e10e00318e0030a0c0a04726f6f7410e00318e00312046e6f64651803800101880103980100b201710a077072696d61727910001a0269641a04616464721a0a73657373696f6e5f69641a086c6f63616c6974791a0873716c5f616464721a0b637264625f726567696f6e1a0e62696e6172795f76657273696f6e1a0b69735f647261696e696e67200120022003200420052006200720082800b80101c20100e80100f2010408001200f801008002009202009a0200b20200b80200c0021dc80200e00200800300880302a80300b00300d00300d80300e00300f80300880400980400a00400a80400"} -,{"key":"8b89b78a89","value":"030a94040a137370616e5f636f6e66696775726174696f6e73182f200128013a00422e0a0973746172745f6b657910011a0c08081000180030005011600020003000680070007800800100880100980100422c0a07656e645f6b657910021a0c08081000180030005011600020003000680070007800800100880100980100422b0a06636f6e66696710031a0c0808100018003000501160002000300068007000780080010088010098010048045282010a077072696d61727910011801220973746172745f6b65792a07656e645f6b65792a06636f6e666967300140004a10080010001a00200028003000380040005a00700270037a0408002000800100880100900104980101a20106080012001800a80100b20100ba0100c00100c80100d00101e00100e9010000000000000000f2010060026a250a0d0a0561646d696e10e00318e0030a0c0a04726f6f7410e00318e00312046e6f64651803800101880103980100a2012f0a1373746172745f6b6579203c20656e645f6b6579120c636865636b5f626f756e6473180028012802300038004002b2012f0a077072696d61727910001a0973746172745f6b65791a07656e645f6b65791a06636f6e6669672001200220032800b80101c20100e80100f2010408001200f801008002009202009a0200b20200b80200c0021dc80200e00200800301880303a80300b00300d00300d80300e00300f80300880400980400a00400a80400"} -,{"key":"8b89b88a89","value":"030ae5020a0b726f6c655f69645f7365711830200128013a00422a0a0576616c756510011a0c08011040180030005014600020003000680070007800800100880100980100480052690a077072696d61727910011800220576616c7565300140004a10080010001a00200028003000380040005a007a0408002000800100880100900104980101a20106080012001800a80100b20100ba0100c00100c80100d00100e00100e9010000000000000000f2010060006a250a0d0a0561646d696e10a00618a0060a0c0a04726f6f7410a00618a00612046e6f64651803800100880103980100b201160a077072696d61727910001a0576616c756520012801b80100c20100e2011a0801106418ffffffff0720642800320408001000380142004800e80100f2010408001200f801008002009202009a0200b20200b80200c0021dc80200e00200800300880300a80300b00300d00300d80300e00300f80300880400980400a00400a80400"} -,{"key":"8b89ba8a89","value":"030afc050a0f74656e616e745f73657474696e67731832200128013a00422e0a0974656e616e745f696410011a0c0801104018003000501460002000300068007000780080010088010098010042290a046e616d6510021a0c08071000180030005019600020003000680070007800800100880100980100422a0a0576616c756510031a0c0807100018003000501960002000300068007000780080010088010098010042450a0c6c6173745f7570646174656410041a0d080510001800300050da08600020002a116e6f7728293a3a3a54494d455354414d503000680070007800800100880100980100422f0a0a76616c75655f7479706510051a0c08071000180030005019600020003000680070007800800100880100980100422b0a06726561736f6e10061a0c08071000180030005019600020013000680070007800800100880100980100480752a8010a077072696d61727910011801220974656e616e745f696422046e616d652a0576616c75652a0c6c6173745f757064617465642a0a76616c75655f747970652a06726561736f6e30013002400040004a10080010001a00200028003000380040005a0070037004700570067a0408002000800100880100900104980101a20106080012001800a80100b20100ba0100c00100c80100d00101e00100e9010000000000000000f2010060026a250a0d0a0561646d696e10e00318e0030a0c0a04726f6f7410e00318e00312046e6f64651803800101880103980100b20185010a3966616d5f305f74656e616e745f69645f6e616d655f76616c75655f6c6173745f757064617465645f76616c75655f747970655f726561736f6e10001a0974656e616e745f69641a046e616d651a0576616c75651a0c6c6173745f757064617465641a0a76616c75655f747970651a06726561736f6e2001200220032004200520062800b80101c20100e80100f2010408001200f801008002009202009a0200b20200b80200c0021dc80200e00200800300880302a80300b00300d00300d80300e00300f80300880400980400a00400a80400"} -,{"key":"8b89bb8a89","value":"030aca030a0a7370616e5f636f756e741833200128013a0042340a0973696e676c65746f6e10011a0c08001000180030005010600020002a04747275653000680070007800800100880100980100422f0a0a7370616e5f636f756e7410021a0c080110401800300050146000200030006800700078008001008801009801004803527b0a077072696d61727910011801220973696e676c65746f6e2a0a7370616e5f636f756e74300140004a10080010001a00200028003000380040005a0070027a0408002000800100880100900104980101a20106080012001800a80100b20100ba0100c00100c80100d00101e00100e9010000000000000000f2010060026a250a0d0a0561646d696e10e00318e0030a0c0a04726f6f7410e00318e00312046e6f64651803800101880103980100a201210a0973696e676c65746f6e120a73696e676c655f726f7718002801300038004002b201280a077072696d61727910001a0973696e676c65746f6e1a0a7370616e5f636f756e74200120022802b80101c20100e80100f2010408001200f801008002009202009a0200b20200b80200c0021dc80200e00200800300880303a80300b00300d00300d80300e00300f80300880400980400a00400a80400"} -,{"key":"8b89bc8a89","value":"030af1070a0a70726976696c656765731834200128013a00422d0a08757365726e616d6510011a0c0807100018003000501960002000300068007000780080010088010098010042290a047061746810021a0c0807100018003000501960002000300068007000780080010088010098010042400a0a70726976696c6567657310031a1d080f100018003000380750f1075a0c08071000180030005019600060002000300068007000780080010088010098010042430a0d6772616e745f6f7074696f6e7310041a1d080f100018003000380750f1075a0c080710001800300050196000600020003000680070007800800100880100980100422c0a07757365725f696410051a0c080c100018003000501a600020003000680070007800800100880100980100480652a0010a077072696d617279100118012208757365726e616d652204706174682a0a70726976696c656765732a0d6772616e745f6f7074696f6e732a07757365725f696430013002400040004a10080010001a00200028003000380040005a007003700470057a0408002000800100880100900104980101a20106080012001800a80100b20100ba0100c00100c80100d00103e00100e9010000000000000000f201005aaa010a1b70726976696c656765735f706174685f757365725f69645f6b6579100218012204706174682207757365725f69642a0a70726976696c656765732a0d6772616e745f6f7074696f6e73300230053801400040004a10080010001a00200028003000380040005a00700370047a0408002000800100880100900103980100a20106080012001800a80100b20100ba0100c00100c80100d00101e00100e9010000000000000000f201005aaa010a1c70726976696c656765735f706174685f757365726e616d655f6b6579100318012204706174682208757365726e616d652a0a70726976696c656765732a0d6772616e745f6f7074696f6e7330023001400040004a10080010001a00200028003000380040005a00700370047a0408002000800100880100900103980100a20106080012001800a80100b20100ba0100c00100c80100d00102e00100e9010000000000000000f2010060046a250a0d0a0561646d696e10e00318e0030a0c0a04726f6f7410e00318e00312046e6f64651803800101880103980100b2014b0a077072696d61727910001a08757365726e616d651a04706174681a0a70726976696c656765731a0d6772616e745f6f7074696f6e731a07757365725f6964200120022003200420052800b80101c20100e80100f2010408001200f801008002009202009a0200b20200b80200c0021dc80200e00200800300880304a80300b00300d00300d80300e00300f80300880400980400a00400a80400"} -,{"key":"8b89bd8a89","value":"030ae6060a1465787465726e616c5f636f6e6e656374696f6e731835200128013a0042340a0f636f6e6e656374696f6e5f6e616d6510011a0c0807100018003000501960002000300068007000780080010088010098010042400a076372656174656410021a0d080510001800300050da08600020002a116e6f7728293a3a3a54494d455354414d50300068007000780080010088010098010042400a077570646174656410031a0d080510001800300050da08600020002a116e6f7728293a3a3a54494d455354414d50300068007000780080010088010098010042340a0f636f6e6e656374696f6e5f7479706510041a0c0807100018003000501960002000300068007000780080010088010098010042370a12636f6e6e656374696f6e5f64657461696c7310051a0c08081000180030005011600020003000680070007800800100880100980100422a0a056f776e657210061a0c08071000180030005019600020003000680070007800800100880100980100422d0a086f776e65725f696410071a0c080c100018003000501a600020003000680070007800800100880100980100480852c7010a077072696d61727910011801220f636f6e6e656374696f6e5f6e616d652a07637265617465642a07757064617465642a0f636f6e6e656374696f6e5f747970652a12636f6e6e656374696f6e5f64657461696c732a056f776e65722a086f776e65725f6964300140004a10080010001a00200028003000380040005a007002700370047005700670077a0408002000800100880100900104980101a20106080012001800a80100b20100ba0100c00100c80100d00101e00100e9010000000000000000f2010060026a250a0d0a0561646d696e10e00318e0030a0c0a04726f6f7410e00318e00312046e6f64651803800101880103980100b201740a077072696d61727910001a0f636f6e6e656374696f6e5f6e616d651a07637265617465641a07757064617465641a0f636f6e6e656374696f6e5f747970651a12636f6e6e656374696f6e5f64657461696c731a056f776e65721a086f776e65725f696420012002200320042005200620072800b80101c20100e80100f2010408001200f801008002009202009a0200b20200b80200c0021dc80200e00200800300880302a80300b00300d00300d80300e00300f80300880400980400a00400a80400"} -,{"key":"8b89be8a89","value":"030aac040a086a6f625f696e666f1836200128013a00422b0a066a6f625f696410011a0c08011040180030005014600020003000680070007800800100880100980100422d0a08696e666f5f6b657910021a0c0807100018003000501960002000300068007000780080010088010098010042420a077772697474656e10031a0d080910001800300050a009600020002a136e6f7728293a3a3a54494d455354414d50545a3000680070007800800100880100980100422a0a0576616c756510041a0c080810001800300050116000200130006800700078008001008801009801004805528e010a077072696d6172791001180122066a6f625f69642208696e666f5f6b657922077772697474656e2a0576616c75653001300230034000400040014a10080010001a00200028003000380040005a0070047a0408002000800100880100900104980101a20106080012001800a80100b20100ba0100c00100c80100d00101e00100e9010000000000000000f2010060026a250a0d0a0561646d696e10e00318e0030a0c0a04726f6f7410e00318e00312046e6f64651803800101880103980100b201370a077072696d61727910001a066a6f625f69641a08696e666f5f6b65791a077772697474656e1a0576616c756520012002200320042804b80101c20100e80100f2010408001200f801008002009202009a0200b20200b80200c0021dc80200e00200800300880302a80300b00300d00300d80300e00300f80300880400980400a00400a80400"} -,{"key":"8b89bf8a89","value":"030aac040a167370616e5f73746174735f756e697175655f6b6579731837200128013a00423b0a02696410011a0d080e100018003000508617600020002a1167656e5f72616e646f6d5f7575696428293000680070007800800100880100980100422e0a096b65795f627974657310021a0c08081000180030005011600020013000680070007800800100880100980100480352730a077072696d61727910011801220269642a096b65795f6279746573300140004a10080010001a00200028003000380040005a0070027a0408002000800100880100900104980101a20106080012001800a80100b20100ba0100c00100c80100d00102e00100e9010000000000000000f201005a81010a19756e697175655f6b6579735f6b65795f62797465735f6964781002180122096b65795f62797465733002380140004a10080010001a00200028003000380040005a007a0408002000800100880100900103980100a20106080012001800a80100b20100ba0100c00100c80100d00101e00100e9010000000000000000f2010060036a250a0d0a0561646d696e10e00318e0030a0c0a04726f6f7410e00318e00312046e6f64651803800101880103980100b201200a077072696d61727910001a0269641a096b65795f6279746573200120022802b80101c20100e80100f2010408001200f801008002009202009a0200b20200b80200c0021dc80200e00200800300880303a80300b00300d00300d80300e00300f80300880400980400a00400a80400"} -,{"key":"8b89c08a89","value":"030a8e060a127370616e5f73746174735f6275636b6574731838200128013a00423b0a02696410011a0d080e100018003000508617600020002a1167656e5f72616e646f6d5f7575696428293000680070007800800100880100980100422f0a0973616d706c655f696410021a0d080e10001800300050861760002000300068007000780080010088010098010042320a0c73746172745f6b65795f696410031a0d080e10001800300050861760002000300068007000780080010088010098010042300a0a656e645f6b65795f696410041a0d080e100018003000508617600020003000680070007800800100880100980100422d0a08726571756573747310051a0c080110401800300050146000200030006800700078008001008801009801004806529d010a077072696d61727910011801220269642a0973616d706c655f69642a0c73746172745f6b65795f69642a0a656e645f6b65795f69642a087265717565737473300140004a10080010001a00200028003000380040005a0070027003700470057a0408002000800100880100900104980101a20106080012001800a80100b20100ba0100c00100c80100d00101e00100e9010000000000000000f201005a7d0a156275636b6574735f73616d706c655f69645f69647810021800220973616d706c655f69643002380140004a10080010001a00200028003000380040005a007a0408002000800100880100900103980100a20106080012001800a80100b20100ba0100c00100c80100d00100e00100e9010000000000000000f2010060036a250a0d0a0561646d696e10e00318e0030a0c0a04726f6f7410e00318e00312046e6f64651803800101880103980100b2014a0a077072696d61727910001a0269641a0973616d706c655f69641a0c73746172745f6b65795f69641a0a656e645f6b65795f69641a087265717565737473200120022003200420052800b80101c20100e80100f2010408001200f801008002009202009a0200b20200b80200c0021dc80200e00200800300880302a80300b00300d00300d80300e00300f80300880400980400a00400a80400"} -,{"key":"8b89c18a89","value":"030ac2040a127370616e5f73746174735f73616d706c65731839200128013a00423b0a02696410011a0d080e100018003000508617600020002a1167656e5f72616e646f6d5f757569642829300068007000780080010088010098010042440a0b73616d706c655f74696d6510021a0d080510001800300050da08600020002a116e6f7728293a3a3a54494d455354414d503000680070007800800100880100980100480352750a077072696d61727910011801220269642a0b73616d706c655f74696d65300140004a10080010001a00200028003000380040005a0070027a0408002000800100880100900104980101a20106080012001800a80100b20100ba0100c00100c80100d00102e00100e9010000000000000000f201005a81010a1773616d706c65735f73616d706c655f74696d655f69647810021801220b73616d706c655f74696d653002380140004a10080010001a00200028003000380040005a007a0408002000800100880100900103980100a20106080012001800a80100b20100ba0100c00100c80100d00101e00100e9010000000000000000f2010060036a250a0d0a0561646d696e10e00318e0030a0c0a04726f6f7410e00318e00312046e6f64651803800101880103980100b201220a077072696d61727910001a0269641a0b73616d706c655f74696d65200120022802b80101c20100e80100f2010408001200f801008002009202009a0200b20200b80200c0021dc80200e00200800300880303a80300b00300d00300d80300e00300f80300880400980400a00400a80400"} -,{"key":"8b89c28a89","value":"030ab2030a1c7370616e5f73746174735f74656e616e745f626f756e646172696573183a200128013a00422e0a0974656e616e745f696410011a0c08011040180030005014600020003000680070007800800100880100980100422f0a0a626f756e64617269657310021a0c080810001800300050116000200030006800700078008001008801009801004803527b0a077072696d61727910011801220974656e616e745f69642a0a626f756e646172696573300140004a10080010001a00200028003000380040005a0070027a0408002000800100880100900104980101a20106080012001800a80100b20100ba0100c00100c80100d00101e00100e9010000000000000000f2010060026a250a0d0a0561646d696e10e00318e0030a0c0a04726f6f7410e00318e00312046e6f64651803800101880103980100b201280a077072696d61727910001a0974656e616e745f69641a0a626f756e646172696573200120022802b80101c20100e80100f2010408001200f801008002009202009a0200b20200b80200c0021dc80200e00200800300880302a80300b00300d00300d80300e00300f80300880400980400a00400a80400"} -,{"key":"8b89c38a89","value":"030aba060a0d7461736b5f7061796c6f616473183b200128013a0042270a02696410011a0c0807100018003000501960002000300068007000780080010088010098010042420a076372656174656410021a0d080910001800300050a009600020002a136e6f7728293a3a3a54494d455354414d50545a3000680070007800800100880100980100422a0a056f776e657210031a0c08071000180030005019600020003000680070007800800100880100980100422d0a086f776e65725f696410041a0c080c100018003000501a60002000300068007000780080010088010098010042300a0b6d696e5f76657273696f6e10051a0c0807100018003000501960002000300068007000780080010088010098010042300a0b6465736372697074696f6e10061a0c0807100018003000501960002001300068007000780080010088010098010042290a047479706510071a0c08071000180030005019600020003000680070007800800100880100980100422a0a0576616c756510081a0c08081000180030005011600020003000680070007800800100880100980100480952b5010a077072696d61727910011801220269642a07637265617465642a056f776e65722a086f776e65725f69642a0b6d696e5f76657273696f6e2a0b6465736372697074696f6e2a04747970652a0576616c7565300140004a10080010001a00200028003000380040005a0070027003700470057006700770087a0408002000800100880100900104980101a20106080012001800a80100b20100ba0100c00100c80100d00101e00100e9010000000000000000f2010060026a250a0d0a0561646d696e10e00318e0030a0c0a04726f6f7410e00318e00312046e6f64651803800101880103980100b201620a077072696d61727910001a0269641a07637265617465641a056f776e65721a086f776e65725f69641a0b6d696e5f76657273696f6e1a0b6465736372697074696f6e1a04747970651a0576616c7565200120022003200420052006200720082800b80101c20100e80100f2010408001200f801008002009202009a0200b20200b80200c0021dc80200e00200800300880302a80300b00300d00300d80300e00300f80300880400980400a00400a80400"} -,{"key":"8b89c48a89","value":"030a8b060a0c74656e616e745f7461736b73183c200128013a00422e0a0974656e616e745f696410011a0c08011040180030005014600020003000680070007800800100880100980100422b0a0669737375657210021a0c08071000180030005019600020003000680070007800800100880100980100422c0a077461736b5f696410031a0c0801104018003000501460002000300068007000780080010088010098010042420a076372656174656410041a0d080910001800300050a009600020002a136e6f7728293a3a3a54494d455354414d50545a3000680070007800800100880100980100422f0a0a7061796c6f61645f696410051a0c08071000180030005019600020003000680070007800800100880100980100422a0a056f776e657210061a0c08071000180030005019600020003000680070007800800100880100980100422d0a086f776e65725f696410071a0c080c100018003000501a600020003000680070007800800100880100980100480852b4010a077072696d61727910011801220974656e616e745f6964220669737375657222077461736b5f69642a07637265617465642a0a7061796c6f61645f69642a056f776e65722a086f776e65725f69643001300230034000400040004a10080010001a00200028003000380040005a0070047005700670077a0408002000800100880100900104980101a20106080012001800a80100b20100ba0100c00100c80100d00101e00100e9010000000000000000f2010060026a250a0d0a0561646d696e10e00318e0030a0c0a04726f6f7410e00318e00312046e6f64651803800101880103980100b2015d0a077072696d61727910001a0974656e616e745f69641a066973737565721a077461736b5f69641a07637265617465641a0a7061796c6f61645f69641a056f776e65721a086f776e65725f696420012002200320042005200620072800b80101c20100e80100f2010408001200f801008002009202009a0200b20200b80200c0021dc80200e00200800300880302a80300b00300d00300d80300e00300f80300880400980400a00400a80400"} -,{"key":"8b89c58a89","value":"030a92190a1273746174656d656e745f6163746976697479183d200128013a0042330a0d616767726567617465645f747310011a0d080910001800300050a00960002000300068007000780080010088010098010042330a0e66696e6765727072696e745f696410021a0c08081000180030005011600020003000680070007800800100880100980100423f0a1a7472616e73616374696f6e5f66696e6765727072696e745f696410031a0c08081000180030005011600020003000680070007800800100880100980100422e0a09706c616e5f6861736810041a0c08081000180030005011600020003000680070007800800100880100980100422d0a086170705f6e616d6510051a0c0807100018003000501960002000300068007000780080010088010098010042380a0c6167675f696e74657276616c10061a13080610001800300050a20960006a040800100020003000680070007800800100880100980100422e0a086d6574616461746110071a0d081210001800300050da1d60002000300068007000780080010088010098010042300a0a7374617469737469637310081a0d081210001800300050da1d600020003000680070007800800100880100980100422a0a04706c616e10091a0d081210001800300050da1d600020003000680070007800800100880100980100425f0a15696e6465785f7265636f6d6d656e646174696f6e73100a1a1d080f100018003000380750f1075a0c080710001800300050196000600020002a1241525241595b5d3a3a3a535452494e475b5d300068007000780080010088010098010042340a0f657865637574696f6e5f636f756e74100b1a0c08011040180030005014600020003000680070007800800100880100980100423d0a17657865637574696f6e5f746f74616c5f7365636f6e6473100c1a0d080210401800300050bd0560002000300068007000780080010088010098010042450a1f657865637574696f6e5f746f74616c5f636c75737465725f7365636f6e6473100d1a0d080210401800300050bd0560002000300068007000780080010088010098010042410a1b636f6e74656e74696f6e5f74696d655f6176675f7365636f6e6473100e1a0d080210401800300050bd0560002000300068007000780080010088010098010042370a116370755f73716c5f6176675f6e616e6f73100f1a0d080210401800300050bd0560002000300068007000780080010088010098010042410a1b736572766963655f6c6174656e63795f6176675f7365636f6e647310101a0d080210401800300050bd0560002000300068007000780080010088010098010042410a1b736572766963655f6c6174656e63795f7039395f7365636f6e647310111a0d080210401800300050bd05600020003000680070007800800100880100980100481252d0030a077072696d61727910011801220d616767726567617465645f7473220e66696e6765727072696e745f6964221a7472616e73616374696f6e5f66696e6765727072696e745f69642209706c616e5f6861736822086170705f6e616d652a0c6167675f696e74657276616c2a086d657461646174612a0a737461746973746963732a04706c616e2a15696e6465785f7265636f6d6d656e646174696f6e732a0f657865637574696f6e5f636f756e742a17657865637574696f6e5f746f74616c5f7365636f6e64732a1f657865637574696f6e5f746f74616c5f636c75737465725f7365636f6e64732a1b636f6e74656e74696f6e5f74696d655f6176675f7365636f6e64732a116370755f73716c5f6176675f6e616e6f732a1b736572766963655f6c6174656e63795f6176675f7365636f6e64732a1b736572766963655f6c6174656e63795f7039395f7365636f6e647330013002300330043005400040004000400040004a10080010001a00200028003000380040005a007006700770087009700a700b700c700d700e700f701070117a0408002000800100880100900104980101a20106080012001800a80100b20100ba0100c00100c80100d00101e00100e9010000000000000000f201005aa3010a1266696e6765727072696e745f69645f69647810021800220e66696e6765727072696e745f6964221a7472616e73616374696f6e5f66696e6765727072696e745f696430023003380138043805400040004a10080010001a00200028003000380040005a007a0408002000800100880100900103980100a20106080012001800a80100b20100ba0100c00100c80100d00100e00100e9010000000000000000f201005a9a010a13657865637574696f6e5f636f756e745f69647810031800220d616767726567617465645f7473220f657865637574696f6e5f636f756e743001300b3802380338043805400040014a10080010001a00200028003000380040005a007a0408002000800100880100900103980100a20106080012001800a80100b20100ba0100c00100c80100d00100e00100e9010000000000000000f201005aac010a1b657865637574696f6e5f746f74616c5f7365636f6e64735f69647810041800220d616767726567617465645f74732217657865637574696f6e5f746f74616c5f7365636f6e64733001300c3802380338043805400040014a10080010001a00200028003000380040005a00680c7a0408002000800100880100900103980100a20106080012001800a80100b20100ba0100c00100c80100d00100e00100e9010000000000000000f201005ab4010a1f636f6e74656e74696f6e5f74696d655f6176675f7365636f6e64735f69647810051800220d616767726567617465645f7473221b636f6e74656e74696f6e5f74696d655f6176675f7365636f6e64733001300e3802380338043805400040014a10080010001a00200028003000380040005a00680e7a0408002000800100880100900103980100a20106080012001800a80100b20100ba0100c00100c80100d00100e00100e9010000000000000000f201005aa0010a156370755f73716c5f6176675f6e616e6f735f69647810061800220d616767726567617465645f747322116370755f73716c5f6176675f6e616e6f733001300f3802380338043805400040014a10080010001a00200028003000380040005a00680f7a0408002000800100880100900103980100a20106080012001800a80100b20100ba0100c00100c80100d00100e00100e9010000000000000000f201005ab4010a1f736572766963655f6c6174656e63795f6176675f7365636f6e64735f69647810071800220d616767726567617465645f7473221b736572766963655f6c6174656e63795f6176675f7365636f6e6473300130103802380338043805400040014a10080010001a00200028003000380040005a0068107a0408002000800100880100900103980100a20106080012001800a80100b20100ba0100c00100c80100d00100e00100e9010000000000000000f201005ab4010a1f736572766963655f6c6174656e63795f7039395f7365636f6e64735f69647810081800220d616767726567617465645f7473221b736572766963655f6c6174656e63795f7039395f7365636f6e6473300130113802380338043805400040014a10080010001a00200028003000380040005a0068117a0408002000800100880100900103980100a20106080012001800a80100b20100ba0100c00100c80100d00100e00100e9010000000000000000f2010060096a210a0b0a0561646d696e102018200a0a0a04726f6f741020182012046e6f64651803800101880103980100b201f5020a077072696d61727910001a0d616767726567617465645f74731a0e66696e6765727072696e745f69641a1a7472616e73616374696f6e5f66696e6765727072696e745f69641a09706c616e5f686173681a086170705f6e616d651a0c6167675f696e74657276616c1a086d657461646174611a0a737461746973746963731a04706c616e1a15696e6465785f7265636f6d6d656e646174696f6e731a0f657865637574696f6e5f636f756e741a17657865637574696f6e5f746f74616c5f7365636f6e64731a1f657865637574696f6e5f746f74616c5f636c75737465725f7365636f6e64731a1b636f6e74656e74696f6e5f74696d655f6176675f7365636f6e64731a116370755f73716c5f6176675f6e616e6f731a1b736572766963655f6c6174656e63795f6176675f7365636f6e64731a1b736572766963655f6c6174656e63795f7039395f7365636f6e6473200120022003200420052006200720082009200a200b200c200d200e200f201020112800b80101c20100e80100f2010408001200f801008002009202009a0200b20200b80200c0021dc80200e00200800300880302a80300b00300d00300d80300e00300f80300880400980400a00400a80400"} -,{"key":"8b89c68a89","value":"030afe150a147472616e73616374696f6e5f6163746976697479183e200128013a0042330a0d616767726567617465645f747310011a0d080910001800300050a00960002000300068007000780080010088010098010042330a0e66696e6765727072696e745f696410021a0c08081000180030005011600020003000680070007800800100880100980100422d0a086170705f6e616d6510031a0c0807100018003000501960002000300068007000780080010088010098010042380a0c6167675f696e74657276616c10041a13080610001800300050a20960006a040800100020003000680070007800800100880100980100422e0a086d6574616461746110051a0d081210001800300050da1d60002000300068007000780080010088010098010042300a0a7374617469737469637310061a0d081210001800300050da1d600020003000680070007800800100880100980100422a0a05717565727910071a0c0807100018003000501960002000300068007000780080010088010098010042340a0f657865637574696f6e5f636f756e7410081a0c08011040180030005014600020003000680070007800800100880100980100423d0a17657865637574696f6e5f746f74616c5f7365636f6e647310091a0d080210401800300050bd0560002000300068007000780080010088010098010042450a1f657865637574696f6e5f746f74616c5f636c75737465725f7365636f6e6473100a1a0d080210401800300050bd0560002000300068007000780080010088010098010042410a1b636f6e74656e74696f6e5f74696d655f6176675f7365636f6e6473100b1a0d080210401800300050bd0560002000300068007000780080010088010098010042370a116370755f73716c5f6176675f6e616e6f73100c1a0d080210401800300050bd0560002000300068007000780080010088010098010042410a1b736572766963655f6c6174656e63795f6176675f7365636f6e6473100d1a0d080210401800300050bd0560002000300068007000780080010088010098010042410a1b736572766963655f6c6174656e63795f7039395f7365636f6e6473100e1a0d080210401800300050bd05600020003000680070007800800100880100980100480f5289030a077072696d61727910011801220d616767726567617465645f7473220e66696e6765727072696e745f696422086170705f6e616d652a0c6167675f696e74657276616c2a086d657461646174612a0a737461746973746963732a0571756572792a0f657865637574696f6e5f636f756e742a17657865637574696f6e5f746f74616c5f7365636f6e64732a1f657865637574696f6e5f746f74616c5f636c75737465725f7365636f6e64732a1b636f6e74656e74696f6e5f74696d655f6176675f7365636f6e64732a116370755f73716c5f6176675f6e616e6f732a1b736572766963655f6c6174656e63795f6176675f7365636f6e64732a1b736572766963655f6c6174656e63795f7039395f7365636f6e64733001300230034000400040004a10080010001a00200028003000380040005a00700470057006700770087009700a700b700c700d700e7a0408002000800100880100900104980101a20106080012001800a80100b20100ba0100c00100c80100d00101e00100e9010000000000000000f201005a81010a1266696e6765727072696e745f69645f69647810021800220e66696e6765727072696e745f696430023801380340004a10080010001a00200028003000380040005a007a0408002000800100880100900103980100a20106080012001800a80100b20100ba0100c00100c80100d00100e00100e9010000000000000000f201005a96010a13657865637574696f6e5f636f756e745f69647810031800220d616767726567617465645f7473220f657865637574696f6e5f636f756e743001300838023803400040014a10080010001a00200028003000380040005a007a0408002000800100880100900103980100a20106080012001800a80100b20100ba0100c00100c80100d00100e00100e9010000000000000000f201005aa8010a1b657865637574696f6e5f746f74616c5f7365636f6e64735f69647810041800220d616767726567617465645f74732217657865637574696f6e5f746f74616c5f7365636f6e64733001300938023803400040014a10080010001a00200028003000380040005a0068097a0408002000800100880100900103980100a20106080012001800a80100b20100ba0100c00100c80100d00100e00100e9010000000000000000f201005ab0010a1f636f6e74656e74696f6e5f74696d655f6176675f7365636f6e64735f69647810051800220d616767726567617465645f7473221b636f6e74656e74696f6e5f74696d655f6176675f7365636f6e64733001300b38023803400040014a10080010001a00200028003000380040005a00680b7a0408002000800100880100900103980100a20106080012001800a80100b20100ba0100c00100c80100d00100e00100e9010000000000000000f201005a9c010a156370755f73716c5f6176675f6e616e6f735f69647810061800220d616767726567617465645f747322116370755f73716c5f6176675f6e616e6f733001300c38023803400040014a10080010001a00200028003000380040005a00680c7a0408002000800100880100900103980100a20106080012001800a80100b20100ba0100c00100c80100d00100e00100e9010000000000000000f201005ab0010a1f736572766963655f6c6174656e63795f6176675f7365636f6e64735f69647810071800220d616767726567617465645f7473221b736572766963655f6c6174656e63795f6176675f7365636f6e64733001300d38023803400040014a10080010001a00200028003000380040005a00680d7a0408002000800100880100900103980100a20106080012001800a80100b20100ba0100c00100c80100d00100e00100e9010000000000000000f201005ab0010a1f736572766963655f6c6174656e63795f7039395f7365636f6e64735f69647810081800220d616767726567617465645f7473221b736572766963655f6c6174656e63795f7039395f7365636f6e64733001300e38023803400040014a10080010001a00200028003000380040005a00680e7a0408002000800100880100900103980100a20106080012001800a80100b20100ba0100c00100c80100d00100e00100e9010000000000000000f2010060096a210a0b0a0561646d696e102018200a0a0a04726f6f741020182012046e6f64651803800101880103980100b201b2020a077072696d61727910001a0d616767726567617465645f74731a0e66696e6765727072696e745f69641a086170705f6e616d651a0c6167675f696e74657276616c1a086d657461646174611a0a737461746973746963731a0571756572791a0f657865637574696f6e5f636f756e741a17657865637574696f6e5f746f74616c5f7365636f6e64731a1f657865637574696f6e5f746f74616c5f636c75737465725f7365636f6e64731a1b636f6e74656e74696f6e5f74696d655f6176675f7365636f6e64731a116370755f73716c5f6176675f6e616e6f731a1b736572766963655f6c6174656e63795f6176675f7365636f6e64731a1b736572766963655f6c6174656e63795f7039395f7365636f6e6473200120022003200420052006200720082009200a200b200c200d200e2800b80101c20100e80100f2010408001200f801008002009202009a0200b20200b80200c0021dc80200e00200800300880302a80300b00300d00300d80300e00300f80300880400980400a00400a80400"} -,{"key":"8b89c78a89","value":"030ae7020a0d74656e616e745f69645f736571183f200128013a00422a0a0576616c756510011a0c08011040180030005014600020003000680070007800800100880100980100480052690a077072696d61727910011800220576616c7565300140004a10080010001a00200028003000380040005a007a0408002000800100880100900104980101a20106080012001800a80100b20100ba0100c00100c80100d00100e00100e9010000000000000000f2010060006a210a0b0a0561646d696e102018200a0a0a04726f6f741020182012046e6f64651803800100880103980100b201160a077072696d61727910001a0576616c756520012801b80100c20100e2011e0801100118ffffffffffffffff7f20012800320408001000380142004800e80100f2010408001200f801008002009202009a0200b20200b80200c0021dc80200e00200800300880300a80300b00300d00300d80300e00300f80300880400980400a00400a80400"} -,{"key":"8b89c88a89","value":"030ad10a0a0f6d7663635f737461746973746963731840200128013a0042450a0a637265617465645f617410011a0d080910001800300050a009600020002a136e6f7728293a3a3a54494d455354414d50545a300068007000780080010088010098010042300a0b64617461626173655f696410021a0c08011040180030005014600020003000680070007800800100880100980100422d0a087461626c655f696410031a0c08011040180030005014600020003000680070007800800100880100980100422d0a08696e6465785f696410041a0c0801104018003000501460002000300068007000780080010088010098010042300a0a7374617469737469637310051a0d081210001800300050da1d60002000300068007000780080010088010098010042ab010a3f637264625f696e7465726e616c5f637265617465645f61745f64617461626173655f69645f696e6465785f69645f7461626c655f69645f73686172645f313610061a0c080110201800300050176000200030015a456d6f6428666e763332286d643528637264625f696e7465726e616c2e646174756d735f746f5f627974657328637265617465645f61742929292c2031363a3a3a494e543829680070007800800101880100980100480752e7020a146d7663635f737461746973746963735f706b657910011801223f637264625f696e7465726e616c5f637265617465645f61745f64617461626173655f69645f696e6465785f69645f7461626c655f69645f73686172645f3136220a637265617465645f6174220b64617461626173655f696422087461626c655f69642208696e6465785f69642a0a7374617469737469637330063001300230033004400040004000400040004a10080010001a00200028003000380040005a0070057a0408002000800100880100900104980101a201720801123f637264625f696e7465726e616c5f637265617465645f61745f64617461626173655f69645f696e6465785f69645f7461626c655f69645f73686172645f31361810220a637265617465645f6174220b64617461626173655f69642208696e6465785f696422087461626c655f6964a80100b20100ba0100c00100c80100d00101e00100e9010000000000000000f2010060026a250a0d0a0561646d696e10e00318e0030a0c0a04726f6f7410e00318e00312046e6f64651803800101880103980100a201bd020ae901637264625f696e7465726e616c5f637265617465645f61745f64617461626173655f69645f696e6465785f69645f7461626c655f69645f73686172645f313620494e2028303a3a3a494e54382c20313a3a3a494e54382c20323a3a3a494e54382c20333a3a3a494e54382c20343a3a3a494e54382c20353a3a3a494e54382c20363a3a3a494e54382c20373a3a3a494e54382c20383a3a3a494e54382c20393a3a3a494e54382c2031303a3a3a494e54382c2031313a3a3a494e54382c2031323a3a3a494e54382c2031333a3a3a494e54382c2031343a3a3a494e54382c2031353a3a3a494e5438291245636865636b5f637264625f696e7465726e616c5f637265617465645f61745f64617461626173655f69645f696e6465785f69645f7461626c655f69645f73686172645f313618002806300038014002b201500a077072696d61727910001a0a637265617465645f61741a0b64617461626173655f69641a087461626c655f69641a08696e6465785f69641a0a73746174697374696373200120022003200420052805b80101c20100e80100f2010408001200f801008002009202009a0200b20200b80200c0021dc80200e00200800300880303a80300b00300d00300d80300e00300f80300880400980400a00400a80400"} -,{"key":"8b89c98a89","value":"030acd170a1e7472616e73616374696f6e5f657865637574696f6e5f696e7369676874731841200128013a0042340a0e7472616e73616374696f6e5f696410011a0d080e100018003000508617600020003000680070007800800100880100980100423f0a1a7472616e73616374696f6e5f66696e6765727072696e745f696410021a0c0808100018003000501160002000300068007000780080010088010098010042320a0d71756572795f73756d6d61727910031a0c0807100018003000501960002001300068007000780080010088010098010042310a0c696d706c696369745f74786e10041a0c08001000180030005010600020013000680070007800800100880100980100422f0a0a73657373696f6e5f696410051a0c0807100018003000501960002000300068007000780080010088010098010042300a0a73746172745f74696d6510061a0d080910001800300050a009600020013000680070007800800100880100980100422e0a08656e645f74696d6510071a0d080910001800300050a009600020013000680070007800800100880100980100422e0a09757365725f6e616d6510081a0c08071000180030005019600020013000680070007800800100880100980100422d0a086170705f6e616d6510091a0c0807100018003000501960002001300068007000780080010088010098010042320a0d757365725f7072696f72697479100a1a0c08071000180030005019600020013000680070007800800100880100980100422c0a0772657472696573100b1a0c0801104018003000501460002001300068007000780080010088010098010042360a116c6173745f72657472795f726561736f6e100c1a0c08071000180030005019600020013000680070007800800100880100980100423e0a0870726f626c656d73100d1a1d080f104018003000380150f8075a0c080110401800300050146000600020013000680070007800800100880100980100423c0a06636175736573100e1a1d080f104018003000380150f8075a0c08011040180030005014600060002001300068007000780080010088010098010042480a1273746d745f657865637574696f6e5f696473100f1a1d080f100018003000380750f1075a0c08071000180030005019600060002001300068007000780080010088010098010042320a0d6370755f73716c5f6e616e6f7310101a0c0801104018003000501460002001300068007000780080010088010098010042340a0f6c6173745f6572726f725f636f646510111a0c08071000180030005019600020013000680070007800800100880100980100422b0a0673746174757310121a0c08011040180030005014600020013000680070007800800100880100980100423b0a0f636f6e74656e74696f6e5f74696d6510131a13080610001800300050a20960006a04080010002001300068007000780080010088010098010042350a0f636f6e74656e74696f6e5f696e666f10141a0d081210001800300050da1d600020013000680070007800800100880100980100422d0a0764657461696c7310151a0d081210001800300050da1d60002001300068007000780080010088010098010042420a076372656174656410161a0d080910001800300050a009600020002a136e6f7728293a3a3a54494d455354414d50545a300068007000780080010088010098010042a0010a2a637264625f696e7465726e616c5f656e645f74696d655f73746172745f74696d655f73686172645f313610171a0c080110201800300050176000200030015a4f6d6f6428666e763332286d643528637264625f696e7465726e616c2e646174756d735f746f5f627974657328656e645f74696d652c2073746172745f74696d652929292c2031363a3a3a494e543829680070007800800101880100980100481852b9030a077072696d61727910011801220e7472616e73616374696f6e5f69642a1a7472616e73616374696f6e5f66696e6765727072696e745f69642a0d71756572795f73756d6d6172792a0c696d706c696369745f74786e2a0a73657373696f6e5f69642a0a73746172745f74696d652a08656e645f74696d652a09757365725f6e616d652a086170705f6e616d652a0d757365725f7072696f726974792a07726574726965732a116c6173745f72657472795f726561736f6e2a0870726f626c656d732a066361757365732a1273746d745f657865637574696f6e5f6964732a0d6370755f73716c5f6e616e6f732a0f6c6173745f6572726f725f636f64652a067374617475732a0f636f6e74656e74696f6e5f74696d652a0f636f6e74656e74696f6e5f696e666f2a0764657461696c732a0763726561746564300140004a10080010001a00200028003000380040005a0070027003700470057006700770087009700a700b700c700d700e700f70107011701270137014701570167a0408002000800100880100900104980101a20106080012001800a80100b20100ba0100c00100c80100d00101e00100e9010000000000000000f201005a97010a1e7472616e73616374696f6e5f66696e6765727072696e745f69645f69647810021800221a7472616e73616374696f6e5f66696e6765727072696e745f69643002380140004a10080010001a00200028003000380040005a007a0408002000800100880100900103980100a20106080012001800a80100b20100ba0100c00100c80100d00100e00100e9010000000000000000f201005af5010a0e74696d655f72616e67655f69647810031800222a637264625f696e7465726e616c5f656e645f74696d655f73746172745f74696d655f73686172645f3136220a73746172745f74696d652208656e645f74696d6530173006300738014000400140014a10080010001a00200028003000380040005a007a0408002000800100880100900103980100a201460801122a637264625f696e7465726e616c5f656e645f74696d655f73746172745f74696d655f73686172645f313618102208656e645f74696d65220a73746172745f74696d65a80100b20100ba0100c00100c80100d00100e00100e9010000000000000000f2010060046a250a0d0a0561646d696e10e00318e0030a0c0a04726f6f7410e00318e00312046e6f64651803800101880103980100a20193020ad401637264625f696e7465726e616c5f656e645f74696d655f73746172745f74696d655f73686172645f313620494e2028303a3a3a494e54382c20313a3a3a494e54382c20323a3a3a494e54382c20333a3a3a494e54382c20343a3a3a494e54382c20353a3a3a494e54382c20363a3a3a494e54382c20373a3a3a494e54382c20383a3a3a494e54382c20393a3a3a494e54382c2031303a3a3a494e54382c2031313a3a3a494e54382c2031323a3a3a494e54382c2031333a3a3a494e54382c2031343a3a3a494e54382c2031353a3a3a494e5438291230636865636b5f637264625f696e7465726e616c5f656e645f74696d655f73746172745f74696d655f73686172645f313618002817300038014002b201e6020a077072696d61727910001a0e7472616e73616374696f6e5f69641a1a7472616e73616374696f6e5f66696e6765727072696e745f69641a0d71756572795f73756d6d6172791a0c696d706c696369745f74786e1a0a73657373696f6e5f69641a0a73746172745f74696d651a08656e645f74696d651a09757365725f6e616d651a086170705f6e616d651a0d757365725f7072696f726974791a07726574726965731a116c6173745f72657472795f726561736f6e1a0870726f626c656d731a066361757365731a1273746d745f657865637574696f6e5f6964731a0d6370755f73716c5f6e616e6f731a0f6c6173745f6572726f725f636f64651a067374617475731a0f636f6e74656e74696f6e5f74696d651a0f636f6e74656e74696f6e5f696e666f1a0764657461696c731a0763726561746564200120022003200420052006200720082009200a200b200c200d200e200f20102011201220132014201520162800b80101c20100e80100f2010408001200f801008002009202009a0200b20200b80200c0021dc80200e00200800300880303a80300b00300d00300d80300e00300f80300880400980400a00400a80400"} -,{"key":"8b89ca8a89","value":"030a9e1e0a1c73746174656d656e745f657865637574696f6e5f696e7369676874731842200128013a00422f0a0a73657373696f6e5f696410011a0c0807100018003000501960002000300068007000780080010088010098010042340a0e7472616e73616374696f6e5f696410021a0d080e100018003000508617600020003000680070007800800100880100980100423f0a1a7472616e73616374696f6e5f66696e6765727072696e745f696410031a0c0808100018003000501160002000300068007000780080010088010098010042310a0c73746174656d656e745f696410041a0c08071000180030005019600020003000680070007800800100880100980100423d0a1873746174656d656e745f66696e6765727072696e745f696410051a0c08081000180030005011600020003000680070007800800100880100980100422c0a0770726f626c656d10061a0c08011040180030005014600020013000680070007800800100880100980100423c0a0663617573657310071a1d080f104018003000380150f8075a0c080110401800300050146000600020013000680070007800800100880100980100422a0a05717565727910081a0c08071000180030005019600020013000680070007800800100880100980100422b0a0673746174757310091a0c0801104018003000501460002001300068007000780080010088010098010042300a0a73746172745f74696d65100a1a0d080910001800300050a009600020013000680070007800800100880100980100422e0a08656e645f74696d65100b1a0d080910001800300050a009600020013000680070007800800100880100980100422e0a0966756c6c5f7363616e100c1a0c08001000180030005010600020013000680070007800800100880100980100422e0a09757365725f6e616d65100d1a0c08071000180030005019600020013000680070007800800100880100980100422d0a086170705f6e616d65100e1a0c0807100018003000501960002001300068007000780080010088010098010042320a0d757365725f7072696f72697479100f1a0c0807100018003000501960002001300068007000780080010088010098010042320a0d64617461626173655f6e616d6510101a0c08071000180030005019600020013000680070007800800100880100980100422e0a09706c616e5f6769737410111a0c08071000180030005019600020013000680070007800800100880100980100422c0a077265747269657310121a0c0801104018003000501460002001300068007000780080010088010098010042360a116c6173745f72657472795f726561736f6e10131a0c0807100018003000501960002001300068007000780080010088010098010042480a12657865637574696f6e5f6e6f64655f69647310141a1d080f104018003000380150f8075a0c080110401800300050146000600020013000680070007800800100880100980100424b0a15696e6465785f7265636f6d6d656e646174696f6e7310151a1d080f100018003000380750f1075a0c08071000180030005019600060002001300068007000780080010088010098010042310a0c696d706c696369745f74786e10161a0c0800100018003000501060002001300068007000780080010088010098010042320a0d6370755f73716c5f6e616e6f7310171a0c08011040180030005014600020013000680070007800800100880100980100422f0a0a6572726f725f636f646510181a0c08071000180030005019600020013000680070007800800100880100980100423b0a0f636f6e74656e74696f6e5f74696d6510191a13080610001800300050a20960006a04080010002001300068007000780080010088010098010042350a0f636f6e74656e74696f6e5f696e666f101a1a0d081210001800300050da1d600020013000680070007800800100880100980100422d0a0764657461696c73101b1a0d081210001800300050da1d60002001300068007000780080010088010098010042420a0763726561746564101c1a0d080910001800300050a009600020002a136e6f7728293a3a3a54494d455354414d50545a300068007000780080010088010098010042a0010a2a637264625f696e7465726e616c5f656e645f74696d655f73746172745f74696d655f73686172645f3136101d1a0c080110201800300050176000200030015a4f6d6f6428666e763332286d643528637264625f696e7465726e616c2e646174756d735f746f5f627974657328656e645f74696d652c2073746172745f74696d652929292c2031363a3a3a494e543829680070007800800101880100980100481e529d040a077072696d61727910011801220c73746174656d656e745f6964220e7472616e73616374696f6e5f69642a0a73657373696f6e5f69642a1a7472616e73616374696f6e5f66696e6765727072696e745f69642a1873746174656d656e745f66696e6765727072696e745f69642a0770726f626c656d2a066361757365732a0571756572792a067374617475732a0a73746172745f74696d652a08656e645f74696d652a0966756c6c5f7363616e2a09757365725f6e616d652a086170705f6e616d652a0d757365725f7072696f726974792a0d64617461626173655f6e616d652a09706c616e5f676973742a07726574726965732a116c6173745f72657472795f726561736f6e2a12657865637574696f6e5f6e6f64655f6964732a15696e6465785f7265636f6d6d656e646174696f6e732a0c696d706c696369745f74786e2a0d6370755f73716c5f6e616e6f732a0a6572726f725f636f64652a0f636f6e74656e74696f6e5f74696d652a0f636f6e74656e74696f6e5f696e666f2a0764657461696c732a076372656174656430043002400040004a10080010001a00200028003000380040005a007001700370057006700770087009700a700b700c700d700e700f7010701170127013701470157016701770187019701a701b701c7a0408002000800100880100900104980101a20106080012001800a80100b20100ba0100c00100c80100d00101e00100e9010000000000000000f201005a7f0a127472616e73616374696f6e5f69645f69647810021800220e7472616e73616374696f6e5f69643002380440004a10080010001a00200028003000380040005a007a0408002000800100880100900103980100a20106080012001800a80100b20100ba0100c00100c80100d00100e00100e9010000000000000000f201005ab7010a1e7472616e73616374696f6e5f66696e6765727072696e745f69645f69647810031800221a7472616e73616374696f6e5f66696e6765727072696e745f6964220a73746172745f74696d652208656e645f74696d653003300a300b380438024000400140014a10080010001a00200028003000380040005a007a0408002000800100880100900103980100a20106080012001800a80100b20100ba0100c00100c80100d00100e00100e9010000000000000000f201005ab3010a1c73746174656d656e745f66696e6765727072696e745f69645f69647810041800221873746174656d656e745f66696e6765727072696e745f6964220a73746172745f74696d652208656e645f74696d653005300a300b380438024000400140014a10080010001a00200028003000380040005a007a0408002000800100880100900103980100a20106080012001800a80100b20100ba0100c00100c80100d00100e00100e9010000000000000000f201005af7010a0e74696d655f72616e67655f69647810051800222a637264625f696e7465726e616c5f656e645f74696d655f73746172745f74696d655f73686172645f3136220a73746172745f74696d652208656e645f74696d65301d300a300b380438024000400140014a10080010001a00200028003000380040005a007a0408002000800100880100900103980100a201460801122a637264625f696e7465726e616c5f656e645f74696d655f73746172745f74696d655f73686172645f313618102208656e645f74696d65220a73746172745f74696d65a80100b20100ba0100c00100c80100d00100e00100e9010000000000000000f2010060066a250a0d0a0561646d696e10e00318e0030a0c0a04726f6f7410e00318e00312046e6f64651803800101880103980100a20193020ad401637264625f696e7465726e616c5f656e645f74696d655f73746172745f74696d655f73686172645f313620494e2028303a3a3a494e54382c20313a3a3a494e54382c20323a3a3a494e54382c20333a3a3a494e54382c20343a3a3a494e54382c20353a3a3a494e54382c20363a3a3a494e54382c20373a3a3a494e54382c20383a3a3a494e54382c20393a3a3a494e54382c2031303a3a3a494e54382c2031313a3a3a494e54382c2031323a3a3a494e54382c2031333a3a3a494e54382c2031343a3a3a494e54382c2031353a3a3a494e5438291230636865636b5f637264625f696e7465726e616c5f656e645f74696d655f73746172745f74696d655f73686172645f31361800281d300038014002b201c8030a077072696d61727910001a0a73657373696f6e5f69641a0e7472616e73616374696f6e5f69641a1a7472616e73616374696f6e5f66696e6765727072696e745f69641a0c73746174656d656e745f69641a1873746174656d656e745f66696e6765727072696e745f69641a0770726f626c656d1a066361757365731a0571756572791a067374617475731a0a73746172745f74696d651a08656e645f74696d651a0966756c6c5f7363616e1a09757365725f6e616d651a086170705f6e616d651a0d757365725f7072696f726974791a0d64617461626173655f6e616d651a09706c616e5f676973741a07726574726965731a116c6173745f72657472795f726561736f6e1a12657865637574696f6e5f6e6f64655f6964731a15696e6465785f7265636f6d6d656e646174696f6e731a0c696d706c696369745f74786e1a0d6370755f73716c5f6e616e6f731a0a6572726f725f636f64651a0f636f6e74656e74696f6e5f74696d651a0f636f6e74656e74696f6e5f696e666f1a0764657461696c731a0763726561746564200120022003200420052006200720082009200a200b200c200d200e200f2010201120122013201420152016201720182019201a201b201c2800b80101c20100e80100f2010408001200f801008002009202009a0200b20200b80200c0021dc80200e00200800300880303a80300b00300d00300d80300e00300f80300880400980400a00400a80400"} -,{"key":"8b89cb8a89","value":"030afd1c0a0e7461626c655f6d657461646174611843200128013a00422a0a0564625f696410011a0c08011040180030005014600020003000680070007800800100880100980100422d0a087461626c655f696410021a0c08011040180030005014600020003000680070007800800100880100980100422c0a0764625f6e616d6510031a0c0807100018003000501960002000300068007000780080010088010098010042300a0b736368656d615f6e616d6510041a0c08071000180030005019600020003000680070007800800100880100980100422f0a0a7461626c655f6e616d6510051a0c0807100018003000501960002000300068007000780080010088010098010042320a0d746f74616c5f636f6c756d6e7310061a0c0801104018003000501460002000300068007000780080010088010098010042320a0d746f74616c5f696e646578657310071a0c08011040180030005014600020003000680070007800800100880100980100423f0a0973746f72655f69647310081a1d080f104018003000380150f8075a0c080110401800300050146000600020003000680070007800800100880100980100423b0a167265706c69636174696f6e5f73697a655f627974657310091a0c0801104018003000501460002000300068007000780080010088010098010042310a0c746f74616c5f72616e676573100a1a0c08011040180030005014600020003000680070007800800100880100980100423a0a15746f74616c5f6c6976655f646174615f6279746573100b1a0c0801104018003000501460002000300068007000780080010088010098010042350a10746f74616c5f646174615f6279746573100c1a0c0801104018003000501460002000300068007000780080010088010098010042340a0e706572635f6c6976655f64617461100d1a0d080210401800300050bd0560002000300068007000780080010088010098010042360a116c6173745f7570646174655f6572726f72100e1a0c0807100018003000501960002001300068007000780080010088010098010042470a0c6c6173745f75706461746564100f1a0d080910001800300050a009600020002a136e6f7728293a3a3a54494d455354414d50545a3000680070007800800100880100980100422f0a0a7461626c655f7479706510101a0c08071000180030005019600020003000680070007800800100880100980100422d0a0764657461696c7310111a0d081210001800300050da1d60002000300068007000780080010088010098010042a4010a2c637264625f696e7465726e616c5f6c6173745f757064617465645f7461626c655f69645f73686172645f313610121a0c080110201800300050176000200030015a516d6f6428666e763332286d643528637264625f696e7465726e616c2e646174756d735f746f5f6279746573287461626c655f69642c206c6173745f757064617465642929292c2031363a3a3a494e543829680070007800800101880100980100481352f5020a077072696d61727910011801220564625f696422087461626c655f69642a0764625f6e616d652a0b736368656d615f6e616d652a0a7461626c655f6e616d652a0d746f74616c5f636f6c756d6e732a0d746f74616c5f696e64657865732a0973746f72655f6964732a167265706c69636174696f6e5f73697a655f62797465732a0c746f74616c5f72616e6765732a15746f74616c5f6c6976655f646174615f62797465732a10746f74616c5f646174615f62797465732a0e706572635f6c6976655f646174612a116c6173745f7570646174655f6572726f722a0c6c6173745f757064617465642a0a7461626c655f747970652a0764657461696c7330013002400040004a10080010001a00200028003000380040005a007003700470057006700770087009700a700b700c700d700e700f701070117a0408002000800100880100900104980101a20106080012001800a80100b20100ba0100c00100c80100d00101e00100e9010000000000000000f201005aa6010a237265706c69636174696f6e5f73697a655f62797465735f7461626c655f69645f6964781002180022167265706c69636174696f6e5f73697a655f627974657322087461626c655f6964300930023801400140004a10080010001a00200028003000380040005a007a0408002000800100880100900103980100a20106080012001800a80100b20100ba0100c00100c80100d00100e00100e9010000000000000000f201005a92010a19746f74616c5f72616e6765735f7461626c655f69645f69647810031800220c746f74616c5f72616e67657322087461626c655f6964300a30023801400140004a10080010001a00200028003000380040005a007a0408002000800100880100900103980100a20106080012001800a80100b20100ba0100c00100c80100d00100e00100e9010000000000000000f201005a94010a1a746f74616c5f636f6c756d6e735f7461626c655f69645f69647810041800220d746f74616c5f636f6c756d6e7322087461626c655f6964300630023801400140004a10080010001a00200028003000380040005a007a0408002000800100880100900103980100a20106080012001800a80100b20100ba0100c00100c80100d00100e00100e9010000000000000000f201005a94010a1a746f74616c5f696e64657865735f7461626c655f69645f69647810051800220d746f74616c5f696e646578657322087461626c655f6964300730023801400140004a10080010001a00200028003000380040005a007a0408002000800100880100900103980100a20106080012001800a80100b20100ba0100c00100c80100d00100e00100e9010000000000000000f201005a92010a15706572635f6c6976655f646174615f69645f69647810061800220e706572635f6c6976655f6461746122087461626c655f6964300d30023801400140004a10080010001a00200028003000380040005a00680d7a0408002000800100880100900103980100a20106080012001800a80100b20100ba0100c00100c80100d00100e00100e9010000000000000000f201005aff010a106c6173745f757064617465645f69647810071800222c637264625f696e7465726e616c5f6c6173745f757064617465645f7461626c655f69645f73686172645f3136220c6c6173745f7570646174656422087461626c655f69643012300f300238014000400140004a10080010001a00200028003000380040005a007a0408002000800100880100900103980100a2014a0801122c637264625f696e7465726e616c5f6c6173745f757064617465645f7461626c655f69645f73686172645f31361810220c6c6173745f7570646174656422087461626c655f6964a80100b20100ba0100c00100c80100d00100e00100e9010000000000000000f201005a760a0b64625f6e616d655f67696e10081800220764625f6e616d6530033801380240004a10080010001a00200028003000380040005a007a0408002000800101880100900103980100a20106080012001800a80100b20100ba0100c00100c80100d00100d80101e00100e9010000000000000000f201005a7c0a0e7461626c655f6e616d655f67696e10091800220a7461626c655f6e616d6530053801380240004a10080010001a00200028003000380040005a007a0408002000800101880100900103980100a20106080012001800a80100b20100ba0100c00100c80100d00100d80101e00100e9010000000000000000f201005a7e0a0f736368656d615f6e616d655f67696e100a1800220b736368656d615f6e616d6530043801380240004a10080010001a00200028003000380040005a007a0408002000800101880100900103980100a20106080012001800a80100b20100ba0100c00100c80100d00100d80101e00100e9010000000000000000f201005a7a0a0d73746f72655f6964735f67696e100b1800220973746f72655f69647330083801380240004a10080010001a00200028003000380040005a007a0408002000800101880100900103980100a20106080012001800a80100b20100ba0100c00100c80100d00100d80100e00100e9010000000000000000f20100600c6a250a0d0a0561646d696e10e00318e0030a0c0a04726f6f7410e00318e00312046e6f64651803800101880103980100a20197020ad601637264625f696e7465726e616c5f6c6173745f757064617465645f7461626c655f69645f73686172645f313620494e2028303a3a3a494e54382c20313a3a3a494e54382c20323a3a3a494e54382c20333a3a3a494e54382c20343a3a3a494e54382c20353a3a3a494e54382c20363a3a3a494e54382c20373a3a3a494e54382c20383a3a3a494e54382c20393a3a3a494e54382c2031303a3a3a494e54382c2031313a3a3a494e54382c2031323a3a3a494e54382c2031333a3a3a494e54382c2031343a3a3a494e54382c2031353a3a3a494e5438291232636865636b5f637264625f696e7465726e616c5f6c6173745f757064617465645f7461626c655f69645f73686172645f313618002812300038014002b201a0020a077072696d61727910001a0564625f69641a087461626c655f69641a0764625f6e616d651a0b736368656d615f6e616d651a0a7461626c655f6e616d651a0d746f74616c5f636f6c756d6e731a0d746f74616c5f696e64657865731a0973746f72655f6964731a167265706c69636174696f6e5f73697a655f62797465731a0c746f74616c5f72616e6765731a15746f74616c5f6c6976655f646174615f62797465731a10746f74616c5f646174615f62797465731a0e706572635f6c6976655f646174611a116c6173745f7570646174655f6572726f721a0c6c6173745f757064617465641a0a7461626c655f747970651a0764657461696c73200120022003200420052006200720082009200a200b200c200d200e200f201020112800b80101c20100e80100f2010408001200f801008002009202009a0200b20200b80200c0021dc80200e00200800300880303a80300b00300d00300d80300e00300f80300880400980400a00400a80400"} -,{"key":"8b89cc8a89","value":"030ab9040a0c6a6f625f70726f67726573731844200128013a00422b0a066a6f625f696410011a0c0801104018003000501460002000300068007000780080010088010098010042420a077772697474656e10021a0d080910001800300050a009600020002a136e6f7728293a3a3a54494d455354414d50545a3000680070007800800100880100980100422e0a086672616374696f6e10031a0d080210401800300050bd05600020013000680070007800800100880100980100422e0a087265736f6c76656410041a0d080310001800300050a40d6000200130006800700078008001008801009801004805528f010a077072696d6172791001180122066a6f625f696422077772697474656e2a086672616374696f6e2a087265736f6c76656430013002400040014a10080010001a00200028003000380040005a00700370047a0408002000800100880100900104980101a20106080012001800a80100b20100ba0100c00100c80100d00101e00100e9010000000000000000f2010060026a250a0d0a0561646d696e10e00318e0030a0c0a04726f6f7410e00318e00312046e6f64651803800101880103980100b2013a0a077072696d61727910001a066a6f625f69641a077772697474656e1a086672616374696f6e1a087265736f6c76656420012002200320042800b80101c20100e80100f2010408001200f801008002009202009a0200b20200b80200c0021dc80200e00200800300880302a80300b00300d00300d80300e00300f80300880400980400a00400a80400"} -,{"key":"8b89cd8a89","value":"030ac1040a146a6f625f70726f67726573735f686973746f72791845200128013a00422b0a066a6f625f696410011a0c0801104018003000501460002000300068007000780080010088010098010042420a077772697474656e10021a0d080910001800300050a009600020002a136e6f7728293a3a3a54494d455354414d50545a3000680070007800800100880100980100422e0a086672616374696f6e10031a0d080210401800300050bd05600020013000680070007800800100880100980100422e0a087265736f6c76656410041a0d080310001800300050a40d6000200130006800700078008001008801009801004805528f010a077072696d6172791001180122066a6f625f696422077772697474656e2a086672616374696f6e2a087265736f6c76656430013002400040014a10080010001a00200028003000380040005a00700370047a0408002000800100880100900104980101a20106080012001800a80100b20100ba0100c00100c80100d00101e00100e9010000000000000000f2010060026a250a0d0a0561646d696e10e00318e0030a0c0a04726f6f7410e00318e00312046e6f64651803800101880103980100b2013a0a077072696d61727910001a066a6f625f69641a077772697474656e1a086672616374696f6e1a087265736f6c76656420012002200320042800b80101c20100e80100f2010408001200f801008002009202009a0200b20200b80200c0021dc80200e00200800300880302a80300b00300d00300d80300e00300f80300880400980400a00400a80400"} -,{"key":"8b89ce8a89","value":"030ae8030a0a6a6f625f7374617475731846200128013a00422b0a066a6f625f696410011a0c0801104018003000501460002000300068007000780080010088010098010042420a077772697474656e10021a0d080910001800300050a009600020002a136e6f7728293a3a3a54494d455354414d50545a3000680070007800800100880100980100422b0a0673746174757310031a0c0807100018003000501960002000300068007000780080010088010098010048045281010a077072696d6172791001180122066a6f625f696422077772697474656e2a0673746174757330013002400040014a10080010001a00200028003000380040005a0070037a0408002000800100880100900104980101a20106080012001800a80100b20100ba0100c00100c80100d00101e00100e9010000000000000000f2010060026a250a0d0a0561646d696e10e00318e0030a0c0a04726f6f7410e00318e00312046e6f64651803800101880103980100b2012c0a077072696d61727910001a066a6f625f69641a077772697474656e1a067374617475732001200220032803b80101c20100e80100f2010408001200f801008002009202009a0200b20200b80200c0021dc80200e00200800300880302a80300b00300d00300d80300e00300f80300880400980400a00400a80400"} -,{"key":"8b89cf8a89","value":"030aa9040a0b6a6f625f6d6573736167651847200128013a00422b0a066a6f625f696410011a0c0801104018003000501460002000300068007000780080010088010098010042420a077772697474656e10021a0d080910001800300050a009600020002a136e6f7728293a3a3a54494d455354414d50545a300068007000780080010088010098010042290a046b696e6410031a0c08071000180030005019600020003000680070007800800100880100980100422c0a076d65737361676510041a0c080710001800300050196000200030006800700078008001008801009801004805528c010a077072696d6172791001180122066a6f625f696422077772697474656e22046b696e642a076d6573736167653001300230034000400140004a10080010001a00200028003000380040005a0070047a0408002000800100880100900104980101a20106080012001800a80100b20100ba0100c00100c80100d00101e00100e9010000000000000000f2010060026a250a0d0a0561646d696e10e00318e0030a0c0a04726f6f7410e00318e00312046e6f64651803800101880103980100b201350a077072696d61727910001a066a6f625f69641a077772697474656e1a046b696e641a076d65737361676520012002200320042804b80101c20100e80100f2010408001200f801008002009202009a0200b20200b80200c0021dc80200e00200800300880302a80300b00300d00300d80300e00300f80300880400980400a00400a80400"} -,{"key":"8b89d08a89","value":"030abd060a1570726570617265645f7472616e73616374696f6e731848200128013a00422e0a09676c6f62616c5f696410011a0c0807100018003000501960002000300068007000780080010088010098010042340a0e7472616e73616374696f6e5f696410021a0d080e10001800300050861760002000300068007000780080010088010098010042340a0f7472616e73616374696f6e5f6b657910031a0c0808100018003000501160002001300068007000780080010088010098010042430a08707265706172656410041a0d080910001800300050a009600020002a136e6f7728293a3a3a54494d455354414d50545a3000680070007800800100880100980100422a0a056f776e657210051a0c08071000180030005019600020003000680070007800800100880100980100422d0a08646174616261736510061a0c08071000180030005019600020003000680070007800800100880100980100422e0a0968657572697374696310071a0c08071000180030005019600020013000680070007800800100880100980100480852c0010a077072696d617279100118012209676c6f62616c5f69642a0e7472616e73616374696f6e5f69642a0f7472616e73616374696f6e5f6b65792a0870726570617265642a056f776e65722a0864617461626173652a09686575726973746963300140004a10080010001a00200028003000380040005a007002700370047005700670077a0408002000800100880100900104980101a20106080012001800a80100b20100ba0100c00100c80100d00101e00100e9010000000000000000f2010060026a210a0b0a0561646d696e102018200a0a0a04726f6f741020182012046e6f64651803800101880103980100b2016d0a077072696d61727910001a09676c6f62616c5f69641a0e7472616e73616374696f6e5f69641a0f7472616e73616374696f6e5f6b65791a0870726570617265641a056f776e65721a0864617461626173651a0968657572697374696320012002200320042005200620072800b80101c20100e80100f2010408001200f801008002009202009a0200b20200b80200c0021dc80200e00200800300880302a80300b00300d00300d80300e00300f80300880400980400a00400a80400"} -,{"key":"8c"} -,{"key":"8d"} -,{"key":"8d89888a89","value":"031080808040188080808002220308c0702803500058007801"} -,{"key":"8d89898a89","value":"031080808040188080808002220308c0702805500058007801"} -,{"key":"8d89938a89","value":"03220308d804500158017800"} -,{"key":"8d89988a89","value":"031080808040188080808002220308901c2805500058007801"} -,{"key":"8d89998a89","value":"031080808040188080808002220308c0702805500058007801"} -,{"key":"8d899a8a89","value":"03220308c070500158017800"} -,{"key":"8d899e8a89","value":"031080808040188080808002220308d8042805500058007801"} -,{"key":"8d89a18a89","value":"03220308d804500158017800"} -,{"key":"8d89a38a89","value":"03220308d804500158017800"} -,{"key":"8d89b58a89","value":"03220308a038500158017800"} -,{"key":"8e"} -,{"key":"8f"} -,{"key":"8f898888","value":"01c801"} -,{"key":"90"} -,{"key":"90898988","value":"0a2a160c080110001a0020002a004200160673797374656d13021304"} -,{"key":"908a1273797374656d000188","value":"0389"} -,{"key":"908b8a8988","value":"03"} -,{"key":"91"} -,{"key":"93"} -,{"key":"94"} -,{"key":"95"} -,{"key":"96"} -,{"key":"97"} -,{"key":"98"} -,{"key":"99"} -,{"key":"9a"} -,{"key":"9b"} -,{"key":"9c"} -,{"key":"9d"} -,{"key":"9e"} -,{"key":"9f"} -,{"key":"a0"} -,{"key":"a1"} -,{"key":"a2"} -,{"key":"a3"} -,{"key":"a4"} -,{"key":"a5"} -,{"key":"a6"} -,{"key":"a68988881273797374656d00018c89","value":"0102"} -,{"key":"a6898988127075626c696300018c89","value":"013a"} -,{"key":"a68989a512636f6d6d656e747300018c89","value":"0130"} -,{"key":"a68989a51264617461626173655f726f6c655f73657474696e677300018c89","value":"0158"} -,{"key":"a68989a51264657363726970746f7200018c89","value":"0106"} -,{"key":"a68989a51264657363726970746f725f69645f73657100018c89","value":"010e"} -,{"key":"a68989a5126576656e746c6f6700018c89","value":"0118"} -,{"key":"a68989a51265787465726e616c5f636f6e6e656374696f6e7300018c89","value":"016a"} -,{"key":"a68989a5126a6f625f696e666f00018c89","value":"016c"} -,{"key":"a68989a5126a6f625f6d65737361676500018c89","value":"018e01"} -,{"key":"a68989a5126a6f625f70726f677265737300018c89","value":"018801"} -,{"key":"a68989a5126a6f625f70726f67726573735f686973746f727900018c89","value":"018a01"} -,{"key":"a68989a5126a6f625f73746174757300018c89","value":"018c01"} -,{"key":"a68989a5126a6f627300018c89","value":"011e"} -,{"key":"a68989a5126a6f696e5f746f6b656e7300018c89","value":"0152"} -,{"key":"a68989a5126c6561736500018c89","value":"0116"} -,{"key":"a68989a5126c6f636174696f6e7300018c89","value":"012a"} -,{"key":"a68989a5126d6967726174696f6e7300018c89","value":"0150"} -,{"key":"a68989a5126d7663635f7374617469737469637300018c89","value":"018001"} -,{"key":"a68989a5126e616d65737061636500018c89","value":"013c"} -,{"key":"a68989a51270726570617265645f7472616e73616374696f6e7300018c89","value":"019001"} -,{"key":"a68989a51270726976696c6567657300018c89","value":"0168"} -,{"key":"a68989a51270726f7465637465645f74735f6d65746100018c89","value":"013e"} -,{"key":"a68989a51270726f7465637465645f74735f7265636f72647300018c89","value":"0140"} -,{"key":"a68989a51272616e67656c6f6700018c89","value":"011a"} -,{"key":"a68989a512726567696f6e5f6c6976656e65737300018c89","value":"0112"} -,{"key":"a68989a5127265706c69636174696f6e5f636f6e73747261696e745f737461747300018c89","value":"0132"} -,{"key":"a68989a5127265706c69636174696f6e5f637269746963616c5f6c6f63616c697469657300018c89","value":"0134"} -,{"key":"a68989a5127265706c69636174696f6e5f737461747300018c89","value":"0136"} -,{"key":"a68989a5127265706f7274735f6d65746100018c89","value":"0138"} -,{"key":"a68989a512726f6c655f69645f73657100018c89","value":"0160"} -,{"key":"a68989a512726f6c655f6d656d6265727300018c89","value":"012e"} -,{"key":"a68989a512726f6c655f6f7074696f6e7300018c89","value":"0142"} -,{"key":"a68989a5127363686564756c65645f6a6f627300018c89","value":"014a"} -,{"key":"a68989a51273657474696e677300018c89","value":"010c"} -,{"key":"a68989a5127370616e5f636f6e66696775726174696f6e7300018c89","value":"015e"} -,{"key":"a68989a5127370616e5f636f756e7400018c89","value":"0166"} -,{"key":"a68989a5127370616e5f73746174735f6275636b65747300018c89","value":"0170"} -,{"key":"a68989a5127370616e5f73746174735f73616d706c657300018c89","value":"0172"} -,{"key":"a68989a5127370616e5f73746174735f74656e616e745f626f756e64617269657300018c89","value":"0174"} -,{"key":"a68989a5127370616e5f73746174735f756e697175655f6b65797300018c89","value":"016e"} -,{"key":"a68989a51273716c5f696e7374616e63657300018c89","value":"015c"} -,{"key":"a68989a51273716c6c6976656e65737300018c89","value":"014e"} -,{"key":"a68989a51273746174656d656e745f616374697669747900018c89","value":"017a"} -,{"key":"a68989a51273746174656d656e745f62756e646c655f6368756e6b7300018c89","value":"0144"} -,{"key":"a68989a51273746174656d656e745f646961676e6f737469637300018c89","value":"0148"} -,{"key":"a68989a51273746174656d656e745f646961676e6f73746963735f726571756573747300018c89","value":"0146"} -,{"key":"a68989a51273746174656d656e745f657865637574696f6e5f696e73696768747300018c89","value":"018401"} -,{"key":"a68989a51273746174656d656e745f7374617469737469637300018c89","value":"0154"} -,{"key":"a68989a5127461626c655f6d6574616461746100018c89","value":"018601"} -,{"key":"a68989a5127461626c655f7374617469737469637300018c89","value":"0128"} -,{"key":"a68989a5127461736b5f7061796c6f61647300018c89","value":"0176"} -,{"key":"a68989a51274656e616e745f69645f73657100018c89","value":"017e"} -,{"key":"a68989a51274656e616e745f73657474696e677300018c89","value":"0164"} -,{"key":"a68989a51274656e616e745f7461736b7300018c89","value":"0178"} -,{"key":"a68989a51274656e616e745f757361676500018c89","value":"015a"} -,{"key":"a68989a51274656e616e747300018c89","value":"0110"} -,{"key":"a68989a5127472616e73616374696f6e5f616374697669747900018c89","value":"017c"} -,{"key":"a68989a5127472616e73616374696f6e5f657865637574696f6e5f696e73696768747300018c89","value":"018201"} -,{"key":"a68989a5127472616e73616374696f6e5f7374617469737469637300018c89","value":"0156"} -,{"key":"a68989a512756900018c89","value":"011c"} -,{"key":"a68989a512757365727300018c89","value":"0108"} -,{"key":"a68989a5127765625f73657373696f6e7300018c89","value":"0126"} -,{"key":"a68989a5127a6f6e657300018c89","value":"010a"} -,{"key":"a7"} -,{"key":"a8"} -,{"key":"a9"} -,{"key":"aa"} -,{"key":"ab"} -,{"key":"ac"} -,{"key":"ad"} -,{"key":"ae"} -,{"key":"af"} -,{"key":"b0"} -,{"key":"b1"} -,{"key":"b2"} -,{"key":"b3"} -,{"key":"b4"} -,{"key":"b5"} -,{"key":"b6"} -,{"key":"b7"} -,{"key":"b8"} -,{"key":"b8898888","value":"01c801"} -,{"key":"ba"} -,{"key":"bb"} -,{"key":"bc"} -,{"key":"bd"} -,{"key":"be"} -,{"key":"bf"} -,{"key":"c0"} -,{"key":"c1"} -,{"key":"c2"} -,{"key":"c3"} -,{"key":"c4"} -,{"key":"c5"} -,{"key":"c6"} -,{"key":"c7"} -,{"key":"c7898888","value":"0102"} -,{"key":"c8"} -,{"key":"c9"} -,{"key":"ca"} -,{"key":"cb"} -,{"key":"cc"} -,{"key":"cd"} -,{"key":"ce"} -,{"key":"cf"} -,{"key":"d0"} -] \ No newline at end of file diff --git a/pkg/sql/catalog/bootstrap/data/25_2_system.sha256 b/pkg/sql/catalog/bootstrap/data/25_2_system.sha256 deleted file mode 100644 index 836f0aa4a774..000000000000 --- a/pkg/sql/catalog/bootstrap/data/25_2_system.sha256 +++ /dev/null @@ -1 +0,0 @@ -a50e0fa1962ac4cdf1a42d53656c1c6f651c32eec257b2c8640c3e750edeaf79 \ No newline at end of file diff --git a/pkg/sql/catalog/bootstrap/data/25_2_tenant.keys b/pkg/sql/catalog/bootstrap/data/25_2_tenant.keys deleted file mode 100644 index bebd66589cdb..000000000000 --- a/pkg/sql/catalog/bootstrap/data/25_2_tenant.keys +++ /dev/null @@ -1,136 +0,0 @@ -[{"key":""} -,{"key":"8b89898a89","value":"0312450a0673797374656d10011a250a0d0a0561646d696e1080101880100a0c0a04726f6f7410801018801012046e6f646518032200280140004a006a0808191002180020007000"} -,{"key":"8b898b8a89","value":"030aa0030a0a64657363726970746f721803200128013a0042270a02696410011a0c08011040180030005014600020003000680070007800800100880100980100422f0a0a64657363726970746f7210021a0c08081000180030005011600020013000680070007800800100880100980100480352740a077072696d61727910011801220269642a0a64657363726970746f72300140004a10080010001a00200028003000380040005a0070027a0408002000800100880100900104980101a20106080012001800a80100b20100ba0100c00100c80100d00101e00100e9010000000000000000f2010060026a210a0b0a0561646d696e102018200a0a0a04726f6f741020182012046e6f64651803800101880103980100b201130a077072696d61727910001a02696420012800b201240a1066616d5f325f64657363726970746f7210021a0a64657363726970746f7220022802b80103c20100e80100f2010408001200f801008002009202009a0200b20200b80200c0021dc80200e00200800300880302a80300b00300d00300d80300e00300f80300880400980400a00400a80400"} -,{"key":"8b898c8a89","value":"030adc050a0575736572731804200128013a00422d0a08757365726e616d6510011a0c0807100018003000501960002000300068007000780080010088010098010042330a0e68617368656450617373776f726410021a0c0808100018003000501160002001300068007000780080010088010098010042320a066973526f6c6510031a0c08001000180030005010600020002a0566616c73653000680070007800800100880100980100422c0a07757365725f696410041a0c080c100018003000501a60002000300068007000780080010088010098010048055293010a077072696d617279100118012208757365726e616d652a0e68617368656450617373776f72642a066973526f6c652a07757365725f6964300140004a10080010001a00200028003000380040005a007002700370047a0408002000800100880100900104980101a20106080012001800a80100b20100ba0100c00100c80100d00102e00100e9010000000000000000f201005a770a1175736572735f757365725f69645f696478100218012207757365725f69643004380140004a10080010001a00200028003000380040005a007a0408002000800100880100900103980100a20106080012001800a80100b20100ba0100c00100c80100d00101e00100e9010000000000000000f2010060036a250a0d0a0561646d696e10e00318e0030a0c0a04726f6f7410e00318e00312046e6f64651803800101880103980100b201240a077072696d61727910001a08757365726e616d651a07757365725f6964200120042804b2012c0a1466616d5f325f68617368656450617373776f726410021a0e68617368656450617373776f726420022802b2011c0a0c66616d5f335f6973526f6c6510031a066973526f6c6520032803b80104c20100e80100f2010408001200f801008002009202009a0200b20200b80200c0021dc80200e00200800300880303a80300b00300d00300d80300e00300f80300880400980400a00400a80400"} -,{"key":"8b898d8a89","value":"030a8f030a057a6f6e65731805200128013a0042270a02696410011a0c08011040180030005014600020003000680070007800800100880100980100422b0a06636f6e66696710021a0c08081000180030005011600020013000680070007800800100880100980100480352700a077072696d61727910011801220269642a06636f6e666967300140004a10080010001a00200028003000380040005a0070027a0408002000800100880100900104980101a20106080012001800a80100b20100ba0100c00100c80100d00101e00100e9010000000000000000f2010060026a250a0d0a0561646d696e10e00318e0030a0c0a04726f6f7410e00318e00312046e6f64651803800101880103980100b201130a077072696d61727910001a02696420012800b2011c0a0c66616d5f325f636f6e66696710021a06636f6e66696720022802b80103c20100e80100f2010408001200f801008002009202009a0200b20200b80200c0021dc80200e00200800300880302a80300b00300d00300d80300e00300f80300880400980400a00400a80400"} -,{"key":"8b898e8a89","value":"030ace040a0873657474696e67731806200128013a0042290a046e616d6510011a0c08071000180030005019600020003000680070007800800100880100980100422a0a0576616c756510021a0c0807100018003000501960002000300068007000780080010088010098010042440a0b6c6173745570646174656410031a0d080510001800300050da08600020002a116e6f7728293a3a3a54494d455354414d503000680070007800800100880100980100422e0a0976616c75655479706510041a0c080710001800300050196000200130006800700078008001008801009801004805528d010a077072696d6172791001180122046e616d652a0576616c75652a0b6c617374557064617465642a0976616c756554797065300140004a10080010001a00200028003000380040005a007002700370047a0408002000800100880100900104980101a20106080012001800a80100b20100ba0100c00100c80100d00101e00100e9010000000000000000f2010060026a250a0d0a0561646d696e10e00318e0030a0c0a04726f6f7410e00318e00312046e6f64651803800101880103980100b201590a2666616d5f305f6e616d655f76616c75655f6c617374557064617465645f76616c75655479706510001a046e616d651a0576616c75651a0b6c617374557064617465641a0976616c75655479706520012002200320042800b80101c20100e80100f2010408001200f801008002009202009a0200b20200b80200c0021dc80200e00200800300880302a80300b00300d00300d80300e00300f80300880400980400a00400a80400"} -,{"key":"8b898f8a89","value":"030aeb020a1164657363726970746f725f69645f7365711807200128013a00422a0a0576616c756510011a0c08011040180030005014600020003000680070007800800100880100980100480052690a077072696d61727910011800220576616c7565300140004a10080010001a00200028003000380040005a007a0408002000800100880100900104980101a20106080012001800a80100b20100ba0100c00100c80100d00100e00100e9010000000000000000f2010060006a210a0b0a0561646d696e102018200a0a0a04726f6f741020182012046e6f64651803800100880103980100b201160a077072696d61727910001a0576616c756520012801b80100c20100e2011e0801100118ffffffffffffffff7f20012800320408001000380142004800e80100f2010408001200f801008002009202009a0200b20200b80200c0021dc80200e00200800300880300a80300b00300d00300d80300e00300f80300880400980400a00400a80400"} -,{"key":"8b89908a89","value":"030a90070a0774656e616e74731808200128013a0042270a02696410011a0c0801104018003000501460002000300068007000780080010088010098010042310a0661637469766510021a0c08001000180030005010600020002a0474727565300168007000780080010088010098010042290a04696e666f10031a0c0808100018003000501160002001300068007000780080010088010098010042290a046e616d6510041a0c08071000180030005019600020013000680070007800800100880100980100422f0a0a646174615f737461746510051a0c0801104018003000501460002001300068007000780080010088010098010042310a0c736572766963655f6d6f646510061a0c080110401800300050146000200130006800700078008001008801009801004807529e010a077072696d61727910011801220269642a066163746976652a04696e666f2a046e616d652a0a646174615f73746174652a0c736572766963655f6d6f6465300140004a10080010001a00200028003000380040005a00700270037004700570067a0408002000800100880100900104980101a20106080012001800a80100b20100ba0100c00100c80100d00102e00100e9010000000000000000f201005a730a1074656e616e74735f6e616d655f6964781002180122046e616d653004380140004a10080010001a00200028003000380040005a007a0408002000800100880100900103980100a20106080012001800a80100b20100ba0100c00100c80100d00101e00100e9010000000000000000f201005a83010a1874656e616e74735f736572766963655f6d6f64655f69647810031800220c736572766963655f6d6f64653006380140004a10080010001a00200028003000380040005a007a0408002000800100880100900103980100a20106080012001800a80100b20100ba0100c00100c80100d00100e00100e9010000000000000000f2010060046a210a0b0a0561646d696e102018200a0a0a04726f6f741020182012046e6f64651803800101880103980100b2014b0a077072696d61727910001a0269641a066163746976651a04696e666f1a046e616d651a0a646174615f73746174651a0c736572766963655f6d6f64652001200220032004200520062800b80101c20100e80100f2010408001200f801008002009202009a0200b20200b80200c0021dc80200e00200800300880303a80300b00300d00300d80300e00300f80300880400980400a00400a80400"} -,{"key":"8b89918a89","value":"030ac6030a0f726567696f6e5f6c6976656e6573731809200128013a0042300a0b637264625f726567696f6e10011a0c0808100018003000501160002000300068007000780080010088010098010042340a0e756e617661696c61626c655f617410021a0d080510001800300050da086000200130006800700078008001008801009801004803528e010a14726567696f6e5f6c6976656e6573735f706b657910011801220b637264625f726567696f6e2a0e756e617661696c61626c655f6174300140004a10080010001a00200028003000380040005a0070027a0408002000800100880100900104980101a20106080012001800a80100b20100ba0100c00100c80100d00101e00100e9010000000000000000f2010060026a250a0d0a0561646d696e10e00318e0030a0c0a04726f6f7410e00318e00312046e6f64651803800101880103980100b2012e0a077072696d61727910001a0b637264625f726567696f6e1a0e756e617661696c61626c655f6174200120022802b80101c20100e80100f2010408001200f801008002009202009a0200b20200b80200c0021dc80200e00200800300880302a80300b00300d00300d80300e00300f80300880400980400a00400a80400"} -,{"key":"8b89938a89","value":"030a8c050a056c65617365180b200128013a00422c0a07646573635f696410011a0c08011040180030005014600020003000680070007800800100880100980100422c0a0776657273696f6e10021a0c0801104018003000501460002000300068007000780080010088010098010042340a0f73716c5f696e7374616e63655f696410031a0c08011040180030005014600020003000680070007800800100880100980100422f0a0a73657373696f6e5f696410041a0c0808100018003000501160002000300068007000780080010088010098010042300a0b637264625f726567696f6e10051a0c08081000180030005011600020003000680070007800800100880100980100480652ac010a077072696d61727910031801220b637264625f726567696f6e2207646573635f6964220776657273696f6e220a73657373696f6e5f69642a0f73716c5f696e7374616e63655f6964300530013002300440004000400040004a10080010001a00200028003000380040005a0070037a0408002000800100880100900104980101a20106080012001800a80100b20100ba0100c00100c80100d00101e00100e9010000000000000000f2010060046a250a0d0a0561646d696e10e00318e0030a0c0a04726f6f7410e00318e00312046e6f64651803800101880103980100b201530a077072696d61727910001a07646573635f69641a0776657273696f6e1a0f73716c5f696e7374616e63655f69641a0a73657373696f6e5f69641a0b637264625f726567696f6e200120022003200420052803b80101c20100e80100f2010408001200f801008002009202009a0200b20200b80200c0021dc80200e00200800301880302a80300b00300d00300d80300e00300f80300880400980400a00400a80400"} -,{"key":"8b89948a89","value":"030a9f060a086576656e746c6f67180c200128013a00422f0a0974696d657374616d7010011a0d080510001800300050da08600020003000680070007800800100880100980100422e0a096576656e745479706510021a0c08071000180030005019600020003000680070007800800100880100980100422d0a08746172676574494410031a0c0801104018003000501460002000300068007000780080010088010098010042300a0b7265706f7274696e67494410041a0c0801104018003000501460002000300068007000780080010088010098010042290a04696e666f10051a0c0807100018003000501960002001300068007000780080010088010098010042380a08756e69717565494410061a0c08081000180030005011600020002a09757569645f763428293000680070007800800100880100980100480752ab010a077072696d61727910011801220974696d657374616d702208756e6971756549442a096576656e74547970652a0874617267657449442a0b7265706f7274696e6749442a04696e666f30013006400040004a10080010001a00200028003000380040005a0070027003700470057a0408002000800100880100900104980101a20106080012001800a80100b20100ba0100c00100c80100d00101e00100e9010000000000000000f2010060026a250a0d0a0561646d696e10e00318e0030a0c0a04726f6f7410e00318e00312046e6f64651803800101880103980100b201260a077072696d61727910001a0974696d657374616d701a08756e697175654944200120062800b201220a0f66616d5f325f6576656e745479706510021a096576656e745479706520022802b201200a0e66616d5f335f746172676574494410031a08746172676574494420032803b201260a1166616d5f345f7265706f7274696e67494410041a0b7265706f7274696e67494420042804b201180a0a66616d5f355f696e666f10051a04696e666f20052805b80106c20100e80100f2010408001200f801008002009202009a0200b20200b80200c0021dc80200e00200800300880302a80300b00300d00300d80300e00300f80300880400980400a00400a80400"} -,{"key":"8b89958a89","value":"030afe060a0872616e67656c6f67180d200128013a00422f0a0974696d657374616d7010011a0d080510001800300050da08600020003000680070007800800100880100980100422c0a0772616e6765494410021a0c08011040180030005014600020003000680070007800800100880100980100422c0a0773746f7265494410031a0c08011040180030005014600020003000680070007800800100880100980100422e0a096576656e745479706510041a0c0807100018003000501960002000300068007000780080010088010098010042310a0c6f7468657252616e6765494410051a0c0801104018003000501460002001300068007000780080010088010098010042290a04696e666f10061a0c08071000180030005019600020013000680070007800800100880100980100423d0a08756e69717565494410071a0c08011040180030005014600020002a0e756e697175655f726f77696428293000680070007800800100880100980100480852b6010a077072696d61727910011801220974696d657374616d702208756e6971756549442a0772616e676549442a0773746f726549442a096576656e74547970652a0c6f7468657252616e676549442a04696e666f30013007400040004a10080010001a00200028003000380040005a00700270037004700570067a0408002000800100880100900104980101a20106080012001800a80100b20100ba0100c00100c80100d00101e00100e9010000000000000000f2010060026a250a0d0a0561646d696e10e00318e0030a0c0a04726f6f7410e00318e00312046e6f64651803800101880103980100b201260a077072696d61727910001a0974696d657374616d701a08756e697175654944200120072800b2011e0a0d66616d5f325f72616e6765494410021a0772616e6765494420022802b2011e0a0d66616d5f335f73746f7265494410031a0773746f7265494420032803b201220a0f66616d5f345f6576656e745479706510041a096576656e745479706520042804b201280a1266616d5f355f6f7468657252616e6765494410051a0c6f7468657252616e6765494420052805b201180a0a66616d5f365f696e666f10061a04696e666f20062806b80107c20100e80100f2010408001200f801008002009202009a0200b20200b80200c0021dc80200e00200800300880302a80300b00300d00300d80300e00300f80300880400980400a00400a80400"} -,{"key":"8b89968a89","value":"030af6030a027569180e200128013a0042280a036b657910011a0c08071000180030005019600020003000680070007800800100880100980100422a0a0576616c756510021a0c0808100018003000501160002001300068007000780080010088010098010042310a0b6c6173745570646174656410031a0d080510001800300050da086000200030006800700078008001008801009801004804527f0a077072696d6172791001180122036b65792a0576616c75652a0b6c61737455706461746564300140004a10080010001a00200028003000380040005a00700270037a0408002000800100880100900104980101a20106080012001800a80100b20100ba0100c00100c80100d00101e00100e9010000000000000000f2010060026a250a0d0a0561646d696e10e00318e0030a0c0a04726f6f7410e00318e00312046e6f64651803800101880103980100b201140a077072696d61727910001a036b657920012800b2011a0a0b66616d5f325f76616c756510021a0576616c756520022802b201260a1166616d5f335f6c6173745570646174656410031a0b6c6173745570646174656420032803b80104c20100e80100f2010408001200f801008002009202009a0200b20200b80200c0021dc80200e00200800300880302a80300b00300d00300d80300e00300f80300880400980400a00400a80400"} -,{"key":"8b89978a89","value":"030ac4120a046a6f6273180f200128013a0042370a02696410011a0c08011040180030005014600020002a0e756e697175655f726f77696428293000680070007800800100880100980100422b0a0673746174757310021a0c0807100018003000501960002000300068007000780080010088010098010042400a076372656174656410031a0d080510001800300050da08600020002a116e6f7728293a3a3a54494d455354414d50300068007000780080010088010098010042340a0f64726f707065645f7061796c6f616410041a0c0808100018003000501160002001300168007000780080010088010098010042350a1064726f707065645f70726f677265737310051a0c0808100018003000501160002001300168007000780080010088010098010042340a0f637265617465645f62795f7479706510061a0c0807100018003000501960002001300068007000780080010088010098010042320a0d637265617465645f62795f696410071a0c0801104018003000501460002001300068007000780080010088010098010042350a10636c61696d5f73657373696f6e5f696410081a0c0808100018003000501160002001300068007000780080010088010098010042360a11636c61696d5f696e7374616e63655f696410091a0c08011040180030005014600020013000680070007800800100880100980100422d0a086e756d5f72756e73100a1a0c08011040180030005014600020013000680070007800800100880100980100422e0a086c6173745f72756e100b1a0d080510001800300050da08600020013000680070007800800100880100980100422d0a086a6f625f74797065100c1a0c08071000180030005019600020013000680070007800800100880100980100422a0a056f776e6572100d1a0c0807100018003000501960002001300068007000780080010088010098010042300a0b6465736372697074696f6e100e1a0c08071000180030005019600020013000680070007800800100880100980100422e0a096572726f725f6d7367100f1a0c08071000180030005019600020013000680070007800800100880100980100422e0a0866696e697368656410101a0d080910001800300050a009600020013000680070007800800100880100980100481152c4020a077072696d61727910011801220269642a067374617475732a07637265617465642a0f64726f707065645f7061796c6f61642a1064726f707065645f70726f67726573732a0f637265617465645f62795f747970652a0d637265617465645f62795f69642a10636c61696d5f73657373696f6e5f69642a11636c61696d5f696e7374616e63655f69642a086e756d5f72756e732a086c6173745f72756e2a086a6f625f747970652a056f776e65722a0b6465736372697074696f6e2a096572726f725f6d73672a0866696e6973686564300140004a10080010001a00200028003000380040005a0070027003700470057006700770087009700a700b700c700d700e700f70107a0408002000800100880100900104980101a20106080012001800a80100b20100ba0100c00100c80100d00101e00100e9010000000000000000f201005a89010a176a6f62735f7374617475735f637265617465645f696478100218002206737461747573220763726561746564300230033801400040004a10080010001a00200028003000380040005a007a0408002000800100880100900103980100a20106080012001800a80100b20100ba0100c00100c80100d00100e00100e9010000000000000000f201005ab1010a266a6f62735f637265617465645f62795f747970655f637265617465645f62795f69645f69647810031800220f637265617465645f62795f74797065220d637265617465645f62795f69642a06737461747573300630073801400040004a10080010001a00200028003000380040005a0070027a0408002000800100880100900103980100a20106080012001800a80100b20100ba0100c00100c80100d00100e00100e9010000000000000000f201005ac9020a126a6f62735f72756e5f73746174735f696478100418002210636c61696d5f73657373696f6e5f696422067374617475732207637265617465642a086c6173745f72756e2a086e756d5f72756e732a11636c61696d5f696e7374616e63655f696430083002300338014000400040004a10080010001a00200028003000380040005a00700b700a70097a0408002000800100880100900103980100a20106080012001800a80100b20100ba01810173746174757320494e20282772756e6e696e67273a3a3a535452494e472c2027726576657274696e67273a3a3a535452494e472c202770656e64696e67273a3a3a535452494e472c202770617573652d726571756573746564273a3a3a535452494e472c202763616e63656c2d726571756573746564273a3a3a535452494e4729c00100c80100d00100e00100e9010000000000000000f201005a780a116a6f62735f6a6f625f747970655f6964781005180022086a6f625f74797065300c380140004a10080010001a00200028003000380040005a007a0408002000800100880100900103980100a20106080012001800a80100b20100ba0100c00100c80100d00100e00100e9010000000000000000f2010060066a250a0d0a0561646d696e10e00318e0030a0c0a04726f6f7410e00318e00312046e6f64651803800101880103980100b201b4010a1f66616d5f305f69645f7374617475735f637265617465645f7061796c6f616410001a0269641a067374617475731a07637265617465641a0f64726f707065645f7061796c6f61641a0f637265617465645f62795f747970651a0d637265617465645f62795f69641a086a6f625f747970651a056f776e65721a0b6465736372697074696f6e1a096572726f725f6d73671a0866696e6973686564200120022003200420062007200c200d200e200f20102800b201220a0870726f677265737310011a1064726f707065645f70726f677265737320052805b2014c0a05636c61696d10021a10636c61696d5f73657373696f6e5f69641a11636c61696d5f696e7374616e63655f69641a086e756d5f72756e731a086c6173745f72756e20082009200a200b2800b80103c20100e80100f2010408001200f801008002009202009a0200b20200b80200c0021dc80200e00200800300880302a80300b00300d00300d80300e00300f80300880400980400a00400a80400"} -,{"key":"8b899b8a89","value":"030aaf0c0a0c7765625f73657373696f6e731813200128013a0042370a02696410011a0c08011040180030005014600020002a0e756e697175655f726f7769642829300068007000780080010088010098010042310a0c68617368656453656372657410021a0c08081000180030005011600020003000680070007800800100880100980100422d0a08757365726e616d6510031a0c0807100018003000501960002000300068007000780080010088010098010042420a0963726561746564417410041a0d080510001800300050da08600020002a116e6f7728293a3a3a54494d455354414d503000680070007800800100880100980100422f0a0965787069726573417410051a0d080510001800300050da08600020003000680070007800800100880100980100422f0a097265766f6b6564417410061a0d080510001800300050da0860002001300068007000780080010088010098010042430a0a6c61737455736564417410071a0d080510001800300050da08600020002a116e6f7728293a3a3a54494d455354414d503000680070007800800100880100980100422e0a096175646974496e666f10081a0c08071000180030005019600020013000680070007800800100880100980100422c0a07757365725f696410091a0c080c100018003000501a600020003000680070007800800100880100980100480a52cf010a077072696d61727910011801220269642a0c6861736865645365637265742a08757365726e616d652a096372656174656441742a096578706972657341742a097265766f6b656441742a0a6c6173745573656441742a096175646974496e666f2a07757365725f6964300140004a10080010001a00200028003000380040005a00700270037004700570067007700870097a0408002000800100880100900104980101a20106080012001800a80100b20100ba0100c00100c80100d00101e00100e9010000000000000000f201005a82010a1a7765625f73657373696f6e735f6578706972657341745f6964781002180022096578706972657341743005380140004a10080010001a00200028003000380040005a007a0408002000800100880100900103980100a20106080012001800a80100b20100ba0100c00100c80100d00100e00100e9010000000000000000f201005a82010a1a7765625f73657373696f6e735f6372656174656441745f6964781003180022096372656174656441743004380140004a10080010001a00200028003000380040005a007a0408002000800100880100900103980100a20106080012001800a80100b20100ba0100c00100c80100d00100e00100e9010000000000000000f201005a82010a1a7765625f73657373696f6e735f7265766f6b656441745f6964781004180022097265766f6b656441743006380140004a10080010001a00200028003000380040005a007a0408002000800100880100900103980100a20106080012001800a80100b20100ba0100c00100c80100d00100e00100e9010000000000000000f201005a84010a1b7765625f73657373696f6e735f6c6173745573656441745f69647810051800220a6c6173745573656441743007380140004a10080010001a00200028003000380040005a007a0408002000800100880100900103980100a20106080012001800a80100b20100ba0100c00100c80100d00100e00100e9010000000000000000f2010060066a250a0d0a0561646d696e10e00318e0030a0c0a04726f6f7410e00318e00312046e6f64651803800101880103980100b201c6010a5166616d5f305f69645f6861736865645365637265745f757365726e616d655f6372656174656441745f6578706972657341745f7265766f6b656441745f6c6173745573656441745f6175646974496e666f10001a0269641a0c6861736865645365637265741a08757365726e616d651a096372656174656441741a096578706972657341741a097265766f6b656441741a0a6c6173745573656441741a096175646974496e666f1a07757365725f69642001200220032004200520062007200820092800b80101c20100e80100f2010408001200f801008002009202009a0200b20200b80200c0021dc80200e00200800300880302a80300b00300d00300d80300e00300f80300880400980400a00400a80400"} -,{"key":"8b899c8a89","value":"030abb0a0a107461626c655f737461746973746963731814200128013a00422c0a077461626c65494410011a0c0801104018003000501460002000300068007000780080010088010098010042400a0b737461746973746963494410021a0c08011040180030005014600020002a0e756e697175655f726f7769642829300068007000780080010088010098010042290a046e616d6510031a0c08071000180030005019600020013000680070007800800100880100980100423f0a09636f6c756d6e49447310041a1d080f104018003000380150f8075a0c08011040180030005014600060002000300068007000780080010088010098010042420a0963726561746564417410051a0d080510001800300050da08600020002a116e6f7728293a3a3a54494d455354414d503000680070007800800100880100980100422d0a08726f77436f756e7410061a0c0801104018003000501460002000300068007000780080010088010098010042320a0d64697374696e6374436f756e7410071a0c08011040180030005014600020003000680070007800800100880100980100422e0a096e756c6c436f756e7410081a0c08011040180030005014600020003000680070007800800100880100980100422e0a09686973746f6772616d10091a0c0808100018003000501160002001300068007000780080010088010098010042360a0761766753697a65100a1a0c08011040180030005014600020002a08303a3a3a494e5438300068007000780080010088010098010042350a107061727469616c507265646963617465100b1a0c0807100018003000501960002001300068007000780080010088010098010042340a0f66756c6c5374617469737469634944100c1a0c08011040180030005014600020013000680070007800800100880100980100480d5287020a077072696d6172791001180122077461626c654944220b73746174697374696349442a046e616d652a09636f6c756d6e4944732a096372656174656441742a08726f77436f756e742a0d64697374696e6374436f756e742a096e756c6c436f756e742a09686973746f6772616d2a0761766753697a652a107061727469616c5072656469636174652a0f66756c6c537461746973746963494430013002400040004a10080010001a00200028003000380040005a007003700470057006700770087009700a700b700c7a0408002000800100880100900104980101a20106080012001800a80100b20100ba0100c00100c80100d00101e00100e9010000000000000000f2010060026a250a0d0a0561646d696e10e00318e0030a0c0a04726f6f7410e00318e00312046e6f64651803800101880103980100b20188020a5d66616d5f305f7461626c6549445f73746174697374696349445f6e616d655f636f6c756d6e4944735f6372656174656441745f726f77436f756e745f64697374696e6374436f756e745f6e756c6c436f756e745f686973746f6772616d10001a077461626c6549441a0b73746174697374696349441a046e616d651a09636f6c756d6e4944731a096372656174656441741a08726f77436f756e741a0d64697374696e6374436f756e741a096e756c6c436f756e741a09686973746f6772616d1a0761766753697a651a107061727469616c5072656469636174651a0f66756c6c5374617469737469634944200120022003200420052006200720082009200a200b200c2800b80101c20100e80100f2010408001200f801008002009202009a0200b20200b80200c0021dc80200e00200800300880302a80300b00300d00300d80300e00300f80300880400980400a00400a80400"} -,{"key":"8b899d8a89","value":"030aef040a096c6f636174696f6e731815200128013a0042300a0b6c6f63616c6974794b657910011a0c0807100018003000501960002000300068007000780080010088010098010042320a0d6c6f63616c69747956616c756510021a0c08071000180030005019600020003000680070007800800100880100980100422e0a086c6174697475646510031a0d0803100f1812300050a40d600020003000680070007800800100880100980100422f0a096c6f6e67697475646510041a0d0803100f1812300050a40d6000200030006800700078008001008801009801004805529b010a077072696d61727910011801220b6c6f63616c6974794b6579220d6c6f63616c69747956616c75652a086c617469747564652a096c6f6e67697475646530013002400040004a10080010001a00200028003000380040005a00700370047a0408002000800100880100900104980101a20106080012001800a80100b20100ba0100c00100c80100d00101e00100e9010000000000000000f2010060026a250a0d0a0561646d696e10e00318e0030a0c0a04726f6f7410e00318e00312046e6f64651803800101880103980100b201710a3266616d5f305f6c6f63616c6974794b65795f6c6f63616c69747956616c75655f6c617469747564655f6c6f6e67697475646510001a0b6c6f63616c6974794b65791a0d6c6f63616c69747956616c75651a086c617469747564651a096c6f6e67697475646520012002200320042800b80101c20100e80100f2010408001200f801008002009202009a0200b20200b80200c0021dc80200e00200800300880302a80300b00300d00300d80300e00300f80300880400980400a00400a80400"} -,{"key":"8b899f8a89","value":"030abe0a0a0c726f6c655f6d656d626572731817200128013a0042290a04726f6c6510011a0c08071000180030005019600020003000680070007800800100880100980100422b0a066d656d62657210021a0c08071000180030005019600020003000680070007800800100880100980100422c0a07697341646d696e10031a0c08001000180030005010600020003000680070007800800100880100980100422c0a07726f6c655f696410041a0c080c100018003000501a600020003000680070007800800100880100980100422e0a096d656d6265725f696410051a0c080c100018003000501a60002000300068007000780080010088010098010048065297010a077072696d617279100118012204726f6c6522066d656d6265722a07697341646d696e2a07726f6c655f69642a096d656d6265725f696430013002400040004a10080010001a00200028003000380040005a007003700470057a0408002000800100880100900104980101a20106080012001800a80100b20100ba0100c00100c80100d00102e00100e9010000000000000000f201005a780a15726f6c655f6d656d626572735f726f6c655f696478100218002204726f6c653001380240004a10080010001a00200028003000380040005a007a0408002000800100880100900103980100a20106080012001800a80100b20100ba0100c00100c80100d00100e00100e9010000000000000000f201005a7c0a17726f6c655f6d656d626572735f6d656d6265725f6964781003180022066d656d6265723002380140004a10080010001a00200028003000380040005a007a0408002000800100880100900103980100a20106080012001800a80100b20100ba0100c00100c80100d00100e00100e9010000000000000000f201005a80010a18726f6c655f6d656d626572735f726f6c655f69645f696478100418002207726f6c655f696430043801380240004a10080010001a00200028003000380040005a007a0408002000800100880100900103980100a20106080012001800a80100b20100ba0100c00100c80100d00100e00100e9010000000000000000f201005a84010a1a726f6c655f6d656d626572735f6d656d6265725f69645f6964781005180022096d656d6265725f696430053801380240004a10080010001a00200028003000380040005a007a0408002000800100880100900103980100a20106080012001800a80100b20100ba0100c00100c80100d00100e00100e9010000000000000000f201005a99010a22726f6c655f6d656d626572735f726f6c655f69645f6d656d6265725f69645f6b6579100618012207726f6c655f696422096d656d6265725f69643004300538013802400040004a10080010001a00200028003000380040005a007a0408002000800100880100900103980100a20106080012001800a80100b20100ba0100c00100c80100d00101e00100e9010000000000000000f2010060076a250a0d0a0561646d696e10e00318e0030a0c0a04726f6f7410e00318e00312046e6f64651803800101880103980100b2011f0a077072696d61727910001a04726f6c651a066d656d626572200120022800b2011e0a0d66616d5f335f697341646d696e10031a07697341646d696e20032803b2011e0a0d66616d5f345f726f6c655f696410041a07726f6c655f696420042804b201220a0f66616d5f355f6d656d6265725f696410051a096d656d6265725f696420052805b80106c20100e80100f2010408001200f801008002009202009a0200b20200b80200c0021dc80200e00200800300880303a80300b00300d00300d80300e00300f80300880400980400a00400a80400"} -,{"key":"8b89a08a89","value":"030aba040a08636f6d6d656e74731818200128013a0042290a047479706510011a0c08011040180030005014600020003000680070007800800100880100980100422e0a096f626a6563745f696410021a0c08011040180030005014600020003000680070007800800100880100980100422b0a067375625f696410031a0c08011040180030005014600020003000680070007800800100880100980100422c0a07636f6d6d656e7410041a0c080710001800300050196000200030006800700078008001008801009801004805528e010a077072696d6172791001180122047479706522096f626a6563745f696422067375625f69642a07636f6d6d656e743001300230034000400040004a10080010001a00200028003000380040005a0070047a0408002000800100880100900104980101a20106080012001800a80100b20100ba0100c00100c80100d00101e00100e9010000000000000000f2010060026a330a0d0a0561646d696e10e00318e0030a0c0a067075626c6963102018000a0c0a04726f6f7410e00318e00312046e6f64651803800101880103980100b2012c0a077072696d61727910001a04747970651a096f626a6563745f69641a067375625f69642001200220032800b2011e0a0d66616d5f345f636f6d6d656e7410041a07636f6d6d656e7420042804b80105c20100e80100f2010408001200f801008002009202009a0200b20200b80200c0021dc80200e00200800300880302a80300b00300d00300d80300e00300f80300880400980400a00400a80400"} -,{"key":"8b89a18a89","value":"030ab5060a1c7265706c69636174696f6e5f636f6e73747261696e745f73746174731819200128013a00422c0a077a6f6e655f696410011a0c08011040180030005014600020003000680070007800800100880100980100422f0a0a7375627a6f6e655f696410021a0c0801104018003000501460002000300068007000780080010088010098010042290a047479706510031a0c08071000180030005019600020003000680070007800800100880100980100422b0a06636f6e66696710041a0c08071000180030005019600020003000680070007800800100880100980100422e0a097265706f72745f696410051a0c0801104018003000501460002000300068007000780080010088010098010042350a0f76696f6c6174696f6e5f737461727410061a0d080910001800300050a00960002001300068007000780080010088010098010042350a1076696f6c6174696e675f72616e67657310071a0c08011040180030005014600020003000680070007800800100880100980100480852c5010a077072696d6172791001180122077a6f6e655f6964220a7375627a6f6e655f69642204747970652206636f6e6669672a097265706f72745f69642a0f76696f6c6174696f6e5f73746172742a1076696f6c6174696e675f72616e676573300130023003300440004000400040004a10080010001a00200028003000380040005a007005700670077a0408002000800100880100900104980101a20106080012001800a80100b20100ba0100c00100c80100d00101e00100e9010000000000000000f2010060026a250a0d0a0561646d696e10e00318e0030a0c0a04726f6f7410e00318e00312046e6f64651803800101880103980100b2016c0a077072696d61727910001a077a6f6e655f69641a0a7375627a6f6e655f69641a04747970651a06636f6e6669671a097265706f72745f69641a0f76696f6c6174696f6e5f73746172741a1076696f6c6174696e675f72616e67657320012002200320042005200620072800b80101c20100e80100f2010408001200f801008002009202009a0200b20200b80200c0021dc80200e00200800301880302a80300b00300d00300d80300e00300f80300880400980400a00400a80400"} -,{"key":"8b89a28a89","value":"030a9e050a1f7265706c69636174696f6e5f637269746963616c5f6c6f63616c6974696573181a200128013a00422c0a077a6f6e655f696410011a0c08011040180030005014600020003000680070007800800100880100980100422f0a0a7375627a6f6e655f696410021a0c08011040180030005014600020003000680070007800800100880100980100422d0a086c6f63616c69747910031a0c08071000180030005019600020003000680070007800800100880100980100422e0a097265706f72745f696410041a0c0801104018003000501460002000300068007000780080010088010098010042330a0e61745f7269736b5f72616e67657310051a0c08011040180030005014600020003000680070007800800100880100980100480652a8010a077072696d6172791001180122077a6f6e655f6964220a7375627a6f6e655f696422086c6f63616c6974792a097265706f72745f69642a0e61745f7269736b5f72616e6765733001300230034000400040004a10080010001a00200028003000380040005a00700470057a0408002000800100880100900104980101a20106080012001800a80100b20100ba0100c00100c80100d00101e00100e9010000000000000000f2010060026a250a0d0a0561646d696e10e00318e0030a0c0a04726f6f7410e00318e00312046e6f64651803800101880103980100b201510a077072696d61727910001a077a6f6e655f69641a0a7375627a6f6e655f69641a086c6f63616c6974791a097265706f72745f69641a0e61745f7269736b5f72616e676573200120022003200420052800b80101c20100e80100f2010408001200f801008002009202009a0200b20200b80200c0021dc80200e00200800300880302a80300b00300d00300d80300e00300f80300880400980400a00400a80400"} -,{"key":"8b89a38a89","value":"030a8c070a117265706c69636174696f6e5f7374617473181b200128013a00422c0a077a6f6e655f696410011a0c08011040180030005014600020003000680070007800800100880100980100422f0a0a7375627a6f6e655f696410021a0c08011040180030005014600020003000680070007800800100880100980100422e0a097265706f72745f696410031a0c0801104018003000501460002000300068007000780080010088010098010042310a0c746f74616c5f72616e67657310041a0c0801104018003000501460002000300068007000780080010088010098010042370a12756e617661696c61626c655f72616e67657310051a0c08011040180030005014600020003000680070007800800100880100980100423c0a17756e6465725f7265706c6963617465645f72616e67657310061a0c08011040180030005014600020003000680070007800800100880100980100423b0a166f7665725f7265706c6963617465645f72616e67657310071a0c08011040180030005014600020003000680070007800800100880100980100480852e3010a077072696d6172791001180122077a6f6e655f6964220a7375627a6f6e655f69642a097265706f72745f69642a0c746f74616c5f72616e6765732a12756e617661696c61626c655f72616e6765732a17756e6465725f7265706c6963617465645f72616e6765732a166f7665725f7265706c6963617465645f72616e67657330013002400040004a10080010001a00200028003000380040005a00700370047005700670077a0408002000800100880100900104980101a20106080012001800a80100b20100ba0100c00100c80100d00101e00100e9010000000000000000f2010060026a250a0d0a0561646d696e10e00318e0030a0c0a04726f6f7410e00318e00312046e6f64651803800101880103980100b2018e010a077072696d61727910001a077a6f6e655f69641a0a7375627a6f6e655f69641a097265706f72745f69641a0c746f74616c5f72616e6765731a12756e617661696c61626c655f72616e6765731a17756e6465725f7265706c6963617465645f72616e6765731a166f7665725f7265706c6963617465645f72616e67657320012002200320042005200620072800b80101c20100e80100f2010408001200f801008002009202009a0200b20200b80200c0021dc80200e00200800301880302a80300b00300d00300d80300e00300f80300880400980400a00400a80400"} -,{"key":"8b89a48a89","value":"030a8b030a0c7265706f7274735f6d657461181c200128013a0042270a02696410011a0c08011040180030005014600020003000680070007800800100880100980100422f0a0967656e65726174656410021a0d080910001800300050a009600020003000680070007800800100880100980100480352730a077072696d61727910011801220269642a0967656e657261746564300140004a10080010001a00200028003000380040005a0070027a0408002000800100880100900104980101a20106080012001800a80100b20100ba0100c00100c80100d00101e00100e9010000000000000000f2010060026a250a0d0a0561646d696e10e00318e0030a0c0a04726f6f7410e00318e00312046e6f64651803800101880103980100b201200a077072696d61727910001a0269641a0967656e657261746564200120022802b80101c20100e80100f2010408001200f801008002009202009a0200b20200b80200c0021dc80200e00200800300880302a80300b00300d00300d80300e00300f80300880400980400a00400a80400"} -,{"key":"8b89a68a89","value":"030aaa040a096e616d657370616365181e200128013a00422d0a08706172656e74494410011a0c0801104018003000501460002000300068007000780080010088010098010042330a0e706172656e74536368656d61494410021a0c0801104018003000501460002000300068007000780080010088010098010042290a046e616d6510031a0c0807100018003000501960002000300068007000780080010088010098010042270a02696410041a0c0801104018003000501460002001300068007000780080010088010098010048055290010a077072696d617279100118012208706172656e744944220e706172656e74536368656d61494422046e616d652a0269643001300230034000400040004a10080010001a00200028003000380040005a0070047a0408002000800100880100900104980101a20106080012001800a80100b20100ba0100c00100c80100d00101e00100e9010000000000000000f2010060026a210a0b0a0561646d696e102018200a0a0a04726f6f741020182012046e6f64651803800101880103980100b201330a077072696d61727910001a08706172656e7449441a0e706172656e74536368656d6149441a046e616d652001200220032800b201140a0866616d5f345f696410041a02696420042804b80105c20100e80100f2010408001200f801008002009202009a0200b20200b80200c0021dc80200e00200800300880302a80300b00300d00300d80300e00300f80300880400980400a00400a80400"} -,{"key":"8b89a78a89","value":"030ab4050a1170726f7465637465645f74735f6d657461181f200128013a0042340a0973696e676c65746f6e10011a0c08001000180030005010600020002a04747275653000680070007800800100880100980100422c0a0776657273696f6e10021a0c0801104018003000501460002000300068007000780080010088010098010042300a0b6e756d5f7265636f72647310031a0c08011040180030005014600020003000680070007800800100880100980100422e0a096e756d5f7370616e7310041a0c0801104018003000501460002000300068007000780080010088010098010042300a0b746f74616c5f627974657310051a0c08011040180030005014600020003000680070007800800100880100980100480652a3010a077072696d61727910011801220973696e676c65746f6e2a0776657273696f6e2a0b6e756d5f7265636f7264732a096e756d5f7370616e732a0b746f74616c5f6279746573300140004a10080010001a00200028003000380040005a0070027003700470057a0408002000800100880100900104980101a20106080012001800a80100b20100ba0100c00100c80100d00101e00100e9010000000000000000f2010060026a210a0b0a0561646d696e102018200a0a0a04726f6f741020182012046e6f64651803800101880103980100a201260a0973696e676c65746f6e120f636865636b5f73696e676c65746f6e18002801300038004002b201500a077072696d61727910001a0973696e676c65746f6e1a0776657273696f6e1a0b6e756d5f7265636f7264731a096e756d5f7370616e731a0b746f74616c5f6279746573200120022003200420052800b80101c20100e80100f2010408001200f801008002009202009a0200b20200b80200c0021dc80200e00200800300880303a80300b00300d00300d80300e00300f80300880400980400a00400a80400"} -,{"key":"8b89a88a89","value":"030a98060a1470726f7465637465645f74735f7265636f7264731820200128013a0042280a02696410011a0d080e10001800300050861760002000300068007000780080010088010098010042280a02747310021a0d080310001800300050a40d600020003000680070007800800100880100980100422e0a096d6574615f7479706510031a0c0807100018003000501960002000300068007000780080010088010098010042290a046d65746110041a0c08081000180030005011600020013000680070007800800100880100980100422e0a096e756d5f7370616e7310051a0c08011040180030005014600020003000680070007800800100880100980100422a0a057370616e7310061a0c0808100018003000501160002000300068007000780080010088010098010042340a08766572696669656410071a0c08001000180030005010600020002a0566616c73653000680070007800800100880100980100422b0a0674617267657410081a0c08081000180030005011600020013000680070007800800100880100980100480952ad010a077072696d61727910011801220269642a0274732a096d6574615f747970652a046d6574612a096e756d5f7370616e732a057370616e732a0876657269666965642a06746172676574300140004a10080010001a00200028003000380040005a0070027003700470057006700770087a0408002000800100880100900104980101a20106080012001800a80100b20100ba0100c00100c80100d00101e00100e9010000000000000000f2010060026a210a0b0a0561646d696e102018200a0a0a04726f6f741020182012046e6f64651803800101880103980100b2015a0a077072696d61727910001a0269641a0274731a096d6574615f747970651a046d6574611a096e756d5f7370616e731a057370616e731a0876657269666965641a06746172676574200120022003200420052006200720082800b80101c20100e80100f2010408001200f801008002009202009a0200b20200b80200c0021dc80200e00200800300880302a80300b00300d00300d80300e00300f80300880400980400a00400a80400"} -,{"key":"8b89a98a89","value":"030a93050a0c726f6c655f6f7074696f6e731821200128013a00422d0a08757365726e616d6510011a0c08071000180030005019600020003000680070007800800100880100980100422b0a066f7074696f6e10021a0c08071000180030005019600020003000680070007800800100880100980100422a0a0576616c756510031a0c08071000180030005019600020013000680070007800800100880100980100422c0a07757365725f696410041a0c080c100018003000501a6000200030006800700078008001008801009801004805528c010a077072696d617279100118012208757365726e616d6522066f7074696f6e2a0576616c75652a07757365725f696430013002400040004a10080010001a00200028003000380040005a00700370047a0408002000800100880100900104980101a20106080012001800a80100b20100ba0100c00100c80100d00101e00100e9010000000000000000f201005a790a1175736572735f757365725f69645f696478100218002207757365725f696430043801380240004a10080010001a00200028003000380040005a007a0408002000800100880100900103980100a20106080012001800a80100b20100ba0100c00100c80100d00100e00100e9010000000000000000f2010060036a250a0d0a0561646d696e10e00318e0030a0c0a04726f6f7410e00318e00312046e6f64651803800101880103980100b201370a077072696d61727910001a08757365726e616d651a066f7074696f6e1a0576616c75651a07757365725f696420012002200320042800b80101c20100e80100f2010408001200f801008002009202009a0200b20200b80200c0021dc80200e00200800300880302a80300b00300d00300d80300e00300f80300880400980400a00400a80400"} -,{"key":"8b89aa8a89","value":"030ae6030a1773746174656d656e745f62756e646c655f6368756e6b731822200128013a0042370a02696410011a0c08011040180030005014600020002a0e756e697175655f726f7769642829300068007000780080010088010098010042300a0b6465736372697074696f6e10021a0c0807100018003000501960002001300068007000780080010088010098010042290a046461746110031a0c080810001800300050116000200030006800700078008001008801009801004804527d0a077072696d61727910011801220269642a0b6465736372697074696f6e2a0464617461300140004a10080010001a00200028003000380040005a00700270037a0408002000800100880100900104980101a20106080012001800a80100b20100ba0100c00100c80100d00101e00100e9010000000000000000f2010060026a250a0d0a0561646d696e10e00318e0030a0c0a04726f6f7410e00318e00312046e6f64651803800101880103980100b2012a0a077072696d61727910001a0269641a0b6465736372697074696f6e1a04646174612001200220032800b80101c20100e80100f2010408001200f801008002009202009a0200b20200b80200c0021dc80200e00200800300880302a80300b00300d00300d80300e00300f80300880400980400a00400a80400"} -,{"key":"8b89ab8a89","value":"030ad70d0a1e73746174656d656e745f646961676e6f73746963735f72657175657374731823200128013a0042370a02696410011a0c08011040180030005014600020002a0e756e697175655f726f7769642829300068007000780080010088010098010042350a09636f6d706c6574656410021a0c08001000180030005010600020002a0566616c73653000680070007800800100880100980100423a0a1573746174656d656e745f66696e6765727072696e7410031a0c08071000180030005019600020003000680070007800800100880100980100423d0a1873746174656d656e745f646961676e6f73746963735f696410041a0c0801104018003000501460002001300068007000780080010088010098010042320a0c7265717565737465645f617410051a0d080910001800300050a00960002000300068007000780080010088010098010042410a156d696e5f657865637574696f6e5f6c6174656e637910061a13080610001800300050a20960006a04080010002001300068007000780080010088010098010042300a0a657870697265735f617410071a0d080910001800300050a009600020013000680070007800800100880100980100423a0a1473616d706c696e675f70726f626162696c69747910081a0d080210401800300050bd05600020013000680070007800800100880100980100422e0a09706c616e5f6769737410091a0c0807100018003000501960002001300068007000780080010088010098010042330a0e616e74695f706c616e5f67697374100a1a0c0800100018003000501060002001300068007000780080010088010098010042340a087265646163746564100b1a0c08001000180030005010600020002a0566616c73653000680070007800800100880100980100423a0a08757365726e616d65100c1a0c08071000180030005019600020002a0b27273a3a3a535452494e473000680070007800800100880100980100480d52ae020a077072696d61727910011801220269642a09636f6d706c657465642a1573746174656d656e745f66696e6765727072696e742a1873746174656d656e745f646961676e6f73746963735f69642a0c7265717565737465645f61742a156d696e5f657865637574696f6e5f6c6174656e63792a0a657870697265735f61742a1473616d706c696e675f70726f626162696c6974792a09706c616e5f676973742a0e616e74695f706c616e5f676973742a0872656461637465642a08757365726e616d65300140004a10080010001a00200028003000380040005a0070027003700470057006700770087009700a700b700c7a0408002000800100880100900104980101a20106080012001800a80100b20100ba0100c00100c80100d00101e00100e9010000000000000000f201005a8d020a10636f6d706c657465645f6964785f7632100218002209636f6d706c65746564220269642a1573746174656d656e745f66696e6765727072696e742a156d696e5f657865637574696f6e5f6c6174656e63792a0a657870697265735f61742a1473616d706c696e675f70726f626162696c6974792a09706c616e5f676973742a0e616e74695f706c616e5f676973742a0872656461637465642a08757365726e616d6530023001400040004a10080010001a00200028003000380040005a0070037006700770087009700a700b700c7a0408002000800100880100900103980100a20106080012001800a80100b20100ba0100c00100c80100d00100e00100e9010000000000000000f2010060036a250a0d0a0561646d696e10e00318e0030a0c0a04726f6f7410e00318e00312046e6f64651803800101880103980100a201620a3a73616d706c696e675f70726f626162696c697479204245545745454e20302e303a3a3a464c4f41543820414e4420312e303a3a3a464c4f415438121a636865636b5f73616d706c696e675f70726f626162696c69747918002808300038004002b201db010a077072696d61727910001a0269641a09636f6d706c657465641a1573746174656d656e745f66696e6765727072696e741a1873746174656d656e745f646961676e6f73746963735f69641a0c7265717565737465645f61741a156d696e5f657865637574696f6e5f6c6174656e63791a0a657870697265735f61741a1473616d706c696e675f70726f626162696c6974791a09706c616e5f676973741a0e616e74695f706c616e5f676973741a0872656461637465641a08757365726e616d65200120022003200420052006200720082009200a200b200c2800b80101c20100e80100f2010408001200f801008002009202009a0200b20200b80200c0021dc80200e00200800300880303a80300b00300d00300d80300e00300f80300880400980400a00400a80400"} -,{"key":"8b89ac8a89","value":"030aca060a1573746174656d656e745f646961676e6f73746963731824200128013a0042370a02696410011a0c08011040180030005014600020002a0e756e697175655f726f77696428293000680070007800800100880100980100423a0a1573746174656d656e745f66696e6765727072696e7410021a0c08071000180030005019600020003000680070007800800100880100980100422e0a0973746174656d656e7410031a0c0807100018003000501960002000300068007000780080010088010098010042320a0c636f6c6c65637465645f617410041a0d080910001800300050a009600020003000680070007800800100880100980100422b0a05747261636510051a0d081210001800300050da1d60002001300068007000780080010088010098010042430a0d62756e646c655f6368756e6b7310061a1d080f104018003000380150f8075a0c080110401800300050146000600020013000680070007800800100880100980100422a0a056572726f7210071a0c08071000180030005019600020013000680070007800800100880100980100480852bf010a077072696d61727910011801220269642a1573746174656d656e745f66696e6765727072696e742a0973746174656d656e742a0c636f6c6c65637465645f61742a0574726163652a0d62756e646c655f6368756e6b732a056572726f72300140004a10080010001a00200028003000380040005a007002700370047005700670077a0408002000800100880100900104980101a20106080012001800a80100b20100ba0100c00100c80100d00101e00100e9010000000000000000f2010060026a250a0d0a0561646d696e10e00318e0030a0c0a04726f6f7410e00318e00312046e6f64651803800101880103980100b2016c0a077072696d61727910001a0269641a1573746174656d656e745f66696e6765727072696e741a0973746174656d656e741a0c636f6c6c65637465645f61741a0574726163651a0d62756e646c655f6368756e6b731a056572726f7220012002200320042005200620072800b80101c20100e80100f2010408001200f801008002009202009a0200b20200b80200c0021dc80200e00200800300880302a80300b00300d00300d80300e00300f80300880400980400a00400a80400"} -,{"key":"8b89ad8a89","value":"030ae2090a0e7363686564756c65645f6a6f62731825200128013a0042400a0b7363686564756c655f696410011a0c08011040180030005014600020002a0e756e697175655f726f7769642829300068007000780080010088010098010042320a0d7363686564756c655f6e616d6510021a0c0807100018003000501960002000300068007000780080010088010098010042420a076372656174656410031a0d080910001800300050a009600020002a136e6f7728293a3a3a54494d455354414d50545a3000680070007800800100880100980100422a0a056f776e657210041a0c08071000180030005019600020003000680070007800800100880100980100422e0a086e6578745f72756e10051a0d080910001800300050a00960002001300068007000780080010088010098010042330a0e7363686564756c655f737461746510061a0c0808100018003000501160002001300068007000780080010088010098010042320a0d7363686564756c655f6578707210071a0c0807100018003000501960002001300068007000780080010088010098010042350a107363686564756c655f64657461696c7310081a0c0808100018003000501160002001300068007000780080010088010098010042320a0d6578656375746f725f7479706510091a0c0807100018003000501960002000300068007000780080010088010098010042330a0e657865637574696f6e5f61726773100a1a0c08081000180030005011600020003000680070007800800100880100980100480b52fa010a077072696d61727910011801220b7363686564756c655f69642a0d7363686564756c655f6e616d652a07637265617465642a056f776e65722a086e6578745f72756e2a0e7363686564756c655f73746174652a0d7363686564756c655f657870722a107363686564756c655f64657461696c732a0d6578656375746f725f747970652a0e657865637574696f6e5f61726773300140004a10080010001a00200028003000380040005a0070027003700470057006700770087009700a7a0408002000800100880100900104980101a20106080012001800a80100b20100ba0100c00100c80100d00101e00100e9010000000000000000f201005a730a0c6e6578745f72756e5f6964781002180022086e6578745f72756e3005380140004a10080010001a00200028003000380040005a007a0408002000800100880100900103980100a20106080012001800a80100b20100ba0100c00100c80100d00100e00100e9010000000000000000f2010060036a250a0d0a0561646d696e10e00318e0030a0c0a04726f6f7410e00318e00312046e6f64651803800101880103980100b201380a05736368656410001a0b7363686564756c655f69641a086e6578745f72756e1a0e7363686564756c655f73746174652001200520062800b201780a056f7468657210011a0d7363686564756c655f6e616d651a07637265617465641a056f776e65721a0d7363686564756c655f657870721a107363686564756c655f64657461696c731a0d6578656375746f725f747970651a0e657865637574696f6e5f61726773200220032004200720082009200a2800b80102c20100e80100f2010408001200f801008002009202009a0200b20200b80200c0021dc80200e00200800300880302a80300b00300d00300d80300e00300f80300880400980400a00400a80400"} -,{"key":"8b89af8a89","value":"030af8030a0b73716c6c6976656e6573731827200128013a00422f0a0a73657373696f6e5f696410011a0c0808100018003000501160002000300068007000780080010088010098010042300a0a65787069726174696f6e10021a0d080310001800300050a40d60002000300068007000780080010088010098010042300a0b637264625f726567696f6e10031a0c080810001800300050116000200030006800700078008001008801009801004804528d010a077072696d61727910021801220b637264625f726567696f6e220a73657373696f6e5f69642a0a65787069726174696f6e30033001400040004a10080010001a00200028003000380040005a0070027a0408002000800100880100900104980101a20106080012001800a80100b20100ba0100c00100c80100d00101e00100e9010000000000000000f2010060036a250a0d0a0561646d696e10e00318e0030a0c0a04726f6f7410e00318e00312046e6f64651803800101880103980100b201380a077072696d61727910001a0b637264625f726567696f6e1a0a73657373696f6e5f69641a0a65787069726174696f6e2003200120022802b80101c20100e80100f2010408001200f801008002009202009a0200b20200b80200c0021dc80200e00200800300880302a80300b00300d00300d80300e00300f80300880400980400a00400a80400"} -,{"key":"8b89b08a89","value":"030ae5040a0a6d6967726174696f6e731828200128013a00422a0a056d616a6f7210011a0c08011040180030005014600020003000680070007800800100880100980100422a0a056d696e6f7210021a0c08011040180030005014600020003000680070007800800100880100980100422a0a05706174636810031a0c08011040180030005014600020003000680070007800800100880100980100422d0a08696e7465726e616c10041a0c0801104018003000501460002000300068007000780080010088010098010042320a0c636f6d706c657465645f617410051a0d080910001800300050a0096000200030006800700078008001008801009801004806529d010a077072696d6172791001180122056d616a6f7222056d696e6f72220570617463682208696e7465726e616c2a0c636f6d706c657465645f6174300130023003300440004000400040004a10080010001a00200028003000380040005a0070057a0408002000800100880100900104980101a20106080012001800a80100b20100ba0100c00100c80100d00101e00100e9010000000000000000f2010060026a250a0d0a0561646d696e10e00318e0030a0c0a04726f6f7410e00318e00312046e6f64651803800101880103980100b201440a077072696d61727910001a056d616a6f721a056d696e6f721a0570617463681a08696e7465726e616c1a0c636f6d706c657465645f6174200120022003200420052805b80101c20100e80100f2010408001200f801008002009202009a0200b20200b80200c0021dc80200e00200800300880302a80300b00300d00300d80300e00300f80300880400980400a00400a80400"} -,{"key":"8b89b18a89","value":"030acf030a0b6a6f696e5f746f6b656e731829200128013a0042280a02696410011a0d080e100018003000508617600020003000680070007800800100880100980100422b0a0673656372657410021a0c0808100018003000501160002000300068007000780080010088010098010042300a0a65787069726174696f6e10031a0d080910001800300050a0096000200030006800700078008001008801009801004804527e0a077072696d61727910011801220269642a067365637265742a0a65787069726174696f6e300140004a10080010001a00200028003000380040005a00700270037a0408002000800100880100900104980101a20106080012001800a80100b20100ba0100c00100c80100d00101e00100e9010000000000000000f2010060026a250a0d0a0561646d696e10e00318e0030a0c0a04726f6f7410e00318e00312046e6f64651803800101880103980100b2012b0a077072696d61727910001a0269641a067365637265741a0a65787069726174696f6e2001200220032800b80101c20100e80100f2010408001200f801008002009202009a0200b20200b80200c0021dc80200e00200800300880302a80300b00300d00300d80300e00300f80300880400980400a00400a80400"} -,{"key":"8b89b28a89","value":"030ab3280a1473746174656d656e745f73746174697374696373182a200128013a0042330a0d616767726567617465645f747310011a0d080910001800300050a00960002000300068007000780080010088010098010042330a0e66696e6765727072696e745f696410021a0c08081000180030005011600020003000680070007800800100880100980100423f0a1a7472616e73616374696f6e5f66696e6765727072696e745f696410031a0c08081000180030005011600020003000680070007800800100880100980100422e0a09706c616e5f6861736810041a0c08081000180030005011600020003000680070007800800100880100980100422d0a086170705f6e616d6510051a0c08071000180030005019600020003000680070007800800100880100980100422c0a076e6f64655f696410061a0c0801104018003000501460002000300068007000780080010088010098010042380a0c6167675f696e74657276616c10071a13080610001800300050a20960006a040800100020003000680070007800800100880100980100422e0a086d6574616461746110081a0d081210001800300050da1d60002000300068007000780080010088010098010042300a0a7374617469737469637310091a0d081210001800300050da1d600020003000680070007800800100880100980100422a0a04706c616e100a1a0d081210001800300050da1d600020003000680070007800800100880100980100429c020a68637264625f696e7465726e616c5f616767726567617465645f74735f6170705f6e616d655f66696e6765727072696e745f69645f6e6f64655f69645f706c616e5f686173685f7472616e73616374696f6e5f66696e6765727072696e745f69645f73686172645f38100b1a0c080110201800300050176000200030015a8c016d6f6428666e76333228637264625f696e7465726e616c2e646174756d735f746f5f627974657328616767726567617465645f74732c206170705f6e616d652c2066696e6765727072696e745f69642c206e6f64655f69642c20706c616e5f686173682c207472616e73616374696f6e5f66696e6765727072696e745f696429292c20383a3a3a494e543829680070007800800100880100980100425f0a15696e6465785f7265636f6d6d656e646174696f6e73100c1a1d080f100018003000380750f1075a0c080710001800300050196000600020002a1241525241595b5d3a3a3a535452494e475b5d3000680070007800800100880100980100426c0a0d696e64657865735f7573616765100d1a0d081210001800300050da1d6000200130005a3728737461746973746963732d3e2773746174697374696373273a3a3a535452494e47292d3e27696e6465786573273a3a3a535452494e4768007000780080010188010098010042710a0f657865637574696f6e5f636f756e74100e1a0c080110401800300050146000200130005a3b2828737461746973746963732d3e2773746174697374696373273a3a3a535452494e47292d3e27636e74273a3a3a535452494e47293a3a494e5438680070007800800100880100980100428a010a0f736572766963655f6c6174656e6379100f1a0d080210401800300050bd056000200130005a53282828737461746973746963732d3e2773746174697374696373273a3a3a535452494e47292d3e277376634c6174273a3a3a535452494e47292d3e276d65616e273a3a3a535452494e47293a3a464c4f4154386800700078008001008801009801004297010a0d6370755f73716c5f6e616e6f7310101a0d080210401800300050bd056000200130005a62282828737461746973746963732d3e27657865637574696f6e5f73746174697374696373273a3a3a535452494e47292d3e2763707553514c4e616e6f73273a3a3a535452494e47292d3e276d65616e273a3a3a535452494e47293a3a464c4f415438680070007800800100880100980100429c010a0f636f6e74656e74696f6e5f74696d6510111a0d080210401800300050bd056000200130005a65282828737461746973746963732d3e27657865637574696f6e5f73746174697374696373273a3a3a535452494e47292d3e27636f6e74656e74696f6e54696d65273a3a3a535452494e47292d3e276d65616e273a3a3a535452494e47293a3a464c4f41543868007000780080010088010098010042dc010a1e746f74616c5f657374696d617465645f657865637574696f6e5f74696d6510121a0d080210401800300050bd056000200130005a95012828737461746973746963732d3e2773746174697374696373273a3a3a535452494e47292d3e3e27636e74273a3a3a535452494e47293a3a464c4f415438202a20282828737461746973746963732d3e2773746174697374696373273a3a3a535452494e47292d3e277376634c6174273a3a3a535452494e47292d3e3e276d65616e273a3a3a535452494e47293a3a464c4f415438680070007800800100880100980100428a010a0b7039395f6c6174656e637910131a0d080210401800300050bd056000200130005a57282828737461746973746963732d3e2773746174697374696373273a3a3a535452494e47292d3e276c6174656e6379496e666f273a3a3a535452494e47292d3e27703939273a3a3a535452494e47293a3a464c4f415438680070007800800100880100980100481452c5050a077072696d617279100118012268637264625f696e7465726e616c5f616767726567617465645f74735f6170705f6e616d655f66696e6765727072696e745f69645f6e6f64655f69645f706c616e5f686173685f7472616e73616374696f6e5f66696e6765727072696e745f69645f73686172645f38220d616767726567617465645f7473220e66696e6765727072696e745f6964221a7472616e73616374696f6e5f66696e6765727072696e745f69642209706c616e5f6861736822086170705f6e616d6522076e6f64655f69642a0c6167675f696e74657276616c2a086d657461646174612a0a737461746973746963732a04706c616e2a15696e6465785f7265636f6d6d656e646174696f6e732a0f657865637574696f6e5f636f756e742a0f736572766963655f6c6174656e63792a0d6370755f73716c5f6e616e6f732a0f636f6e74656e74696f6e5f74696d652a1e746f74616c5f657374696d617465645f657865637574696f6e5f74696d652a0b7039395f6c6174656e6379300b30013002300330043005300640004000400040004000400040004a10080010001a00200028003000380040005a00700770087009700a700c700e700f70107011701270137a0408002000800100880100900104980101a201c70108011268637264625f696e7465726e616c5f616767726567617465645f74735f6170705f6e616d655f66696e6765727072696e745f69645f6e6f64655f69645f706c616e5f686173685f7472616e73616374696f6e5f66696e6765727072696e745f69645f73686172645f381808220d616767726567617465645f747322086170705f6e616d65220e66696e6765727072696e745f696422076e6f64655f69642209706c616e5f68617368221a7472616e73616374696f6e5f66696e6765727072696e745f6964a80100b20100ba0100c00100c80100d00101e00100e9010000000000000000f201005aaa010a1566696e6765727072696e745f73746174735f69647810021800220e66696e6765727072696e745f6964221a7472616e73616374696f6e5f66696e6765727072696e745f696430023003380b3801380438053806400040004a10080010001a00200028003000380040005a007a0408002000800100880100900103980100a20106080012001800a80100b20100ba0100c00100c80100d00100e00100e9010000000000000000f201005a8c010a11696e64657865735f75736167655f69647810031800220d696e64657865735f7573616765300d380b38013802380338043805380640004a10080010001a00200028003000380040005a007a0408002000800101880100900103980100a20106080012001800a80100b20100ba0100c00100c80100d00100d80100e00100e9010000000000000000f201005ad2010a13657865637574696f6e5f636f756e745f69647810041800220d616767726567617465645f747322086170705f6e616d65220f657865637574696f6e5f636f756e7430013005300e380b38023803380438064000400040014a10080010001a00200028003000380040005a007a0408002000800100880100900103980100a20106080012001800a80100b20100ba01286170705f6e616d65204e4f54204c494b4520272420696e7465726e616c25273a3a3a535452494e47c00100c80100d00100e00100e9010000000000000000f201005ad4010a13736572766963655f6c6174656e63795f69647810051800220d616767726567617465645f747322086170705f6e616d65220f736572766963655f6c6174656e637930013005300f380b38023803380438064000400040014a10080010001a00200028003000380040005a00680f7a0408002000800100880100900103980100a20106080012001800a80100b20100ba01286170705f6e616d65204e4f54204c494b4520272420696e7465726e616c25273a3a3a535452494e47c00100c80100d00100e00100e9010000000000000000f201005ad0010a116370755f73716c5f6e616e6f735f69647810061800220d616767726567617465645f747322086170705f6e616d65220d6370755f73716c5f6e616e6f73300130053010380b38023803380438064000400040014a10080010001a00200028003000380040005a0068107a0408002000800100880100900103980100a20106080012001800a80100b20100ba01286170705f6e616d65204e4f54204c494b4520272420696e7465726e616c25273a3a3a535452494e47c00100c80100d00100e00100e9010000000000000000f201005ad4010a13636f6e74656e74696f6e5f74696d655f69647810071800220d616767726567617465645f747322086170705f6e616d65220f636f6e74656e74696f6e5f74696d65300130053011380b38023803380438064000400040014a10080010001a00200028003000380040005a0068117a0408002000800100880100900103980100a20106080012001800a80100b20100ba01286170705f6e616d65204e4f54204c494b4520272420696e7465726e616c25273a3a3a535452494e47c00100c80100d00100e00100e9010000000000000000f201005af2010a22746f74616c5f657374696d617465645f657865637574696f6e5f74696d655f69647810081800220d616767726567617465645f747322086170705f6e616d65221e746f74616c5f657374696d617465645f657865637574696f6e5f74696d65300130053012380b38023803380438064000400040014a10080010001a00200028003000380040005a0068127a0408002000800100880100900103980100a20106080012001800a80100b20100ba01286170705f6e616d65204e4f54204c494b4520272420696e7465726e616c25273a3a3a535452494e47c00100c80100d00100e00100e9010000000000000000f201005acc010a0f7039395f6c6174656e63795f69647810091800220d616767726567617465645f747322086170705f6e616d65220b7039395f6c6174656e6379300130053013380b38023803380438064000400040014a10080010001a00200028003000380040005a0068137a0408002000800100880100900103980100a20106080012001800a80100b20100ba01286170705f6e616d65204e4f54204c494b4520272420696e7465726e616c25273a3a3a535452494e47c00100c80100d00100e00100e9010000000000000000f20100600a6a210a0b0a0561646d696e102018200a0a0a04726f6f741020182012046e6f64651803800101880103980100a201b9020abc01637264625f696e7465726e616c5f616767726567617465645f74735f6170705f6e616d655f66696e6765727072696e745f69645f6e6f64655f69645f706c616e5f686173685f7472616e73616374696f6e5f66696e6765727072696e745f69645f73686172645f3820494e2028303a3a3a494e54382c20313a3a3a494e54382c20323a3a3a494e54382c20333a3a3a494e54382c20343a3a3a494e54382c20353a3a3a494e54382c20363a3a3a494e54382c20373a3a3a494e543829126e636865636b5f637264625f696e7465726e616c5f616767726567617465645f74735f6170705f6e616d655f66696e6765727072696e745f69645f6e6f64655f69645f706c616e5f686173685f7472616e73616374696f6e5f66696e6765727072696e745f69645f73686172645f381800280b300038014002b201a4030a077072696d61727910001a68637264625f696e7465726e616c5f616767726567617465645f74735f6170705f6e616d655f66696e6765727072696e745f69645f6e6f64655f69645f706c616e5f686173685f7472616e73616374696f6e5f66696e6765727072696e745f69645f73686172645f381a0d616767726567617465645f74731a0e66696e6765727072696e745f69641a1a7472616e73616374696f6e5f66696e6765727072696e745f69641a09706c616e5f686173681a086170705f6e616d651a076e6f64655f69641a0c6167675f696e74657276616c1a086d657461646174611a0a737461746973746963731a04706c616e1a15696e6465785f7265636f6d6d656e646174696f6e731a0f657865637574696f6e5f636f756e741a0f736572766963655f6c6174656e63791a0d6370755f73716c5f6e616e6f731a0f636f6e74656e74696f6e5f74696d651a1e746f74616c5f657374696d617465645f657865637574696f6e5f74696d651a0b7039395f6c6174656e6379200b200120022003200420052006200720082009200a200c200e200f20102011201220132800b80101c20100e80100f2010408001200f801008002009202009a0200b20200b80200c0021dc80200e00200800300880303a80300b00300d00300d80300e00300f80300880400980400a00400a80400"} -,{"key":"8b89b38a89","value":"030ab6200a167472616e73616374696f6e5f73746174697374696373182b200128013a0042330a0d616767726567617465645f747310011a0d080910001800300050a00960002000300068007000780080010088010098010042330a0e66696e6765727072696e745f696410021a0c08081000180030005011600020003000680070007800800100880100980100422d0a086170705f6e616d6510031a0c08071000180030005019600020003000680070007800800100880100980100422c0a076e6f64655f696410041a0c0801104018003000501460002000300068007000780080010088010098010042380a0c6167675f696e74657276616c10051a13080610001800300050a20960006a040800100020003000680070007800800100880100980100422e0a086d6574616461746110061a0d081210001800300050da1d60002000300068007000780080010088010098010042300a0a7374617469737469637310071a0d081210001800300050da1d60002000300068007000780080010088010098010042cf010a43637264625f696e7465726e616c5f616767726567617465645f74735f6170705f6e616d655f66696e6765727072696e745f69645f6e6f64655f69645f73686172645f3810081a0c080110201800300050176000200030015a656d6f6428666e76333228637264625f696e7465726e616c2e646174756d735f746f5f627974657328616767726567617465645f74732c206170705f6e616d652c2066696e6765727072696e745f69642c206e6f64655f696429292c20383a3a3a494e54382968007000780080010088010098010042710a0f657865637574696f6e5f636f756e7410091a0c080110401800300050146000200130005a3b2828737461746973746963732d3e2773746174697374696373273a3a3a535452494e47292d3e27636e74273a3a3a535452494e47293a3a494e5438680070007800800100880100980100428a010a0f736572766963655f6c6174656e6379100a1a0d080210401800300050bd056000200130005a53282828737461746973746963732d3e2773746174697374696373273a3a3a535452494e47292d3e277376634c6174273a3a3a535452494e47292d3e276d65616e273a3a3a535452494e47293a3a464c4f4154386800700078008001008801009801004297010a0d6370755f73716c5f6e616e6f73100b1a0d080210401800300050bd056000200130005a62282828737461746973746963732d3e27657865637574696f6e5f73746174697374696373273a3a3a535452494e47292d3e2763707553514c4e616e6f73273a3a3a535452494e47292d3e276d65616e273a3a3a535452494e47293a3a464c4f415438680070007800800100880100980100429c010a0f636f6e74656e74696f6e5f74696d65100c1a0d080210401800300050bd056000200130005a65282828737461746973746963732d3e27657865637574696f6e5f73746174697374696373273a3a3a535452494e47292d3e27636f6e74656e74696f6e54696d65273a3a3a535452494e47292d3e276d65616e273a3a3a535452494e47293a3a464c4f41543868007000780080010088010098010042dc010a1e746f74616c5f657374696d617465645f657865637574696f6e5f74696d65100d1a0d080210401800300050bd056000200130005a95012828737461746973746963732d3e2773746174697374696373273a3a3a535452494e47292d3e3e27636e74273a3a3a535452494e47293a3a464c4f415438202a20282828737461746973746963732d3e2773746174697374696373273a3a3a535452494e47292d3e277376634c6174273a3a3a535452494e47292d3e3e276d65616e273a3a3a535452494e47293a3a464c4f415438680070007800800100880100980100428a010a0b7039395f6c6174656e6379100e1a0d080210401800300050bd056000200130005a57282828737461746973746963732d3e2773746174697374696373273a3a3a535452494e47292d3e276c6174656e6379496e666f273a3a3a535452494e47292d3e27703939273a3a3a535452494e47293a3a464c4f415438680070007800800100880100980100480f5283040a077072696d617279100118012243637264625f696e7465726e616c5f616767726567617465645f74735f6170705f6e616d655f66696e6765727072696e745f69645f6e6f64655f69645f73686172645f38220d616767726567617465645f7473220e66696e6765727072696e745f696422086170705f6e616d6522076e6f64655f69642a0c6167675f696e74657276616c2a086d657461646174612a0a737461746973746963732a0f657865637574696f6e5f636f756e742a0f736572766963655f6c6174656e63792a0d6370755f73716c5f6e616e6f732a0f636f6e74656e74696f6e5f74696d652a1e746f74616c5f657374696d617465645f657865637574696f6e5f74696d652a0b7039395f6c6174656e637930083001300230033004400040004000400040004a10080010001a00200028003000380040005a007005700670077009700a700b700c700d700e7a0408002000800100880100900104980101a2017b08011243637264625f696e7465726e616c5f616767726567617465645f74735f6170705f6e616d655f66696e6765727072696e745f69645f6e6f64655f69645f73686172645f381808220d616767726567617465645f747322086170705f6e616d65220e66696e6765727072696e745f696422076e6f64655f6964a80100b20100ba0100c00100c80100d00101e00100e9010000000000000000f201005a88010a1566696e6765727072696e745f73746174735f69647810021800220e66696e6765727072696e745f69643002380838013803380440004a10080010001a00200028003000380040005a007a0408002000800100880100900103980100a20106080012001800a80100b20100ba0100c00100c80100d00100e00100e9010000000000000000f201005ace010a13657865637574696f6e5f636f756e745f69647810031800220d616767726567617465645f747322086170705f6e616d65220f657865637574696f6e5f636f756e743001300330093808380238044000400040014a10080010001a00200028003000380040005a007a0408002000800100880100900103980100a20106080012001800a80100b20100ba01286170705f6e616d65204e4f54204c494b4520272420696e7465726e616c25273a3a3a535452494e47c00100c80100d00100e00100e9010000000000000000f201005ad0010a13736572766963655f6c6174656e63795f69647810041800220d616767726567617465645f747322086170705f6e616d65220f736572766963655f6c6174656e637930013003300a3808380238044000400040014a10080010001a00200028003000380040005a00680a7a0408002000800100880100900103980100a20106080012001800a80100b20100ba01286170705f6e616d65204e4f54204c494b4520272420696e7465726e616c25273a3a3a535452494e47c00100c80100d00100e00100e9010000000000000000f201005acc010a116370755f73716c5f6e616e6f735f69647810051800220d616767726567617465645f747322086170705f6e616d65220d6370755f73716c5f6e616e6f7330013003300b3808380238044000400040014a10080010001a00200028003000380040005a00680b7a0408002000800100880100900103980100a20106080012001800a80100b20100ba01286170705f6e616d65204e4f54204c494b4520272420696e7465726e616c25273a3a3a535452494e47c00100c80100d00100e00100e9010000000000000000f201005ad0010a13636f6e74656e74696f6e5f74696d655f69647810061800220d616767726567617465645f747322086170705f6e616d65220f636f6e74656e74696f6e5f74696d6530013003300c3808380238044000400040014a10080010001a00200028003000380040005a00680c7a0408002000800100880100900103980100a20106080012001800a80100b20100ba01286170705f6e616d65204e4f54204c494b4520272420696e7465726e616c25273a3a3a535452494e47c00100c80100d00100e00100e9010000000000000000f201005aee010a22746f74616c5f657374696d617465645f657865637574696f6e5f74696d655f69647810071800220d616767726567617465645f747322086170705f6e616d65221e746f74616c5f657374696d617465645f657865637574696f6e5f74696d6530013003300d3808380238044000400040014a10080010001a00200028003000380040005a00680d7a0408002000800100880100900103980100a20106080012001800a80100b20100ba01286170705f6e616d65204e4f54204c494b4520272420696e7465726e616c25273a3a3a535452494e47c00100c80100d00100e00100e9010000000000000000f201005ac8010a0f7039395f6c6174656e63795f69647810081800220d616767726567617465645f747322086170705f6e616d65220b7039395f6c6174656e637930013003300e3808380238044000400040014a10080010001a00200028003000380040005a00680e7a0408002000800100880100900103980100a20106080012001800a80100b20100ba01286170705f6e616d65204e4f54204c494b4520272420696e7465726e616c25273a3a3a535452494e47c00100c80100d00100e00100e9010000000000000000f2010060096a210a0b0a0561646d696e102018200a0a0a04726f6f741020182012046e6f64651803800101880103980100a201ef010a9701637264625f696e7465726e616c5f616767726567617465645f74735f6170705f6e616d655f66696e6765727072696e745f69645f6e6f64655f69645f73686172645f3820494e2028303a3a3a494e54382c20313a3a3a494e54382c20323a3a3a494e54382c20333a3a3a494e54382c20343a3a3a494e54382c20353a3a3a494e54382c20363a3a3a494e54382c20373a3a3a494e5438291249636865636b5f637264625f696e7465726e616c5f616767726567617465645f74735f6170705f6e616d655f66696e6765727072696e745f69645f6e6f64655f69645f73686172645f3818002808300038014002b201b3020a077072696d61727910001a43637264625f696e7465726e616c5f616767726567617465645f74735f6170705f6e616d655f66696e6765727072696e745f69645f6e6f64655f69645f73686172645f381a0d616767726567617465645f74731a0e66696e6765727072696e745f69641a086170705f6e616d651a076e6f64655f69641a0c6167675f696e74657276616c1a086d657461646174611a0a737461746973746963731a0f657865637574696f6e5f636f756e741a0f736572766963655f6c6174656e63791a0d6370755f73716c5f6e616e6f731a0f636f6e74656e74696f6e5f74696d651a1e746f74616c5f657374696d617465645f657865637574696f6e5f74696d651a0b7039395f6c6174656e6379200820012002200320042005200620072009200a200b200c200d200e2800b80101c20100e80100f2010408001200f801008002009202009a0200b20200b80200c0021dc80200e00200800300880303a80300b00300d00300d80300e00300f80300880400980400a00400a80400"} -,{"key":"8b89b48a89","value":"030a82060a1664617461626173655f726f6c655f73657474696e6773182c200128013a0042300a0b64617461626173655f696410011a0c080c100018003000501a600020003000680070007800800100880100980100422e0a09726f6c655f6e616d6510021a0c08071000180030005019600020003000680070007800800100880100980100423e0a0873657474696e677310031a1d080f100018003000380750f1075a0c080710001800300050196000600020003000680070007800800100880100980100422c0a07726f6c655f696410041a0c080c100018003000501a60002000300068007000780080010088010098010048055295010a077072696d61727910011801220b64617461626173655f69642209726f6c655f6e616d652a0873657474696e67732a07726f6c655f696430013002400040004a10080010001a00200028003000380040005a00700370047a0408002000800100880100900104980101a20106080012001800a80100b20100ba0100c00100c80100d00102e00100e9010000000000000000f201005ab1010a2e64617461626173655f726f6c655f73657474696e67735f64617461626173655f69645f726f6c655f69645f6b657910021801220b64617461626173655f69642207726f6c655f69642a0873657474696e6773300130043802400040004a10080010001a00200028003000380040005a0070037a0408002000800100880100900103980100a20106080012001800a80100b20100ba0100c00100c80100d00101e00100e9010000000000000000f2010060036a250a0d0a0561646d696e10e00318e0030a0c0a04726f6f7410e00318e00312046e6f64651803800101880103980100b201400a077072696d61727910001a0b64617461626173655f69641a09726f6c655f6e616d651a0873657474696e67731a07726f6c655f696420012002200320042800b80101c20100e80100f2010408001200f801008002009202009a0200b20200b80200c0021dc80200e00200800300880303a80300b00300d00300d80300e00300f80300880400980400a00400a80400"} -,{"key":"8b89b58a89","value":"030acc0b0a0c74656e616e745f7573616765182d200128013a00422e0a0974656e616e745f696410011a0c0801104018003000501460002000300068007000780080010088010098010042300a0b696e7374616e63655f696410021a0c0801104018003000501460002000300068007000780080010088010098010042350a106e6578745f696e7374616e63655f696410031a0c0801104018003000501460002000300068007000780080010088010098010042310a0b6c6173745f75706461746510041a0d080510001800300050da0860002000300068007000780080010088010098010042340a0e72755f62757273745f6c696d697410051a0d080210401800300050bd0560002001300068007000780080010088010098010042340a0e72755f726566696c6c5f7261746510061a0d080210401800300050bd0560002001300068007000780080010088010098010042300a0a72755f63757272656e7410071a0d080210401800300050bd0560002001300068007000780080010088010098010042370a1163757272656e745f73686172655f73756d10081a0d080210401800300050bd0560002001300068007000780080010088010098010042360a11746f74616c5f636f6e73756d7074696f6e10091a0c0808100018003000501160002001300068007000780080010088010098010042330a0e696e7374616e63655f6c65617365100a1a0c0808100018003000501160002001300068007000780080010088010098010042310a0c696e7374616e63655f736571100b1a0c0801104018003000501460002001300068007000780080010088010098010042350a0f696e7374616e63655f736861726573100c1a0d080210401800300050bd0560002001300068007000780080010088010098010042320a0d63757272656e745f7261746573100d1a0c08081000180030005011600020013000680070007800800100880100980100422f0a0a6e6578745f7261746573100e1a0c08081000180030005011600020013000680070007800800100880100980100480f52d1020a077072696d61727910011801220974656e616e745f6964220b696e7374616e63655f69642a106e6578745f696e7374616e63655f69642a0b6c6173745f7570646174652a0e72755f62757273745f6c696d69742a0e72755f726566696c6c5f726174652a0a72755f63757272656e742a1163757272656e745f73686172655f73756d2a11746f74616c5f636f6e73756d7074696f6e2a0e696e7374616e63655f6c656173652a0c696e7374616e63655f7365712a0f696e7374616e63655f7368617265732a0d63757272656e745f72617465732a0a6e6578745f726174657330013002400040004a10080010001a00200028003000380040005a007003700470057006700770087009700a700b700c700d700e7a0408002000800100880100900104980101a20106080012001800a80100b20100ba0100c00100c80100d00101e00100e9010000000000000000f2010060026a250a0d0a0561646d696e10e00318e0030a0c0a04726f6f7410e00318e00312046e6f64651803800101880103980100b201fc010a077072696d61727910001a0974656e616e745f69641a0b696e7374616e63655f69641a106e6578745f696e7374616e63655f69641a0b6c6173745f7570646174651a0e72755f62757273745f6c696d69741a0e72755f726566696c6c5f726174651a0a72755f63757272656e741a1163757272656e745f73686172655f73756d1a11746f74616c5f636f6e73756d7074696f6e1a0e696e7374616e63655f6c656173651a0c696e7374616e63655f7365711a0f696e7374616e63655f7368617265731a0d63757272656e745f72617465731a0a6e6578745f7261746573200120022003200420052006200720082009200a200b200c200d200e2800b80101c20100e80100f2010408001200f801008002009202009a0200b20200b80200c0021dc80200e00200800301880302a80300b00300d00300d80300e00300f80300880400980400a00400a80400"} -,{"key":"8b89b68a89","value":"030ad4060a0d73716c5f696e7374616e636573182e200128013a0042270a02696410011a0c0801104018003000501460002000300068007000780080010088010098010042290a046164647210021a0c08071000180030005019600020013000680070007800800100880100980100422f0a0a73657373696f6e5f696410031a0c08081000180030005011600020013000680070007800800100880100980100422e0a086c6f63616c69747910041a0d081210001800300050da1d600020013000680070007800800100880100980100422d0a0873716c5f6164647210051a0c0807100018003000501960002001300068007000780080010088010098010042300a0b637264625f726567696f6e10061a0c0808100018003000501160002000300068007000780080010088010098010042330a0e62696e6172795f76657273696f6e10071a0c0807100018003000501960002001300068007000780080010088010098010042300a0b69735f647261696e696e6710081a0c08001000180030005010600020013000680070007800800100880100980100480952c6010a077072696d61727910021801220b637264625f726567696f6e220269642a04616464722a0a73657373696f6e5f69642a086c6f63616c6974792a0873716c5f616464722a0e62696e6172795f76657273696f6e2a0b69735f647261696e696e6730063001400040004a10080010001a00200028003000380040005a007002700370047005700770087a0408002000800100880100900104980101a20106080012001800a80100b20100ba0100c00100c80100d00101e00100e9010000000000000000f2010060036a250a0d0a0561646d696e10e00318e0030a0c0a04726f6f7410e00318e00312046e6f64651803800101880103980100b201710a077072696d61727910001a0269641a04616464721a0a73657373696f6e5f69641a086c6f63616c6974791a0873716c5f616464721a0b637264625f726567696f6e1a0e62696e6172795f76657273696f6e1a0b69735f647261696e696e67200120022003200420052006200720082800b80101c20100e80100f2010408001200f801008002009202009a0200b20200b80200c0021dc80200e00200800300880302a80300b00300d00300d80300e00300f80300880400980400a00400a80400"} -,{"key":"8b89b78a89","value":"030a94040a137370616e5f636f6e66696775726174696f6e73182f200128013a00422e0a0973746172745f6b657910011a0c08081000180030005011600020003000680070007800800100880100980100422c0a07656e645f6b657910021a0c08081000180030005011600020003000680070007800800100880100980100422b0a06636f6e66696710031a0c0808100018003000501160002000300068007000780080010088010098010048045282010a077072696d61727910011801220973746172745f6b65792a07656e645f6b65792a06636f6e666967300140004a10080010001a00200028003000380040005a00700270037a0408002000800100880100900104980101a20106080012001800a80100b20100ba0100c00100c80100d00101e00100e9010000000000000000f2010060026a250a0d0a0561646d696e10e00318e0030a0c0a04726f6f7410e00318e00312046e6f64651803800101880103980100a2012f0a1373746172745f6b6579203c20656e645f6b6579120c636865636b5f626f756e6473180028012802300038004002b2012f0a077072696d61727910001a0973746172745f6b65791a07656e645f6b65791a06636f6e6669672001200220032800b80101c20100e80100f2010408001200f801008002009202009a0200b20200b80200c0021dc80200e00200800301880303a80300b00300d00300d80300e00300f80300880400980400a00400a80400"} -,{"key":"8b89b88a89","value":"030ae5020a0b726f6c655f69645f7365711830200128013a00422a0a0576616c756510011a0c08011040180030005014600020003000680070007800800100880100980100480052690a077072696d61727910011800220576616c7565300140004a10080010001a00200028003000380040005a007a0408002000800100880100900104980101a20106080012001800a80100b20100ba0100c00100c80100d00100e00100e9010000000000000000f2010060006a250a0d0a0561646d696e10a00618a0060a0c0a04726f6f7410a00618a00612046e6f64651803800100880103980100b201160a077072696d61727910001a0576616c756520012801b80100c20100e2011a0801106418ffffffff0720642800320408001000380142004800e80100f2010408001200f801008002009202009a0200b20200b80200c0021dc80200e00200800300880300a80300b00300d00300d80300e00300f80300880400980400a00400a80400"} -,{"key":"8b89ba8a89","value":"030afc050a0f74656e616e745f73657474696e67731832200128013a00422e0a0974656e616e745f696410011a0c0801104018003000501460002000300068007000780080010088010098010042290a046e616d6510021a0c08071000180030005019600020003000680070007800800100880100980100422a0a0576616c756510031a0c0807100018003000501960002000300068007000780080010088010098010042450a0c6c6173745f7570646174656410041a0d080510001800300050da08600020002a116e6f7728293a3a3a54494d455354414d503000680070007800800100880100980100422f0a0a76616c75655f7479706510051a0c08071000180030005019600020003000680070007800800100880100980100422b0a06726561736f6e10061a0c08071000180030005019600020013000680070007800800100880100980100480752a8010a077072696d61727910011801220974656e616e745f696422046e616d652a0576616c75652a0c6c6173745f757064617465642a0a76616c75655f747970652a06726561736f6e30013002400040004a10080010001a00200028003000380040005a0070037004700570067a0408002000800100880100900104980101a20106080012001800a80100b20100ba0100c00100c80100d00101e00100e9010000000000000000f2010060026a250a0d0a0561646d696e10e00318e0030a0c0a04726f6f7410e00318e00312046e6f64651803800101880103980100b20185010a3966616d5f305f74656e616e745f69645f6e616d655f76616c75655f6c6173745f757064617465645f76616c75655f747970655f726561736f6e10001a0974656e616e745f69641a046e616d651a0576616c75651a0c6c6173745f757064617465641a0a76616c75655f747970651a06726561736f6e2001200220032004200520062800b80101c20100e80100f2010408001200f801008002009202009a0200b20200b80200c0021dc80200e00200800300880302a80300b00300d00300d80300e00300f80300880400980400a00400a80400"} -,{"key":"8b89bb8a89","value":"030aca030a0a7370616e5f636f756e741833200128013a0042340a0973696e676c65746f6e10011a0c08001000180030005010600020002a04747275653000680070007800800100880100980100422f0a0a7370616e5f636f756e7410021a0c080110401800300050146000200030006800700078008001008801009801004803527b0a077072696d61727910011801220973696e676c65746f6e2a0a7370616e5f636f756e74300140004a10080010001a00200028003000380040005a0070027a0408002000800100880100900104980101a20106080012001800a80100b20100ba0100c00100c80100d00101e00100e9010000000000000000f2010060026a250a0d0a0561646d696e10e00318e0030a0c0a04726f6f7410e00318e00312046e6f64651803800101880103980100a201210a0973696e676c65746f6e120a73696e676c655f726f7718002801300038004002b201280a077072696d61727910001a0973696e676c65746f6e1a0a7370616e5f636f756e74200120022802b80101c20100e80100f2010408001200f801008002009202009a0200b20200b80200c0021dc80200e00200800300880303a80300b00300d00300d80300e00300f80300880400980400a00400a80400"} -,{"key":"8b89bc8a89","value":"030af1070a0a70726976696c656765731834200128013a00422d0a08757365726e616d6510011a0c0807100018003000501960002000300068007000780080010088010098010042290a047061746810021a0c0807100018003000501960002000300068007000780080010088010098010042400a0a70726976696c6567657310031a1d080f100018003000380750f1075a0c08071000180030005019600060002000300068007000780080010088010098010042430a0d6772616e745f6f7074696f6e7310041a1d080f100018003000380750f1075a0c080710001800300050196000600020003000680070007800800100880100980100422c0a07757365725f696410051a0c080c100018003000501a600020003000680070007800800100880100980100480652a0010a077072696d617279100118012208757365726e616d652204706174682a0a70726976696c656765732a0d6772616e745f6f7074696f6e732a07757365725f696430013002400040004a10080010001a00200028003000380040005a007003700470057a0408002000800100880100900104980101a20106080012001800a80100b20100ba0100c00100c80100d00103e00100e9010000000000000000f201005aaa010a1b70726976696c656765735f706174685f757365725f69645f6b6579100218012204706174682207757365725f69642a0a70726976696c656765732a0d6772616e745f6f7074696f6e73300230053801400040004a10080010001a00200028003000380040005a00700370047a0408002000800100880100900103980100a20106080012001800a80100b20100ba0100c00100c80100d00101e00100e9010000000000000000f201005aaa010a1c70726976696c656765735f706174685f757365726e616d655f6b6579100318012204706174682208757365726e616d652a0a70726976696c656765732a0d6772616e745f6f7074696f6e7330023001400040004a10080010001a00200028003000380040005a00700370047a0408002000800100880100900103980100a20106080012001800a80100b20100ba0100c00100c80100d00102e00100e9010000000000000000f2010060046a250a0d0a0561646d696e10e00318e0030a0c0a04726f6f7410e00318e00312046e6f64651803800101880103980100b2014b0a077072696d61727910001a08757365726e616d651a04706174681a0a70726976696c656765731a0d6772616e745f6f7074696f6e731a07757365725f6964200120022003200420052800b80101c20100e80100f2010408001200f801008002009202009a0200b20200b80200c0021dc80200e00200800300880304a80300b00300d00300d80300e00300f80300880400980400a00400a80400"} -,{"key":"8b89bd8a89","value":"030ae6060a1465787465726e616c5f636f6e6e656374696f6e731835200128013a0042340a0f636f6e6e656374696f6e5f6e616d6510011a0c0807100018003000501960002000300068007000780080010088010098010042400a076372656174656410021a0d080510001800300050da08600020002a116e6f7728293a3a3a54494d455354414d50300068007000780080010088010098010042400a077570646174656410031a0d080510001800300050da08600020002a116e6f7728293a3a3a54494d455354414d50300068007000780080010088010098010042340a0f636f6e6e656374696f6e5f7479706510041a0c0807100018003000501960002000300068007000780080010088010098010042370a12636f6e6e656374696f6e5f64657461696c7310051a0c08081000180030005011600020003000680070007800800100880100980100422a0a056f776e657210061a0c08071000180030005019600020003000680070007800800100880100980100422d0a086f776e65725f696410071a0c080c100018003000501a600020003000680070007800800100880100980100480852c7010a077072696d61727910011801220f636f6e6e656374696f6e5f6e616d652a07637265617465642a07757064617465642a0f636f6e6e656374696f6e5f747970652a12636f6e6e656374696f6e5f64657461696c732a056f776e65722a086f776e65725f6964300140004a10080010001a00200028003000380040005a007002700370047005700670077a0408002000800100880100900104980101a20106080012001800a80100b20100ba0100c00100c80100d00101e00100e9010000000000000000f2010060026a250a0d0a0561646d696e10e00318e0030a0c0a04726f6f7410e00318e00312046e6f64651803800101880103980100b201740a077072696d61727910001a0f636f6e6e656374696f6e5f6e616d651a07637265617465641a07757064617465641a0f636f6e6e656374696f6e5f747970651a12636f6e6e656374696f6e5f64657461696c731a056f776e65721a086f776e65725f696420012002200320042005200620072800b80101c20100e80100f2010408001200f801008002009202009a0200b20200b80200c0021dc80200e00200800300880302a80300b00300d00300d80300e00300f80300880400980400a00400a80400"} -,{"key":"8b89be8a89","value":"030aac040a086a6f625f696e666f1836200128013a00422b0a066a6f625f696410011a0c08011040180030005014600020003000680070007800800100880100980100422d0a08696e666f5f6b657910021a0c0807100018003000501960002000300068007000780080010088010098010042420a077772697474656e10031a0d080910001800300050a009600020002a136e6f7728293a3a3a54494d455354414d50545a3000680070007800800100880100980100422a0a0576616c756510041a0c080810001800300050116000200130006800700078008001008801009801004805528e010a077072696d6172791001180122066a6f625f69642208696e666f5f6b657922077772697474656e2a0576616c75653001300230034000400040014a10080010001a00200028003000380040005a0070047a0408002000800100880100900104980101a20106080012001800a80100b20100ba0100c00100c80100d00101e00100e9010000000000000000f2010060026a250a0d0a0561646d696e10e00318e0030a0c0a04726f6f7410e00318e00312046e6f64651803800101880103980100b201370a077072696d61727910001a066a6f625f69641a08696e666f5f6b65791a077772697474656e1a0576616c756520012002200320042804b80101c20100e80100f2010408001200f801008002009202009a0200b20200b80200c0021dc80200e00200800300880302a80300b00300d00300d80300e00300f80300880400980400a00400a80400"} -,{"key":"8b89bf8a89","value":"030aac040a167370616e5f73746174735f756e697175655f6b6579731837200128013a00423b0a02696410011a0d080e100018003000508617600020002a1167656e5f72616e646f6d5f7575696428293000680070007800800100880100980100422e0a096b65795f627974657310021a0c08081000180030005011600020013000680070007800800100880100980100480352730a077072696d61727910011801220269642a096b65795f6279746573300140004a10080010001a00200028003000380040005a0070027a0408002000800100880100900104980101a20106080012001800a80100b20100ba0100c00100c80100d00102e00100e9010000000000000000f201005a81010a19756e697175655f6b6579735f6b65795f62797465735f6964781002180122096b65795f62797465733002380140004a10080010001a00200028003000380040005a007a0408002000800100880100900103980100a20106080012001800a80100b20100ba0100c00100c80100d00101e00100e9010000000000000000f2010060036a250a0d0a0561646d696e10e00318e0030a0c0a04726f6f7410e00318e00312046e6f64651803800101880103980100b201200a077072696d61727910001a0269641a096b65795f6279746573200120022802b80101c20100e80100f2010408001200f801008002009202009a0200b20200b80200c0021dc80200e00200800300880303a80300b00300d00300d80300e00300f80300880400980400a00400a80400"} -,{"key":"8b89c08a89","value":"030a8e060a127370616e5f73746174735f6275636b6574731838200128013a00423b0a02696410011a0d080e100018003000508617600020002a1167656e5f72616e646f6d5f7575696428293000680070007800800100880100980100422f0a0973616d706c655f696410021a0d080e10001800300050861760002000300068007000780080010088010098010042320a0c73746172745f6b65795f696410031a0d080e10001800300050861760002000300068007000780080010088010098010042300a0a656e645f6b65795f696410041a0d080e100018003000508617600020003000680070007800800100880100980100422d0a08726571756573747310051a0c080110401800300050146000200030006800700078008001008801009801004806529d010a077072696d61727910011801220269642a0973616d706c655f69642a0c73746172745f6b65795f69642a0a656e645f6b65795f69642a087265717565737473300140004a10080010001a00200028003000380040005a0070027003700470057a0408002000800100880100900104980101a20106080012001800a80100b20100ba0100c00100c80100d00101e00100e9010000000000000000f201005a7d0a156275636b6574735f73616d706c655f69645f69647810021800220973616d706c655f69643002380140004a10080010001a00200028003000380040005a007a0408002000800100880100900103980100a20106080012001800a80100b20100ba0100c00100c80100d00100e00100e9010000000000000000f2010060036a250a0d0a0561646d696e10e00318e0030a0c0a04726f6f7410e00318e00312046e6f64651803800101880103980100b2014a0a077072696d61727910001a0269641a0973616d706c655f69641a0c73746172745f6b65795f69641a0a656e645f6b65795f69641a087265717565737473200120022003200420052800b80101c20100e80100f2010408001200f801008002009202009a0200b20200b80200c0021dc80200e00200800300880302a80300b00300d00300d80300e00300f80300880400980400a00400a80400"} -,{"key":"8b89c18a89","value":"030ac2040a127370616e5f73746174735f73616d706c65731839200128013a00423b0a02696410011a0d080e100018003000508617600020002a1167656e5f72616e646f6d5f757569642829300068007000780080010088010098010042440a0b73616d706c655f74696d6510021a0d080510001800300050da08600020002a116e6f7728293a3a3a54494d455354414d503000680070007800800100880100980100480352750a077072696d61727910011801220269642a0b73616d706c655f74696d65300140004a10080010001a00200028003000380040005a0070027a0408002000800100880100900104980101a20106080012001800a80100b20100ba0100c00100c80100d00102e00100e9010000000000000000f201005a81010a1773616d706c65735f73616d706c655f74696d655f69647810021801220b73616d706c655f74696d653002380140004a10080010001a00200028003000380040005a007a0408002000800100880100900103980100a20106080012001800a80100b20100ba0100c00100c80100d00101e00100e9010000000000000000f2010060036a250a0d0a0561646d696e10e00318e0030a0c0a04726f6f7410e00318e00312046e6f64651803800101880103980100b201220a077072696d61727910001a0269641a0b73616d706c655f74696d65200120022802b80101c20100e80100f2010408001200f801008002009202009a0200b20200b80200c0021dc80200e00200800300880303a80300b00300d00300d80300e00300f80300880400980400a00400a80400"} -,{"key":"8b89c28a89","value":"030ab2030a1c7370616e5f73746174735f74656e616e745f626f756e646172696573183a200128013a00422e0a0974656e616e745f696410011a0c08011040180030005014600020003000680070007800800100880100980100422f0a0a626f756e64617269657310021a0c080810001800300050116000200030006800700078008001008801009801004803527b0a077072696d61727910011801220974656e616e745f69642a0a626f756e646172696573300140004a10080010001a00200028003000380040005a0070027a0408002000800100880100900104980101a20106080012001800a80100b20100ba0100c00100c80100d00101e00100e9010000000000000000f2010060026a250a0d0a0561646d696e10e00318e0030a0c0a04726f6f7410e00318e00312046e6f64651803800101880103980100b201280a077072696d61727910001a0974656e616e745f69641a0a626f756e646172696573200120022802b80101c20100e80100f2010408001200f801008002009202009a0200b20200b80200c0021dc80200e00200800300880302a80300b00300d00300d80300e00300f80300880400980400a00400a80400"} -,{"key":"8b89c38a89","value":"030aba060a0d7461736b5f7061796c6f616473183b200128013a0042270a02696410011a0c0807100018003000501960002000300068007000780080010088010098010042420a076372656174656410021a0d080910001800300050a009600020002a136e6f7728293a3a3a54494d455354414d50545a3000680070007800800100880100980100422a0a056f776e657210031a0c08071000180030005019600020003000680070007800800100880100980100422d0a086f776e65725f696410041a0c080c100018003000501a60002000300068007000780080010088010098010042300a0b6d696e5f76657273696f6e10051a0c0807100018003000501960002000300068007000780080010088010098010042300a0b6465736372697074696f6e10061a0c0807100018003000501960002001300068007000780080010088010098010042290a047479706510071a0c08071000180030005019600020003000680070007800800100880100980100422a0a0576616c756510081a0c08081000180030005011600020003000680070007800800100880100980100480952b5010a077072696d61727910011801220269642a07637265617465642a056f776e65722a086f776e65725f69642a0b6d696e5f76657273696f6e2a0b6465736372697074696f6e2a04747970652a0576616c7565300140004a10080010001a00200028003000380040005a0070027003700470057006700770087a0408002000800100880100900104980101a20106080012001800a80100b20100ba0100c00100c80100d00101e00100e9010000000000000000f2010060026a250a0d0a0561646d696e10e00318e0030a0c0a04726f6f7410e00318e00312046e6f64651803800101880103980100b201620a077072696d61727910001a0269641a07637265617465641a056f776e65721a086f776e65725f69641a0b6d696e5f76657273696f6e1a0b6465736372697074696f6e1a04747970651a0576616c7565200120022003200420052006200720082800b80101c20100e80100f2010408001200f801008002009202009a0200b20200b80200c0021dc80200e00200800300880302a80300b00300d00300d80300e00300f80300880400980400a00400a80400"} -,{"key":"8b89c48a89","value":"030a8b060a0c74656e616e745f7461736b73183c200128013a00422e0a0974656e616e745f696410011a0c08011040180030005014600020003000680070007800800100880100980100422b0a0669737375657210021a0c08071000180030005019600020003000680070007800800100880100980100422c0a077461736b5f696410031a0c0801104018003000501460002000300068007000780080010088010098010042420a076372656174656410041a0d080910001800300050a009600020002a136e6f7728293a3a3a54494d455354414d50545a3000680070007800800100880100980100422f0a0a7061796c6f61645f696410051a0c08071000180030005019600020003000680070007800800100880100980100422a0a056f776e657210061a0c08071000180030005019600020003000680070007800800100880100980100422d0a086f776e65725f696410071a0c080c100018003000501a600020003000680070007800800100880100980100480852b4010a077072696d61727910011801220974656e616e745f6964220669737375657222077461736b5f69642a07637265617465642a0a7061796c6f61645f69642a056f776e65722a086f776e65725f69643001300230034000400040004a10080010001a00200028003000380040005a0070047005700670077a0408002000800100880100900104980101a20106080012001800a80100b20100ba0100c00100c80100d00101e00100e9010000000000000000f2010060026a250a0d0a0561646d696e10e00318e0030a0c0a04726f6f7410e00318e00312046e6f64651803800101880103980100b2015d0a077072696d61727910001a0974656e616e745f69641a066973737565721a077461736b5f69641a07637265617465641a0a7061796c6f61645f69641a056f776e65721a086f776e65725f696420012002200320042005200620072800b80101c20100e80100f2010408001200f801008002009202009a0200b20200b80200c0021dc80200e00200800300880302a80300b00300d00300d80300e00300f80300880400980400a00400a80400"} -,{"key":"8b89c58a89","value":"030a92190a1273746174656d656e745f6163746976697479183d200128013a0042330a0d616767726567617465645f747310011a0d080910001800300050a00960002000300068007000780080010088010098010042330a0e66696e6765727072696e745f696410021a0c08081000180030005011600020003000680070007800800100880100980100423f0a1a7472616e73616374696f6e5f66696e6765727072696e745f696410031a0c08081000180030005011600020003000680070007800800100880100980100422e0a09706c616e5f6861736810041a0c08081000180030005011600020003000680070007800800100880100980100422d0a086170705f6e616d6510051a0c0807100018003000501960002000300068007000780080010088010098010042380a0c6167675f696e74657276616c10061a13080610001800300050a20960006a040800100020003000680070007800800100880100980100422e0a086d6574616461746110071a0d081210001800300050da1d60002000300068007000780080010088010098010042300a0a7374617469737469637310081a0d081210001800300050da1d600020003000680070007800800100880100980100422a0a04706c616e10091a0d081210001800300050da1d600020003000680070007800800100880100980100425f0a15696e6465785f7265636f6d6d656e646174696f6e73100a1a1d080f100018003000380750f1075a0c080710001800300050196000600020002a1241525241595b5d3a3a3a535452494e475b5d300068007000780080010088010098010042340a0f657865637574696f6e5f636f756e74100b1a0c08011040180030005014600020003000680070007800800100880100980100423d0a17657865637574696f6e5f746f74616c5f7365636f6e6473100c1a0d080210401800300050bd0560002000300068007000780080010088010098010042450a1f657865637574696f6e5f746f74616c5f636c75737465725f7365636f6e6473100d1a0d080210401800300050bd0560002000300068007000780080010088010098010042410a1b636f6e74656e74696f6e5f74696d655f6176675f7365636f6e6473100e1a0d080210401800300050bd0560002000300068007000780080010088010098010042370a116370755f73716c5f6176675f6e616e6f73100f1a0d080210401800300050bd0560002000300068007000780080010088010098010042410a1b736572766963655f6c6174656e63795f6176675f7365636f6e647310101a0d080210401800300050bd0560002000300068007000780080010088010098010042410a1b736572766963655f6c6174656e63795f7039395f7365636f6e647310111a0d080210401800300050bd05600020003000680070007800800100880100980100481252d0030a077072696d61727910011801220d616767726567617465645f7473220e66696e6765727072696e745f6964221a7472616e73616374696f6e5f66696e6765727072696e745f69642209706c616e5f6861736822086170705f6e616d652a0c6167675f696e74657276616c2a086d657461646174612a0a737461746973746963732a04706c616e2a15696e6465785f7265636f6d6d656e646174696f6e732a0f657865637574696f6e5f636f756e742a17657865637574696f6e5f746f74616c5f7365636f6e64732a1f657865637574696f6e5f746f74616c5f636c75737465725f7365636f6e64732a1b636f6e74656e74696f6e5f74696d655f6176675f7365636f6e64732a116370755f73716c5f6176675f6e616e6f732a1b736572766963655f6c6174656e63795f6176675f7365636f6e64732a1b736572766963655f6c6174656e63795f7039395f7365636f6e647330013002300330043005400040004000400040004a10080010001a00200028003000380040005a007006700770087009700a700b700c700d700e700f701070117a0408002000800100880100900104980101a20106080012001800a80100b20100ba0100c00100c80100d00101e00100e9010000000000000000f201005aa3010a1266696e6765727072696e745f69645f69647810021800220e66696e6765727072696e745f6964221a7472616e73616374696f6e5f66696e6765727072696e745f696430023003380138043805400040004a10080010001a00200028003000380040005a007a0408002000800100880100900103980100a20106080012001800a80100b20100ba0100c00100c80100d00100e00100e9010000000000000000f201005a9a010a13657865637574696f6e5f636f756e745f69647810031800220d616767726567617465645f7473220f657865637574696f6e5f636f756e743001300b3802380338043805400040014a10080010001a00200028003000380040005a007a0408002000800100880100900103980100a20106080012001800a80100b20100ba0100c00100c80100d00100e00100e9010000000000000000f201005aac010a1b657865637574696f6e5f746f74616c5f7365636f6e64735f69647810041800220d616767726567617465645f74732217657865637574696f6e5f746f74616c5f7365636f6e64733001300c3802380338043805400040014a10080010001a00200028003000380040005a00680c7a0408002000800100880100900103980100a20106080012001800a80100b20100ba0100c00100c80100d00100e00100e9010000000000000000f201005ab4010a1f636f6e74656e74696f6e5f74696d655f6176675f7365636f6e64735f69647810051800220d616767726567617465645f7473221b636f6e74656e74696f6e5f74696d655f6176675f7365636f6e64733001300e3802380338043805400040014a10080010001a00200028003000380040005a00680e7a0408002000800100880100900103980100a20106080012001800a80100b20100ba0100c00100c80100d00100e00100e9010000000000000000f201005aa0010a156370755f73716c5f6176675f6e616e6f735f69647810061800220d616767726567617465645f747322116370755f73716c5f6176675f6e616e6f733001300f3802380338043805400040014a10080010001a00200028003000380040005a00680f7a0408002000800100880100900103980100a20106080012001800a80100b20100ba0100c00100c80100d00100e00100e9010000000000000000f201005ab4010a1f736572766963655f6c6174656e63795f6176675f7365636f6e64735f69647810071800220d616767726567617465645f7473221b736572766963655f6c6174656e63795f6176675f7365636f6e6473300130103802380338043805400040014a10080010001a00200028003000380040005a0068107a0408002000800100880100900103980100a20106080012001800a80100b20100ba0100c00100c80100d00100e00100e9010000000000000000f201005ab4010a1f736572766963655f6c6174656e63795f7039395f7365636f6e64735f69647810081800220d616767726567617465645f7473221b736572766963655f6c6174656e63795f7039395f7365636f6e6473300130113802380338043805400040014a10080010001a00200028003000380040005a0068117a0408002000800100880100900103980100a20106080012001800a80100b20100ba0100c00100c80100d00100e00100e9010000000000000000f2010060096a210a0b0a0561646d696e102018200a0a0a04726f6f741020182012046e6f64651803800101880103980100b201f5020a077072696d61727910001a0d616767726567617465645f74731a0e66696e6765727072696e745f69641a1a7472616e73616374696f6e5f66696e6765727072696e745f69641a09706c616e5f686173681a086170705f6e616d651a0c6167675f696e74657276616c1a086d657461646174611a0a737461746973746963731a04706c616e1a15696e6465785f7265636f6d6d656e646174696f6e731a0f657865637574696f6e5f636f756e741a17657865637574696f6e5f746f74616c5f7365636f6e64731a1f657865637574696f6e5f746f74616c5f636c75737465725f7365636f6e64731a1b636f6e74656e74696f6e5f74696d655f6176675f7365636f6e64731a116370755f73716c5f6176675f6e616e6f731a1b736572766963655f6c6174656e63795f6176675f7365636f6e64731a1b736572766963655f6c6174656e63795f7039395f7365636f6e6473200120022003200420052006200720082009200a200b200c200d200e200f201020112800b80101c20100e80100f2010408001200f801008002009202009a0200b20200b80200c0021dc80200e00200800300880302a80300b00300d00300d80300e00300f80300880400980400a00400a80400"} -,{"key":"8b89c68a89","value":"030afe150a147472616e73616374696f6e5f6163746976697479183e200128013a0042330a0d616767726567617465645f747310011a0d080910001800300050a00960002000300068007000780080010088010098010042330a0e66696e6765727072696e745f696410021a0c08081000180030005011600020003000680070007800800100880100980100422d0a086170705f6e616d6510031a0c0807100018003000501960002000300068007000780080010088010098010042380a0c6167675f696e74657276616c10041a13080610001800300050a20960006a040800100020003000680070007800800100880100980100422e0a086d6574616461746110051a0d081210001800300050da1d60002000300068007000780080010088010098010042300a0a7374617469737469637310061a0d081210001800300050da1d600020003000680070007800800100880100980100422a0a05717565727910071a0c0807100018003000501960002000300068007000780080010088010098010042340a0f657865637574696f6e5f636f756e7410081a0c08011040180030005014600020003000680070007800800100880100980100423d0a17657865637574696f6e5f746f74616c5f7365636f6e647310091a0d080210401800300050bd0560002000300068007000780080010088010098010042450a1f657865637574696f6e5f746f74616c5f636c75737465725f7365636f6e6473100a1a0d080210401800300050bd0560002000300068007000780080010088010098010042410a1b636f6e74656e74696f6e5f74696d655f6176675f7365636f6e6473100b1a0d080210401800300050bd0560002000300068007000780080010088010098010042370a116370755f73716c5f6176675f6e616e6f73100c1a0d080210401800300050bd0560002000300068007000780080010088010098010042410a1b736572766963655f6c6174656e63795f6176675f7365636f6e6473100d1a0d080210401800300050bd0560002000300068007000780080010088010098010042410a1b736572766963655f6c6174656e63795f7039395f7365636f6e6473100e1a0d080210401800300050bd05600020003000680070007800800100880100980100480f5289030a077072696d61727910011801220d616767726567617465645f7473220e66696e6765727072696e745f696422086170705f6e616d652a0c6167675f696e74657276616c2a086d657461646174612a0a737461746973746963732a0571756572792a0f657865637574696f6e5f636f756e742a17657865637574696f6e5f746f74616c5f7365636f6e64732a1f657865637574696f6e5f746f74616c5f636c75737465725f7365636f6e64732a1b636f6e74656e74696f6e5f74696d655f6176675f7365636f6e64732a116370755f73716c5f6176675f6e616e6f732a1b736572766963655f6c6174656e63795f6176675f7365636f6e64732a1b736572766963655f6c6174656e63795f7039395f7365636f6e64733001300230034000400040004a10080010001a00200028003000380040005a00700470057006700770087009700a700b700c700d700e7a0408002000800100880100900104980101a20106080012001800a80100b20100ba0100c00100c80100d00101e00100e9010000000000000000f201005a81010a1266696e6765727072696e745f69645f69647810021800220e66696e6765727072696e745f696430023801380340004a10080010001a00200028003000380040005a007a0408002000800100880100900103980100a20106080012001800a80100b20100ba0100c00100c80100d00100e00100e9010000000000000000f201005a96010a13657865637574696f6e5f636f756e745f69647810031800220d616767726567617465645f7473220f657865637574696f6e5f636f756e743001300838023803400040014a10080010001a00200028003000380040005a007a0408002000800100880100900103980100a20106080012001800a80100b20100ba0100c00100c80100d00100e00100e9010000000000000000f201005aa8010a1b657865637574696f6e5f746f74616c5f7365636f6e64735f69647810041800220d616767726567617465645f74732217657865637574696f6e5f746f74616c5f7365636f6e64733001300938023803400040014a10080010001a00200028003000380040005a0068097a0408002000800100880100900103980100a20106080012001800a80100b20100ba0100c00100c80100d00100e00100e9010000000000000000f201005ab0010a1f636f6e74656e74696f6e5f74696d655f6176675f7365636f6e64735f69647810051800220d616767726567617465645f7473221b636f6e74656e74696f6e5f74696d655f6176675f7365636f6e64733001300b38023803400040014a10080010001a00200028003000380040005a00680b7a0408002000800100880100900103980100a20106080012001800a80100b20100ba0100c00100c80100d00100e00100e9010000000000000000f201005a9c010a156370755f73716c5f6176675f6e616e6f735f69647810061800220d616767726567617465645f747322116370755f73716c5f6176675f6e616e6f733001300c38023803400040014a10080010001a00200028003000380040005a00680c7a0408002000800100880100900103980100a20106080012001800a80100b20100ba0100c00100c80100d00100e00100e9010000000000000000f201005ab0010a1f736572766963655f6c6174656e63795f6176675f7365636f6e64735f69647810071800220d616767726567617465645f7473221b736572766963655f6c6174656e63795f6176675f7365636f6e64733001300d38023803400040014a10080010001a00200028003000380040005a00680d7a0408002000800100880100900103980100a20106080012001800a80100b20100ba0100c00100c80100d00100e00100e9010000000000000000f201005ab0010a1f736572766963655f6c6174656e63795f7039395f7365636f6e64735f69647810081800220d616767726567617465645f7473221b736572766963655f6c6174656e63795f7039395f7365636f6e64733001300e38023803400040014a10080010001a00200028003000380040005a00680e7a0408002000800100880100900103980100a20106080012001800a80100b20100ba0100c00100c80100d00100e00100e9010000000000000000f2010060096a210a0b0a0561646d696e102018200a0a0a04726f6f741020182012046e6f64651803800101880103980100b201b2020a077072696d61727910001a0d616767726567617465645f74731a0e66696e6765727072696e745f69641a086170705f6e616d651a0c6167675f696e74657276616c1a086d657461646174611a0a737461746973746963731a0571756572791a0f657865637574696f6e5f636f756e741a17657865637574696f6e5f746f74616c5f7365636f6e64731a1f657865637574696f6e5f746f74616c5f636c75737465725f7365636f6e64731a1b636f6e74656e74696f6e5f74696d655f6176675f7365636f6e64731a116370755f73716c5f6176675f6e616e6f731a1b736572766963655f6c6174656e63795f6176675f7365636f6e64731a1b736572766963655f6c6174656e63795f7039395f7365636f6e6473200120022003200420052006200720082009200a200b200c200d200e2800b80101c20100e80100f2010408001200f801008002009202009a0200b20200b80200c0021dc80200e00200800300880302a80300b00300d00300d80300e00300f80300880400980400a00400a80400"} -,{"key":"8b89c78a89","value":"030ae7020a0d74656e616e745f69645f736571183f200128013a00422a0a0576616c756510011a0c08011040180030005014600020003000680070007800800100880100980100480052690a077072696d61727910011800220576616c7565300140004a10080010001a00200028003000380040005a007a0408002000800100880100900104980101a20106080012001800a80100b20100ba0100c00100c80100d00100e00100e9010000000000000000f2010060006a210a0b0a0561646d696e102018200a0a0a04726f6f741020182012046e6f64651803800100880103980100b201160a077072696d61727910001a0576616c756520012801b80100c20100e2011e0801100118ffffffffffffffff7f20012800320408001000380142004800e80100f2010408001200f801008002009202009a0200b20200b80200c0021dc80200e00200800300880300a80300b00300d00300d80300e00300f80300880400980400a00400a80400"} -,{"key":"8b89c88a89","value":"030ad10a0a0f6d7663635f737461746973746963731840200128013a0042450a0a637265617465645f617410011a0d080910001800300050a009600020002a136e6f7728293a3a3a54494d455354414d50545a300068007000780080010088010098010042300a0b64617461626173655f696410021a0c08011040180030005014600020003000680070007800800100880100980100422d0a087461626c655f696410031a0c08011040180030005014600020003000680070007800800100880100980100422d0a08696e6465785f696410041a0c0801104018003000501460002000300068007000780080010088010098010042300a0a7374617469737469637310051a0d081210001800300050da1d60002000300068007000780080010088010098010042ab010a3f637264625f696e7465726e616c5f637265617465645f61745f64617461626173655f69645f696e6465785f69645f7461626c655f69645f73686172645f313610061a0c080110201800300050176000200030015a456d6f6428666e763332286d643528637264625f696e7465726e616c2e646174756d735f746f5f627974657328637265617465645f61742929292c2031363a3a3a494e543829680070007800800101880100980100480752e7020a146d7663635f737461746973746963735f706b657910011801223f637264625f696e7465726e616c5f637265617465645f61745f64617461626173655f69645f696e6465785f69645f7461626c655f69645f73686172645f3136220a637265617465645f6174220b64617461626173655f696422087461626c655f69642208696e6465785f69642a0a7374617469737469637330063001300230033004400040004000400040004a10080010001a00200028003000380040005a0070057a0408002000800100880100900104980101a201720801123f637264625f696e7465726e616c5f637265617465645f61745f64617461626173655f69645f696e6465785f69645f7461626c655f69645f73686172645f31361810220a637265617465645f6174220b64617461626173655f69642208696e6465785f696422087461626c655f6964a80100b20100ba0100c00100c80100d00101e00100e9010000000000000000f2010060026a250a0d0a0561646d696e10e00318e0030a0c0a04726f6f7410e00318e00312046e6f64651803800101880103980100a201bd020ae901637264625f696e7465726e616c5f637265617465645f61745f64617461626173655f69645f696e6465785f69645f7461626c655f69645f73686172645f313620494e2028303a3a3a494e54382c20313a3a3a494e54382c20323a3a3a494e54382c20333a3a3a494e54382c20343a3a3a494e54382c20353a3a3a494e54382c20363a3a3a494e54382c20373a3a3a494e54382c20383a3a3a494e54382c20393a3a3a494e54382c2031303a3a3a494e54382c2031313a3a3a494e54382c2031323a3a3a494e54382c2031333a3a3a494e54382c2031343a3a3a494e54382c2031353a3a3a494e5438291245636865636b5f637264625f696e7465726e616c5f637265617465645f61745f64617461626173655f69645f696e6465785f69645f7461626c655f69645f73686172645f313618002806300038014002b201500a077072696d61727910001a0a637265617465645f61741a0b64617461626173655f69641a087461626c655f69641a08696e6465785f69641a0a73746174697374696373200120022003200420052805b80101c20100e80100f2010408001200f801008002009202009a0200b20200b80200c0021dc80200e00200800300880303a80300b00300d00300d80300e00300f80300880400980400a00400a80400"} -,{"key":"8b89c98a89","value":"030acd170a1e7472616e73616374696f6e5f657865637574696f6e5f696e7369676874731841200128013a0042340a0e7472616e73616374696f6e5f696410011a0d080e100018003000508617600020003000680070007800800100880100980100423f0a1a7472616e73616374696f6e5f66696e6765727072696e745f696410021a0c0808100018003000501160002000300068007000780080010088010098010042320a0d71756572795f73756d6d61727910031a0c0807100018003000501960002001300068007000780080010088010098010042310a0c696d706c696369745f74786e10041a0c08001000180030005010600020013000680070007800800100880100980100422f0a0a73657373696f6e5f696410051a0c0807100018003000501960002000300068007000780080010088010098010042300a0a73746172745f74696d6510061a0d080910001800300050a009600020013000680070007800800100880100980100422e0a08656e645f74696d6510071a0d080910001800300050a009600020013000680070007800800100880100980100422e0a09757365725f6e616d6510081a0c08071000180030005019600020013000680070007800800100880100980100422d0a086170705f6e616d6510091a0c0807100018003000501960002001300068007000780080010088010098010042320a0d757365725f7072696f72697479100a1a0c08071000180030005019600020013000680070007800800100880100980100422c0a0772657472696573100b1a0c0801104018003000501460002001300068007000780080010088010098010042360a116c6173745f72657472795f726561736f6e100c1a0c08071000180030005019600020013000680070007800800100880100980100423e0a0870726f626c656d73100d1a1d080f104018003000380150f8075a0c080110401800300050146000600020013000680070007800800100880100980100423c0a06636175736573100e1a1d080f104018003000380150f8075a0c08011040180030005014600060002001300068007000780080010088010098010042480a1273746d745f657865637574696f6e5f696473100f1a1d080f100018003000380750f1075a0c08071000180030005019600060002001300068007000780080010088010098010042320a0d6370755f73716c5f6e616e6f7310101a0c0801104018003000501460002001300068007000780080010088010098010042340a0f6c6173745f6572726f725f636f646510111a0c08071000180030005019600020013000680070007800800100880100980100422b0a0673746174757310121a0c08011040180030005014600020013000680070007800800100880100980100423b0a0f636f6e74656e74696f6e5f74696d6510131a13080610001800300050a20960006a04080010002001300068007000780080010088010098010042350a0f636f6e74656e74696f6e5f696e666f10141a0d081210001800300050da1d600020013000680070007800800100880100980100422d0a0764657461696c7310151a0d081210001800300050da1d60002001300068007000780080010088010098010042420a076372656174656410161a0d080910001800300050a009600020002a136e6f7728293a3a3a54494d455354414d50545a300068007000780080010088010098010042a0010a2a637264625f696e7465726e616c5f656e645f74696d655f73746172745f74696d655f73686172645f313610171a0c080110201800300050176000200030015a4f6d6f6428666e763332286d643528637264625f696e7465726e616c2e646174756d735f746f5f627974657328656e645f74696d652c2073746172745f74696d652929292c2031363a3a3a494e543829680070007800800101880100980100481852b9030a077072696d61727910011801220e7472616e73616374696f6e5f69642a1a7472616e73616374696f6e5f66696e6765727072696e745f69642a0d71756572795f73756d6d6172792a0c696d706c696369745f74786e2a0a73657373696f6e5f69642a0a73746172745f74696d652a08656e645f74696d652a09757365725f6e616d652a086170705f6e616d652a0d757365725f7072696f726974792a07726574726965732a116c6173745f72657472795f726561736f6e2a0870726f626c656d732a066361757365732a1273746d745f657865637574696f6e5f6964732a0d6370755f73716c5f6e616e6f732a0f6c6173745f6572726f725f636f64652a067374617475732a0f636f6e74656e74696f6e5f74696d652a0f636f6e74656e74696f6e5f696e666f2a0764657461696c732a0763726561746564300140004a10080010001a00200028003000380040005a0070027003700470057006700770087009700a700b700c700d700e700f70107011701270137014701570167a0408002000800100880100900104980101a20106080012001800a80100b20100ba0100c00100c80100d00101e00100e9010000000000000000f201005a97010a1e7472616e73616374696f6e5f66696e6765727072696e745f69645f69647810021800221a7472616e73616374696f6e5f66696e6765727072696e745f69643002380140004a10080010001a00200028003000380040005a007a0408002000800100880100900103980100a20106080012001800a80100b20100ba0100c00100c80100d00100e00100e9010000000000000000f201005af5010a0e74696d655f72616e67655f69647810031800222a637264625f696e7465726e616c5f656e645f74696d655f73746172745f74696d655f73686172645f3136220a73746172745f74696d652208656e645f74696d6530173006300738014000400140014a10080010001a00200028003000380040005a007a0408002000800100880100900103980100a201460801122a637264625f696e7465726e616c5f656e645f74696d655f73746172745f74696d655f73686172645f313618102208656e645f74696d65220a73746172745f74696d65a80100b20100ba0100c00100c80100d00100e00100e9010000000000000000f2010060046a250a0d0a0561646d696e10e00318e0030a0c0a04726f6f7410e00318e00312046e6f64651803800101880103980100a20193020ad401637264625f696e7465726e616c5f656e645f74696d655f73746172745f74696d655f73686172645f313620494e2028303a3a3a494e54382c20313a3a3a494e54382c20323a3a3a494e54382c20333a3a3a494e54382c20343a3a3a494e54382c20353a3a3a494e54382c20363a3a3a494e54382c20373a3a3a494e54382c20383a3a3a494e54382c20393a3a3a494e54382c2031303a3a3a494e54382c2031313a3a3a494e54382c2031323a3a3a494e54382c2031333a3a3a494e54382c2031343a3a3a494e54382c2031353a3a3a494e5438291230636865636b5f637264625f696e7465726e616c5f656e645f74696d655f73746172745f74696d655f73686172645f313618002817300038014002b201e6020a077072696d61727910001a0e7472616e73616374696f6e5f69641a1a7472616e73616374696f6e5f66696e6765727072696e745f69641a0d71756572795f73756d6d6172791a0c696d706c696369745f74786e1a0a73657373696f6e5f69641a0a73746172745f74696d651a08656e645f74696d651a09757365725f6e616d651a086170705f6e616d651a0d757365725f7072696f726974791a07726574726965731a116c6173745f72657472795f726561736f6e1a0870726f626c656d731a066361757365731a1273746d745f657865637574696f6e5f6964731a0d6370755f73716c5f6e616e6f731a0f6c6173745f6572726f725f636f64651a067374617475731a0f636f6e74656e74696f6e5f74696d651a0f636f6e74656e74696f6e5f696e666f1a0764657461696c731a0763726561746564200120022003200420052006200720082009200a200b200c200d200e200f20102011201220132014201520162800b80101c20100e80100f2010408001200f801008002009202009a0200b20200b80200c0021dc80200e00200800300880303a80300b00300d00300d80300e00300f80300880400980400a00400a80400"} -,{"key":"8b89ca8a89","value":"030a9e1e0a1c73746174656d656e745f657865637574696f6e5f696e7369676874731842200128013a00422f0a0a73657373696f6e5f696410011a0c0807100018003000501960002000300068007000780080010088010098010042340a0e7472616e73616374696f6e5f696410021a0d080e100018003000508617600020003000680070007800800100880100980100423f0a1a7472616e73616374696f6e5f66696e6765727072696e745f696410031a0c0808100018003000501160002000300068007000780080010088010098010042310a0c73746174656d656e745f696410041a0c08071000180030005019600020003000680070007800800100880100980100423d0a1873746174656d656e745f66696e6765727072696e745f696410051a0c08081000180030005011600020003000680070007800800100880100980100422c0a0770726f626c656d10061a0c08011040180030005014600020013000680070007800800100880100980100423c0a0663617573657310071a1d080f104018003000380150f8075a0c080110401800300050146000600020013000680070007800800100880100980100422a0a05717565727910081a0c08071000180030005019600020013000680070007800800100880100980100422b0a0673746174757310091a0c0801104018003000501460002001300068007000780080010088010098010042300a0a73746172745f74696d65100a1a0d080910001800300050a009600020013000680070007800800100880100980100422e0a08656e645f74696d65100b1a0d080910001800300050a009600020013000680070007800800100880100980100422e0a0966756c6c5f7363616e100c1a0c08001000180030005010600020013000680070007800800100880100980100422e0a09757365725f6e616d65100d1a0c08071000180030005019600020013000680070007800800100880100980100422d0a086170705f6e616d65100e1a0c0807100018003000501960002001300068007000780080010088010098010042320a0d757365725f7072696f72697479100f1a0c0807100018003000501960002001300068007000780080010088010098010042320a0d64617461626173655f6e616d6510101a0c08071000180030005019600020013000680070007800800100880100980100422e0a09706c616e5f6769737410111a0c08071000180030005019600020013000680070007800800100880100980100422c0a077265747269657310121a0c0801104018003000501460002001300068007000780080010088010098010042360a116c6173745f72657472795f726561736f6e10131a0c0807100018003000501960002001300068007000780080010088010098010042480a12657865637574696f6e5f6e6f64655f69647310141a1d080f104018003000380150f8075a0c080110401800300050146000600020013000680070007800800100880100980100424b0a15696e6465785f7265636f6d6d656e646174696f6e7310151a1d080f100018003000380750f1075a0c08071000180030005019600060002001300068007000780080010088010098010042310a0c696d706c696369745f74786e10161a0c0800100018003000501060002001300068007000780080010088010098010042320a0d6370755f73716c5f6e616e6f7310171a0c08011040180030005014600020013000680070007800800100880100980100422f0a0a6572726f725f636f646510181a0c08071000180030005019600020013000680070007800800100880100980100423b0a0f636f6e74656e74696f6e5f74696d6510191a13080610001800300050a20960006a04080010002001300068007000780080010088010098010042350a0f636f6e74656e74696f6e5f696e666f101a1a0d081210001800300050da1d600020013000680070007800800100880100980100422d0a0764657461696c73101b1a0d081210001800300050da1d60002001300068007000780080010088010098010042420a0763726561746564101c1a0d080910001800300050a009600020002a136e6f7728293a3a3a54494d455354414d50545a300068007000780080010088010098010042a0010a2a637264625f696e7465726e616c5f656e645f74696d655f73746172745f74696d655f73686172645f3136101d1a0c080110201800300050176000200030015a4f6d6f6428666e763332286d643528637264625f696e7465726e616c2e646174756d735f746f5f627974657328656e645f74696d652c2073746172745f74696d652929292c2031363a3a3a494e543829680070007800800101880100980100481e529d040a077072696d61727910011801220c73746174656d656e745f6964220e7472616e73616374696f6e5f69642a0a73657373696f6e5f69642a1a7472616e73616374696f6e5f66696e6765727072696e745f69642a1873746174656d656e745f66696e6765727072696e745f69642a0770726f626c656d2a066361757365732a0571756572792a067374617475732a0a73746172745f74696d652a08656e645f74696d652a0966756c6c5f7363616e2a09757365725f6e616d652a086170705f6e616d652a0d757365725f7072696f726974792a0d64617461626173655f6e616d652a09706c616e5f676973742a07726574726965732a116c6173745f72657472795f726561736f6e2a12657865637574696f6e5f6e6f64655f6964732a15696e6465785f7265636f6d6d656e646174696f6e732a0c696d706c696369745f74786e2a0d6370755f73716c5f6e616e6f732a0a6572726f725f636f64652a0f636f6e74656e74696f6e5f74696d652a0f636f6e74656e74696f6e5f696e666f2a0764657461696c732a076372656174656430043002400040004a10080010001a00200028003000380040005a007001700370057006700770087009700a700b700c700d700e700f7010701170127013701470157016701770187019701a701b701c7a0408002000800100880100900104980101a20106080012001800a80100b20100ba0100c00100c80100d00101e00100e9010000000000000000f201005a7f0a127472616e73616374696f6e5f69645f69647810021800220e7472616e73616374696f6e5f69643002380440004a10080010001a00200028003000380040005a007a0408002000800100880100900103980100a20106080012001800a80100b20100ba0100c00100c80100d00100e00100e9010000000000000000f201005ab7010a1e7472616e73616374696f6e5f66696e6765727072696e745f69645f69647810031800221a7472616e73616374696f6e5f66696e6765727072696e745f6964220a73746172745f74696d652208656e645f74696d653003300a300b380438024000400140014a10080010001a00200028003000380040005a007a0408002000800100880100900103980100a20106080012001800a80100b20100ba0100c00100c80100d00100e00100e9010000000000000000f201005ab3010a1c73746174656d656e745f66696e6765727072696e745f69645f69647810041800221873746174656d656e745f66696e6765727072696e745f6964220a73746172745f74696d652208656e645f74696d653005300a300b380438024000400140014a10080010001a00200028003000380040005a007a0408002000800100880100900103980100a20106080012001800a80100b20100ba0100c00100c80100d00100e00100e9010000000000000000f201005af7010a0e74696d655f72616e67655f69647810051800222a637264625f696e7465726e616c5f656e645f74696d655f73746172745f74696d655f73686172645f3136220a73746172745f74696d652208656e645f74696d65301d300a300b380438024000400140014a10080010001a00200028003000380040005a007a0408002000800100880100900103980100a201460801122a637264625f696e7465726e616c5f656e645f74696d655f73746172745f74696d655f73686172645f313618102208656e645f74696d65220a73746172745f74696d65a80100b20100ba0100c00100c80100d00100e00100e9010000000000000000f2010060066a250a0d0a0561646d696e10e00318e0030a0c0a04726f6f7410e00318e00312046e6f64651803800101880103980100a20193020ad401637264625f696e7465726e616c5f656e645f74696d655f73746172745f74696d655f73686172645f313620494e2028303a3a3a494e54382c20313a3a3a494e54382c20323a3a3a494e54382c20333a3a3a494e54382c20343a3a3a494e54382c20353a3a3a494e54382c20363a3a3a494e54382c20373a3a3a494e54382c20383a3a3a494e54382c20393a3a3a494e54382c2031303a3a3a494e54382c2031313a3a3a494e54382c2031323a3a3a494e54382c2031333a3a3a494e54382c2031343a3a3a494e54382c2031353a3a3a494e5438291230636865636b5f637264625f696e7465726e616c5f656e645f74696d655f73746172745f74696d655f73686172645f31361800281d300038014002b201c8030a077072696d61727910001a0a73657373696f6e5f69641a0e7472616e73616374696f6e5f69641a1a7472616e73616374696f6e5f66696e6765727072696e745f69641a0c73746174656d656e745f69641a1873746174656d656e745f66696e6765727072696e745f69641a0770726f626c656d1a066361757365731a0571756572791a067374617475731a0a73746172745f74696d651a08656e645f74696d651a0966756c6c5f7363616e1a09757365725f6e616d651a086170705f6e616d651a0d757365725f7072696f726974791a0d64617461626173655f6e616d651a09706c616e5f676973741a07726574726965731a116c6173745f72657472795f726561736f6e1a12657865637574696f6e5f6e6f64655f6964731a15696e6465785f7265636f6d6d656e646174696f6e731a0c696d706c696369745f74786e1a0d6370755f73716c5f6e616e6f731a0a6572726f725f636f64651a0f636f6e74656e74696f6e5f74696d651a0f636f6e74656e74696f6e5f696e666f1a0764657461696c731a0763726561746564200120022003200420052006200720082009200a200b200c200d200e200f2010201120122013201420152016201720182019201a201b201c2800b80101c20100e80100f2010408001200f801008002009202009a0200b20200b80200c0021dc80200e00200800300880303a80300b00300d00300d80300e00300f80300880400980400a00400a80400"} -,{"key":"8b89cb8a89","value":"030afd1c0a0e7461626c655f6d657461646174611843200128013a00422a0a0564625f696410011a0c08011040180030005014600020003000680070007800800100880100980100422d0a087461626c655f696410021a0c08011040180030005014600020003000680070007800800100880100980100422c0a0764625f6e616d6510031a0c0807100018003000501960002000300068007000780080010088010098010042300a0b736368656d615f6e616d6510041a0c08071000180030005019600020003000680070007800800100880100980100422f0a0a7461626c655f6e616d6510051a0c0807100018003000501960002000300068007000780080010088010098010042320a0d746f74616c5f636f6c756d6e7310061a0c0801104018003000501460002000300068007000780080010088010098010042320a0d746f74616c5f696e646578657310071a0c08011040180030005014600020003000680070007800800100880100980100423f0a0973746f72655f69647310081a1d080f104018003000380150f8075a0c080110401800300050146000600020003000680070007800800100880100980100423b0a167265706c69636174696f6e5f73697a655f627974657310091a0c0801104018003000501460002000300068007000780080010088010098010042310a0c746f74616c5f72616e676573100a1a0c08011040180030005014600020003000680070007800800100880100980100423a0a15746f74616c5f6c6976655f646174615f6279746573100b1a0c0801104018003000501460002000300068007000780080010088010098010042350a10746f74616c5f646174615f6279746573100c1a0c0801104018003000501460002000300068007000780080010088010098010042340a0e706572635f6c6976655f64617461100d1a0d080210401800300050bd0560002000300068007000780080010088010098010042360a116c6173745f7570646174655f6572726f72100e1a0c0807100018003000501960002001300068007000780080010088010098010042470a0c6c6173745f75706461746564100f1a0d080910001800300050a009600020002a136e6f7728293a3a3a54494d455354414d50545a3000680070007800800100880100980100422f0a0a7461626c655f7479706510101a0c08071000180030005019600020003000680070007800800100880100980100422d0a0764657461696c7310111a0d081210001800300050da1d60002000300068007000780080010088010098010042a4010a2c637264625f696e7465726e616c5f6c6173745f757064617465645f7461626c655f69645f73686172645f313610121a0c080110201800300050176000200030015a516d6f6428666e763332286d643528637264625f696e7465726e616c2e646174756d735f746f5f6279746573287461626c655f69642c206c6173745f757064617465642929292c2031363a3a3a494e543829680070007800800101880100980100481352f5020a077072696d61727910011801220564625f696422087461626c655f69642a0764625f6e616d652a0b736368656d615f6e616d652a0a7461626c655f6e616d652a0d746f74616c5f636f6c756d6e732a0d746f74616c5f696e64657865732a0973746f72655f6964732a167265706c69636174696f6e5f73697a655f62797465732a0c746f74616c5f72616e6765732a15746f74616c5f6c6976655f646174615f62797465732a10746f74616c5f646174615f62797465732a0e706572635f6c6976655f646174612a116c6173745f7570646174655f6572726f722a0c6c6173745f757064617465642a0a7461626c655f747970652a0764657461696c7330013002400040004a10080010001a00200028003000380040005a007003700470057006700770087009700a700b700c700d700e700f701070117a0408002000800100880100900104980101a20106080012001800a80100b20100ba0100c00100c80100d00101e00100e9010000000000000000f201005aa6010a237265706c69636174696f6e5f73697a655f62797465735f7461626c655f69645f6964781002180022167265706c69636174696f6e5f73697a655f627974657322087461626c655f6964300930023801400140004a10080010001a00200028003000380040005a007a0408002000800100880100900103980100a20106080012001800a80100b20100ba0100c00100c80100d00100e00100e9010000000000000000f201005a92010a19746f74616c5f72616e6765735f7461626c655f69645f69647810031800220c746f74616c5f72616e67657322087461626c655f6964300a30023801400140004a10080010001a00200028003000380040005a007a0408002000800100880100900103980100a20106080012001800a80100b20100ba0100c00100c80100d00100e00100e9010000000000000000f201005a94010a1a746f74616c5f636f6c756d6e735f7461626c655f69645f69647810041800220d746f74616c5f636f6c756d6e7322087461626c655f6964300630023801400140004a10080010001a00200028003000380040005a007a0408002000800100880100900103980100a20106080012001800a80100b20100ba0100c00100c80100d00100e00100e9010000000000000000f201005a94010a1a746f74616c5f696e64657865735f7461626c655f69645f69647810051800220d746f74616c5f696e646578657322087461626c655f6964300730023801400140004a10080010001a00200028003000380040005a007a0408002000800100880100900103980100a20106080012001800a80100b20100ba0100c00100c80100d00100e00100e9010000000000000000f201005a92010a15706572635f6c6976655f646174615f69645f69647810061800220e706572635f6c6976655f6461746122087461626c655f6964300d30023801400140004a10080010001a00200028003000380040005a00680d7a0408002000800100880100900103980100a20106080012001800a80100b20100ba0100c00100c80100d00100e00100e9010000000000000000f201005aff010a106c6173745f757064617465645f69647810071800222c637264625f696e7465726e616c5f6c6173745f757064617465645f7461626c655f69645f73686172645f3136220c6c6173745f7570646174656422087461626c655f69643012300f300238014000400140004a10080010001a00200028003000380040005a007a0408002000800100880100900103980100a2014a0801122c637264625f696e7465726e616c5f6c6173745f757064617465645f7461626c655f69645f73686172645f31361810220c6c6173745f7570646174656422087461626c655f6964a80100b20100ba0100c00100c80100d00100e00100e9010000000000000000f201005a760a0b64625f6e616d655f67696e10081800220764625f6e616d6530033801380240004a10080010001a00200028003000380040005a007a0408002000800101880100900103980100a20106080012001800a80100b20100ba0100c00100c80100d00100d80101e00100e9010000000000000000f201005a7c0a0e7461626c655f6e616d655f67696e10091800220a7461626c655f6e616d6530053801380240004a10080010001a00200028003000380040005a007a0408002000800101880100900103980100a20106080012001800a80100b20100ba0100c00100c80100d00100d80101e00100e9010000000000000000f201005a7e0a0f736368656d615f6e616d655f67696e100a1800220b736368656d615f6e616d6530043801380240004a10080010001a00200028003000380040005a007a0408002000800101880100900103980100a20106080012001800a80100b20100ba0100c00100c80100d00100d80101e00100e9010000000000000000f201005a7a0a0d73746f72655f6964735f67696e100b1800220973746f72655f69647330083801380240004a10080010001a00200028003000380040005a007a0408002000800101880100900103980100a20106080012001800a80100b20100ba0100c00100c80100d00100d80100e00100e9010000000000000000f20100600c6a250a0d0a0561646d696e10e00318e0030a0c0a04726f6f7410e00318e00312046e6f64651803800101880103980100a20197020ad601637264625f696e7465726e616c5f6c6173745f757064617465645f7461626c655f69645f73686172645f313620494e2028303a3a3a494e54382c20313a3a3a494e54382c20323a3a3a494e54382c20333a3a3a494e54382c20343a3a3a494e54382c20353a3a3a494e54382c20363a3a3a494e54382c20373a3a3a494e54382c20383a3a3a494e54382c20393a3a3a494e54382c2031303a3a3a494e54382c2031313a3a3a494e54382c2031323a3a3a494e54382c2031333a3a3a494e54382c2031343a3a3a494e54382c2031353a3a3a494e5438291232636865636b5f637264625f696e7465726e616c5f6c6173745f757064617465645f7461626c655f69645f73686172645f313618002812300038014002b201a0020a077072696d61727910001a0564625f69641a087461626c655f69641a0764625f6e616d651a0b736368656d615f6e616d651a0a7461626c655f6e616d651a0d746f74616c5f636f6c756d6e731a0d746f74616c5f696e64657865731a0973746f72655f6964731a167265706c69636174696f6e5f73697a655f62797465731a0c746f74616c5f72616e6765731a15746f74616c5f6c6976655f646174615f62797465731a10746f74616c5f646174615f62797465731a0e706572635f6c6976655f646174611a116c6173745f7570646174655f6572726f721a0c6c6173745f757064617465641a0a7461626c655f747970651a0764657461696c73200120022003200420052006200720082009200a200b200c200d200e200f201020112800b80101c20100e80100f2010408001200f801008002009202009a0200b20200b80200c0021dc80200e00200800300880303a80300b00300d00300d80300e00300f80300880400980400a00400a80400"} -,{"key":"8b89cc8a89","value":"030ab9040a0c6a6f625f70726f67726573731844200128013a00422b0a066a6f625f696410011a0c0801104018003000501460002000300068007000780080010088010098010042420a077772697474656e10021a0d080910001800300050a009600020002a136e6f7728293a3a3a54494d455354414d50545a3000680070007800800100880100980100422e0a086672616374696f6e10031a0d080210401800300050bd05600020013000680070007800800100880100980100422e0a087265736f6c76656410041a0d080310001800300050a40d6000200130006800700078008001008801009801004805528f010a077072696d6172791001180122066a6f625f696422077772697474656e2a086672616374696f6e2a087265736f6c76656430013002400040014a10080010001a00200028003000380040005a00700370047a0408002000800100880100900104980101a20106080012001800a80100b20100ba0100c00100c80100d00101e00100e9010000000000000000f2010060026a250a0d0a0561646d696e10e00318e0030a0c0a04726f6f7410e00318e00312046e6f64651803800101880103980100b2013a0a077072696d61727910001a066a6f625f69641a077772697474656e1a086672616374696f6e1a087265736f6c76656420012002200320042800b80101c20100e80100f2010408001200f801008002009202009a0200b20200b80200c0021dc80200e00200800300880302a80300b00300d00300d80300e00300f80300880400980400a00400a80400"} -,{"key":"8b89cd8a89","value":"030ac1040a146a6f625f70726f67726573735f686973746f72791845200128013a00422b0a066a6f625f696410011a0c0801104018003000501460002000300068007000780080010088010098010042420a077772697474656e10021a0d080910001800300050a009600020002a136e6f7728293a3a3a54494d455354414d50545a3000680070007800800100880100980100422e0a086672616374696f6e10031a0d080210401800300050bd05600020013000680070007800800100880100980100422e0a087265736f6c76656410041a0d080310001800300050a40d6000200130006800700078008001008801009801004805528f010a077072696d6172791001180122066a6f625f696422077772697474656e2a086672616374696f6e2a087265736f6c76656430013002400040014a10080010001a00200028003000380040005a00700370047a0408002000800100880100900104980101a20106080012001800a80100b20100ba0100c00100c80100d00101e00100e9010000000000000000f2010060026a250a0d0a0561646d696e10e00318e0030a0c0a04726f6f7410e00318e00312046e6f64651803800101880103980100b2013a0a077072696d61727910001a066a6f625f69641a077772697474656e1a086672616374696f6e1a087265736f6c76656420012002200320042800b80101c20100e80100f2010408001200f801008002009202009a0200b20200b80200c0021dc80200e00200800300880302a80300b00300d00300d80300e00300f80300880400980400a00400a80400"} -,{"key":"8b89ce8a89","value":"030ae8030a0a6a6f625f7374617475731846200128013a00422b0a066a6f625f696410011a0c0801104018003000501460002000300068007000780080010088010098010042420a077772697474656e10021a0d080910001800300050a009600020002a136e6f7728293a3a3a54494d455354414d50545a3000680070007800800100880100980100422b0a0673746174757310031a0c0807100018003000501960002000300068007000780080010088010098010048045281010a077072696d6172791001180122066a6f625f696422077772697474656e2a0673746174757330013002400040014a10080010001a00200028003000380040005a0070037a0408002000800100880100900104980101a20106080012001800a80100b20100ba0100c00100c80100d00101e00100e9010000000000000000f2010060026a250a0d0a0561646d696e10e00318e0030a0c0a04726f6f7410e00318e00312046e6f64651803800101880103980100b2012c0a077072696d61727910001a066a6f625f69641a077772697474656e1a067374617475732001200220032803b80101c20100e80100f2010408001200f801008002009202009a0200b20200b80200c0021dc80200e00200800300880302a80300b00300d00300d80300e00300f80300880400980400a00400a80400"} -,{"key":"8b89cf8a89","value":"030aa9040a0b6a6f625f6d6573736167651847200128013a00422b0a066a6f625f696410011a0c0801104018003000501460002000300068007000780080010088010098010042420a077772697474656e10021a0d080910001800300050a009600020002a136e6f7728293a3a3a54494d455354414d50545a300068007000780080010088010098010042290a046b696e6410031a0c08071000180030005019600020003000680070007800800100880100980100422c0a076d65737361676510041a0c080710001800300050196000200030006800700078008001008801009801004805528c010a077072696d6172791001180122066a6f625f696422077772697474656e22046b696e642a076d6573736167653001300230034000400140004a10080010001a00200028003000380040005a0070047a0408002000800100880100900104980101a20106080012001800a80100b20100ba0100c00100c80100d00101e00100e9010000000000000000f2010060026a250a0d0a0561646d696e10e00318e0030a0c0a04726f6f7410e00318e00312046e6f64651803800101880103980100b201350a077072696d61727910001a066a6f625f69641a077772697474656e1a046b696e641a076d65737361676520012002200320042804b80101c20100e80100f2010408001200f801008002009202009a0200b20200b80200c0021dc80200e00200800300880302a80300b00300d00300d80300e00300f80300880400980400a00400a80400"} -,{"key":"8b89d08a89","value":"030abd060a1570726570617265645f7472616e73616374696f6e731848200128013a00422e0a09676c6f62616c5f696410011a0c0807100018003000501960002000300068007000780080010088010098010042340a0e7472616e73616374696f6e5f696410021a0d080e10001800300050861760002000300068007000780080010088010098010042340a0f7472616e73616374696f6e5f6b657910031a0c0808100018003000501160002001300068007000780080010088010098010042430a08707265706172656410041a0d080910001800300050a009600020002a136e6f7728293a3a3a54494d455354414d50545a3000680070007800800100880100980100422a0a056f776e657210051a0c08071000180030005019600020003000680070007800800100880100980100422d0a08646174616261736510061a0c08071000180030005019600020003000680070007800800100880100980100422e0a0968657572697374696310071a0c08071000180030005019600020013000680070007800800100880100980100480852c0010a077072696d617279100118012209676c6f62616c5f69642a0e7472616e73616374696f6e5f69642a0f7472616e73616374696f6e5f6b65792a0870726570617265642a056f776e65722a0864617461626173652a09686575726973746963300140004a10080010001a00200028003000380040005a007002700370047005700670077a0408002000800100880100900104980101a20106080012001800a80100b20100ba0100c00100c80100d00101e00100e9010000000000000000f2010060026a210a0b0a0561646d696e102018200a0a0a04726f6f741020182012046e6f64651803800101880103980100b2016d0a077072696d61727910001a09676c6f62616c5f69641a0e7472616e73616374696f6e5f69641a0f7472616e73616374696f6e5f6b65791a0870726570617265641a056f776e65721a0864617461626173651a0968657572697374696320012002200320042005200620072800b80101c20100e80100f2010408001200f801008002009202009a0200b20200b80200c0021dc80200e00200800300880302a80300b00300d00300d80300e00300f80300880400980400a00400a80400"} -,{"key":"8d89888a89","value":"031080808040188080808002220308c0702803500058007801"} -,{"key":"8f898888","value":"01c801"} -,{"key":"90898988","value":"0a2a160c080110001a0020002a004200160673797374656d13021304"} -,{"key":"908a1273797374656d000188","value":"0389"} -,{"key":"908b8a8988","value":"03"} -,{"key":"a68988881273797374656d00018c89","value":"0102"} -,{"key":"a6898988127075626c696300018c89","value":"013a"} -,{"key":"a68989a512636f6d6d656e747300018c89","value":"0130"} -,{"key":"a68989a51264617461626173655f726f6c655f73657474696e677300018c89","value":"0158"} -,{"key":"a68989a51264657363726970746f7200018c89","value":"0106"} -,{"key":"a68989a51264657363726970746f725f69645f73657100018c89","value":"010e"} -,{"key":"a68989a5126576656e746c6f6700018c89","value":"0118"} -,{"key":"a68989a51265787465726e616c5f636f6e6e656374696f6e7300018c89","value":"016a"} -,{"key":"a68989a5126a6f625f696e666f00018c89","value":"016c"} -,{"key":"a68989a5126a6f625f6d65737361676500018c89","value":"018e01"} -,{"key":"a68989a5126a6f625f70726f677265737300018c89","value":"018801"} -,{"key":"a68989a5126a6f625f70726f67726573735f686973746f727900018c89","value":"018a01"} -,{"key":"a68989a5126a6f625f73746174757300018c89","value":"018c01"} -,{"key":"a68989a5126a6f627300018c89","value":"011e"} -,{"key":"a68989a5126a6f696e5f746f6b656e7300018c89","value":"0152"} -,{"key":"a68989a5126c6561736500018c89","value":"0116"} -,{"key":"a68989a5126c6f636174696f6e7300018c89","value":"012a"} -,{"key":"a68989a5126d6967726174696f6e7300018c89","value":"0150"} -,{"key":"a68989a5126d7663635f7374617469737469637300018c89","value":"018001"} -,{"key":"a68989a5126e616d65737061636500018c89","value":"013c"} -,{"key":"a68989a51270726570617265645f7472616e73616374696f6e7300018c89","value":"019001"} -,{"key":"a68989a51270726976696c6567657300018c89","value":"0168"} -,{"key":"a68989a51270726f7465637465645f74735f6d65746100018c89","value":"013e"} -,{"key":"a68989a51270726f7465637465645f74735f7265636f72647300018c89","value":"0140"} -,{"key":"a68989a51272616e67656c6f6700018c89","value":"011a"} -,{"key":"a68989a512726567696f6e5f6c6976656e65737300018c89","value":"0112"} -,{"key":"a68989a5127265706c69636174696f6e5f636f6e73747261696e745f737461747300018c89","value":"0132"} -,{"key":"a68989a5127265706c69636174696f6e5f637269746963616c5f6c6f63616c697469657300018c89","value":"0134"} -,{"key":"a68989a5127265706c69636174696f6e5f737461747300018c89","value":"0136"} -,{"key":"a68989a5127265706f7274735f6d65746100018c89","value":"0138"} -,{"key":"a68989a512726f6c655f69645f73657100018c89","value":"0160"} -,{"key":"a68989a512726f6c655f6d656d6265727300018c89","value":"012e"} -,{"key":"a68989a512726f6c655f6f7074696f6e7300018c89","value":"0142"} -,{"key":"a68989a5127363686564756c65645f6a6f627300018c89","value":"014a"} -,{"key":"a68989a51273657474696e677300018c89","value":"010c"} -,{"key":"a68989a5127370616e5f636f6e66696775726174696f6e7300018c89","value":"015e"} -,{"key":"a68989a5127370616e5f636f756e7400018c89","value":"0166"} -,{"key":"a68989a5127370616e5f73746174735f6275636b65747300018c89","value":"0170"} -,{"key":"a68989a5127370616e5f73746174735f73616d706c657300018c89","value":"0172"} -,{"key":"a68989a5127370616e5f73746174735f74656e616e745f626f756e64617269657300018c89","value":"0174"} -,{"key":"a68989a5127370616e5f73746174735f756e697175655f6b65797300018c89","value":"016e"} -,{"key":"a68989a51273716c5f696e7374616e63657300018c89","value":"015c"} -,{"key":"a68989a51273716c6c6976656e65737300018c89","value":"014e"} -,{"key":"a68989a51273746174656d656e745f616374697669747900018c89","value":"017a"} -,{"key":"a68989a51273746174656d656e745f62756e646c655f6368756e6b7300018c89","value":"0144"} -,{"key":"a68989a51273746174656d656e745f646961676e6f737469637300018c89","value":"0148"} -,{"key":"a68989a51273746174656d656e745f646961676e6f73746963735f726571756573747300018c89","value":"0146"} -,{"key":"a68989a51273746174656d656e745f657865637574696f6e5f696e73696768747300018c89","value":"018401"} -,{"key":"a68989a51273746174656d656e745f7374617469737469637300018c89","value":"0154"} -,{"key":"a68989a5127461626c655f6d6574616461746100018c89","value":"018601"} -,{"key":"a68989a5127461626c655f7374617469737469637300018c89","value":"0128"} -,{"key":"a68989a5127461736b5f7061796c6f61647300018c89","value":"0176"} -,{"key":"a68989a51274656e616e745f69645f73657100018c89","value":"017e"} -,{"key":"a68989a51274656e616e745f73657474696e677300018c89","value":"0164"} -,{"key":"a68989a51274656e616e745f7461736b7300018c89","value":"0178"} -,{"key":"a68989a51274656e616e745f757361676500018c89","value":"015a"} -,{"key":"a68989a51274656e616e747300018c89","value":"0110"} -,{"key":"a68989a5127472616e73616374696f6e5f616374697669747900018c89","value":"017c"} -,{"key":"a68989a5127472616e73616374696f6e5f657865637574696f6e5f696e73696768747300018c89","value":"018201"} -,{"key":"a68989a5127472616e73616374696f6e5f7374617469737469637300018c89","value":"0156"} -,{"key":"a68989a512756900018c89","value":"011c"} -,{"key":"a68989a512757365727300018c89","value":"0108"} -,{"key":"a68989a5127765625f73657373696f6e7300018c89","value":"0126"} -,{"key":"a68989a5127a6f6e657300018c89","value":"010a"} -,{"key":"b8898888","value":"01c801"} -,{"key":"c7898888","value":"0102"} -] \ No newline at end of file diff --git a/pkg/sql/catalog/bootstrap/data/25_2_tenant.sha256 b/pkg/sql/catalog/bootstrap/data/25_2_tenant.sha256 deleted file mode 100644 index 7d2f7e575653..000000000000 --- a/pkg/sql/catalog/bootstrap/data/25_2_tenant.sha256 +++ /dev/null @@ -1 +0,0 @@ -38b943784aaca1b422607a8a4d03a4eb8297bc3322a8d20236a67ce9cdb72587 \ No newline at end of file diff --git a/pkg/sql/catalog/bootstrap/initial_values.go b/pkg/sql/catalog/bootstrap/initial_values.go index 5b1aa7353af2..8ed5990cb80d 100644 --- a/pkg/sql/catalog/bootstrap/initial_values.go +++ b/pkg/sql/catalog/bootstrap/initial_values.go @@ -66,13 +66,6 @@ type initialValuesFactoryFn = func(opts InitialValuesOpts) ( var initialValuesFactoryByKey = map[clusterversion.Key]initialValuesFactoryFn{ clusterversion.Latest: buildLatestInitialValues, - clusterversion.V25_2: hardCodedInitialValues{ - system: v25_2_system_keys, - systemHash: v25_2_system_sha256, - nonSystem: v25_2_tenant_keys, - nonSystemHash: v25_2_tenant_sha256, - }.build, - clusterversion.V25_3: hardCodedInitialValues{ system: v25_3_system_keys, systemHash: v25_3_system_sha256, @@ -144,18 +137,6 @@ func (f hardCodedInitialValues) build( // These files can be auto-generated for the latest version with the // sql-bootstrap-data CLI tool (see pkg/cmd/sql-bootstrap-data). -//go:embed data/25_2_system.keys -var v25_2_system_keys string - -//go:embed data/25_2_system.sha256 -var v25_2_system_sha256 string - -//go:embed data/25_2_tenant.keys -var v25_2_tenant_keys string - -//go:embed data/25_2_tenant.sha256 -var v25_2_tenant_sha256 string - //go:embed data/25_3_system.keys var v25_3_system_keys string diff --git a/pkg/sql/logictest/BUILD.bazel b/pkg/sql/logictest/BUILD.bazel index 827a50cabada..4915a6fa53b3 100644 --- a/pkg/sql/logictest/BUILD.bazel +++ b/pkg/sql/logictest/BUILD.bazel @@ -37,12 +37,8 @@ filegroup( "//conditions:default": [], }), visibility = [ - "//pkg/ccl/logictestccl/tests/cockroach-go-testserver-25.1:__pkg__", - "//pkg/ccl/logictestccl/tests/cockroach-go-testserver-25.2:__pkg__", "//pkg/ccl/logictestccl/tests/cockroach-go-testserver-25.3:__pkg__", "//pkg/ccl/logictestccl/tests/cockroach-go-testserver-25.4:__pkg__", - "//pkg/sql/logictest/tests/cockroach-go-testserver-25.1:__pkg__", - "//pkg/sql/logictest/tests/cockroach-go-testserver-25.2:__pkg__", "//pkg/sql/logictest/tests/cockroach-go-testserver-25.3:__pkg__", "//pkg/sql/logictest/tests/cockroach-go-testserver-25.4:__pkg__", ], diff --git a/pkg/sql/logictest/REPOSITORIES.bzl b/pkg/sql/logictest/REPOSITORIES.bzl index 3d1c6dc5a73b..a38dd03731d9 100644 --- a/pkg/sql/logictest/REPOSITORIES.bzl +++ b/pkg/sql/logictest/REPOSITORIES.bzl @@ -7,12 +7,6 @@ CONFIG_DARWIN_AMD64 = "darwin-10.9-amd64" CONFIG_DARWIN_ARM64 = "darwin-11.0-arm64" _CONFIGS = [ - ("25.2.7", [ - (CONFIG_DARWIN_AMD64, "a6c309843cb1e89f0d620f9235cebc40f55388ae1d250d95c3baebe85563bcd8"), - (CONFIG_DARWIN_ARM64, "101496af1f44e4119e531ab54de2d12034989d6cc1fc70951afa0f5ac97d87c2"), - (CONFIG_LINUX_AMD64, "01059d8dfa480a9c617ed969b159a1b5f9a50b4f8ea2d5da4621815c0392f873"), - (CONFIG_LINUX_ARM64, "4d050fd449f5a9cc4e313a49039e5808404ce6e2cf3a56dded1f2880e45bc77c"), - ]), ("25.3.3", [ (CONFIG_DARWIN_AMD64, "66fb1bc481b70d0201bbe90b77a14bb462e37ed454832049c64a1c7dfa1d0bf4"), (CONFIG_DARWIN_ARM64, "094fcac47f9d5e9d0b53db1f09e7cf9beb68d08a41acd465f38be4b064089f95"), diff --git a/pkg/sql/logictest/logictestbase/logictestbase.go b/pkg/sql/logictest/logictestbase/logictestbase.go index ec5f232a93e7..84eb82f3cc13 100644 --- a/pkg/sql/logictest/logictestbase/logictestbase.go +++ b/pkg/sql/logictest/logictestbase/logictestbase.go @@ -498,21 +498,6 @@ var LogicTestConfigs = []TestClusterConfig{ NumNodes: 15, Localities: multiregion15node5region3azsLocalities, }, - { - // This config runs tests using 25.2 cluster version, simulating a node that - // is operating in a mixed-version cluster. - Name: "local-mixed-25.2", - NumNodes: 1, - OverrideDistSQLMode: "off", - BootstrapVersion: clusterversion.V25_2, - DisableUpgrade: true, - DeclarativeCorpusCollection: true, - // Mixed version clusters do not support disabling schema_locked - // automatically, since we added more statements in 25.3. - // Note: This can be removed once the mixed version level is 25.3, - // since the entire test suite should be compatible. - DisableSchemaLockedByDefault: true, - }, { // This config runs tests using 25.3 cluster version, simulating a node that // is operating in a mixed-version cluster. @@ -533,14 +518,6 @@ var LogicTestConfigs = []TestClusterConfig{ DisableUpgrade: true, DeclarativeCorpusCollection: true, }, - { - // This config runs a cluster with 3 nodes, with a separate process per - // node. The nodes initially start on v25.2. - Name: "cockroach-go-testserver-25.2", - UseCockroachGoTestserver: true, - BootstrapVersion: clusterversion.V25_2, - NumNodes: 3, - }, { // This config runs a cluster with 3 nodes, with a separate process per // node. The nodes initially start on v25.3. @@ -657,7 +634,6 @@ var DefaultConfigSets = map[string]ConfigSet{ "fakedist", "fakedist-vec-off", "fakedist-disk", - "local-mixed-25.2", "local-mixed-25.3", "local-mixed-25.4", ), @@ -691,7 +667,6 @@ var DefaultConfigSets = map[string]ConfigSet{ // Special alias for all testserver configs (for mixed-version testing). "cockroach-go-testserver-configs": makeConfigSet( - "cockroach-go-testserver-25.2", "cockroach-go-testserver-25.3", "cockroach-go-testserver-25.4", ), @@ -699,7 +674,6 @@ var DefaultConfigSets = map[string]ConfigSet{ // Special alias for configs where schema locked is disabled. "schema-locked-disabled": makeConfigSet( "local-legacy-schema-changer", - "local-mixed-25.2", ), } diff --git a/pkg/sql/logictest/testdata/logic_test/alter_table b/pkg/sql/logictest/testdata/logic_test/alter_table index 19d073772603..06574e5568d0 100644 --- a/pkg/sql/logictest/testdata/logic_test/alter_table +++ b/pkg/sql/logictest/testdata/logic_test/alter_table @@ -5252,7 +5252,6 @@ statement ok ALTER TABLE tbl_with_unique_without_index ADD CONSTRAINT c UNIQUE WITHOUT INDEX (i, j) WHERE i IS NOT NULL; skipif config local-mixed-25.3 -skipif config local-mixed-25.2 skipif config local-legacy-schema-changer statement ok ALTER TABLE tbl_with_unique_without_index DROP CONSTRAINT c, DROP COLUMN i; diff --git a/pkg/sql/logictest/testdata/logic_test/computed b/pkg/sql/logictest/testdata/logic_test/computed index 701382ff601f..71826de7b2a4 100644 --- a/pkg/sql/logictest/testdata/logic_test/computed +++ b/pkg/sql/logictest/testdata/logic_test/computed @@ -1460,7 +1460,7 @@ id col_to_drop computed_col # In versions older than 25.4, we cannot drop 'col_to_drop' and 'computed_col' # (as a cascade) in the same statement. We drop them separately. Newer versions # can do this due to a change in the dep rules. -onlyif config local-mixed-25.3 local-mixed-25.2 local-legacy-schema-changer +onlyif config local-mixed-25.3 local-legacy-schema-changer statement ok ALTER TABLE test_table DROP COLUMN computed_col @@ -1514,7 +1514,7 @@ INSERT INTO test_virtual (id, col_to_drop, other_col) VALUES (1, 'virtual1', 300 # In versions older than 25.4, we cannot drop 'col_to_drop' and 'computed_col' # (as a cascade) in the same statement. We drop them separately. Newer versions # can do this due to a change in the dep rules. -onlyif config local-mixed-25.3 local-mixed-25.2 local-legacy-schema-changer +onlyif config local-mixed-25.3 local-legacy-schema-changer statement ok ALTER TABLE test_virtual DROP COLUMN computed_col diff --git a/pkg/sql/logictest/testdata/logic_test/crdb_internal b/pkg/sql/logictest/testdata/logic_test/crdb_internal index 3b41435ebb32..b1a1070e8210 100644 --- a/pkg/sql/logictest/testdata/logic_test/crdb_internal +++ b/pkg/sql/logictest/testdata/logic_test/crdb_internal @@ -1777,7 +1777,6 @@ subtest end subtest cluster_inspect_errors_view -skipif config local-mixed-25.2 skipif config local-mixed-25.3 query TT colnames SELECT column_name, data_type @@ -1797,7 +1796,6 @@ primary_key text details jsonb crdb_internal_expiration timestamp with time zone -skipif config local-mixed-25.2 skipif config local-mixed-25.3 statement ok SELECT count(*) FROM crdb_internal.cluster_inspect_errors diff --git a/pkg/sql/logictest/testdata/logic_test/crdb_internal_catalog b/pkg/sql/logictest/testdata/logic_test/crdb_internal_catalog index 4d20bef34e95..0bf52b83b43f 100644 --- a/pkg/sql/logictest/testdata/logic_test/crdb_internal_catalog +++ b/pkg/sql/logictest/testdata/logic_test/crdb_internal_catalog @@ -106,7 +106,6 @@ $$; # unconditionally dump the entire catalog as this makes the test brittle to any # change anywhere in the catalog, creating a maintence burden and making it # unsuable in mixed versions. -skipif config local-mixed-25.2 onlyif config schema-locked-disabled query IT SELECT id, strip_volatile(descriptor) FROM crdb_internal.kv_catalog_descriptor WHERE id IN (1, 2, 3, 29, 4294966962) OR (id > 100 and id < 200) ORDER BY id diff --git a/pkg/sql/logictest/testdata/logic_test/drop_user b/pkg/sql/logictest/testdata/logic_test/drop_user index a0ddbc666757..bd86b7c4357c 100644 --- a/pkg/sql/logictest/testdata/logic_test/drop_user +++ b/pkg/sql/logictest/testdata/logic_test/drop_user @@ -1,7 +1,6 @@ statement ok CREATE USER user1 -skipif config local-mixed-25.2 query TTT colnames,rowsort select username, options, member_of from [SHOW USERS] ---- @@ -14,7 +13,6 @@ user1 {} {} statement ok DROP USER user1 -skipif config local-mixed-25.2 query TTT colnames,rowsort select username, options, member_of from [SHOW USERS] ---- @@ -26,7 +24,6 @@ testuser {} {} statement ok CREATE USER user1 -skipif config local-mixed-25.2 query TTT colnames,rowsort select username, options, member_of from [SHOW USERS] ---- @@ -39,7 +36,6 @@ user1 {} {} statement ok DROP USER USEr1 -skipif config local-mixed-25.2 query TTT colnames,rowsort select username, options, member_of from [SHOW USERS] ---- @@ -87,7 +83,6 @@ CREATE USER user3 statement ok CREATE USER user4 -skipif config local-mixed-25.2 query TTT colnames,rowsort select username, options, member_of from [SHOW USERS] ---- @@ -103,7 +98,6 @@ user4 {} {} statement ok DROP USER user1,user2 -skipif config local-mixed-25.2 query TTT colnames,rowsort select username, options, member_of from [SHOW USERS] ---- @@ -117,7 +111,6 @@ user4 {} {} statement error user "user1" does not exist DROP USER user1,user3 -skipif config local-mixed-25.2 query TTT colnames,rowsort select username, options, member_of from [SHOW USERS] ---- @@ -155,7 +148,6 @@ statement ok PREPARE du AS DROP USER user4; EXECUTE du -skipif config local-mixed-25.2 query TTT colnames,rowsort select username, options, member_of from [SHOW USERS] ---- diff --git a/pkg/sql/logictest/testdata/logic_test/fk b/pkg/sql/logictest/testdata/logic_test/fk index 20f1fcc0b75a..fe97a80aba1c 100644 --- a/pkg/sql/logictest/testdata/logic_test/fk +++ b/pkg/sql/logictest/testdata/logic_test/fk @@ -754,13 +754,11 @@ orders orders_product_fkey FOREIGN KEY FOREIGN KEY (product) REFERENC orders valid_customer FOREIGN KEY FOREIGN KEY (customer) REFERENCES customers(id) true skipif config local-legacy-schema-changer -skipif config local-mixed-25.2 skipif config local-mixed-25.3 statement error pq: "products_upc_key" is referenced by foreign key from table "delivery" DROP INDEX products@products_upc_key skipif config local-legacy-schema-changer -skipif config local-mixed-25.2 skipif config local-mixed-25.3 statement error pq: "products_upc_key" is referenced by foreign key from table "delivery" DROP INDEX products@products_upc_key RESTRICT diff --git a/pkg/sql/logictest/testdata/logic_test/information_schema b/pkg/sql/logictest/testdata/logic_test/information_schema index e488fd224c19..59a02a4ccd74 100644 --- a/pkg/sql/logictest/testdata/logic_test/information_schema +++ b/pkg/sql/logictest/testdata/logic_test/information_schema @@ -1279,7 +1279,6 @@ NULL NULL UTF8 UCS NULL NULL UTF8 UCS UTF8 test NULL NULL -skipif config local-mixed-25.2 skipif config local-mixed-25.3 query TTTT colnames SELECT * @@ -1623,7 +1622,6 @@ table_catalog table_schema table_name column_name constraint_catalog cons system public locations localityKey system public primary system public locations localityValue system public primary -skipif config local-mixed-25.2 skipif config local-mixed-25.3 query TTTT colnames SELECT * @@ -3627,7 +3625,6 @@ p_out_result NULL p_complex_default length('test':::STRING) p_function_default length('hello':::STRING) -skipif config local-mixed-25.2 query TTTTTTTT colnames,rowsort SELECT * FROM system.information_schema.column_privileges WHERE table_name = 'eventlog' ---- diff --git a/pkg/sql/logictest/testdata/logic_test/mixed_version_char b/pkg/sql/logictest/testdata/logic_test/mixed_version_char index 349574b1bcee..a1e3050d93e9 100644 --- a/pkg/sql/logictest/testdata/logic_test/mixed_version_char +++ b/pkg/sql/logictest/testdata/logic_test/mixed_version_char @@ -1,4 +1,4 @@ -# LogicTest: cockroach-go-testserver-25.2 +# LogicTest: cockroach-go-testserver-25.3 subtest regression_152629 diff --git a/pkg/sql/logictest/testdata/logic_test/mixed_version_citext b/pkg/sql/logictest/testdata/logic_test/mixed_version_citext index 6237aaf86478..e4e2c6722950 100644 --- a/pkg/sql/logictest/testdata/logic_test/mixed_version_citext +++ b/pkg/sql/logictest/testdata/logic_test/mixed_version_citext @@ -1,4 +1,4 @@ -# LogicTest: cockroach-go-testserver-25.2 +# LogicTest: cockroach-go-testserver-25.3 # Sanity check that CITEXT type is only allowed to be used once the cluster is # upgraded to 25.3. diff --git a/pkg/sql/logictest/testdata/logic_test/mixed_version_ltree b/pkg/sql/logictest/testdata/logic_test/mixed_version_ltree index 5c24e4d0d584..0c1e96ea5825 100644 --- a/pkg/sql/logictest/testdata/logic_test/mixed_version_ltree +++ b/pkg/sql/logictest/testdata/logic_test/mixed_version_ltree @@ -1,4 +1,4 @@ -# LogicTest: cockroach-go-testserver-25.2 cockroach-go-testserver-25.3 +# LogicTest: cockroach-go-testserver-25.3 # Sanity check that LTREE type is only allowed to be used once the cluster is # upgraded to 25.4. diff --git a/pkg/sql/logictest/testdata/logic_test/mixed_version_partial_stats b/pkg/sql/logictest/testdata/logic_test/mixed_version_partial_stats index 7338a2e19ecc..325b5100bd0a 100644 --- a/pkg/sql/logictest/testdata/logic_test/mixed_version_partial_stats +++ b/pkg/sql/logictest/testdata/logic_test/mixed_version_partial_stats @@ -1,4 +1,4 @@ -# LogicTest: cockroach-go-testserver-25.2 cockroach-go-testserver-25.3 +# LogicTest: cockroach-go-testserver-25.3 # Sanity check that partial stats with a WHERE clause can only be collected once # the cluster is upgraded to 25.4. diff --git a/pkg/sql/logictest/testdata/logic_test/owner b/pkg/sql/logictest/testdata/logic_test/owner index e0fb1b0d7cd9..8939697bd783 100644 --- a/pkg/sql/logictest/testdata/logic_test/owner +++ b/pkg/sql/logictest/testdata/logic_test/owner @@ -258,34 +258,27 @@ DROP ROLE testuser user root -skipif config local-mixed-25.2 let $testuser_job_id SELECT id FROM system.jobs WHERE owner = 'testuser' LIMIT 1 -skipif config local-mixed-25.2 let $testuser2_job_id SELECT id FROM system.jobs WHERE owner = 'testuser2' LIMIT 1 -skipif config local-mixed-25.2 let $node_job_id SELECT id FROM system.jobs WHERE owner = 'node' LIMIT 1 -skipif config local-mixed-25.2 # Verify a simple transfer by an admin from testuser to testuser2 and back. statement ok ALTER JOB $testuser_job_id OWNER TO testuser2 -skipif config local-mixed-25.2 query T SELECT owner FROM system.jobs WHERE id = $testuser_job_id ---- testuser2 -skipif config local-mixed-25.2 statement ok ALTER JOB $testuser_job_id OWNER TO testuser -skipif config local-mixed-25.2 query T SELECT owner FROM system.jobs WHERE id = $testuser_job_id ---- @@ -293,11 +286,9 @@ testuser # Verify that ownership cannot transfer to or from 'node'. -skipif config local-mixed-25.2 statement error cannot transfer ownership ALTER JOB $node_job_id OWNER TO testuser -skipif config local-mixed-25.2 statement error cannot transfer ownership ALTER JOB $testuser_job_id OWNER TO node @@ -316,32 +307,26 @@ CREATE USER testuser3 statement ok GRANT testrole TO testuser3 -skipif config local-mixed-25.2 statement ok ALTER JOB $testuser_job_id OWNER TO testrole -skipif config local-mixed-25.2 query T SELECT owner FROM system.jobs WHERE id = $testuser_job_id ---- testrole -skipif config local-mixed-25.2 # Verify testuser2 can transfer ownership to themselves and back to testuser. statement ok ALTER JOB $testuser_job_id OWNER TO testuser2 -skipif config local-mixed-25.2 query T SELECT owner FROM system.jobs WHERE id = $testuser_job_id ---- testuser2 -skipif config local-mixed-25.2 statement ok ALTER JOB $testuser_job_id OWNER TO testuser -skipif config local-mixed-25.2 query T SELECT owner FROM system.jobs WHERE id = $testuser_job_id ---- @@ -349,7 +334,6 @@ testuser user testuser3 -skipif config local-mixed-25.2 # Verify testuser3 cannot transfer since they do not own it, including via role. statement error testuser3 does not own job ALTER JOB $testuser_job_id OWNER TO testuser3 @@ -357,17 +341,14 @@ ALTER JOB $testuser_job_id OWNER TO testuser3 # Now move ownership to testrole so testuser3 can transfer it. user testuser2 -skipif config local-mixed-25.2 statement ok ALTER JOB $testuser_job_id OWNER TO testrole user testuser3 -skipif config local-mixed-25.2 statement ok ALTER JOB $testuser_job_id OWNER TO testuser3 -skipif config local-mixed-25.2 # Verify testuser3, who is not an admin, cannot transfer to otherrole which they # are not a member of. statement error testuser3 cannot transfer ownership to otherrole diff --git a/pkg/sql/logictest/testdata/logic_test/rename_column b/pkg/sql/logictest/testdata/logic_test/rename_column index 2adeb17cd92c..27660035c7c9 100644 --- a/pkg/sql/logictest/testdata/logic_test/rename_column +++ b/pkg/sql/logictest/testdata/logic_test/rename_column @@ -239,13 +239,13 @@ CREATE TABLE rename_add_alter_pk_tbl (a INT PRIMARY KEY, b INT, FAMILY f (a, b)) statement ok INSERT INTO rename_add_alter_pk_tbl VALUES (1, 10), (2, 20); -skipif config local-legacy-schema-changer local-mixed-25.2 local-mixed-25.3 local-mixed-25.4 +skipif config local-legacy-schema-changer local-mixed-25.3 local-mixed-25.4 statement ok ALTER TABLE rename_add_alter_pk_tbl RENAME COLUMN a TO b_old, ADD COLUMN a INT NOT NULL DEFAULT 0, ALTER PRIMARY KEY USING COLUMNS (b_old); -skipif config local-legacy-schema-changer local-mixed-25.2 local-mixed-25.3 local-mixed-25.4 +skipif config local-legacy-schema-changer local-mixed-25.3 local-mixed-25.4 query III colnames,rowsort SELECT b_old, b, a FROM rename_add_alter_pk_tbl; ---- @@ -253,7 +253,7 @@ b_old b a 1 10 0 2 20 0 -skipif config local-legacy-schema-changer local-mixed-25.2 local-mixed-25.3 local-mixed-25.4 +skipif config local-legacy-schema-changer local-mixed-25.3 local-mixed-25.4 query TTBITTTBBBF colnames,rowsort SHOW INDEXES FROM rename_add_alter_pk_tbl; ---- @@ -262,7 +262,7 @@ rename_add_alter_pk_tbl rename_add_alter_pk_tbl_pkey false 1 rename_add_alter_pk_tbl rename_add_alter_pk_tbl_pkey false 2 b b N/A true false true 1 rename_add_alter_pk_tbl rename_add_alter_pk_tbl_pkey false 3 a a N/A true false true 1 -skipif config local-legacy-schema-changer local-mixed-25.2 local-mixed-25.3 local-mixed-25.4 +skipif config local-legacy-schema-changer local-mixed-25.3 local-mixed-25.4 query T SELECT create_statement FROM [SHOW CREATE TABLE rename_add_alter_pk_tbl]; ---- @@ -274,17 +274,17 @@ CREATE TABLE public.rename_add_alter_pk_tbl ( FAMILY f (b_old, b, a) ) WITH (schema_locked = true); -skipif config local-legacy-schema-changer local-mixed-25.2 local-mixed-25.3 local-mixed-25.4 +skipif config local-legacy-schema-changer local-mixed-25.3 local-mixed-25.4 statement ok UPDATE rename_add_alter_pk_tbl SET a = 10 WHERE b_old = 2; -skipif config local-legacy-schema-changer local-mixed-25.2 local-mixed-25.3 local-mixed-25.4 +skipif config local-legacy-schema-changer local-mixed-25.3 local-mixed-25.4 statement ok ALTER TABLE rename_add_alter_pk_tbl RENAME COLUMN b_old TO b_orig, ADD COLUMN b_old INT NOT NULL DEFAULT 100, ALTER PRIMARY KEY USING COLUMNS (a); -skipif config local-legacy-schema-changer local-mixed-25.2 local-mixed-25.3 local-mixed-25.4 +skipif config local-legacy-schema-changer local-mixed-25.3 local-mixed-25.4 query IIII colnames,rowsort SELECT b_old, b_orig, a, b FROM rename_add_alter_pk_tbl; ---- @@ -292,7 +292,7 @@ b_old b_orig a b 100 1 0 10 100 2 10 20 -skipif config local-legacy-schema-changer local-mixed-25.2 local-mixed-25.3 local-mixed-25.4 +skipif config local-legacy-schema-changer local-mixed-25.3 local-mixed-25.4 query T SELECT create_statement FROM [SHOW CREATE TABLE rename_add_alter_pk_tbl]; ---- diff --git a/pkg/sql/logictest/testdata/logic_test/rename_sequence b/pkg/sql/logictest/testdata/logic_test/rename_sequence index 9574f6e862e7..56d82b05fd6b 100644 --- a/pkg/sql/logictest/testdata/logic_test/rename_sequence +++ b/pkg/sql/logictest/testdata/logic_test/rename_sequence @@ -27,10 +27,10 @@ ALTER VIEW foo RENAME TO bar # The legacy schema changer was more strict about using ALTER TABLE to rename # a sequence. Since Postgres allows that, the declarative schema changer # supports it. -onlyif config local-legacy-schema-changer local-mixed-25.2 local-mixed-25.3 +onlyif config local-legacy-schema-changer local-mixed-25.3 statement error pgcode 42809 "foo" is not a table ALTER TABLE foo RENAME TO bar -skipif config local-legacy-schema-changer local-mixed-25.2 local-mixed-25.3 +skipif config local-legacy-schema-changer local-mixed-25.3 statement ok ALTER TABLE foo RENAME TO bar diff --git a/pkg/sql/logictest/testdata/logic_test/role b/pkg/sql/logictest/testdata/logic_test/role index 973242231203..42b5f45ec866 100644 --- a/pkg/sql/logictest/testdata/logic_test/role +++ b/pkg/sql/logictest/testdata/logic_test/role @@ -1,4 +1,4 @@ -# LogicTest: local local-mixed-25.2 local-mixed-25.3 local-mixed-25.4 3node-tenant +# LogicTest: local local-mixed-25.3 local-mixed-25.4 3node-tenant statement error a role/user named admin already exists CREATE ROLE admin @@ -24,7 +24,6 @@ DROP ROLE admin, root statement ok CREATE ROLE myrole -skipif config local-mixed-25.2 query TTT colnames,rowsort select username, options, member_of from [SHOW ROLES] ---- @@ -55,7 +54,6 @@ CREATE USER IF NOT EXISTS myrole statement error pq: cannot drop roles/users admin, myrole: grants still exist on .* DROP ROLE admin, myrole -skipif config local-mixed-25.2 query TTT colnames,rowsort select username, options, member_of from [SHOW ROLES] ---- @@ -68,7 +66,6 @@ testuser {} {} statement ok DROP ROLE myrole -skipif config local-mixed-25.2 query TTT colnames,rowsort select username, options, member_of from [SHOW ROLES] ---- @@ -104,7 +101,6 @@ DROP ROLE IF EXISTS rolec, roled, rolee statement ok DROP ROLE rolea, roleb -skipif config local-mixed-25.2 query TTT colnames,rowsort select username, options, member_of from [SHOW ROLES] ---- @@ -113,7 +109,6 @@ admin {} {} root {} {admin} testuser {} {} -skipif config local-mixed-25.2 query T noticetrace SHOW ROLES ---- @@ -501,7 +496,6 @@ role member isAdmin admin root true roled testuser false -skipif config local-mixed-25.2 query TTT rowsort select username, options, member_of from [SHOW ROLES] ---- @@ -1532,31 +1526,25 @@ subtest end subtest validate_alter_provisioned_user_restrictions -skipif config local-mixed-25.2 # Changing PROVISIONSRC privilege for provisioned users is disallowed even for # ADMIN users, they can only be dropped. statement ok DROP ROLE testuser -skipif config local-mixed-25.2 statement ok CREATE USER testuser with PROVISIONSRC 'ldap:example.com' -skipif config local-mixed-25.2 statement error pq: cannot alter PASSWORD/PROVISIONSRC option for provisioned user testuser ALTER ROLE testuser WITH PROVISIONSRC 'ldap:example.com' -skipif config local-mixed-25.2 statement ok SET ROLE testuser -skipif config local-mixed-25.2 # Changing users with SET ROLE should now disallow self-password/provisionsrc # change as role has a PROVISIONSRC privilege. statement error pq: cannot alter PASSWORD/PROVISIONSRC option for provisioned user testuser ALTER USER testuser PASSWORD 'cat' -skipif config local-mixed-25.2 statement error pq: cannot alter PASSWORD/PROVISIONSRC option for provisioned user testuser ALTER USER testuser PROVISIONSRC 'ldap:example2.com' @@ -1565,30 +1553,24 @@ RESET ROLE user testuser -skipif config local-mixed-25.2 # Verify that now provisioned testuser can't change its own password or provisionsrc. statement error pq: cannot alter PASSWORD/PROVISIONSRC option for provisioned user testuser ALTER USER testuser PASSWORD 'xyz' -skipif config local-mixed-25.2 statement error pq: cannot alter PASSWORD/PROVISIONSRC option for provisioned user testuser ALTER USER CURRENT_USER PASSWORD '123' -skipif config local-mixed-25.2 statement error pq: cannot alter PASSWORD/PROVISIONSRC option for provisioned user testuser ALTER USER testuser PROVISIONSRC 'ldap:example2.com' -skipif config local-mixed-25.2 # Verify that provisioned testuser still cannot *remove* its own password. statement error pq: cannot alter PASSWORD/PROVISIONSRC option for provisioned user testuser ALTER USER testuser PASSWORD NULL -skipif config local-mixed-25.2 # testuser still cannot change another user's password. statement error pq: user testuser does not have CREATEROLE privilege ALTER USER testuser2 WITH PASSWORD 'abc' -skipif config local-mixed-25.2 # Verify that testuser still cannot modify other role options of itself. statement error pq: cannot alter PASSWORD/PROVISIONSRC option for provisioned user testuser ALTER USER testuser PASSWORD 'abc' VALID UNTIL '4044-10-31' @@ -1962,20 +1944,16 @@ subtest end subtest provisionsrc skipif config 3node-tenant -skipif config local-mixed-25.2 statement ok CREATE ROLE role_with_provisioning PROVISIONSRC 'ldap:ldap.example.com' skipif config 3node-tenant -skipif config local-mixed-25.2 statement ok ALTER ROLE testuser PROVISIONSRC 'ldap:ldap.example.com' -onlyif config local-mixed-25.2 statement error PROVISIONSRC role option is only supported after v25.3 upgrade is finalized CREATE ROLE role_with_provisioning PROVISIONSRC 'ldap:ldap.example.com' -onlyif config local-mixed-25.2 statement error PROVISIONSRC role option is only supported after v25.3 upgrade is finalized ALTER ROLE testuser PROVISIONSRC 'ldap:ldap.example.com' diff --git a/pkg/sql/logictest/testdata/logic_test/schema b/pkg/sql/logictest/testdata/logic_test/schema index 3dbff77e3c1b..bb67138c4ecd 100644 --- a/pkg/sql/logictest/testdata/logic_test/schema +++ b/pkg/sql/logictest/testdata/logic_test/schema @@ -1555,7 +1555,6 @@ skipif config local-legacy-schema-changer statement ok CREATE TRIGGER trigger_w4_521 BEFORE UPDATE OR DELETE ON drop_schema_with_triggers.t1 FOR EACH ROW EXECUTE FUNCTION drop_schema_with_triggers.trigger_function_w4_520(); -skipif config local-mixed-25.2 skipif config local-mixed-25.3 skipif config local-legacy-schema-changer statement ok diff --git a/pkg/sql/logictest/testdata/logic_test/schema_locked b/pkg/sql/logictest/testdata/logic_test/schema_locked index 2450f82fb0dd..6ab1f4c09931 100644 --- a/pkg/sql/logictest/testdata/logic_test/schema_locked +++ b/pkg/sql/logictest/testdata/logic_test/schema_locked @@ -2,11 +2,9 @@ # Intentionally set this to true in 25.2, this setting # should be ignored. -onlyif config local-mixed-25.2 statement ok SET create_table_with_schema_locked=true -skipif config local-mixed-25.2 statement ok SET create_table_with_schema_locked=false diff --git a/pkg/sql/logictest/testdata/logic_test/show_inspect_errors b/pkg/sql/logictest/testdata/logic_test/show_inspect_errors index 4e628fe64fe7..2dbffb9a0773 100644 --- a/pkg/sql/logictest/testdata/logic_test/show_inspect_errors +++ b/pkg/sql/logictest/testdata/logic_test/show_inspect_errors @@ -1,10 +1,10 @@ -onlyif config local-mixed-25.2 local-mixed-25.3 +onlyif config local-mixed-25.3 statement error pq: SHOW INSPECT ERRORS requires the cluster to be upgraded to v25.4 SHOW INSPECT ERRORS user testuser -skipif config local-mixed-25.2 local-mixed-25.3 +skipif config local-mixed-25.3 statement error pq: user testuser does not have INSPECT system privilege SHOW INSPECT ERRORS @@ -13,7 +13,7 @@ user root statement ok GRANT SYSTEM INSPECT TO testuser; -skipif config local-mixed-25.2 local-mixed-25.3 +skipif config local-mixed-25.3 statement error relation "bad_table" does not exist SHOW INSPECT ERRORS FOR TABLE bad_table @@ -57,7 +57,7 @@ VALUES ( ) ); -skipif config local-mixed-25.2 local-mixed-25.3 +skipif config local-mixed-25.3 statement ok INSERT INTO system.inspect_errors (job_id, error_type, aost, database_id, schema_id, id, details) VALUES @@ -83,7 +83,7 @@ VALUES ( ) ); -skipif config local-mixed-25.2 local-mixed-25.3 +skipif config local-mixed-25.3 statement ok INSERT INTO system.inspect_errors (job_id, error_type, aost, database_id, schema_id, id, details) VALUES (666, '666_foo', '$aost', $database_id, $schema_id, $foo_table_id, '{"detail1":"\u2603 666_foo_1","detail2":"\n666_foo_2"}'); @@ -107,7 +107,7 @@ VALUES ( ) ); -skipif config local-mixed-25.2 local-mixed-25.3 +skipif config local-mixed-25.3 statement ok INSERT INTO system.inspect_errors (job_id, error_type, aost, database_id, schema_id, id, details) VALUES (777, '777_foo', '$aost', $database_id, $schema_id, $foo_table_id, '{"detail":"777 foo"}'); @@ -115,14 +115,14 @@ VALUES (777, '777_foo', '$aost', $database_id, $schema_id, $foo_table_id, '{"det user testuser # no options should show most records from the recent completed job -skipif config local-mixed-25.2 local-mixed-25.3 +skipif config local-mixed-25.3 query TTTTTIT colnames SHOW INSPECT ERRORS ---- error_type database_name schema_name table_name primary_key job_id aost 666_foo test public foo NULL 666 2025-09-23 04:00:00.000000 -skipif config local-mixed-25.2 local-mixed-25.3 +skipif config local-mixed-25.3 query TTTTTITT colnames SHOW INSPECT ERRORS WITH DETAILS ---- @@ -133,13 +133,13 @@ error_type database_name schema_name table_name primary_key job_id aost } # specifying a job shows results regardless of status -skipif config local-mixed-25.2 local-mixed-25.3 +skipif config local-mixed-25.3 query TTTTTIT SHOW INSPECT ERRORS FOR JOB 777 ---- 777_foo test public foo NULL 777 2025-09-23 04:00:00.000000 -skipif config local-mixed-25.2 local-mixed-25.3 +skipif config local-mixed-25.3 query TTTTTIT nosort SHOW INSPECT ERRORS FOR JOB 555 ---- @@ -147,32 +147,32 @@ SHOW INSPECT ERRORS FOR JOB 555 555_foo test public foo NULL 555 2025-09-23 04:00:00.000000 # query by table shows records from the most recent completed job that reported errors on that table -skipif config local-mixed-25.2 local-mixed-25.3 +skipif config local-mixed-25.3 query TTTTTIT SHOW INSPECT ERRORS FOR TABLE foo ---- 666_foo test public foo NULL 666 2025-09-23 04:00:00.000000 # and query by table only shows records for that given table -skipif config local-mixed-25.2 local-mixed-25.3 +skipif config local-mixed-25.3 query TTTTTIT SHOW INSPECT ERRORS FOR TABLE bar ---- 555_bar test public bar NULL 555 2025-09-23 04:00:00.000000 -skipif config local-mixed-25.2 local-mixed-25.3 +skipif config local-mixed-25.3 query TTTTTIT SHOW INSPECT ERRORS FOR TABLE public.bar ---- 555_bar test public bar NULL 555 2025-09-23 04:00:00.000000 -skipif config local-mixed-25.2 local-mixed-25.3 +skipif config local-mixed-25.3 query TTTTTIT SHOW INSPECT ERRORS FOR TABLE test.public.bar ---- 555_bar test public bar NULL 555 2025-09-23 04:00:00.000000 -skipif config local-mixed-25.2 local-mixed-25.3 +skipif config local-mixed-25.3 query TTTTTITT colnames SHOW INSPECT ERRORS FOR TABLE foo FOR JOB 555 WITH DETAILS ---- @@ -214,13 +214,13 @@ user testuser # Now query for foo errors without specifying a job. # Even though job 666 has errors for foo, job 888 is the most recent completed job # that inspected foo, so we should get no results. -skipif config local-mixed-25.2 local-mixed-25.3 +skipif config local-mixed-25.3 query TTTTTIT SHOW INSPECT ERRORS FOR TABLE foo ---- # Verify we can still get job 666's errors by specifying the job explicitly. -skipif config local-mixed-25.2 local-mixed-25.3 +skipif config local-mixed-25.3 query TTTTTIT SHOW INSPECT ERRORS FOR TABLE foo FOR JOB 666 ---- @@ -253,18 +253,18 @@ VALUES ( user testuser -skipif config local-mixed-25.2 local-mixed-25.3 +skipif config local-mixed-25.3 query TTTTTIT SHOW INSPECT ERRORS FOR TABLE foo ---- -skipif config local-mixed-25.2 local-mixed-25.3 +skipif config local-mixed-25.3 query TTTTTIT SHOW INSPECT ERRORS FOR TABLE bar ---- 555_bar test public bar NULL 555 2025-09-23 04:00:00.000000 -skipif config local-mixed-25.2 local-mixed-25.3 +skipif config local-mixed-25.3 query TTTTTIT SHOW INSPECT ERRORS FOR JOB 999 ---- diff --git a/pkg/sql/logictest/testdata/logic_test/show_source b/pkg/sql/logictest/testdata/logic_test/show_source index 77d6bd40f3d8..1f4a2329c052 100644 --- a/pkg/sql/logictest/testdata/logic_test/show_source +++ b/pkg/sql/logictest/testdata/logic_test/show_source @@ -502,7 +502,6 @@ v CREATE VIEW public.v ( ) AS SELECT id FROM system.public.descriptor; -skipif config local-mixed-25.2 query TTT colnames SELECT username,options,member_of FROM [SHOW USERS] ORDER BY 1 ---- diff --git a/pkg/sql/logictest/testdata/logic_test/split_at b/pkg/sql/logictest/testdata/logic_test/split_at index c3cfd7e7c729..f14bc5a57a72 100644 --- a/pkg/sql/logictest/testdata/logic_test/split_at +++ b/pkg/sql/logictest/testdata/logic_test/split_at @@ -5,7 +5,6 @@ statement ok CREATE TABLE t (a INT PRIMARY KEY) -skipif config local-mixed-25.2 skipif config local-mixed-25.3 query TTTI colnames,rowsort SELECT start_key, end_key, replicas, lease_holder FROM [SHOW RANGES FROM TABLE t WITH DETAILS] @@ -21,7 +20,6 @@ key pretty split_enforced_until [242 137 137] /1 2262-04-11 23:47:16.854776 +0000 +0000 [242 137 146] /10 2262-04-11 23:47:16.854776 +0000 +0000 -skipif config local-mixed-25.2 skipif config local-mixed-25.3 query TTTI colnames,rowsort SELECT start_key, end_key, replicas, lease_holder FROM [SHOW RANGES FROM TABLE t WITH DETAILS] diff --git a/pkg/sql/logictest/testdata/logic_test/system b/pkg/sql/logictest/testdata/logic_test/system index 6da30a45609b..fcf2f42260b6 100644 --- a/pkg/sql/logictest/testdata/logic_test/system +++ b/pkg/sql/logictest/testdata/logic_test/system @@ -16,7 +16,6 @@ public descriptor_id_seq sequence node NULL public locations table node NULL public span_configurations table node NULL -skipif config local-mixed-25.2 skipif config local-mixed-25.3 query I rowsort SELECT count(id) FROM system.descriptor @@ -47,7 +46,6 @@ SHOW COLUMNS FROM system.descriptor id INT8 false NULL · {primary} false descriptor BYTES true NULL · {primary} false -skipif config local-mixed-25.2 query TTBTTTB rowsort SHOW COLUMNS FROM system.users ---- @@ -82,7 +80,6 @@ session_id BYTES false NULL · {primary} false crdb_region BYTES false NULL · {primary} false -skipif config local-mixed-25.2 query TTBTTTB rowsort SHOW COLUMNS FROM system.eventlog ---- @@ -475,13 +472,11 @@ user root subtest statement_hints_table -skipif config local-mixed-25.2 skipif config local-mixed-25.3 query IITTT SELECT hash, row_id, fingerprint, hint, created_at FROM system.statement_hints ORDER BY row_id ---- -skipif config local-mixed-25.2 skipif config local-mixed-25.3 statement ok INSERT INTO system.statement_hints (row_id, fingerprint, hint, created_at) @@ -490,7 +485,6 @@ INSERT INTO system.statement_hints (row_id, fingerprint, hint, created_at) (200, 'bar', 'BEEFDEAD', '2018-01-02 1:00:00.00000+00:00') ) -skipif config local-mixed-25.2 skipif config local-mixed-25.3 query IITTT SELECT hash, row_id, fingerprint, hint, created_at FROM system.statement_hints ORDER BY row_id @@ -498,32 +492,27 @@ SELECT hash, row_id, fingerprint, hint, created_at FROM system.statement_hints O -2824945433545984717 100 foo DEADBEEF 2018-01-01 01:00:00 +0000 UTC -2821042167266592640 200 bar BEEFDEAD 2018-01-02 01:00:00 +0000 UTC -skipif config local-mixed-25.2 skipif config local-mixed-25.3 query ITTT SELECT row_id, fingerprint, hint, created_at FROM system.statement_hints WHERE fingerprint = 'foo' ORDER BY row_id ---- 100 foo DEADBEEF 2018-01-01 01:00:00 +0000 UTC -skipif config local-mixed-25.2 skipif config local-mixed-25.3 query ITTT SELECT row_id, fingerprint, hint, created_at FROM system.statement_hints WHERE fingerprint = 'bar' ORDER BY row_id ---- 200 bar BEEFDEAD 2018-01-02 01:00:00 +0000 UTC -skipif config local-mixed-25.2 skipif config local-mixed-25.3 query ITTT SELECT row_id, fingerprint, hint, created_at FROM system.statement_hints WHERE fingerprint = 'baz' ORDER BY row_id ---- -skipif config local-mixed-25.2 skipif config local-mixed-25.3 statement ok DELETE FROM system.statement_hints WHERE fingerprint = 'foo' -skipif config local-mixed-25.2 skipif config local-mixed-25.3 query ITTT SELECT row_id, fingerprint, hint, created_at FROM system.statement_hints ORDER BY row_id diff --git a/pkg/sql/logictest/testdata/logic_test/udf_in_table b/pkg/sql/logictest/testdata/logic_test/udf_in_table index e94bb10adb9b..980ef8885f21 100644 --- a/pkg/sql/logictest/testdata/logic_test/udf_in_table +++ b/pkg/sql/logictest/testdata/logic_test/udf_in_table @@ -75,7 +75,6 @@ $$; # Make sure that column DEFAULT and ON UPDATE expressions are properly serialized # and deserialized. -skipif config local-mixed-25.2 statement ok CREATE TABLE t1( a INT PRIMARY KEY, @@ -86,7 +85,6 @@ CREATE TABLE t1( FAMILY fam_0 (a, b, c, d, e) ); -onlyif config local-mixed-25.2 statement ok CREATE TABLE t1( a INT PRIMARY KEY, @@ -97,11 +95,9 @@ CREATE TABLE t1( FAMILY fam_0 (a, b, c, d, e) ); -skipif config local-mixed-25.2 let $tbl_id SELECT id FROM system.namespace WHERE name = 't1'; -skipif config local-mixed-25.2 query IITTTT colnames SELECT * FROM get_col_fn_ids($tbl_id) ORDER BY 1, 2; ---- @@ -144,7 +140,6 @@ CREATE TABLE public.t1 ( let $fn_id SELECT oid::int - 100000 FROM pg_catalog.pg_proc WHERE proname = 'f1'; -skipif config local-mixed-25.2 query T SELECT get_fn_depended_on_by($fn_id) ---- @@ -159,11 +154,9 @@ SELECT get_fn_depended_on_by($fn_id) ] # Make sure SET DEFAULT sets cross references properly. -skipif config local-mixed-25.2 statement ok ALTER TABLE t1 ALTER COLUMN c SET DEFAULT f1(); -skipif config local-mixed-25.2 query IITTTT colnames SELECT * FROM get_col_fn_ids($tbl_id) ORDER BY 1, 2; ---- @@ -202,7 +195,6 @@ CREATE TABLE public.t1 ( FAMILY fam_0 (a, b, c, d, e) ); -skipif config local-mixed-25.2 query T SELECT get_fn_depended_on_by($fn_id) ---- @@ -218,11 +210,9 @@ SELECT get_fn_depended_on_by($fn_id) ] # Make sure SET ON UPDATE sets cross references properly. -skipif config local-mixed-25.2 statement ok ALTER TABLE t1 ALTER COLUMN e SET ON UPDATE f1(); -skipif config local-mixed-25.2 query IITTTT colnames SELECT * FROM get_col_fn_ids($tbl_id) ORDER BY 1, 2; ---- @@ -248,11 +238,9 @@ CREATE TABLE public.t1 ( ) WITH (schema_locked = true); # Make sure cross references are properly removed with SET DEFAULT. -skipif config local-mixed-25.2 statement ok ALTER TABLE t1 ALTER COLUMN c SET DEFAULT NULL; -skipif config local-mixed-25.2 query IITTTT colnames SELECT * FROM get_col_fn_ids($tbl_id) ORDER BY 1, 2; ---- @@ -263,7 +251,6 @@ id col_id default_expr on_update_expr compute_expr uses_fn 111 4 NULL "[FUNCTION 100106]()" NULL [106] 111 5 NULL "[FUNCTION 100106]()" NULL [106] -skipif config local-mixed-25.2 query T SELECT get_fn_depended_on_by($fn_id) ---- @@ -279,11 +266,9 @@ SELECT get_fn_depended_on_by($fn_id) ] # Make sure cross references are properly removed with SET ON UPDATE. -skipif config local-mixed-25.2 statement ok ALTER TABLE t1 ALTER COLUMN e SET ON UPDATE NULL; -skipif config local-mixed-25.2 query IITTTT colnames SELECT * FROM get_col_fn_ids($tbl_id) ORDER BY 1, 2; ---- @@ -294,7 +279,6 @@ id col_id default_expr on_update_expr compute_expr uses_fn 111 4 NULL "[FUNCTION 100106]()" NULL [106] 111 5 NULL "NULL" NULL NULL -skipif config local-mixed-25.2 query T SELECT get_fn_depended_on_by($fn_id) ---- @@ -309,11 +293,9 @@ SELECT get_fn_depended_on_by($fn_id) ] # Make sure cross references are properly removed with DROP DEFAULT. -skipif config local-mixed-25.2 statement ok ALTER TABLE t1 ALTER COLUMN b DROP DEFAULT; -skipif config local-mixed-25.2 query IITTTT colnames SELECT * FROM get_col_fn_ids($tbl_id) ORDER BY 1, 2; ---- @@ -324,7 +306,6 @@ id col_id default_expr on_update_expr compute_expr uses_fn_ids 111 4 NULL "[FUNCTION 100106]()" NULL [106] 111 5 NULL "NULL" NULL NULL -skipif config local-mixed-25.2 query T SELECT get_fn_depended_on_by($fn_id) ---- @@ -338,11 +319,9 @@ SELECT get_fn_depended_on_by($fn_id) ] # Make sure cross references are properly removed with DROP ON UPDATE. -skipif config local-mixed-25.2 statement ok ALTER TABLE t1 ALTER COLUMN d DROP ON UPDATE; -skipif config local-mixed-25.2 query IITTTT colnames SELECT * FROM get_col_fn_ids($tbl_id) ORDER BY 1, 2; ---- @@ -353,22 +332,18 @@ id col_id default_expr on_update_expr compute_expr uses_fn_ids 111 4 NULL NULL NULL NULL 111 5 NULL "NULL" NULL NULL -skipif config local-mixed-25.2 query T SELECT get_fn_depended_on_by($fn_id) ---- NULL # Re-add references for the next test. -skipif config local-mixed-25.2 statement ok ALTER TABLE t1 ALTER COLUMN b SET DEFAULT f1(); -skipif config local-mixed-25.2 statement ok ALTER TABLE t1 ALTER COLUMN d SET ON UPDATE f1(); -skipif config local-mixed-25.2 query T SELECT get_fn_depended_on_by($fn_id) ---- @@ -383,11 +358,9 @@ SELECT get_fn_depended_on_by($fn_id) ] # Make sure cross references are properly removed with DROP COLUMN. -skipif config local-mixed-25.2 statement ok ALTER TABLE t1 ALTER COLUMN c SET DEFAULT f1(); -skipif config local-mixed-25.2 query IITTTT colnames SELECT * FROM get_col_fn_ids($tbl_id) ORDER BY 1, 2; ---- @@ -398,7 +371,6 @@ id col_id default_expr on_update_expr compute_expr uses_fn 111 4 NULL "[FUNCTION 100106]()" NULL [106] 111 5 NULL "NULL" NULL NULL -skipif config local-mixed-25.2 query T SELECT get_fn_depended_on_by($fn_id) ---- @@ -413,11 +385,9 @@ SELECT get_fn_depended_on_by($fn_id) } ] -skipif config local-mixed-25.2 statement ok ALTER TABLE t1 DROP COLUMN c; -skipif config local-mixed-25.2 query IITTTT colnames SELECT * FROM get_col_fn_ids($tbl_id) ORDER BY 1, 2; ---- @@ -427,7 +397,6 @@ id col_id default_expr on_update_expr compute_expr uses_fn 111 4 NULL "[FUNCTION 100106]()" NULL [106] 111 5 NULL "NULL" NULL NULL -skipif config local-mixed-25.2 query T SELECT get_fn_depended_on_by($fn_id) ---- @@ -443,19 +412,15 @@ SELECT get_fn_depended_on_by($fn_id) # Make sure adding a computed column, column with DEFAULT, and column with # ON UPDATE updates function references. -skipif config local-mixed-25.2 statement ok ALTER TABLE t1 ADD COLUMN f int AS (f1()) VIRTUAL; -skipif config local-mixed-25.2 statement ok ALTER TABLE t1 ADD COLUMN g int DEFAULT (f1()); -skipif config local-mixed-25.2 statement ok ALTER TABLE t1 ADD COLUMN h int ON UPDATE (f1()); -skipif config local-mixed-25.2 query IITTTT colnames SELECT * FROM get_col_fn_ids($tbl_id) ORDER BY 1, 2; ---- @@ -468,7 +433,6 @@ id col_id default_expr on_update_expr compute_expr 111 7 "[FUNCTION 100106]()" NULL NULL [106] 111 8 NULL "[FUNCTION 100106]()" NULL [106] -skipif config local-mixed-25.2 query T SELECT get_fn_depended_on_by($fn_id) ---- @@ -486,11 +450,9 @@ SELECT get_fn_depended_on_by($fn_id) ] # Make sure that cross references are properly remove with DROP TABLE. -skipif config local-mixed-25.2 statement ok ALTER TABLE t1 ALTER COLUMN b SET DEFAULT f1(); -skipif config local-mixed-25.2 query IITTTT colnames SELECT * FROM get_col_fn_ids($tbl_id) ORDER BY 1, 2; ---- @@ -503,7 +465,6 @@ id col_id default_expr on_update_expr compute_expr 111 7 "[FUNCTION 100106]()" NULL NULL [106] 111 8 NULL "[FUNCTION 100106]()" NULL [106] -skipif config local-mixed-25.2 query T SELECT get_fn_depended_on_by($fn_id) ---- @@ -577,7 +538,6 @@ CREATE FUNCTION f2() RETURNS INT LANGUAGE SQL AS $$ SELECT 1 $$; let $fn_id_2 SELECT oid::int - 100000 FROM pg_catalog.pg_proc WHERE proname = 'f2'; -skipif config local-mixed-25.2 statement ok CREATE TABLE t1( a INT PRIMARY KEY, @@ -586,7 +546,6 @@ CREATE TABLE t1( FAMILY fam_0 (a, b, c) ); -onlyif config local-mixed-25.2 statement ok CREATE TABLE t1( a INT PRIMARY KEY, @@ -607,7 +566,6 @@ SELECT get_fn_depended_on_by($fn_id) } ] -skipif config local-mixed-25.2 query T SELECT get_fn_depended_on_by($fn_id_2) ---- @@ -812,7 +770,6 @@ SELECT * FROM t1 ORDER BY a; statement ok CREATE FUNCTION f_compute(x INT) RETURNS INT LANGUAGE SQL AS $$ SELECT x * 2 $$ IMMUTABLE; -skipif config local-mixed-25.2 statement ok CREATE TABLE t_computed( a INT PRIMARY KEY, @@ -821,12 +778,10 @@ CREATE TABLE t_computed( d INT AS (f_compute(b)) VIRTUAL ); -skipif config local-mixed-25.2 let $tbl_computed_id SELECT id FROM system.namespace WHERE name = 't_computed'; # Check that computed column expressions track function usage. -skipif config local-mixed-25.2 query IITTTT colnames SELECT * FROM get_col_fn_ids($tbl_computed_id) ORDER BY 1, 2; ---- @@ -837,11 +792,9 @@ id col_id default_expr on_update_expr compute_expr uses_fn_ids 125 4 NULL NULL "[FUNCTION 100124](b)" [124] # Check function back references include computed columns. -skipif config local-mixed-25.2 let $fn_compute_id SELECT oid::int - 100000 FROM pg_catalog.pg_proc WHERE proname = 'f_compute'; -skipif config local-mixed-25.2 query T SELECT get_fn_depended_on_by($fn_compute_id) ---- @@ -856,11 +809,9 @@ SELECT get_fn_depended_on_by($fn_compute_id) ] # Test dropping computed column removes function references. -skipif config local-mixed-25.2 statement ok ALTER TABLE t_computed DROP COLUMN c; -skipif config local-mixed-25.2 query IITTTT colnames SELECT * FROM get_col_fn_ids($tbl_computed_id) ORDER BY 1, 2; ---- @@ -869,7 +820,6 @@ id col_id default_expr on_update_expr compute_expr uses_fn_ids 125 2 NULL NULL NULL NULL 125 4 NULL NULL "[FUNCTION 100124](b)" [124] -skipif config local-mixed-25.2 query T SELECT get_fn_depended_on_by($fn_compute_id) ---- @@ -883,22 +833,18 @@ SELECT get_fn_depended_on_by($fn_compute_id) ] # Test dropping table removes all function references. -skipif config local-mixed-25.2 statement ok DROP TABLE t_computed; -skipif config local-mixed-25.2 query T SELECT get_fn_depended_on_by($fn_compute_id) ---- NULL # Test computed column with multiple function references. -skipif config local-mixed-25.2 statement ok CREATE FUNCTION f_add(x INT, y INT) RETURNS INT LANGUAGE SQL AS $$ SELECT x + y $$ IMMUTABLE; -skipif config local-mixed-25.2 statement ok CREATE TABLE t_multi_fn( a INT PRIMARY KEY, @@ -907,11 +853,9 @@ CREATE TABLE t_multi_fn( ); # Verify we can use the table. -skipif config local-mixed-25.2 statement ok INSERT INTO t_multi_fn (a, b) VALUES (1, 2), (3, 4), (5, 6); -skipif config local-mixed-25.2 query III SELECT * FROM t_multi_fn ORDER BY a; ---- @@ -919,16 +863,13 @@ SELECT * FROM t_multi_fn ORDER BY a; 3 4 13 5 6 21 -skipif config local-mixed-25.2 let $tbl_multi_fn_id SELECT id FROM system.namespace WHERE name = 't_multi_fn'; -skipif config local-mixed-25.2 let $fn_add_id SELECT oid::int - 100000 FROM pg_catalog.pg_proc WHERE proname = 'f_add'; # Check that computed column tracks multiple function references. -skipif config local-mixed-25.2 query IITTTT colnames SELECT * FROM get_col_fn_ids($tbl_multi_fn_id) ORDER BY 1, 2; ---- @@ -937,7 +878,6 @@ id col_id default_expr on_update_expr compute_expr 127 2 NULL NULL NULL NULL 127 3 NULL NULL "[FUNCTION 100124](a) + [FUNCTION 100126](a, b)" [124, 126] -skipif config local-mixed-25.2 query T SELECT get_fn_depended_on_by($fn_compute_id) ---- @@ -950,7 +890,6 @@ SELECT get_fn_depended_on_by($fn_compute_id) } ] -skipif config local-mixed-25.2 query T SELECT get_fn_depended_on_by($fn_add_id) ---- @@ -963,7 +902,6 @@ SELECT get_fn_depended_on_by($fn_add_id) } ] -skipif config local-mixed-25.2 statement ok DROP TABLE t_multi_fn; diff --git a/pkg/sql/logictest/testdata/logic_test/udf_star b/pkg/sql/logictest/testdata/logic_test/udf_star index fa8e00c87406..8b8e7386de3d 100644 --- a/pkg/sql/logictest/testdata/logic_test/udf_star +++ b/pkg/sql/logictest/testdata/logic_test/udf_star @@ -204,11 +204,11 @@ statement error pgcode 2BP01 pq: cannot rename column "a" because function "f_un ALTER TABLE t_twocol RENAME COLUMN a TO d; # TODO(#101934): Postgres allows table renaming when only referenced by UDFs. -skipif config local-legacy-schema-changer local-mixed-25.2 local-mixed-25.3 +skipif config local-legacy-schema-changer local-mixed-25.3 statement error pgcode 2BP01 pq: cannot rename relation "test.public.t_twocol" because function "f_unqualified_twocol" depends on it ALTER TABLE t_twocol RENAME TO t_twocol_prime; -onlyif config local-legacy-schema-changer local-mixed-25.2 local-mixed-25.3 +onlyif config local-legacy-schema-changer local-mixed-25.3 statement error pgcode 2BP01 pq: cannot rename relation "t_twocol" because function "f_unqualified_twocol" depends on it ALTER TABLE t_twocol RENAME TO t_twocol_prime; diff --git a/pkg/sql/logictest/testdata/logic_test/udf_unsupported b/pkg/sql/logictest/testdata/logic_test/udf_unsupported index 86e9441f543c..f62dfd68128d 100644 --- a/pkg/sql/logictest/testdata/logic_test/udf_unsupported +++ b/pkg/sql/logictest/testdata/logic_test/udf_unsupported @@ -3,34 +3,27 @@ subtest disallow_udf_in_table statement ok CREATE FUNCTION test_tbl_f() RETURNS INT IMMUTABLE LANGUAGE SQL AS $$ SELECT 1 $$; -onlyif config local-mixed-25.2 statement error pgcode 0A000 pq: unimplemented: usage of user-defined function from relations not supported CREATE TABLE test_tbl_t (a INT PRIMARY KEY, b INT ON UPDATE (test_tbl_f() + 1)); -onlyif config local-mixed-25.2 statement error pgcode 0A000 pq: unimplemented: usage of user-defined function from relations not supported CREATE TABLE test_tbl_t (a INT PRIMARY KEY, b INT AS (test_tbl_f() + 1) STORED); -onlyif config local-mixed-25.2 statement error pgcode 0A000 pq: unimplemented: usage of user-defined function from relations not supported CREATE TABLE test_tbl_t (a INT PRIMARY KEY, b INT, INDEX idx_b(test_tbl_f())); statement ok CREATE TABLE test_tbl_t (a INT PRIMARY KEY, b INT); -onlyif config local-mixed-25.2 statement error pgcode 0A000 pq: unimplemented: usage of user-defined function from relations not supported CREATE INDEX t_idx ON test_tbl_t(test_tbl_f()); -onlyif config local-mixed-25.2 statement error pgcode 0A000 pq: unimplemented: usage of user-defined function from relations not supported CREATE INDEX t_idx ON test_tbl_t(b) WHERE test_tbl_f() > 0; -onlyif config local-mixed-25.2 statement error pgcode 0A000 pq: unimplemented: usage of user-defined function from relations not supported ALTER TABLE test_tbl_t ADD COLUMN c int ON UPDATE (test_tbl_f()); -onlyif config local-mixed-25.2 statement error pgcode 0A000 pq: unimplemented: usage of user-defined function from relations not supported ALTER TABLE test_tbl_t ALTER COLUMN b SET ON UPDATE (test_tbl_f()); @@ -38,31 +31,24 @@ ALTER TABLE test_tbl_t ALTER COLUMN b SET ON UPDATE (test_tbl_f()); statement ok INSERT INTO test_tbl_t VALUES (1, 1); -skipif config local-mixed-25.2 statement error pgcode 0A000 unimplemented: cannot evaluate function in this context ALTER TABLE test_tbl_t ADD COLUMN c int AS (test_tbl_f()) stored; -skipif config local-mixed-25.2 statement error pgcode 0A000 unimplemented: cannot evaluate function in this context ALTER TABLE test_tbl_t ADD COLUMN c int DEFAULT (test_tbl_f()); -skipif config local-mixed-25.2 statement error pgcode 0A000 unimplemented: cannot evaluate function in this context CREATE INDEX t_idx_partial ON test_tbl_t(b) WHERE test_tbl_f() > 0; -skipif config local-mixed-25.2 statement error pgcode 0A000 unimplemented: cannot evaluate function in this context CREATE INDEX idx_b ON test_tbl_t (test_tbl_f()); -onlyif config local-mixed-25.2 statement error pgcode 0A000 unimplemented: usage of user-defined function from relations not supported ALTER TABLE test_tbl_t ADD COLUMN c int AS (test_tbl_f()) stored; -onlyif config local-mixed-25.2 statement error pgcode 0A000 unimplemented: usage of user-defined function from relations not supported ALTER TABLE test_tbl_t ADD COLUMN c int DEFAULT (test_tbl_f()); -onlyif config local-mixed-25.2 statement error pgcode 0A000 unimplemented: usage of user-defined function from relations not supported CREATE INDEX idx_b ON test_tbl_t (test_tbl_f()); diff --git a/pkg/sql/logictest/testdata/logic_test/user b/pkg/sql/logictest/testdata/logic_test/user index 28e7055bcc54..319c424e83aa 100644 --- a/pkg/sql/logictest/testdata/logic_test/user +++ b/pkg/sql/logictest/testdata/logic_test/user @@ -1,11 +1,10 @@ -# LogicTest: local 3node-tenant local-mixed-25.2 +# LogicTest: local 3node-tenant query T SHOW is_superuser ---- on -skipif config local-mixed-25.2 query TTT colnames,rowsort select username, options, member_of from [SHOW USERS] ---- @@ -17,7 +16,6 @@ testuser {} {} statement ok CREATE USER user1 -skipif config local-mixed-25.2 query TTT colnames,rowsort select username, options, member_of from [SHOW USERS] ---- @@ -27,7 +25,6 @@ root {} {admin} testuser {} {} user1 {} {} -skipif config local-mixed-25.2 query T noticetrace SHOW USERS ---- @@ -96,7 +93,6 @@ statement error user "blix" does not exist PREPARE chpw2 AS ALTER USER blix WITH PASSWORD $1; EXECUTE chpw2('baz') -skipif config local-mixed-25.2 query TTT colnames,rowsort select username, options, member_of from [SHOW USERS] ---- @@ -237,13 +233,11 @@ user root statement ok set cluster setting security.provisioning.ldap.enabled = true; -onlyif config local-mixed-25.2 statement ok DROP user testuser user testuser nodeidx=0 newsession -onlyif config local-mixed-25.2 statement error pq: password authentication failed for user testuser SHOW session_user @@ -256,7 +250,6 @@ user root statement ok set cluster setting security.provisioning.ldap.enabled = true; -skipif config local-mixed-25.2 statement ok DROP user testuser @@ -267,7 +260,6 @@ user testuser nodeidx=0 newsession # For the purpose of validating the release flags for provisioning, test only # auth method "cert-password" has been enabled which hasn't been provided with a # provisioner(handler for provisioning) which is the obtained error here. -skipif config local-mixed-25.2 statement error pq: user identity unknown for identity provider SHOW session_user @@ -293,7 +285,6 @@ user root # The estimated_last_login_time is not guaranteed to be populated synchronously, # so we poll until testuser's entry was updated with the last login time. -skipif config local-mixed-25.2 query I retry SELECT count(*) FROM system.users WHERE estimated_last_login_time IS NOT NULL AND username = 'testuser2' ---- @@ -301,7 +292,6 @@ SELECT count(*) FROM system.users WHERE estimated_last_login_time IS NOT NULL AN user root -onlyif config local-mixed-25.2 statement error pq: column "estimated_last_login_time" does not exist select estimated_last_login_time from [SHOW USERS] where username = 'testuser2'; diff --git a/pkg/sql/logictest/testdata/logic_test/vector_index_mixed b/pkg/sql/logictest/testdata/logic_test/vector_index_mixed index d9309e9ef59d..5f83d13f2c03 100644 --- a/pkg/sql/logictest/testdata/logic_test/vector_index_mixed +++ b/pkg/sql/logictest/testdata/logic_test/vector_index_mixed @@ -1,4 +1,4 @@ -# LogicTest: cockroach-go-testserver-25.2 +# LogicTest: cockroach-go-testserver-25.3 # Test version gating of op classes in vector index diff --git a/pkg/sql/logictest/testdata/logic_test/virtual_columns b/pkg/sql/logictest/testdata/logic_test/virtual_columns index 5394b2a8359f..f73d01005790 100644 --- a/pkg/sql/logictest/testdata/logic_test/virtual_columns +++ b/pkg/sql/logictest/testdata/logic_test/virtual_columns @@ -1120,12 +1120,12 @@ subtest referencing_mutations statement ok CREATE TABLE t_ref (i INT PRIMARY KEY) WITH (schema_locked = false); -onlyif config local-legacy-schema-changer local-mixed-25.2 local-mixed-25.3 +onlyif config local-legacy-schema-changer local-mixed-25.3 statement error pgcode 0A000 virtual computed column "k" referencing columns \("j"\) added in the current transaction ALTER TABLE t_ref ADD COLUMN j INT NOT NULL DEFAULT 42, ADD COLUMN k INT AS (i+j) VIRTUAL; -onlyif config local-legacy-schema-changer local-mixed-25.2 local-mixed-25.3 +onlyif config local-legacy-schema-changer local-mixed-25.3 statement error pgcode 0A000 virtual computed column "l" referencing columns \("j", "k"\) added in the current transaction BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE; SET LOCAL autocommit_before_ddl = false; @@ -1138,7 +1138,7 @@ statement ok ROLLBACK; # The declarative schema changer allows this. -skipif config local-legacy-schema-changer local-mixed-25.2 local-mixed-25.3 local-mixed-25.4 +skipif config local-legacy-schema-changer local-mixed-25.3 local-mixed-25.4 statement ok ALTER TABLE t_ref ADD COLUMN j INT NOT NULL DEFAULT 42, ADD COLUMN k INT AS (i+j) VIRTUAL; diff --git a/pkg/sql/logictest/tests/cockroach-go-testserver-25.2/BUILD.bazel b/pkg/sql/logictest/tests/cockroach-go-testserver-25.2/BUILD.bazel deleted file mode 100644 index 62163a46c2e5..000000000000 --- a/pkg/sql/logictest/tests/cockroach-go-testserver-25.2/BUILD.bazel +++ /dev/null @@ -1,29 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_test") - -go_test( - name = "cockroach-go-testserver-25_2_test", - size = "enormous", - srcs = ["generated_test.go"], - data = [ - "//c-deps:libgeos", # keep - "//pkg/cmd/cockroach-short", # keep - "//pkg/sql/logictest:cockroach_predecessor_version", # keep - "//pkg/sql/logictest:testdata", # keep - ], - exec_properties = {"test.Pool": "heavy"}, - shard_count = 12, - tags = ["cpu:3"], - deps = [ - "//pkg/base", - "//pkg/build/bazel", - "//pkg/security/securityassets", - "//pkg/security/securitytest", - "//pkg/server", - "//pkg/sql/logictest", - "//pkg/testutils/serverutils", - "//pkg/testutils/skip", - "//pkg/testutils/testcluster", - "//pkg/util/leaktest", - "//pkg/util/randutil", - ], -) diff --git a/pkg/sql/logictest/tests/cockroach-go-testserver-25.2/generated_test.go b/pkg/sql/logictest/tests/cockroach-go-testserver-25.2/generated_test.go deleted file mode 100644 index 51e199f9865f..000000000000 --- a/pkg/sql/logictest/tests/cockroach-go-testserver-25.2/generated_test.go +++ /dev/null @@ -1,158 +0,0 @@ -// Copyright 2022 The Cockroach Authors. -// -// Use of this software is governed by the CockroachDB Software License -// included in the /LICENSE file. - -// Code generated by generate-logictest, DO NOT EDIT. - -package testcockroach_go_testserver_252 - -import ( - "os" - "path/filepath" - "testing" - - "github.com/cockroachdb/cockroach/pkg/base" - "github.com/cockroachdb/cockroach/pkg/build/bazel" - "github.com/cockroachdb/cockroach/pkg/security/securityassets" - "github.com/cockroachdb/cockroach/pkg/security/securitytest" - "github.com/cockroachdb/cockroach/pkg/server" - "github.com/cockroachdb/cockroach/pkg/sql/logictest" - "github.com/cockroachdb/cockroach/pkg/testutils/serverutils" - "github.com/cockroachdb/cockroach/pkg/testutils/skip" - "github.com/cockroachdb/cockroach/pkg/testutils/testcluster" - "github.com/cockroachdb/cockroach/pkg/util/leaktest" - "github.com/cockroachdb/cockroach/pkg/util/randutil" -) - -const configIdx = 23 - -var logicTestDir string - -func init() { - if bazel.BuiltWithBazel() { - var err error - logicTestDir, err = bazel.Runfile("pkg/sql/logictest/testdata/logic_test") - if err != nil { - panic(err) - } - } else { - logicTestDir = "../../../../sql/logictest/testdata/logic_test" - } -} - -func TestMain(m *testing.M) { - securityassets.SetLoader(securitytest.EmbeddedAssets) - randutil.SeedForTests() - serverutils.InitTestServerFactory(server.TestServerFactory) - serverutils.InitTestClusterFactory(testcluster.TestClusterFactory) - - defer serverutils.TestingSetDefaultTenantSelectionOverride( - base.TestIsForStuffThatShouldWorkWithSecondaryTenantsButDoesntYet(156124), - )() - - os.Exit(m.Run()) -} - -func runLogicTest(t *testing.T, file string) { - skip.UnderDeadlock(t, "times out and/or hangs") - logictest.RunLogicTest(t, logictest.TestServerArgs{}, configIdx, filepath.Join(logicTestDir, file)) -} - -// TestLogic_tmp runs any tests that are prefixed with "_", in which a dedicated -// test is not generated for. This allows developers to create and run temporary -// test files that are not checked into the repository, without repeatedly -// regenerating and reverting changes to this file, generated_test.go. -// -// TODO(mgartner): Add file filtering so that individual files can be run, -// instead of all files with the "_" prefix. -func TestLogic_tmp(t *testing.T) { - defer leaktest.AfterTest(t)() - var glob string - glob = filepath.Join(logicTestDir, "_*") - logictest.RunLogicTests(t, logictest.TestServerArgs{}, configIdx, glob) -} - -func TestLogic_cross_version_tenant_backup( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "cross_version_tenant_backup") -} - -func TestLogic_mixed_version_bootstrap_tenant( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "mixed_version_bootstrap_tenant") -} - -func TestLogic_mixed_version_can_login( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "mixed_version_can_login") -} - -func TestLogic_mixed_version_char( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "mixed_version_char") -} - -func TestLogic_mixed_version_citext( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "mixed_version_citext") -} - -func TestLogic_mixed_version_ltree( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "mixed_version_ltree") -} - -func TestLogic_mixed_version_partial_stats( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "mixed_version_partial_stats") -} - -func TestLogic_mixed_version_stats( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "mixed_version_stats") -} - -func TestLogic_mixed_version_timeseries_range_already_exists( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "mixed_version_timeseries_range_already_exists") -} - -func TestLogic_mixed_version_upgrade_preserve_ttl( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "mixed_version_upgrade_preserve_ttl") -} - -func TestLogic_upgrade( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "upgrade") -} - -func TestLogic_vector_index_mixed( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "vector_index_mixed") -} diff --git a/pkg/sql/logictest/tests/cockroach-go-testserver-25.3/BUILD.bazel b/pkg/sql/logictest/tests/cockroach-go-testserver-25.3/BUILD.bazel index 1e128d51b132..f7f2da19eb3e 100644 --- a/pkg/sql/logictest/tests/cockroach-go-testserver-25.3/BUILD.bazel +++ b/pkg/sql/logictest/tests/cockroach-go-testserver-25.3/BUILD.bazel @@ -11,7 +11,7 @@ go_test( "//pkg/sql/logictest:testdata", # keep ], exec_properties = {"test.Pool": "heavy"}, - shard_count = 9, + shard_count = 12, tags = ["cpu:3"], deps = [ "//pkg/base", diff --git a/pkg/sql/logictest/tests/cockroach-go-testserver-25.3/generated_test.go b/pkg/sql/logictest/tests/cockroach-go-testserver-25.3/generated_test.go index c500c1d89565..570a134dc028 100644 --- a/pkg/sql/logictest/tests/cockroach-go-testserver-25.3/generated_test.go +++ b/pkg/sql/logictest/tests/cockroach-go-testserver-25.3/generated_test.go @@ -25,7 +25,7 @@ import ( "github.com/cockroachdb/cockroach/pkg/util/randutil" ) -const configIdx = 24 +const configIdx = 22 var logicTestDir string @@ -94,6 +94,20 @@ func TestLogic_mixed_version_can_login( runLogicTest(t, "mixed_version_can_login") } +func TestLogic_mixed_version_char( + t *testing.T, +) { + defer leaktest.AfterTest(t)() + runLogicTest(t, "mixed_version_char") +} + +func TestLogic_mixed_version_citext( + t *testing.T, +) { + defer leaktest.AfterTest(t)() + runLogicTest(t, "mixed_version_citext") +} + func TestLogic_mixed_version_ltree( t *testing.T, ) { @@ -135,3 +149,10 @@ func TestLogic_upgrade( defer leaktest.AfterTest(t)() runLogicTest(t, "upgrade") } + +func TestLogic_vector_index_mixed( + t *testing.T, +) { + defer leaktest.AfterTest(t)() + runLogicTest(t, "vector_index_mixed") +} diff --git a/pkg/sql/logictest/tests/cockroach-go-testserver-25.4/generated_test.go b/pkg/sql/logictest/tests/cockroach-go-testserver-25.4/generated_test.go index af0b8bcc07fc..974adea23e41 100644 --- a/pkg/sql/logictest/tests/cockroach-go-testserver-25.4/generated_test.go +++ b/pkg/sql/logictest/tests/cockroach-go-testserver-25.4/generated_test.go @@ -25,7 +25,7 @@ import ( "github.com/cockroachdb/cockroach/pkg/util/randutil" ) -const configIdx = 26 +const configIdx = 24 var logicTestDir string diff --git a/pkg/sql/logictest/tests/local-leased-descriptors/generated_test.go b/pkg/sql/logictest/tests/local-leased-descriptors/generated_test.go index 5d34dade362a..8595d8f0beab 100644 --- a/pkg/sql/logictest/tests/local-leased-descriptors/generated_test.go +++ b/pkg/sql/logictest/tests/local-leased-descriptors/generated_test.go @@ -25,7 +25,7 @@ import ( "github.com/cockroachdb/cockroach/pkg/util/randutil" ) -const configIdx = 25 +const configIdx = 23 var logicTestDir string diff --git a/pkg/sql/logictest/tests/local-mixed-25.2/BUILD.bazel b/pkg/sql/logictest/tests/local-mixed-25.2/BUILD.bazel deleted file mode 100644 index bb4aaff5d33f..000000000000 --- a/pkg/sql/logictest/tests/local-mixed-25.2/BUILD.bazel +++ /dev/null @@ -1,30 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_test") - -go_test( - name = "local-mixed-25_2_test", - size = "enormous", - srcs = ["generated_test.go"], - data = [ - "//c-deps:libgeos", # keep - "//pkg/sql/logictest:testdata", # keep - ], - exec_properties = select({ - "//build/toolchains:is_heavy": {"test.Pool": "heavy"}, - "//conditions:default": {"test.Pool": "large"}, - }), - shard_count = 48, - tags = ["cpu:1"], - deps = [ - "//pkg/base", - "//pkg/build/bazel", - "//pkg/security/securityassets", - "//pkg/security/securitytest", - "//pkg/server", - "//pkg/sql/logictest", - "//pkg/testutils/serverutils", - "//pkg/testutils/skip", - "//pkg/testutils/testcluster", - "//pkg/util/leaktest", - "//pkg/util/randutil", - ], -) diff --git a/pkg/sql/logictest/tests/local-mixed-25.2/generated_test.go b/pkg/sql/logictest/tests/local-mixed-25.2/generated_test.go deleted file mode 100644 index 98f8e8c6d7c5..000000000000 --- a/pkg/sql/logictest/tests/local-mixed-25.2/generated_test.go +++ /dev/null @@ -1,2713 +0,0 @@ -// Copyright 2022 The Cockroach Authors. -// -// Use of this software is governed by the CockroachDB Software License -// included in the /LICENSE file. - -// Code generated by generate-logictest, DO NOT EDIT. - -package testlocal_mixed_252 - -import ( - "os" - "path/filepath" - "testing" - - "github.com/cockroachdb/cockroach/pkg/base" - "github.com/cockroachdb/cockroach/pkg/build/bazel" - "github.com/cockroachdb/cockroach/pkg/security/securityassets" - "github.com/cockroachdb/cockroach/pkg/security/securitytest" - "github.com/cockroachdb/cockroach/pkg/server" - "github.com/cockroachdb/cockroach/pkg/sql/logictest" - "github.com/cockroachdb/cockroach/pkg/testutils/serverutils" - "github.com/cockroachdb/cockroach/pkg/testutils/skip" - "github.com/cockroachdb/cockroach/pkg/testutils/testcluster" - "github.com/cockroachdb/cockroach/pkg/util/leaktest" - "github.com/cockroachdb/cockroach/pkg/util/randutil" -) - -const configIdx = 20 - -var logicTestDir string - -func init() { - if bazel.BuiltWithBazel() { - var err error - logicTestDir, err = bazel.Runfile("pkg/sql/logictest/testdata/logic_test") - if err != nil { - panic(err) - } - } else { - logicTestDir = "../../../../sql/logictest/testdata/logic_test" - } -} - -func TestMain(m *testing.M) { - securityassets.SetLoader(securitytest.EmbeddedAssets) - randutil.SeedForTests() - serverutils.InitTestServerFactory(server.TestServerFactory) - serverutils.InitTestClusterFactory(testcluster.TestClusterFactory) - - defer serverutils.TestingSetDefaultTenantSelectionOverride( - base.TestIsForStuffThatShouldWorkWithSecondaryTenantsButDoesntYet(156124), - )() - - os.Exit(m.Run()) -} - -func runLogicTest(t *testing.T, file string) { - skip.UnderDeadlock(t, "times out and/or hangs") - logictest.RunLogicTest(t, logictest.TestServerArgs{}, configIdx, filepath.Join(logicTestDir, file)) -} - -// TestLogic_tmp runs any tests that are prefixed with "_", in which a dedicated -// test is not generated for. This allows developers to create and run temporary -// test files that are not checked into the repository, without repeatedly -// regenerating and reverting changes to this file, generated_test.go. -// -// TODO(mgartner): Add file filtering so that individual files can be run, -// instead of all files with the "_" prefix. -func TestLogic_tmp(t *testing.T) { - defer leaktest.AfterTest(t)() - var glob string - glob = filepath.Join(logicTestDir, "_*") - logictest.RunLogicTests(t, logictest.TestServerArgs{}, configIdx, glob) -} - -func TestLogic_aggregate( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "aggregate") -} - -func TestLogic_alias_types( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "alias_types") -} - -func TestLogic_alter_column_type( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "alter_column_type") -} - -func TestLogic_alter_database_convert_to_schema( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "alter_database_convert_to_schema") -} - -func TestLogic_alter_database_owner( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "alter_database_owner") -} - -func TestLogic_alter_default_privileges_for_all_roles( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "alter_default_privileges_for_all_roles") -} - -func TestLogic_alter_default_privileges_for_schema( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "alter_default_privileges_for_schema") -} - -func TestLogic_alter_default_privileges_for_sequence( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "alter_default_privileges_for_sequence") -} - -func TestLogic_alter_default_privileges_for_table( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "alter_default_privileges_for_table") -} - -func TestLogic_alter_default_privileges_for_type( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "alter_default_privileges_for_type") -} - -func TestLogic_alter_default_privileges_in_schema( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "alter_default_privileges_in_schema") -} - -func TestLogic_alter_default_privileges_with_grant_option( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "alter_default_privileges_with_grant_option") -} - -func TestLogic_alter_primary_key( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "alter_primary_key") -} - -func TestLogic_alter_role( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "alter_role") -} - -func TestLogic_alter_role_set( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "alter_role_set") -} - -func TestLogic_alter_schema_owner( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "alter_schema_owner") -} - -func TestLogic_alter_sequence( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "alter_sequence") -} - -func TestLogic_alter_sequence_owner( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "alter_sequence_owner") -} - -func TestLogic_alter_table( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "alter_table") -} - -func TestLogic_alter_table_owner( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "alter_table_owner") -} - -func TestLogic_alter_type( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "alter_type") -} - -func TestLogic_alter_type_owner( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "alter_type_owner") -} - -func TestLogic_alter_view_owner( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "alter_view_owner") -} - -func TestLogic_and_or( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "and_or") -} - -func TestLogic_apply_join( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "apply_join") -} - -func TestLogic_array( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "array") -} - -func TestLogic_as_of( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "as_of") -} - -func TestLogic_asyncpg( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "asyncpg") -} - -func TestLogic_auto_span_config_reconciliation_job( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "auto_span_config_reconciliation_job") -} - -func TestLogic_bit( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "bit") -} - -func TestLogic_bpchar( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "bpchar") -} - -func TestLogic_buffered_writes( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "buffered_writes") -} - -func TestLogic_builtin_function( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "builtin_function") -} - -func TestLogic_builtin_function_notenant( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "builtin_function_notenant") -} - -func TestLogic_bytes( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "bytes") -} - -func TestLogic_cascade( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "cascade") -} - -func TestLogic_case_sensitive_names( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "case_sensitive_names") -} - -func TestLogic_cast( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "cast") -} - -func TestLogic_ccl( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "ccl") -} - -func TestLogic_check_constraints( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "check_constraints") -} - -func TestLogic_cluster_settings( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "cluster_settings") -} - -func TestLogic_collatedstring( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "collatedstring") -} - -func TestLogic_collatedstring_constraint( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "collatedstring_constraint") -} - -func TestLogic_collatedstring_index1( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "collatedstring_index1") -} - -func TestLogic_collatedstring_index2( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "collatedstring_index2") -} - -func TestLogic_collatedstring_normalization( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "collatedstring_normalization") -} - -func TestLogic_collatedstring_nullinindex( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "collatedstring_nullinindex") -} - -func TestLogic_collatedstring_uniqueindex1( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "collatedstring_uniqueindex1") -} - -func TestLogic_collatedstring_uniqueindex2( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "collatedstring_uniqueindex2") -} - -func TestLogic_comment_on( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "comment_on") -} - -func TestLogic_composite_types( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "composite_types") -} - -func TestLogic_computed( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "computed") -} - -func TestLogic_conditional( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "conditional") -} - -func TestLogic_connect_privilege( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "connect_privilege") -} - -func TestLogic_crdb_internal( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "crdb_internal") -} - -func TestLogic_crdb_internal_catalog( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "crdb_internal_catalog") -} - -func TestLogic_crdb_internal_default_privileges( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "crdb_internal_default_privileges") -} - -func TestLogic_create_as( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "create_as") -} - -func TestLogic_create_index( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "create_index") -} - -func TestLogic_create_statements( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "create_statements") -} - -func TestLogic_create_table( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "create_table") -} - -func TestLogic_cross_join( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "cross_join") -} - -func TestLogic_cursor( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "cursor") -} - -func TestLogic_custom_escape_character( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "custom_escape_character") -} - -func TestLogic_dangerous_statements( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "dangerous_statements") -} - -func TestLogic_database( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "database") -} - -func TestLogic_datetime( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "datetime") -} - -func TestLogic_decimal( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "decimal") -} - -func TestLogic_default( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "default") -} - -func TestLogic_delete( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "delete") -} - -func TestLogic_delete_batch( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "delete_batch") -} - -func TestLogic_dependencies( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "dependencies") -} - -func TestLogic_direct_columnar_scans( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "direct_columnar_scans") -} - -func TestLogic_discard( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "discard") -} - -func TestLogic_disjunction_in_join( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "disjunction_in_join") -} - -func TestLogic_distinct( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "distinct") -} - -func TestLogic_distinct_on( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "distinct_on") -} - -func TestLogic_distsql_automatic_partial_stats( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "distsql_automatic_partial_stats") -} - -func TestLogic_distsql_automatic_stats( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "distsql_automatic_stats") -} - -func TestLogic_distsql_event_log( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "distsql_event_log") -} - -func TestLogic_distsql_expr( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "distsql_expr") -} - -func TestLogic_distsql_join( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "distsql_join") -} - -func TestLogic_distsql_srfs( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "distsql_srfs") -} - -func TestLogic_do( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "do") -} - -func TestLogic_drop_database( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "drop_database") -} - -func TestLogic_drop_function( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "drop_function") -} - -func TestLogic_drop_index( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "drop_index") -} - -func TestLogic_drop_owned_by( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "drop_owned_by") -} - -func TestLogic_drop_procedure( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "drop_procedure") -} - -func TestLogic_drop_role_with_default_privileges( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "drop_role_with_default_privileges") -} - -func TestLogic_drop_role_with_default_privileges_in_schema( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "drop_role_with_default_privileges_in_schema") -} - -func TestLogic_drop_schema( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "drop_schema") -} - -func TestLogic_drop_sequence( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "drop_sequence") -} - -func TestLogic_drop_table( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "drop_table") -} - -func TestLogic_drop_temp( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "drop_temp") -} - -func TestLogic_drop_type( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "drop_type") -} - -func TestLogic_drop_user( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "drop_user") -} - -func TestLogic_drop_view( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "drop_view") -} - -func TestLogic_edge( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "edge") -} - -func TestLogic_enums( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "enums") -} - -func TestLogic_errors( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "errors") -} - -func TestLogic_event_log( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "event_log") -} - -func TestLogic_exclude_data_from_backup( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "exclude_data_from_backup") -} - -func TestLogic_experimental_distsql_planning( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "experimental_distsql_planning") -} - -func TestLogic_explain_analyze( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "explain_analyze") -} - -func TestLogic_export( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "export") -} - -func TestLogic_expression_index( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "expression_index") -} - -func TestLogic_external_connection_privileges( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "external_connection_privileges") -} - -func TestLogic_family( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "family") -} - -func TestLogic_fk( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "fk") -} - -func TestLogic_float( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "float") -} - -func TestLogic_format( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "format") -} - -func TestLogic_function_lookup( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "function_lookup") -} - -func TestLogic_fuzzystrmatch( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "fuzzystrmatch") -} - -func TestLogic_geospatial( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "geospatial") -} - -func TestLogic_geospatial_index( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "geospatial_index") -} - -func TestLogic_geospatial_meta( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "geospatial_meta") -} - -func TestLogic_geospatial_regression( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "geospatial_regression") -} - -func TestLogic_geospatial_zm( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "geospatial_zm") -} - -func TestLogic_grant_database( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "grant_database") -} - -func TestLogic_grant_in_txn( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "grant_in_txn") -} - -func TestLogic_grant_on_all_sequences_in_schema( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "grant_on_all_sequences_in_schema") -} - -func TestLogic_grant_on_all_tables_in_schema( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "grant_on_all_tables_in_schema") -} - -func TestLogic_grant_revoke_with_grant_option( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "grant_revoke_with_grant_option") -} - -func TestLogic_grant_role( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "grant_role") -} - -func TestLogic_grant_schema( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "grant_schema") -} - -func TestLogic_group_join( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "group_join") -} - -func TestLogic_hash_join( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "hash_join") -} - -func TestLogic_hash_sharded_index( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "hash_sharded_index") -} - -func TestLogic_hidden_columns( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "hidden_columns") -} - -func TestLogic_impure( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "impure") -} - -func TestLogic_index_join( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "index_join") -} - -func TestLogic_inet( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "inet") -} - -func TestLogic_inflight_trace_spans( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "inflight_trace_spans") -} - -func TestLogic_information_schema( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "information_schema") -} - -func TestLogic_inner_join( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "inner-join") -} - -func TestLogic_insert( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "insert") -} - -func TestLogic_int_size( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "int_size") -} - -func TestLogic_internal_executor( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "internal_executor") -} - -func TestLogic_interval( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "interval") -} - -func TestLogic_inverted_filter_geospatial( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "inverted_filter_geospatial") -} - -func TestLogic_inverted_filter_json_array( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "inverted_filter_json_array") -} - -func TestLogic_inverted_index( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "inverted_index") -} - -func TestLogic_inverted_index_multi_column( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "inverted_index_multi_column") -} - -func TestLogic_inverted_join_geospatial( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "inverted_join_geospatial") -} - -func TestLogic_inverted_join_json_array( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "inverted_join_json_array") -} - -func TestLogic_inverted_join_multi_column( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "inverted_join_multi_column") -} - -func TestLogic_jobs( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "jobs") -} - -func TestLogic_join( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "join") -} - -func TestLogic_json( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "json") -} - -func TestLogic_json_builtins( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "json_builtins") -} - -func TestLogic_json_index( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "json_index") -} - -func TestLogic_jsonb_path_exists( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "jsonb_path_exists") -} - -func TestLogic_jsonb_path_exists_index_acceleration( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "jsonb_path_exists_index_acceleration") -} - -func TestLogic_jsonb_path_match( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "jsonb_path_match") -} - -func TestLogic_jsonb_path_query( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "jsonb_path_query") -} - -func TestLogic_jsonb_path_query_array( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "jsonb_path_query_array") -} - -func TestLogic_jsonb_path_query_first( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "jsonb_path_query_first") -} - -func TestLogic_jsonpath( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "jsonpath") -} - -func TestLogic_kv_builtin_functions( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "kv_builtin_functions") -} - -func TestLogic_limit( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "limit") -} - -func TestLogic_locality( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "locality") -} - -func TestLogic_lock_timeout( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "lock_timeout") -} - -func TestLogic_lookup_join( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "lookup_join") -} - -func TestLogic_lookup_join_spans( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "lookup_join_spans") -} - -func TestLogic_manual_retry( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "manual_retry") -} - -func TestLogic_materialized_view( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "materialized_view") -} - -func TestLogic_merge_join( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "merge_join") -} - -func TestLogic_multi_statement( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "multi_statement") -} - -func TestLogic_name_escapes( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "name_escapes") -} - -func TestLogic_namespace( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "namespace") -} - -func TestLogic_new_schema_changer( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "new_schema_changer") -} - -func TestLogic_no_primary_key( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "no_primary_key") -} - -func TestLogic_notice( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "notice") -} - -func TestLogic_numeric_references( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "numeric_references") -} - -func TestLogic_on_update( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "on_update") -} - -func TestLogic_operator( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "operator") -} - -func TestLogic_optimizer_timeout( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "optimizer_timeout") -} - -func TestLogic_order_by( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "order_by") -} - -func TestLogic_ordinal_references( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "ordinal_references") -} - -func TestLogic_ordinality( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "ordinality") -} - -func TestLogic_overflow( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "overflow") -} - -func TestLogic_overlaps( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "overlaps") -} - -func TestLogic_owner( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "owner") -} - -func TestLogic_parallel_stmts_compat( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "parallel_stmts_compat") -} - -func TestLogic_partial_index( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "partial_index") -} - -func TestLogic_partial_txn_commit( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "partial_txn_commit") -} - -func TestLogic_partitioning( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "partitioning") -} - -func TestLogic_pg_builtins( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "pg_builtins") -} - -func TestLogic_pg_catalog_pg_default_acl( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "pg_catalog_pg_default_acl") -} - -func TestLogic_pg_catalog_pg_default_acl_with_grant_option( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "pg_catalog_pg_default_acl_with_grant_option") -} - -func TestLogic_pg_extension( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "pg_extension") -} - -func TestLogic_pg_lsn( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "pg_lsn") -} - -func TestLogic_pgcrypto_builtins( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "pgcrypto_builtins") -} - -func TestLogic_pgoidtype( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "pgoidtype") -} - -func TestLogic_plpgsql_builtins( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "plpgsql_builtins") -} - -func TestLogic_poison_after_push( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "poison_after_push") -} - -func TestLogic_postgres_jsonb( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "postgres_jsonb") -} - -func TestLogic_postgresjoin( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "postgresjoin") -} - -func TestLogic_privilege_builtins( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "privilege_builtins") -} - -func TestLogic_privileges_comments( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "privileges_comments") -} - -func TestLogic_privileges_table( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "privileges_table") -} - -func TestLogic_proc_invokes_proc( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "proc_invokes_proc") -} - -func TestLogic_procedure( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "procedure") -} - -func TestLogic_procedure_cte( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "procedure_cte") -} - -func TestLogic_procedure_deps( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "procedure_deps") -} - -func TestLogic_procedure_params( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "procedure_params") -} - -func TestLogic_procedure_polymorphic( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "procedure_polymorphic") -} - -func TestLogic_procedure_privileges( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "procedure_privileges") -} - -func TestLogic_procedure_schema_change( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "procedure_schema_change") -} - -func TestLogic_propagate_input_ordering( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "propagate_input_ordering") -} - -func TestLogic_reassign_owned_by( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "reassign_owned_by") -} - -func TestLogic_record( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "record") -} - -func TestLogic_redact_descriptor( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "redact_descriptor") -} - -func TestLogic_rename_atomic( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "rename_atomic") -} - -func TestLogic_rename_column( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "rename_column") -} - -func TestLogic_rename_constraint( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "rename_constraint") -} - -func TestLogic_rename_database( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "rename_database") -} - -func TestLogic_rename_index( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "rename_index") -} - -func TestLogic_rename_sequence( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "rename_sequence") -} - -func TestLogic_rename_table( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "rename_table") -} - -func TestLogic_rename_view( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "rename_view") -} - -func TestLogic_reset( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "reset") -} - -func TestLogic_retry( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "retry") -} - -func TestLogic_returning( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "returning") -} - -func TestLogic_role( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "role") -} - -func TestLogic_routine_schema_change( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "routine_schema_change") -} - -func TestLogic_row_level_ttl( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "row_level_ttl") -} - -func TestLogic_rows_from( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "rows_from") -} - -func TestLogic_run_control( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "run_control") -} - -func TestLogic_save_table( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "save_table") -} - -func TestLogic_savepoints( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "savepoints") -} - -func TestLogic_scale( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "scale") -} - -func TestLogic_scatter( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "scatter") -} - -func TestLogic_schema( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "schema") -} - -func TestLogic_schema_change_feature_flags( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "schema_change_feature_flags") -} - -func TestLogic_schema_change_in_txn( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "schema_change_in_txn") -} - -func TestLogic_schema_change_logical_replication( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "schema_change_logical_replication") -} - -func TestLogic_schema_change_retry( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "schema_change_retry") -} - -func TestLogic_schema_locked( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "schema_locked") -} - -func TestLogic_schema_repair( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "schema_repair") -} - -func TestLogic_scrub( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "scrub") -} - -func TestLogic_secondary_index_column_families( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "secondary_index_column_families") -} - -func TestLogic_select( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "select") -} - -func TestLogic_select_for_share( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "select_for_share") -} - -func TestLogic_select_for_update( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "select_for_update") -} - -func TestLogic_select_index( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "select_index") -} - -func TestLogic_select_index_flags( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "select_index_flags") -} - -func TestLogic_select_search_path( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "select_search_path") -} - -func TestLogic_select_table_alias( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "select_table_alias") -} - -func TestLogic_sequences( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "sequences") -} - -func TestLogic_sequences_distsql( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "sequences_distsql") -} - -func TestLogic_sequences_regclass( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "sequences_regclass") -} - -func TestLogic_serial( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "serial") -} - -func TestLogic_serializable_eager_restart( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "serializable_eager_restart") -} - -func TestLogic_set_local( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "set_local") -} - -func TestLogic_set_role( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "set_role") -} - -func TestLogic_set_schema( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "set_schema") -} - -func TestLogic_set_time_zone( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "set_time_zone") -} - -func TestLogic_shift( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "shift") -} - -func TestLogic_show_commit_timestamp( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "show_commit_timestamp") -} - -func TestLogic_show_completions( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "show_completions") -} - -func TestLogic_show_create( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "show_create") -} - -func TestLogic_show_create_all_routines( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "show_create_all_routines") -} - -func TestLogic_show_create_all_schemas( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "show_create_all_schemas") -} - -func TestLogic_show_create_all_tables( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "show_create_all_tables") -} - -func TestLogic_show_create_all_tables_builtin( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "show_create_all_tables_builtin") -} - -func TestLogic_show_create_all_triggers( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "show_create_all_triggers") -} - -func TestLogic_show_create_all_types( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "show_create_all_types") -} - -func TestLogic_show_create_redact( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "show_create_redact") -} - -func TestLogic_show_default_privileges( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "show_default_privileges") -} - -func TestLogic_show_external_connections( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "show_external_connections") -} - -func TestLogic_show_fingerprints( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "show_fingerprints") -} - -func TestLogic_show_grants_on_virtual_table( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "show_grants_on_virtual_table") -} - -func TestLogic_show_grants_synthetic( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "show_grants_synthetic") -} - -func TestLogic_show_indexes( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "show_indexes") -} - -func TestLogic_show_inspect_errors( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "show_inspect_errors") -} - -func TestLogic_show_tenant_fingerprints( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "show_tenant_fingerprints") -} - -func TestLogic_show_transfer_state( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "show_transfer_state") -} - -func TestLogic_show_var( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "show_var") -} - -func TestLogic_span_builtins( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "span_builtins") -} - -func TestLogic_split_at( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "split_at") -} - -func TestLogic_sqllite( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "sqllite") -} - -func TestLogic_sqlliveness( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "sqlliveness") -} - -func TestLogic_sqlsmith( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "sqlsmith") -} - -func TestLogic_srfs( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "srfs") -} - -func TestLogic_statement_source( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "statement_source") -} - -func TestLogic_statement_statistics_errors( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "statement_statistics_errors") -} - -func TestLogic_statement_statistics_errors_redacted( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "statement_statistics_errors_redacted") -} - -func TestLogic_stats( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "stats") -} - -func TestLogic_storing( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "storing") -} - -func TestLogic_strict_ddl_atomicity( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "strict_ddl_atomicity") -} - -func TestLogic_suboperators( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "suboperators") -} - -func TestLogic_subquery( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "subquery") -} - -func TestLogic_subquery_correlated( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "subquery_correlated") -} - -func TestLogic_synthetic_privileges( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "synthetic_privileges") -} - -func TestLogic_system( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "system") -} - -func TestLogic_system_columns( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "system_columns") -} - -func TestLogic_system_namespace( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "system_namespace") -} - -func TestLogic_table( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "table") -} - -func TestLogic_target_names( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "target_names") -} - -func TestLogic_temp_table( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "temp_table") -} - -func TestLogic_temp_table_txn( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "temp_table_txn") -} - -func TestLogic_tenant( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "tenant") -} - -func TestLogic_tenant_builtins( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "tenant_builtins") -} - -func TestLogic_time( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "time") -} - -func TestLogic_timestamp( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "timestamp") -} - -func TestLogic_timetz( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "timetz") -} - -func TestLogic_trigram_builtins( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "trigram_builtins") -} - -func TestLogic_trigram_indexes( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "trigram_indexes") -} - -func TestLogic_truncate( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "truncate") -} - -func TestLogic_truncate_with_concurrent_mutation( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "truncate_with_concurrent_mutation") -} - -func TestLogic_tsvector( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "tsvector") -} - -func TestLogic_tuple( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "tuple") -} - -func TestLogic_tuple_local( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "tuple_local") -} - -func TestLogic_two_phase_commit( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "two_phase_commit") -} - -func TestLogic_txn( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "txn") -} - -func TestLogic_txn_as_of( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "txn_as_of") -} - -func TestLogic_txn_retry( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "txn_retry") -} - -func TestLogic_txn_stats( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "txn_stats") -} - -func TestLogic_type_privileges( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "type_privileges") -} - -func TestLogic_typing( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "typing") -} - -func TestLogic_udf( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "udf") -} - -func TestLogic_udf_calling_udf( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "udf_calling_udf") -} - -func TestLogic_udf_cte( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "udf_cte") -} - -func TestLogic_udf_delete( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "udf_delete") -} - -func TestLogic_udf_deps( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "udf_deps") -} - -func TestLogic_udf_fk( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "udf_fk") -} - -func TestLogic_udf_in_constraints( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "udf_in_constraints") -} - -func TestLogic_udf_in_table( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "udf_in_table") -} - -func TestLogic_udf_insert( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "udf_insert") -} - -func TestLogic_udf_observability( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "udf_observability") -} - -func TestLogic_udf_oid_ref( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "udf_oid_ref") -} - -func TestLogic_udf_options( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "udf_options") -} - -func TestLogic_udf_params( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "udf_params") -} - -func TestLogic_udf_polymorphic( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "udf_polymorphic") -} - -func TestLogic_udf_prepare( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "udf_prepare") -} - -func TestLogic_udf_privileges( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "udf_privileges") -} - -func TestLogic_udf_privileges_mutations( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "udf_privileges_mutations") -} - -func TestLogic_udf_procedure_mix( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "udf_procedure_mix") -} - -func TestLogic_udf_record( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "udf_record") -} - -func TestLogic_udf_regressions( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "udf_regressions") -} - -func TestLogic_udf_rewrite( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "udf_rewrite") -} - -func TestLogic_udf_schema_change( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "udf_schema_change") -} - -func TestLogic_udf_security( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "udf_security") -} - -func TestLogic_udf_setof( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "udf_setof") -} - -func TestLogic_udf_star( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "udf_star") -} - -func TestLogic_udf_subquery( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "udf_subquery") -} - -func TestLogic_udf_unsupported( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "udf_unsupported") -} - -func TestLogic_udf_update( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "udf_update") -} - -func TestLogic_udf_upsert( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "udf_upsert") -} - -func TestLogic_union( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "union") -} - -func TestLogic_unique( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "unique") -} - -func TestLogic_update( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "update") -} - -func TestLogic_update_from( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "update_from") -} - -func TestLogic_upsert( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "upsert") -} - -func TestLogic_upsert_non_metamorphic( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "upsert_non_metamorphic") -} - -func TestLogic_user( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "user") -} - -func TestLogic_uuid( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "uuid") -} - -func TestLogic_values( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "values") -} - -func TestLogic_vectorize_agg( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "vectorize_agg") -} - -func TestLogic_vectorize_overloads( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "vectorize_overloads") -} - -func TestLogic_vectorize_shutdown( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "vectorize_shutdown") -} - -func TestLogic_vectorize_types( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "vectorize_types") -} - -func TestLogic_vectorize_unsupported( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "vectorize_unsupported") -} - -func TestLogic_views( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "views") -} - -func TestLogic_virtual_columns( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "virtual_columns") -} - -func TestLogic_virtual_table_privileges( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "virtual_table_privileges") -} - -func TestLogic_void( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "void") -} - -func TestLogic_where( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "where") -} - -func TestLogic_window( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "window") -} - -func TestLogic_with( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "with") -} - -func TestLogic_workload_indexrecs( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "workload_indexrecs") -} - -func TestLogic_zero( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "zero") -} - -func TestLogic_zigzag_join( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "zigzag_join") -} - -func TestLogic_zone_config( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "zone_config") -} - -func TestLogic_zone_config_system_tenant( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runLogicTest(t, "zone_config_system_tenant") -} diff --git a/pkg/sql/logictest/tests/local-mixed-25.3/generated_test.go b/pkg/sql/logictest/tests/local-mixed-25.3/generated_test.go index 91e6fcfda8bb..2bcb40a48856 100644 --- a/pkg/sql/logictest/tests/local-mixed-25.3/generated_test.go +++ b/pkg/sql/logictest/tests/local-mixed-25.3/generated_test.go @@ -25,7 +25,7 @@ import ( "github.com/cockroachdb/cockroach/pkg/util/randutil" ) -const configIdx = 21 +const configIdx = 20 var logicTestDir string diff --git a/pkg/sql/logictest/tests/local-mixed-25.4/generated_test.go b/pkg/sql/logictest/tests/local-mixed-25.4/generated_test.go index f422b9b81ade..20a0082a9b5d 100644 --- a/pkg/sql/logictest/tests/local-mixed-25.4/generated_test.go +++ b/pkg/sql/logictest/tests/local-mixed-25.4/generated_test.go @@ -25,7 +25,7 @@ import ( "github.com/cockroachdb/cockroach/pkg/util/randutil" ) -const configIdx = 22 +const configIdx = 21 var logicTestDir string diff --git a/pkg/sql/schemachanger/scplan/BUILD.bazel b/pkg/sql/schemachanger/scplan/BUILD.bazel index cd6a8c67976e..1fe15ac0f762 100644 --- a/pkg/sql/schemachanger/scplan/BUILD.bazel +++ b/pkg/sql/schemachanger/scplan/BUILD.bazel @@ -17,7 +17,6 @@ go_library( "//pkg/sql/schemachanger/scplan/internal/opgen", "//pkg/sql/schemachanger/scplan/internal/rules", "//pkg/sql/schemachanger/scplan/internal/rules/current", - "//pkg/sql/schemachanger/scplan/internal/rules/release_25_2", "//pkg/sql/schemachanger/scplan/internal/rules/release_25_3", "//pkg/sql/schemachanger/scplan/internal/rules/release_25_4", "//pkg/sql/schemachanger/scplan/internal/scgraph", diff --git a/pkg/sql/schemachanger/scplan/internal/rules/release_25_2/BUILD.bazel b/pkg/sql/schemachanger/scplan/internal/rules/release_25_2/BUILD.bazel deleted file mode 100644 index 51efb453e4ec..000000000000 --- a/pkg/sql/schemachanger/scplan/internal/rules/release_25_2/BUILD.bazel +++ /dev/null @@ -1,69 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test") - -go_library( - name = "release_25_2", - srcs = [ - "dep_add_column.go", - "dep_add_constraint.go", - "dep_add_index.go", - "dep_add_index_and_column.go", - "dep_add_index_and_constraint.go", - "dep_add_trigger.go", - "dep_alter_column_type.go", - "dep_configure_zone.go", - "dep_create.go", - "dep_create_function.go", - "dep_create_policy.go", - "dep_drop_column.go", - "dep_drop_constraint.go", - "dep_drop_index.go", - "dep_drop_index_and_column.go", - "dep_drop_object.go", - "dep_drop_policy.go", - "dep_drop_trigger.go", - "dep_garbage_collection.go", - "dep_schema_locked.go", - "dep_swap_index.go", - "dep_two_version.go", - "helpers.go", - "registry.go", - ], - importpath = "github.com/cockroachdb/cockroach/pkg/sql/schemachanger/scplan/internal/rules/release_25_2", - visibility = ["//pkg/sql/schemachanger/scplan:__subpackages__"], - deps = [ - "//pkg/clusterversion", - "//pkg/sql/schemachanger/rel", - "//pkg/sql/schemachanger/scpb", - "//pkg/sql/schemachanger/scplan/internal/opgen", - "//pkg/sql/schemachanger/scplan/internal/rules", - "//pkg/sql/schemachanger/scplan/internal/scgraph", - "//pkg/sql/schemachanger/screl", - "//pkg/sql/sem/catid", - "@com_github_cockroachdb_errors//:errors", - ], -) - -go_test( - name = "release_25_2_test", - srcs = [ - "assertions_test.go", - "rules_test.go", - ], - data = glob(["testdata/**"]), - embed = [":release_25_2"], - deps = [ - "//pkg/clusterversion", - "//pkg/sql/catalog/catpb", - "//pkg/sql/schemachanger/rel", - "//pkg/sql/schemachanger/scpb", - "//pkg/sql/schemachanger/scplan/internal/opgen", - "//pkg/sql/schemachanger/scplan/internal/rules", - "//pkg/sql/schemachanger/screl", - "//pkg/sql/types", - "//pkg/testutils/datapathutils", - "@com_github_cockroachdb_datadriven//:datadriven", - "@com_github_cockroachdb_errors//:errors", - "@com_github_stretchr_testify//require", - "@in_gopkg_yaml_v3//:yaml_v3", - ], -) diff --git a/pkg/sql/schemachanger/scplan/internal/rules/release_25_2/assertions_test.go b/pkg/sql/schemachanger/scplan/internal/rules/release_25_2/assertions_test.go deleted file mode 100644 index ec6c0e66d660..000000000000 --- a/pkg/sql/schemachanger/scplan/internal/rules/release_25_2/assertions_test.go +++ /dev/null @@ -1,237 +0,0 @@ -// Copyright 2022 The Cockroach Authors. -// -// Use of this software is governed by the CockroachDB Software License -// included in the /LICENSE file. - -package release_25_2 - -import ( - "reflect" - "runtime" - "strings" - "testing" - - "github.com/cockroachdb/cockroach/pkg/clusterversion" - "github.com/cockroachdb/cockroach/pkg/sql/catalog/catpb" - "github.com/cockroachdb/cockroach/pkg/sql/schemachanger/scpb" - "github.com/cockroachdb/cockroach/pkg/sql/schemachanger/scplan/internal/opgen" - "github.com/cockroachdb/cockroach/pkg/sql/schemachanger/scplan/internal/rules" - "github.com/cockroachdb/cockroach/pkg/sql/schemachanger/screl" - "github.com/cockroachdb/cockroach/pkg/sql/types" - "github.com/cockroachdb/errors" -) - -// TestRuleAssertions verifies that important helper functions verify certain -// properties that the rule definitions rely on. -func TestRuleAssertions(t *testing.T) { - for _, fn := range []func(e scpb.Element) error{ - checkSimpleDependentsReferenceDescID, - checkToAbsentCategories, - checkIsWithTypeT, - checkIsWithExpression, - checkIsColumnDependent, - checkIsIndexDependent, - checkIsConstraintDependent, - checkConstraintPartitions, - checkIsTriggerDependent, - } { - var fni interface{} = fn - fullName := runtime.FuncForPC(reflect.ValueOf(fni).Pointer()).Name() - nameParts := strings.Split(fullName, "rules.") - shortName := nameParts[len(nameParts)-1] - t.Run(shortName, func(t *testing.T) { - cv := clusterversion.ClusterVersion{Version: rulesVersionKey.Version()} - _ = rules.ForEachElementInActiveVersion(cv, func(e scpb.Element) error { - e = nonNilElement(e) - if err := fn(e); err != nil { - t.Errorf("%T: %+v", e, err) - } - return nil - }) - }) - } -} - -func nonNilElement(element scpb.Element) scpb.Element { - return reflect.New(reflect.ValueOf(element).Type().Elem()).Interface().(scpb.Element) -} - -// Assert that only simple dependents (non-descriptor, non-index, non-column) -// and data elements have screl.ReferencedDescID attributes. -// One exception is foreign key constraint, which is not simple dependent nor data -// element but it has a screl.ReferencedDescID attribute. -func checkSimpleDependentsReferenceDescID(e scpb.Element) error { - if isSimpleDependent(e) || isData(e) { - return nil - } - if _, ok := e.(*scpb.ForeignKeyConstraint); ok { - return nil - } - if _, err := screl.Schema.GetAttribute(screl.ReferencedDescID, e); err == nil { - return errors.New("unexpected screl.ReferencedDescID attr") - } - return nil -} - -// Assert that elements can be grouped into three categories when transitioning -// from PUBLIC to ABSENT: -// - go via DROPPED iff they're descriptor or data elements; -// - go via a non-read status iff they're indexes or columns, which are -// subject to the two-version invariant; -// - go direct to ABSENT in all other cases. -func checkToAbsentCategories(e scpb.Element) error { - s0 := opgen.InitialStatus(e, scpb.Status_ABSENT) - s1 := opgen.NextStatus(e, scpb.Status_ABSENT, s0) - switch s1 { - case scpb.Status_DROPPED: - if isDescriptor(e) || isData(e) { - return nil - } - case scpb.Status_VALIDATED, scpb.Status_WRITE_ONLY, scpb.Status_DELETE_ONLY: - if isSubjectTo2VersionInvariant(e) { - return nil - } - case scpb.Status_ABSENT: - if isSimpleDependent(e) { - return nil - } - // TableSchemaLocked is subject to the two version invariant rule, so that - // toggling the lock will have descriptor version bumps in between. - // However, it is allowed direct transitions from PUBLIC -> ABSENT / - // ABSENT -> PUBLIC. - if isTableSchemaLocked(e) { - return nil - } - } - return errors.Newf("unexpected transition %s -> %s in direction ABSENT", s0, s1) -} - -// Assert that isWithTypeT covers all elements with embedded TypeTs. -func checkIsWithTypeT(e scpb.Element) error { - return screl.WalkTypes(e, func(t *types.T) error { - if isWithTypeT(e) { - return nil - } - return errors.New("should verify isWithTypeT but doesn't") - }) -} - -// Assert that isWithExpression covers all elements with embedded -// expressions. -func checkIsWithExpression(e scpb.Element) error { - return screl.WalkExpressions(e, func(t *catpb.Expression) error { - switch e.(type) { - // Ignore elements which have catpb.Expression fields but which don't - // have them within an scpb.Expression for valid reasons. - case *scpb.RowLevelTTL: - return nil - } - if isWithExpression(e) { - return nil - } - return errors.Newf("should verify isWithExpression but doesn't: %T", e) - }) -} - -// Assert that isColumnDependent covers all dependent elements of a column -// element. -func checkIsColumnDependent(e scpb.Element) error { - // Exclude columns themselves. - if isColumn(e) { - return nil - } - // A column dependent should have a ColumnID attribute. - _, err := screl.Schema.GetAttribute(screl.ColumnID, e) - if isColumnDependent(e) { - if err != nil { - return errors.New("verifies isColumnDependent but doesn't have ColumnID attr") - } - } else if err == nil { - return errors.New("has ColumnID attr but doesn't verify isColumnDependent") - } - return nil -} - -// Assert that isIndexDependent covers all dependent elements of an index -// element. -func checkIsIndexDependent(e scpb.Element) error { - // Exclude indexes themselves and their data. - if isIndex(e) || isData(e) || isNonIndexBackedConstraint(e) { - return nil - } - // An index dependent should have an IndexID attribute. - _, err := screl.Schema.GetAttribute(screl.IndexID, e) - if isIndexDependent(e) { - if err != nil { - return errors.New("verifies isIndexDependent but doesn't have IndexID attr") - } - } else if err == nil { - return errors.New("has IndexID attr but doesn't verify isIndexDependent") - } - return nil -} - -// Assert that checkIsConstraintDependent covers all elements of a constraint -// element. -func checkIsConstraintDependent(e scpb.Element) error { - // Exclude constraints themselves. - if isConstraint(e) { - return nil - } - // A constraint dependent should have a ConstraintID attribute. - _, err := screl.Schema.GetAttribute(screl.ConstraintID, e) - if isConstraintDependent(e) { - if err != nil { - return errors.New("verifies isConstraintDependent but doesn't have ConstraintID attr") - } - } else if err == nil { - return errors.New("has ConstraintID attr but doesn't verify isConstraintDependent") - } - return nil -} - -// Assert the following partitions about constraints: -// 1. An element `e` with ConstraintID attr is either a constraint -// or a constraint dependent. -// 2. A constraint is either index-backed or non-index-backed. -// -// TODO (xiang): Add test for cross-descriptor partition. We currently -// cannot have them until we added referenced.*ID attr for -// UniqueWithoutIndex[NotValid] element, which is required to support -// partial unique without index constraint with a predicate that references -// other descriptors. -func checkConstraintPartitions(e scpb.Element) error { - _, err := screl.Schema.GetAttribute(screl.ConstraintID, e) - if err != nil { - return nil //nolint:returnerrcheck - } - if !isConstraint(e) && !isConstraintDependent(e) { - return errors.New("has ConstraintID attr but is not a constraint nor a constraint dependent") - } - if isConstraintDependent(e) { - return nil - } - if !isNonIndexBackedConstraint(e) && !isIndex(e) { - return errors.New("verifies isConstraint but does not verify isNonIndexBackedConstraint nor isIndex") - } - return nil -} - -// Assert that checkIsTriggerDependent covers all elements of a trigger element. -func checkIsTriggerDependent(e scpb.Element) error { - // Exclude triggers themselves. - switch e.(type) { - case *scpb.Trigger: - return nil - } - // A trigger dependent should have a TriggerID attribute. - _, err := screl.Schema.GetAttribute(screl.TriggerID, e) - if isTriggerDependent(e) { - if err != nil { - return errors.New("verifies isTriggerDependent but doesn't have TriggerID attr") - } - } else if err == nil { - return errors.New("has TriggerID attr but doesn't verify isTriggerDependent") - } - return nil -} diff --git a/pkg/sql/schemachanger/scplan/internal/rules/release_25_2/dep_add_column.go b/pkg/sql/schemachanger/scplan/internal/rules/release_25_2/dep_add_column.go deleted file mode 100644 index c415ba15d99c..000000000000 --- a/pkg/sql/schemachanger/scplan/internal/rules/release_25_2/dep_add_column.go +++ /dev/null @@ -1,240 +0,0 @@ -// Copyright 2022 The Cockroach Authors. -// -// Use of this software is governed by the CockroachDB Software License -// included in the /LICENSE file. - -package release_25_2 - -import ( - "github.com/cockroachdb/cockroach/pkg/sql/schemachanger/rel" - "github.com/cockroachdb/cockroach/pkg/sql/schemachanger/scpb" - . "github.com/cockroachdb/cockroach/pkg/sql/schemachanger/scplan/internal/rules" - "github.com/cockroachdb/cockroach/pkg/sql/schemachanger/scplan/internal/scgraph" - "github.com/cockroachdb/cockroach/pkg/sql/schemachanger/screl" -) - -// These rules ensure that column-dependent elements, like a column's name, its -// DEFAULT expression, etc. appear once the column reaches a suitable state. -func init() { - - registerDepRule( - "column existence precedes column dependents", - scgraph.Precedence, - "column", "dependent", - func(from, to NodeVars) rel.Clauses { - return rel.Clauses{ - from.Type((*scpb.Column)(nil)), - to.TypeFilter(rulesVersionKey, isColumnDependent), - JoinOnColumnID(from, to, "table-id", "col-id"), - StatusesToPublicOrTransient(from, scpb.Status_DELETE_ONLY, to, scpb.Status_PUBLIC), - IsNotAlterColumnTypeOp("table-id", "col-id"), - } - }, - ) - - // This rule is similar to the one above but omits the column name. This is specific - // to ALTER COLUMN ... TYPE, which replaces a column with the same name. The column - // name is assigned during the swap, as it replaces the old column. - registerDepRule( - "column existence precedes column dependents during an alter column type", - scgraph.Precedence, - "column", "dependent", - func(from, to NodeVars) rel.Clauses { - return rel.Clauses{ - from.Type((*scpb.Column)(nil)), - to.TypeFilter(rulesVersionKey, isColumnDependentExceptColumnName), - JoinOnColumnID(from, to, "table-id", "col-id"), - StatusesToPublicOrTransient(from, scpb.Status_DELETE_ONLY, to, scpb.Status_PUBLIC), - rel.And(IsAlterColumnTypeOp("table-id", "col-id")...), - } - }, - ) - - registerDepRule( - "column dependents exist before column becomes public", - scgraph.Precedence, - "dependent", "column", - func(from, to NodeVars) rel.Clauses { - return rel.Clauses{ - from.TypeFilter(rulesVersionKey, isColumnDependent), - to.Type((*scpb.Column)(nil)), - JoinOnColumnID(from, to, "table-id", "col-id"), - StatusesToPublicOrTransient(from, scpb.Status_PUBLIC, to, scpb.Status_PUBLIC), - } - }, - ) -} - -// Special cases of the above. -func init() { - registerDepRule( - "column type set right after column existence", - scgraph.SameStagePrecedence, - "column", "column-type", - func(from, to NodeVars) rel.Clauses { - return rel.Clauses{ - from.Type((*scpb.Column)(nil)), - to.Type((*scpb.ColumnType)(nil)), - StatusesToPublicOrTransient(from, scpb.Status_DELETE_ONLY, to, scpb.Status_PUBLIC), - JoinOnColumnID(from, to, "table-id", "col-id"), - } - }, - ) - - // There are two distinct rules for transitioning the column name to public, - // depending on whether an ALTER COLUMN TYPE operation is in progress. - // This rule applies when an ALTER COLUMN TYPE is *not* occurring and is - // identical to the prior rule for ColumnType, except that it applies to ColumnName. - registerDepRule( - "column name set right after column existence, except for alter column type", - scgraph.SameStagePrecedence, - "column", "column-name-or-type", - func(from, to NodeVars) rel.Clauses { - return rel.Clauses{ - from.Type((*scpb.Column)(nil)), - to.Type((*scpb.ColumnName)(nil)), - StatusesToPublicOrTransient(from, scpb.Status_DELETE_ONLY, to, scpb.Status_PUBLIC), - JoinOnColumnID(from, to, "table-id", "col-id"), - IsNotAlterColumnTypeOp("table-id", "col-id"), - } - }, - ) - - // This rule is similar to the previous one but applies during an ALTER COLUMN TYPE operation. - // In this scenario, we are replacing one column with another, both of which share the same name. - // To prevent any period where a column with that name is not public, we ensure that the column - // names are swapped in the same stage. - registerDepRule( - "during alter column type, column names for old and new columns are swapped in the same stage", - scgraph.SameStagePrecedence, - "old-column-name", "new-column-name", - func(from, to NodeVars) rel.Clauses { - return rel.Clauses{ - from.Type((*scpb.ColumnName)(nil)), - to.Type((*scpb.ColumnName)(nil)), - from.TargetStatus(scpb.ToAbsent), - from.CurrentStatus(scpb.Status_ABSENT), - to.TargetStatus(scpb.ToPublic), - to.CurrentStatus(scpb.Status_PUBLIC), - JoinOnDescID(from, to, "table-id"), - to.El.AttrEqVar(screl.ColumnID, "new-col-id"), - rel.And(IsAlterColumnTypeOp("table-id", "new-col-id")...), - } - }, - ) - - registerDepRule( - "DEFAULT or ON UPDATE existence precedes writes to column, except if they are added as part of a alter column type", - scgraph.Precedence, - "expr", "column", - func(from, to NodeVars) rel.Clauses { - return rel.Clauses{ - from.Type( - (*scpb.ColumnDefaultExpression)(nil), - (*scpb.ColumnOnUpdateExpression)(nil), - ), - to.Type((*scpb.Column)(nil)), - JoinOnColumnID(from, to, "table-id", "col-id"), - IsNotAlterColumnTypeOp("table-id", "col-id"), - StatusesToPublicOrTransient(from, scpb.Status_PUBLIC, to, scpb.Status_WRITE_ONLY), - } - }, - ) - - // Column becomes writable in the same stage as column constraint is enforced. - // - // This rule exists to prevent the case that the constraint becomes enforced - // (which means writes need to honor it) when the column itself is still - // in DELETE_ONLY and thus not visible to writes. - // - // N.B. It's essentially the same rule as "column constraint removed right - // before column reaches delete only" but on the adding path. - // N.B. SameStage is enough; which transition happens first won't matter. - registerDepRule( - "column writable right before column constraint is enforced.", - scgraph.SameStagePrecedence, - "column", "column-constraint", - func(from, to NodeVars) rel.Clauses { - return rel.Clauses{ - from.Type((*scpb.Column)(nil)), - to.Type((*scpb.ColumnNotNull)(nil)), - JoinOnColumnID(from, to, "table-id", "col-id"), - StatusesToPublicOrTransient(from, scpb.Status_WRITE_ONLY, to, scpb.Status_WRITE_ONLY), - } - }, - ) - - // A computed expression cannot have a DEFAULT or ON UPDATE expression. - // However, if the computed expression is temporary (e.g., for an ALTER COLUMN - // TYPE requiring a backfill), these expressions can be added once the - // computed expression is dropped. - registerDepRule( - "DEFAULT or ON UPDATE expressions is public after transient compute expression transitions to absent", - scgraph.SameStagePrecedence, - "transient-compute-expression", "column-expr", - func(from, to NodeVars) rel.Clauses { - return rel.Clauses{ - from.Type((*scpb.ColumnComputeExpression)(nil)), - to.Type( - (*scpb.ColumnDefaultExpression)(nil), - (*scpb.ColumnOnUpdateExpression)(nil), - ), - JoinOnColumnID(from, to, "table-id", "col-id"), - ToPublicOrTransient(from, to), - from.CurrentStatus(scpb.Status_TRANSIENT_ABSENT), - to.CurrentStatus(scpb.Status_PUBLIC), - } - }, - ) - - registerDepRule( - "Final compute expression is always added after transient compute expression", - scgraph.SameStagePrecedence, - "transient-compute-expression", "final-compute-expression", - func(from, to NodeVars) rel.Clauses { - return rel.Clauses{ - from.Type((*scpb.ColumnComputeExpression)(nil)), - to.Type((*scpb.ColumnComputeExpression)(nil)), - JoinOnColumnID(from, to, "table-id", "col-id"), - from.El.AttrEq(screl.Usage, scpb.ColumnComputeExpression_ALTER_TYPE_USING), - to.El.AttrEq(screl.Usage, scpb.ColumnComputeExpression_REGULAR), - ToPublicOrTransient(from, to), - from.CurrentStatus(scpb.Status_TRANSIENT_ABSENT), - to.CurrentStatus(scpb.Status_PUBLIC), - } - }, - ) -} - -// This rule ensures that columns depend on each other in increasing order. -func init() { - registerDepRule( - "ensure columns are in increasing order", - scgraph.Precedence, - "later-column", "earlier-column", - func(from, to NodeVars) rel.Clauses { - status := rel.Var("status") - return rel.Clauses{ - from.Type((*scpb.Column)(nil)), - // Join first on the target and node to only explore all columns - // which are being added as opposed to all columns. If we joined - // first on the columns, we'd be filtering the cross product of - // table columns. If a relation has a lot of columns, this can hurt. - // It's less likely that we have a very large number of columns which - // are being added. We'll want to do something else here when we start - // creating tables and all the columns are being added. - // - // The "right" answer is to push ordering predicates into rel; it also - // is maintaining sorted data structures. - from.JoinTargetNode(), - to.Type((*scpb.Column)(nil)), - JoinOnDescID(from, to, "table-id"), - ToPublicOrTransient(from, to), - status.In(scpb.Status_WRITE_ONLY, scpb.Status_PUBLIC), - status.Entities(screl.CurrentStatus, from.Node, to.Node), - FilterElements("SmallerColumnIDFirst", from, to, func(from, to *scpb.Column) bool { - return from.ColumnID < to.ColumnID - }), - } - }) -} diff --git a/pkg/sql/schemachanger/scplan/internal/rules/release_25_2/dep_add_constraint.go b/pkg/sql/schemachanger/scplan/internal/rules/release_25_2/dep_add_constraint.go deleted file mode 100644 index 8b79971851dd..000000000000 --- a/pkg/sql/schemachanger/scplan/internal/rules/release_25_2/dep_add_constraint.go +++ /dev/null @@ -1,79 +0,0 @@ -// Copyright 2022 The Cockroach Authors. -// -// Use of this software is governed by the CockroachDB Software License -// included in the /LICENSE file. - -package release_25_2 - -import ( - "github.com/cockroachdb/cockroach/pkg/sql/schemachanger/rel" - "github.com/cockroachdb/cockroach/pkg/sql/schemachanger/scpb" - . "github.com/cockroachdb/cockroach/pkg/sql/schemachanger/scplan/internal/rules" - "github.com/cockroachdb/cockroach/pkg/sql/schemachanger/scplan/internal/scgraph" - "github.com/cockroachdb/cockroach/pkg/sql/schemachanger/screl" -) - -// These rules ensure that constraint-dependent elements, like a constraint's -// name, etc. appear once the constraint reaches a suitable state. -func init() { - registerDepRule( - "constraint dependent public right before complex constraint", - scgraph.SameStagePrecedence, - "dependent", "complex-constraint", - func(from, to NodeVars) rel.Clauses { - return rel.Clauses{ - from.TypeFilter(rulesVersionKey, isConstraintDependent, Not(isConstraintWithoutIndexName)), - to.TypeFilter(rulesVersionKey, isNonIndexBackedConstraint, isSubjectTo2VersionInvariant), - JoinOnConstraintID(from, to, "table-id", "constraint-id"), - StatusesToPublicOrTransient(from, scpb.Status_PUBLIC, to, scpb.Status_PUBLIC), - } - }, - ) - - registerDepRule( - "simple constraint public right before its dependents", - scgraph.SameStagePrecedence, - "simple-constraint", "dependent", - func(from, to NodeVars) rel.Clauses { - return rel.Clauses{ - from.TypeFilter(rulesVersionKey, isNonIndexBackedConstraint, Not(isNonIndexBackedCrossDescriptorConstraint)), - to.TypeFilter(rulesVersionKey, isConstraintDependent), - JoinOnConstraintID(from, to, "table-id", "constraint-id"), - StatusesToPublicOrTransient(from, scpb.Status_PUBLIC, to, scpb.Status_PUBLIC), - } - }, - ) - - // Constraint name should be assigned right before it becomes visible, otherwise - // we won't have the correct message inside errors. - registerDepRule( - "simple constraint visible before name", - scgraph.Precedence, - "simple-constraint", "constraint-name", - func(from, to NodeVars) rel.Clauses { - return rel.Clauses{ - from.TypeFilter(rulesVersionKey, isNonIndexBackedConstraint), - to.TypeFilter(rulesVersionKey, isConstraintWithoutIndexName), - JoinOnConstraintID(from, to, "table-id", "constraint-id"), - StatusesToPublicOrTransient(from, scpb.Status_WRITE_ONLY, to, scpb.Status_PUBLIC), - } - }, - ) - - registerDepRule( - "column public before non-index-backed constraint (including hash-sharded) is created", - scgraph.Precedence, - "column", "constraint", - func(from, to NodeVars) rel.Clauses { - colID := rel.Var("columnID") - return rel.Clauses{ - from.Type((*scpb.Column)(nil)), - to.TypeFilter(rulesVersionKey, isNonIndexBackedConstraint), - from.El.AttrEqVar(screl.ColumnID, colID), - to.ReferencedColumnIDsContains(colID), - JoinOnDescID(from, to, "table-id"), - StatusesToPublicOrTransient(from, scpb.Status_PUBLIC, to, scpb.Status_WRITE_ONLY), - } - }, - ) -} diff --git a/pkg/sql/schemachanger/scplan/internal/rules/release_25_2/dep_add_index.go b/pkg/sql/schemachanger/scplan/internal/rules/release_25_2/dep_add_index.go deleted file mode 100644 index 982a260a93cb..000000000000 --- a/pkg/sql/schemachanger/scplan/internal/rules/release_25_2/dep_add_index.go +++ /dev/null @@ -1,260 +0,0 @@ -// Copyright 2022 The Cockroach Authors. -// -// Use of this software is governed by the CockroachDB Software License -// included in the /LICENSE file. - -package release_25_2 - -import ( - "github.com/cockroachdb/cockroach/pkg/sql/schemachanger/rel" - "github.com/cockroachdb/cockroach/pkg/sql/schemachanger/scpb" - . "github.com/cockroachdb/cockroach/pkg/sql/schemachanger/scplan/internal/rules" - "github.com/cockroachdb/cockroach/pkg/sql/schemachanger/scplan/internal/scgraph" - "github.com/cockroachdb/cockroach/pkg/sql/schemachanger/screl" -) - -// These rules ensure that index-dependent elements, like an index's name, its -// partitioning, etc. appear once the index reaches a suitable state. -func init() { - - registerDepRule( - "index existence precedes index dependents", - scgraph.Precedence, - "index", "dependent", - func(from, to NodeVars) rel.Clauses { - return rel.Clauses{ - from.Type( - (*scpb.PrimaryIndex)(nil), - (*scpb.SecondaryIndex)(nil), - ), - to.TypeFilter(rulesVersionKey, isIndexDependent), - JoinOnIndexID(from, to, "table-id", "index-id"), - StatusesToPublicOrTransient(from, scpb.Status_BACKFILL_ONLY, to, scpb.Status_PUBLIC), - } - }, - ) - - registerDepRule( - "temp index existence precedes index dependents", - scgraph.Precedence, - "index", "dependent", - func(from, to NodeVars) rel.Clauses { - return rel.Clauses{ - from.Type((*scpb.TemporaryIndex)(nil)), - to.TypeFilter(rulesVersionKey, isIndexDependent), - JoinOnIndexID(from, to, "table-id", "index-id"), - StatusesToPublicOrTransient(from, scpb.Status_DELETE_ONLY, to, scpb.Status_PUBLIC), - } - }, - ) - - registerDepRule( - "index dependents exist before index becomes public", - scgraph.Precedence, - "dependent", "index", - func(from, to NodeVars) rel.Clauses { - return rel.Clauses{ - from.TypeFilter(rulesVersionKey, isIndexDependent), - to.TypeFilter(rulesVersionKey, isIndex), - JoinOnIndexID(from, to, "table-id", "index-id"), - StatusesToPublicOrTransient(from, scpb.Status_PUBLIC, to, scpb.Status_PUBLIC), - } - }, - ) -} - -// Special cases of the above. -func init() { - - registerDepRule( - "primary index named right before index becomes public", - scgraph.SameStagePrecedence, - "index-name", "index", - func(from, to NodeVars) rel.Clauses { - return rel.Clauses{ - from.Type((*scpb.IndexName)(nil)), - to.Type( - (*scpb.PrimaryIndex)(nil), - ), - JoinOnIndexID(from, to, "table-id", "index-id"), - StatusesToPublicOrTransient(from, scpb.Status_PUBLIC, to, scpb.Status_PUBLIC), - } - }, - ) - registerDepRule( - "secondary index named before public (with index swap)", - scgraph.Precedence, - "index", "index-name", - func(from, to NodeVars) rel.Clauses { - return rel.Clauses{ - to.Type((*scpb.IndexName)(nil)), - from.Type( - (*scpb.SecondaryIndex)(nil), - ), - JoinOnIndexID(from, to, "table-id", "index-id"), - StatusesToPublicOrTransient(from, scpb.Status_VALIDATED, to, scpb.Status_PUBLIC), - rel.And(IsPotentialSecondaryIndexSwap("index-id", "table-id")...), - } - }, - ) - - registerDepRule( - "secondary index named before validation (without index swap)", - scgraph.Precedence, - "index-name", "index", - func(from, to NodeVars) rel.Clauses { - return rel.Clauses{ - from.Type((*scpb.IndexName)(nil)), - to.Type( - (*scpb.SecondaryIndex)(nil), - ), - JoinOnIndexID(from, to, "table-id", "index-id"), - IsNotPotentialSecondaryIndexSwap("table-id", "index-id"), - StatusesToPublicOrTransient(from, scpb.Status_PUBLIC, to, scpb.Status_VALIDATED), - } - }, - ) -} - -// This rule ensures that primary indexes and their corresponding temporary -// indexes appear in an appropriate order to correctly support index backfilling. -func init() { - - // Offline-backfilled index can begin backfilling after the corresponding - // temporary index exists in WRITE_ONLY. - registerDepRule( - "temp index is WRITE_ONLY before backfill", - scgraph.Precedence, - "temp", "index", - func(from, to NodeVars) rel.Clauses { - return rel.Clauses{ - from.Type((*scpb.TemporaryIndex)(nil)), - to.Type((*scpb.PrimaryIndex)(nil), (*scpb.SecondaryIndex)(nil)), - JoinOnDescID(from, to, "table-id"), - JoinOn( - from, screl.IndexID, - to, screl.TemporaryIndexID, - "temp-index-id", - ), - from.TargetStatus(scpb.TransientAbsent), - to.TargetStatus(scpb.ToPublic, scpb.TransientAbsent), - from.CurrentStatus(scpb.Status_WRITE_ONLY), - to.CurrentStatus(scpb.Status_BACKFILLED), - } - }, - ) - - // The following two rules together ensure that temporary index is dropped - // after its master index has merged its data (MERGED) and before its master - // index advances into the next status (WRITE_ONLY). - - // Temporary index starts to disappear after its master index has merged - // this temporary index's data. - registerDepRule( - "index is MERGED before its temp index starts to disappear", - scgraph.Precedence, - "index", "temp", - func(from, to NodeVars) rel.Clauses { - return rel.Clauses{ - from.Type((*scpb.PrimaryIndex)(nil), (*scpb.SecondaryIndex)(nil)), - to.Type((*scpb.TemporaryIndex)(nil)), - JoinOnDescID(from, to, "table-id"), - JoinOn( - from, screl.TemporaryIndexID, - to, screl.IndexID, - "temp-index-id", - ), - from.TargetStatus(scpb.ToPublic, scpb.TransientAbsent), - from.CurrentStatus(scpb.Status_MERGED), - to.TargetStatus(scpb.TransientAbsent), - to.CurrentStatus(scpb.Status_TRANSIENT_DELETE_ONLY), - } - }, - ) - - // Temporary index disappeared before its master index reaches WRITE_ONLY. - registerDepRule( - "temp index disappeared before its master index reaches WRITE_ONLY", - scgraph.Precedence, - "temp", "index", - func(from, to NodeVars) rel.Clauses { - return rel.Clauses{ - from.Type((*scpb.TemporaryIndex)(nil)), - to.Type((*scpb.PrimaryIndex)(nil), (*scpb.SecondaryIndex)(nil)), - JoinOnDescID(from, to, "table-id"), - JoinOn( - from, screl.IndexID, - to, screl.TemporaryIndexID, - "temp-index-id", - ), - from.TargetStatus(scpb.TransientAbsent), - from.CurrentStatus(scpb.Status_TRANSIENT_DELETE_ONLY), - to.TargetStatus(scpb.ToPublic, scpb.TransientAbsent), - to.CurrentStatus(scpb.Status_WRITE_ONLY), - } - }, - ) -} - -// We want to say that all columns which are part of a secondary index need -// to be in a primary index which is validated -// To do that, we want to find a secondary index which has a source which -// is a primary index which is itself new. -func init() { - - registerDepRule( - "primary index with new columns should validated before secondary indexes", - scgraph.Precedence, - "primary-index", "secondary-index", - func(from, to NodeVars) rel.Clauses { - return rel.Clauses{ - from.Type((*scpb.PrimaryIndex)(nil)), - to.Type((*scpb.SecondaryIndex)(nil)), - JoinOnDescID(from, to, "table-id"), - JoinOn( - from, screl.IndexID, - to, screl.SourceIndexID, - "primary-index-id", - ), - StatusesToPublicOrTransient(from, scpb.Status_VALIDATED, to, scpb.Status_BACKFILL_ONLY), - } - }) - - // This rule guarantees that the primary index can only go public, once the - // secondary index is ready to go public. - registerDepRule( - "secondary indexes should be in a validated state before primary indexes can go public", - scgraph.Precedence, - "secondary-index", "primary-index", - func(from, to NodeVars) rel.Clauses { - return rel.Clauses{ - from.Type((*scpb.SecondaryIndex)(nil)), - to.Type((*scpb.PrimaryIndex)(nil)), - JoinOnDescID(from, to, "table-id"), - JoinOn( - from, screl.SourceIndexID, - to, screl.IndexID, - "primary-index-id", - ), - StatusesToPublicOrTransient(from, scpb.Status_VALIDATED, to, scpb.Status_PUBLIC), - } - }) - - registerDepRule( - "primary index with new columns should exist before temp indexes", - scgraph.Precedence, - "primary-index", "temp-index", - func(from, to NodeVars) rel.Clauses { - return rel.Clauses{ - from.Type((*scpb.PrimaryIndex)(nil)), - to.Type((*scpb.TemporaryIndex)(nil)), - JoinOnDescID(from, to, "table-id"), - JoinOn( - from, screl.IndexID, - to, screl.SourceIndexID, - "primary-index-id", - ), - StatusesToPublicOrTransient(from, scpb.Status_VALIDATED, to, scpb.Status_DELETE_ONLY), - } - }) -} diff --git a/pkg/sql/schemachanger/scplan/internal/rules/release_25_2/dep_add_index_and_column.go b/pkg/sql/schemachanger/scplan/internal/rules/release_25_2/dep_add_index_and_column.go deleted file mode 100644 index 95d830454caa..000000000000 --- a/pkg/sql/schemachanger/scplan/internal/rules/release_25_2/dep_add_index_and_column.go +++ /dev/null @@ -1,143 +0,0 @@ -// Copyright 2022 The Cockroach Authors. -// -// Use of this software is governed by the CockroachDB Software License -// included in the /LICENSE file. - -package release_25_2 - -import ( - "github.com/cockroachdb/cockroach/pkg/sql/schemachanger/rel" - "github.com/cockroachdb/cockroach/pkg/sql/schemachanger/scpb" - . "github.com/cockroachdb/cockroach/pkg/sql/schemachanger/scplan/internal/rules" - "github.com/cockroachdb/cockroach/pkg/sql/schemachanger/scplan/internal/scgraph" -) - -// These rules ensure that columns and indexes containing these columns -// appear into existence in the correct order. -func init() { - - // We need to make sure that no columns are added to the index after it - // receives any data due to a backfill. - registerDepRule("index-column added to index before index is backfilled", - scgraph.Precedence, - "index-column", "index", - func(from, to NodeVars) rel.Clauses { - return rel.Clauses{ - from.Type((*scpb.IndexColumn)(nil)), - to.Type((*scpb.PrimaryIndex)(nil), (*scpb.SecondaryIndex)(nil)), - JoinOnIndexID(from, to, "table-id", "index-id"), - StatusesToPublicOrTransient(from, scpb.Status_PUBLIC, to, scpb.Status_BACKFILLED), - } - }) - - // We need to make sure that no columns are added to the temp index after it - // receives any writes. - registerDepRule("index-column added to index before temp index receives writes", - scgraph.Precedence, - "index-column", "index", - func(from, to NodeVars) rel.Clauses { - return rel.Clauses{ - from.Type((*scpb.IndexColumn)(nil)), - to.Type((*scpb.TemporaryIndex)(nil)), - JoinOnIndexID(from, to, "table-id", "index-id"), - StatusesTransient(from, scpb.Status_PUBLIC, to, scpb.Status_WRITE_ONLY), - } - }) - - registerDepRule( - "column existence precedes index existence", - scgraph.Precedence, - "column", "index", - func(from, to NodeVars) rel.Clauses { - ic := MkNodeVars("index-column") - relationID, columnID := rel.Var("table-id"), rel.Var("column-id") - return rel.Clauses{ - from.Type((*scpb.Column)(nil)), - to.Type((*scpb.PrimaryIndex)(nil), (*scpb.SecondaryIndex)(nil)), - JoinOnColumnID(from, ic, relationID, columnID), - ColumnInIndex(ic, to, relationID, columnID, "index-id"), - StatusesToPublicOrTransient(from, scpb.Status_DELETE_ONLY, to, scpb.Status_BACKFILL_ONLY), - } - }, - ) - - registerDepRule( - "column existence precedes temp index existence", - scgraph.Precedence, - "column", "index", - func(from, to NodeVars) rel.Clauses { - ic := MkNodeVars("index-column") - relationID, columnID := rel.Var("table-id"), rel.Var("column-id") - return rel.Clauses{ - from.Type((*scpb.Column)(nil)), - to.Type((*scpb.TemporaryIndex)(nil)), - JoinOnColumnID(ic, from, relationID, columnID), - ColumnInIndex(ic, to, relationID, columnID, "index-id"), - StatusesToPublicOrTransient(from, scpb.Status_DELETE_ONLY, to, scpb.Status_DELETE_ONLY), - } - }, - ) - - // We need to ensure that the temporary index has all the relevant writes - // to any columns it contains. We ensure elsewhere that any index which - // will later be merged with the temporary index is not backfilled until - // that temporary index is receiving writes. This rule ensures that those - // write operations contain data for all columns. - registerDepRule( - "column is WRITE_ONLY before temporary index is WRITE_ONLY", - scgraph.Precedence, - "column", "index", - func(from, to NodeVars) rel.Clauses { - ic := MkNodeVars("index-column") - relationID, columnID := rel.Var("table-id"), rel.Var("column-id") - return rel.Clauses{ - from.El.Type((*scpb.Column)(nil)), - to.El.Type((*scpb.TemporaryIndex)(nil)), - JoinOnColumnID(ic, from, relationID, columnID), - ColumnInIndex(ic, to, relationID, columnID, "index-id"), - StatusesToPublicOrTransient(from, scpb.Status_WRITE_ONLY, to, scpb.Status_WRITE_ONLY), - } - }, - ) - - registerDepRule( - "swapped primary index public before column", - scgraph.Precedence, - "index", "column", - func(from, to NodeVars) rel.Clauses { - ic := MkNodeVars("index-column") - relationID, columnID := rel.Var("table-id"), rel.Var("column-id") - return rel.Clauses{ - from.Type((*scpb.PrimaryIndex)(nil)), - to.Type((*scpb.Column)(nil)), - ColumnInSwappedInPrimaryIndex(ic, from, relationID, columnID, "index-id"), - JoinOnColumnID(ic, to, relationID, columnID), - StatusesToPublicOrTransient(from, scpb.Status_PUBLIC, to, scpb.Status_PUBLIC), - } - }, - ) - -} - -// This rule ensures that index columns depend on each other in increasing order. -// Note: This is safe to backport since this IndexColumn only has a single stage -// transition to public. So, any node on prior versions can use this plan still. -func init() { - registerDepRule( - "ensure index columns are in increasing order", - scgraph.Precedence, - "later-column", "earlier-column", - func(from, to NodeVars) rel.Clauses { - return rel.Clauses{ - from.Type((*scpb.IndexColumn)(nil)), - from.JoinTargetNode(), - to.Type((*scpb.IndexColumn)(nil)), - JoinOnIndexID(from, to, "table-id", "index-id"), - ToPublicOrTransient(from, to), - StatusesToPublicOrTransient(from, scpb.Status_PUBLIC, to, scpb.Status_PUBLIC), - FilterElements("SmallerColumnIDFirst", from, to, func(from, to *scpb.IndexColumn) bool { - return from.OrdinalInKind < to.OrdinalInKind && from.Kind == to.Kind - }), - } - }) -} diff --git a/pkg/sql/schemachanger/scplan/internal/rules/release_25_2/dep_add_index_and_constraint.go b/pkg/sql/schemachanger/scplan/internal/rules/release_25_2/dep_add_index_and_constraint.go deleted file mode 100644 index 25aba8901d67..000000000000 --- a/pkg/sql/schemachanger/scplan/internal/rules/release_25_2/dep_add_index_and_constraint.go +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2022 The Cockroach Authors. -// -// Use of this software is governed by the CockroachDB Software License -// included in the /LICENSE file. - -package release_25_2 - -import ( - "github.com/cockroachdb/cockroach/pkg/sql/schemachanger/rel" - "github.com/cockroachdb/cockroach/pkg/sql/schemachanger/scpb" - . "github.com/cockroachdb/cockroach/pkg/sql/schemachanger/scplan/internal/rules" - "github.com/cockroachdb/cockroach/pkg/sql/schemachanger/scplan/internal/scgraph" - "github.com/cockroachdb/cockroach/pkg/sql/schemachanger/screl" -) - -// These rules ensure that indexes and constraints on those indexes come -// to existence in the appropriate order. -func init() { - registerDepRule( - "index is ready to be validated before we validate constraint on it", - scgraph.Precedence, - "index", "constraint", - func(from, to NodeVars) rel.Clauses { - return rel.Clauses{ - from.Type((*scpb.PrimaryIndex)(nil)), - to.TypeFilter(rulesVersionKey, isNonIndexBackedConstraint, isSubjectTo2VersionInvariant), - JoinOnDescID(from, to, "table-id"), - JoinOn( - from, screl.IndexID, - to, screl.IndexID, - "index-id-for-validation", - ), - StatusesToPublicOrTransient(from, scpb.Status_VALIDATED, to, scpb.Status_VALIDATED), - } - }, - ) -} diff --git a/pkg/sql/schemachanger/scplan/internal/rules/release_25_2/dep_add_trigger.go b/pkg/sql/schemachanger/scplan/internal/rules/release_25_2/dep_add_trigger.go deleted file mode 100644 index c526467aafc6..000000000000 --- a/pkg/sql/schemachanger/scplan/internal/rules/release_25_2/dep_add_trigger.go +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2024 The Cockroach Authors. -// -// Use of this software is governed by the CockroachDB Software License -// included in the /LICENSE file. - -package release_25_2 - -import ( - "github.com/cockroachdb/cockroach/pkg/sql/schemachanger/rel" - "github.com/cockroachdb/cockroach/pkg/sql/schemachanger/scpb" - . "github.com/cockroachdb/cockroach/pkg/sql/schemachanger/scplan/internal/rules" - "github.com/cockroachdb/cockroach/pkg/sql/schemachanger/scplan/internal/scgraph" -) - -func init() { - registerDepRule( - "trigger public before its dependents", - scgraph.Precedence, - "trigger", "dependent", - func(from, to NodeVars) rel.Clauses { - return rel.Clauses{ - from.Type((*scpb.Trigger)(nil)), - to.TypeFilter(rulesVersionKey, isTriggerDependent), - JoinOnTriggerID(from, to, "table-id", "trigger-id"), - StatusesToPublicOrTransient(from, scpb.Status_PUBLIC, to, scpb.Status_PUBLIC), - } - }, - ) -} diff --git a/pkg/sql/schemachanger/scplan/internal/rules/release_25_2/dep_alter_column_type.go b/pkg/sql/schemachanger/scplan/internal/rules/release_25_2/dep_alter_column_type.go deleted file mode 100644 index 0e6001de04c7..000000000000 --- a/pkg/sql/schemachanger/scplan/internal/rules/release_25_2/dep_alter_column_type.go +++ /dev/null @@ -1,72 +0,0 @@ -// Copyright 2022 The Cockroach Authors. -// -// Use of this software is governed by the CockroachDB Software License -// included in the /LICENSE file. - -package release_25_2 - -import ( - "github.com/cockroachdb/cockroach/pkg/sql/schemachanger/rel" - "github.com/cockroachdb/cockroach/pkg/sql/schemachanger/scpb" - . "github.com/cockroachdb/cockroach/pkg/sql/schemachanger/scplan/internal/rules" - "github.com/cockroachdb/cockroach/pkg/sql/schemachanger/scplan/internal/scgraph" - "github.com/cockroachdb/cockroach/pkg/sql/schemachanger/screl" -) - -// This rule ensures that when changing the column type, that the old column -// type is dropped before the new type is added. -func init() { - registerDepRule( - "column type update is decomposed as a drop then add", - scgraph.Precedence, - "old-column-type", "new-column-type", - func(from, to NodeVars) rel.Clauses { - return rel.Clauses{ - from.Type((*scpb.ColumnType)(nil)), - to.Type((*scpb.ColumnType)(nil)), - JoinOnColumnID(from, to, "table-id", "col-id"), - from.TargetStatus(scpb.ToAbsent), - from.CurrentStatus(scpb.Status_PUBLIC), - to.TargetStatus(scpb.ToPublic), - to.CurrentStatus(scpb.Status_ABSENT), - } - }, - ) - - registerDepRule( - "column type is changed to public after doing validation of a transient check constraint", - scgraph.SameStagePrecedence, - "transient-check-constraint", "column-type", - func(from, to NodeVars) rel.Clauses { - colID := rel.Var("columnID") - return rel.Clauses{ - from.Type((*scpb.CheckConstraint)(nil)), - to.Type((*scpb.ColumnType)(nil)), - JoinOnDescID(from, to, "table-id"), - to.El.AttrEqVar(screl.ColumnID, colID), - from.ReferencedColumnIDsContains(colID), - from.TargetStatus(scpb.TransientAbsent), - to.TargetStatus(scpb.ToPublic), - from.CurrentStatus(scpb.Status_TRANSIENT_VALIDATED), - to.CurrentStatus(scpb.Status_PUBLIC), - } - }, - ) - - registerDepRule( - "adding a transient column compute expression moves to 'absent' after PK validation to ensures it's there for the backfill", - scgraph.Precedence, - "primary-index", "transient-column-compute", - func(from, to NodeVars) rel.Clauses { - return rel.Clauses{ - from.Type((*scpb.PrimaryIndex)(nil)), - to.Type((*scpb.ColumnComputeExpression)(nil)), - JoinOnDescID(from, to, "table-id"), - from.TargetStatus(scpb.ToPublic), - to.TargetStatus(scpb.TransientAbsent), - from.CurrentStatus(scpb.Status_VALIDATED), - to.CurrentStatus(scpb.Status_TRANSIENT_ABSENT), - } - }, - ) -} diff --git a/pkg/sql/schemachanger/scplan/internal/rules/release_25_2/dep_configure_zone.go b/pkg/sql/schemachanger/scplan/internal/rules/release_25_2/dep_configure_zone.go deleted file mode 100644 index 615f6439127b..000000000000 --- a/pkg/sql/schemachanger/scplan/internal/rules/release_25_2/dep_configure_zone.go +++ /dev/null @@ -1,128 +0,0 @@ -// Copyright 2025 The Cockroach Authors. -// -// Use of this software is governed by the CockroachDB Software License -// included in the /LICENSE file. - -package release_25_2 - -import ( - "github.com/cockroachdb/cockroach/pkg/sql/schemachanger/rel" - "github.com/cockroachdb/cockroach/pkg/sql/schemachanger/scpb" - . "github.com/cockroachdb/cockroach/pkg/sql/schemachanger/scplan/internal/rules" - "github.com/cockroachdb/cockroach/pkg/sql/schemachanger/scplan/internal/scgraph" - "github.com/cockroachdb/cockroach/pkg/sql/schemachanger/screl" -) - -// The following set of rules ensure that zone configs depend on each other in -// increasing seqNum order. - -func init() { - // Table zone configs - registerDepRule( - "ensure table zone configs are in increasing seqNum order", - scgraph.Precedence, - "later-seqNum", "earlier-seqNum", - func(from, to NodeVars) rel.Clauses { - status := rel.Var("status") - return rel.Clauses{ - from.Type((*scpb.TableZoneConfig)(nil)), - from.JoinTargetNode(), - to.Type((*scpb.TableZoneConfig)(nil)), - // Join on the target ID to ensure we're only comparing zone configs - // for the same object (database, table, index, etc.) - JoinOnDescID(from, to, "seqnum"), - ToPublicOrTransient(from, to), - status.Entities(screl.CurrentStatus, from.Node, to.Node), - FilterElements("SmallerSeqNumFirst", from, to, func(from, to *scpb.TableZoneConfig) bool { - return from.SeqNum < to.SeqNum - }), - } - }) - - // Database zone configs - registerDepRule( - "ensure database zone configs are in increasing seqNum order", - scgraph.Precedence, - "later-seqNum", "earlier-seqNum", - func(from, to NodeVars) rel.Clauses { - status := rel.Var("status") - return rel.Clauses{ - from.Type((*scpb.DatabaseZoneConfig)(nil)), - from.JoinTargetNode(), - to.Type((*scpb.DatabaseZoneConfig)(nil)), - JoinOnDescID(from, to, "seqnum"), - ToPublicOrTransient(from, to), - status.Entities(screl.CurrentStatus, from.Node, to.Node), - FilterElements("SmallerSeqNumFirst", from, to, func(from, to *scpb.DatabaseZoneConfig) bool { - return from.SeqNum < to.SeqNum - }), - } - }) - - // Named range zone configs - registerDepRule( - "ensure named range zone configs are in increasing seqNum order", - scgraph.Precedence, - "later-seqNum", "earlier-seqNum", - func(from, to NodeVars) rel.Clauses { - status := rel.Var("status") - return rel.Clauses{ - from.Type((*scpb.NamedRangeZoneConfig)(nil)), - from.JoinTargetNode(), - to.Type((*scpb.NamedRangeZoneConfig)(nil)), - JoinOnDescID(from, to, "seqnum"), - ToPublicOrTransient(from, to), - status.Entities(screl.CurrentStatus, from.Node, to.Node), - FilterElements("SmallerSeqNumFirst", from, to, func(from, to *scpb.NamedRangeZoneConfig) bool { - return from.SeqNum < to.SeqNum - }), - } - }) - - // Index zone configs - registerDepRule( - "ensure index zone configs are in increasing seqNum order", - scgraph.Precedence, - "later-seqNum", "earlier-seqNum", - func(from, to NodeVars) rel.Clauses { - status := rel.Var("status") - return rel.Clauses{ - from.Type((*scpb.IndexZoneConfig)(nil)), - from.JoinTargetNode(), - to.Type((*scpb.IndexZoneConfig)(nil)), - JoinOnDescID(from, to, "seqnum"), - // Join on index ID to ensure we're only comparing zone configs - // for the same index - JoinOnIndexID(from, to, "table-id", "index-id"), - ToPublicOrTransient(from, to), - status.Entities(screl.CurrentStatus, from.Node, to.Node), - FilterElements("SmallerSeqNumFirst", from, to, func(from, to *scpb.IndexZoneConfig) bool { - return from.SeqNum < to.SeqNum - }), - } - }) - - // Partition zone configs - registerDepRule( - "ensure partition zone configs are in increasing seqNum order", - scgraph.Precedence, - "later-seqNum", "earlier-seqNum", - func(from, to NodeVars) rel.Clauses { - status := rel.Var("status") - return rel.Clauses{ - from.Type((*scpb.PartitionZoneConfig)(nil)), - from.JoinTargetNode(), - to.Type((*scpb.PartitionZoneConfig)(nil)), - JoinOnDescID(from, to, "seqnum"), - // Join on index ID and partition name to ensure we're only comparing - // zone configs for the same partition - JoinOnIndexID(from, to, "table-id", "index-id"), - JoinOnPartitionName(from, to, "table-id", "index-id", "partition-name"), - ToPublicOrTransient(from, to), - status.Entities(screl.CurrentStatus, from.Node, to.Node), - FilterElements("SmallerSeqNumFirst", from, to, func(from, to *scpb.PartitionZoneConfig) bool { - return from.SeqNum < to.SeqNum - }), - } - }) -} diff --git a/pkg/sql/schemachanger/scplan/internal/rules/release_25_2/dep_create.go b/pkg/sql/schemachanger/scplan/internal/rules/release_25_2/dep_create.go deleted file mode 100644 index f8d95f814457..000000000000 --- a/pkg/sql/schemachanger/scplan/internal/rules/release_25_2/dep_create.go +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2023 The Cockroach Authors. -// -// Use of this software is governed by the CockroachDB Software License -// included in the /LICENSE file. - -package release_25_2 - -import ( - "github.com/cockroachdb/cockroach/pkg/sql/schemachanger/rel" - "github.com/cockroachdb/cockroach/pkg/sql/schemachanger/scpb" - . "github.com/cockroachdb/cockroach/pkg/sql/schemachanger/scplan/internal/rules" - "github.com/cockroachdb/cockroach/pkg/sql/schemachanger/scplan/internal/scgraph" -) - -func init() { - registerDepRule( - "descriptor existence precedes dependents", - scgraph.Precedence, - "relation", "dependent", - func(from, to NodeVars) rel.Clauses { - return rel.Clauses{ - from.TypeFilter(rulesVersionKey, isDescriptor), - to.TypeFilter(rulesVersionKey, Not(isDescriptor)), - JoinOnDescID(from, to, "relation-id"), - StatusesToPublicOrTransient(from, scpb.Status_DESCRIPTOR_ADDED, to, scpb.Status_PUBLIC), - } - }, - ) - - registerDepRule( - "dependents exist before descriptor becomes public", - scgraph.Precedence, - "dependent", "relation", - func(from, to NodeVars) rel.Clauses { - return rel.Clauses{ - from.TypeFilter(rulesVersionKey, Not(isDescriptor), Not(isData)), - to.TypeFilter(rulesVersionKey, isDescriptor), - JoinOnDescID(from, to, "relation-id"), - StatusesToPublicOrTransient(from, scpb.Status_PUBLIC, to, scpb.Status_PUBLIC), - } - }, - ) -} - -func init() { - registerDepRule( - "namespace exist before schema parent", - scgraph.Precedence, - "dependent", "relation", - func(from, to NodeVars) rel.Clauses { - return rel.Clauses{ - from.Type((*scpb.Namespace)(nil)), - to.Type((*scpb.SchemaParent)(nil)), - JoinOnDescID(from, to, "schema-id"), - StatusesToPublicOrTransient(from, scpb.Status_PUBLIC, to, scpb.Status_PUBLIC), - } - }, - ) -} diff --git a/pkg/sql/schemachanger/scplan/internal/rules/release_25_2/dep_create_function.go b/pkg/sql/schemachanger/scplan/internal/rules/release_25_2/dep_create_function.go deleted file mode 100644 index 7756cb8068a2..000000000000 --- a/pkg/sql/schemachanger/scplan/internal/rules/release_25_2/dep_create_function.go +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright 2023 The Cockroach Authors. -// -// Use of this software is governed by the CockroachDB Software License -// included in the /LICENSE file. - -package release_25_2 - -import ( - "github.com/cockroachdb/cockroach/pkg/sql/schemachanger/rel" - "github.com/cockroachdb/cockroach/pkg/sql/schemachanger/scpb" - . "github.com/cockroachdb/cockroach/pkg/sql/schemachanger/scplan/internal/rules" - "github.com/cockroachdb/cockroach/pkg/sql/schemachanger/scplan/internal/scgraph" -) - -func init() { - // When setting object parent ids, we need to add the function to schema, a - // function name is needed for this. - registerDepRule( - "function name should be set before parent ids", - scgraph.Precedence, - "function-name", "function-parent", - func(from, to NodeVars) rel.Clauses { - return rel.Clauses{ - from.Type((*scpb.FunctionName)(nil)), - to.Type((*scpb.SchemaChild)(nil)), - JoinOnDescID(from, to, "function-id"), - StatusesToPublicOrTransient(from, scpb.Status_PUBLIC, to, scpb.Status_PUBLIC), - } - }, - ) -} diff --git a/pkg/sql/schemachanger/scplan/internal/rules/release_25_2/dep_create_policy.go b/pkg/sql/schemachanger/scplan/internal/rules/release_25_2/dep_create_policy.go deleted file mode 100644 index 12fa9d3d3810..000000000000 --- a/pkg/sql/schemachanger/scplan/internal/rules/release_25_2/dep_create_policy.go +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2025 The Cockroach Authors. -// -// Use of this software is governed by the CockroachDB Software License -// included in the /LICENSE file. - -package release_25_2 - -import ( - "github.com/cockroachdb/cockroach/pkg/sql/schemachanger/rel" - "github.com/cockroachdb/cockroach/pkg/sql/schemachanger/scpb" - . "github.com/cockroachdb/cockroach/pkg/sql/schemachanger/scplan/internal/rules" - "github.com/cockroachdb/cockroach/pkg/sql/schemachanger/scplan/internal/scgraph" -) - -func init() { - registerDepRule( - "dependents added after policy", - scgraph.SameStagePrecedence, - "policy", "dependent", - func(from, to NodeVars) rel.Clauses { - return rel.Clauses{ - from.Type((*scpb.Policy)(nil)), - to.TypeFilter(rulesVersionKey, isPolicyDependent), - JoinOnPolicyID(from, to, "table-id", "policy-id"), - StatusesToPublicOrTransient(from, scpb.Status_PUBLIC, to, scpb.Status_PUBLIC), - } - }, - ) -} diff --git a/pkg/sql/schemachanger/scplan/internal/rules/release_25_2/dep_drop_column.go b/pkg/sql/schemachanger/scplan/internal/rules/release_25_2/dep_drop_column.go deleted file mode 100644 index cd1e1507e329..000000000000 --- a/pkg/sql/schemachanger/scplan/internal/rules/release_25_2/dep_drop_column.go +++ /dev/null @@ -1,305 +0,0 @@ -// Copyright 2022 The Cockroach Authors. -// -// Use of this software is governed by the CockroachDB Software License -// included in the /LICENSE file. - -package release_25_2 - -import ( - "github.com/cockroachdb/cockroach/pkg/sql/schemachanger/rel" - "github.com/cockroachdb/cockroach/pkg/sql/schemachanger/scpb" - . "github.com/cockroachdb/cockroach/pkg/sql/schemachanger/scplan/internal/rules" - "github.com/cockroachdb/cockroach/pkg/sql/schemachanger/scplan/internal/scgraph" -) - -// These rules ensure that column-dependent elements, like a column's name, its -// DEFAULT expression, etc. disappear once the column reaches a suitable state. -func init() { - - // N.B. This rules is superseded by the "column constraint removed right before - // column reaches write only" rule below for the not null column check. - registerDepRuleForDrop( - "column no longer public before dependents", - scgraph.Precedence, - "column", "dependent", - scpb.Status_WRITE_ONLY, scpb.Status_ABSENT, - func(from, to NodeVars) rel.Clauses { - return rel.Clauses{ - from.Type((*scpb.Column)(nil)), - to.TypeFilter(rulesVersionKey, isColumnDependent, Not(isColumnNotNull)), - JoinOnColumnID(from, to, "table-id", "col-id"), - } - }, - ) - - registerDepRuleForDrop( - "dependents removed before column", - scgraph.Precedence, - "dependent", "column", - scpb.Status_ABSENT, scpb.Status_ABSENT, - func(from, to NodeVars) rel.Clauses { - return rel.Clauses{ - from.TypeFilter(rulesVersionKey, isColumnDependent), - to.Type((*scpb.Column)(nil)), - JoinOnColumnID(from, to, "table-id", "col-id"), - } - }, - ) - - registerDepRule( - "column type removed before column family", - scgraph.Precedence, - "column-type", "column-family", - func(from, to NodeVars) rel.Clauses { - return rel.Clauses{ - from.Type((*scpb.ColumnType)(nil)), - to.Type((*scpb.ColumnFamily)(nil)), - JoinOnColumnFamilyID(from, to, "table-id", "family-id"), - StatusesToAbsent(from, scpb.Status_ABSENT, to, scpb.Status_ABSENT), - } - }, - ) -} - -// Special cases of the above. -func init() { - - registerDepRule( - "column type dependents removed right before column type, except if part of a column type alteration ", - scgraph.SameStagePrecedence, - "dependent", "column-type", - func(from, to NodeVars) rel.Clauses { - return rel.Clauses{ - from.TypeFilter(rulesVersionKey, isColumnTypeDependent), - to.Type((*scpb.ColumnType)(nil)), - JoinOnColumnID(from, to, "table-id", "col-id"), - IsNotAlterColumnTypeOp("table-id", "col-id"), - StatusesToAbsent(from, scpb.Status_ABSENT, to, scpb.Status_ABSENT), - } - }, - ) - - // This rule is similar to the previous one but relaxes SameStagePrecedence, - // allowing for planning in case the ALTER COLUMN .. TYPE needs to roll back - // (particularly when altering columns with DEFAULT or ON UPDATE expressions). - registerDepRule( - "during a column type alterations, column type dependents removed before column type", - scgraph.Precedence, - "dependent", "column-type", - func(from, to NodeVars) rel.Clauses { - return rel.Clauses{ - from.TypeFilter(rulesVersionKey, isColumnTypeDependent), - to.Type((*scpb.ColumnType)(nil)), - JoinOnColumnID(from, to, "table-id", "col-id"), - rel.And(IsAlterColumnTypeOp("table-id", "col-id")...), - StatusesToAbsent(from, scpb.Status_ABSENT, to, scpb.Status_ABSENT), - } - }, - ) - - // Special cases for removal of column types, which hold references to other - // descriptors. - // - // When the whole table is dropped, we can (and in fact, should) remove these - // right away in-txn. However, when only the column is dropped but the table - // remains, we need to wait until the column is DELETE_ONLY, which happens - // post-commit because of the need to uphold the 2-version invariant. - // - // We distinguish the two cases using a flag in ColumnType which is set iff - // the parent relation is dropped. This is a dirty hack, ideally we should be - // able to express the _absence_ of a target element as a query clause. - // - // Note that DEFAULT and ON UPDATE expressions are column-dependent elements - // which also hold references to other descriptors. The rules prior to this one - // ensures that they transition to ABSENT before scpb.ColumnType does. - registerDepRule( - "column type removed right before column when not dropping relation", - scgraph.SameStagePrecedence, - "column-type", "column", - func(from, to NodeVars) rel.Clauses { - return rel.Clauses{ - from.Type((*scpb.ColumnType)(nil)), - descriptorIsNotBeingDropped(from.El), - to.Type((*scpb.Column)(nil)), - JoinOnColumnID(from, to, "table-id", "col-id"), - StatusesToAbsent(from, scpb.Status_ABSENT, to, scpb.Status_ABSENT), - } - }, - ) - - // This rule ensures that a column is dropped only after any computed column - // dependent on it is dropped. For example, if column B is a computed column - // using column A in its compute expression, this rule ensures that the - // compute expression of B is dropped before column A is dropped. The rules - // above ensure that column B is dropped before the expression is dropped, - // so this rule also implicitly implies that column B is dropped before column - // A. This is relevant for expression and hash indexes which create an - // internal, virtual column that computes the hash/expression key for the index. - // - // N.B. Originally, this rule was specific only to virtual, computed columns. - // The rationale was that it was needed due to an edge case within the - // optimizer. The optimizer allows the compute expression of virtual computed - // columns to be evaluated during an active schema change. Without this rule, - // the optimizer cannot read the dependent column as the dependent column - // moves to the WRITE_ONLY stage before the computed column is fully dropped. - // - // However, it is now needed for all compute expressions. When altering a - // column's type such that a backfill is required, a new version of the column - // is added, and the old version is dropped. A temporary compute expression is - // set to map the old rows to the new column type. This expression is dropped - // *before* dropping the old column, which this rule helps to enforce. - registerDepRuleForDrop( - "Computed column expression is dropped before the column it depends on", - scgraph.Precedence, - "column-expr", "column", - scpb.Status_ABSENT, scpb.Status_WRITE_ONLY, - func(from, to NodeVars) rel.Clauses { - return rel.Clauses{ - from.Type((*scpb.ColumnComputeExpression)(nil)), - to.Type((*scpb.Column)(nil)), - JoinOnDescID(from, to, "table-id"), - FilterElements("computedColumnTypeReferencesColumn", from, to, - func(computeExpression *scpb.ColumnComputeExpression, column *scpb.Column) bool { - for _, refColumns := range computeExpression.ReferencedColumnIDs { - if refColumns == column.ColumnID { - return true - } - } - return false - }), - } - }, - ) - - // Column constraint disappears in the same stage as the column - // becomes WRITE_ONLY. - // - // Column constraint cannot disappear while the column is still publicly writable - // because we then allow incorrect writes that would violate the constraint. - // - // Column constraint cannot still be enforced when the column becomes - // non-public because an enforced constraint means writes will see and - // attempt to uphold it but the column is no longer visible to them. - // - // N.B. This rule supersedes the above "dependents removed before column" rule. - // N.B. SameStage is enough; which transition happens first won't matter. - registerDepRuleForDrop( - "column constraint removed right before column reaches write only", - scgraph.Precedence, - "column-constraint", "column", - scpb.Status_ABSENT, scpb.Status_WRITE_ONLY, - func(from, to NodeVars) rel.Clauses { - return rel.Clauses{ - from.TypeFilter(rulesVersionKey, isNonIndexBackedConstraint, isSubjectTo2VersionInvariant), - to.Type((*scpb.Column)(nil)), - JoinOnColumnID(from, to, "table-id", "col-id"), - } - }, - ) - - // This rule enforces that a new primary index moves to the public stage only after all columns stored - // within the old primary index move to WRITE_ONLY. Without this, the new primary index is at risk of not - // storing all public columns within the table (as the column being dropped is still considered public - // before it moves to WRITE_ONLY but the new primary index does not contain it since the schema changer - // knows it is transitioning to a target status of ABSENT). - // - // This rule applies only when the operation is not ALTER COLUMN TYPE. A variant of this rule follows, - // allowing added and dropped columns to be swapped in the same stage during ALTER COLUMN TYPE. - registerDepRule( - "New primary index should go public only after columns being dropped move to WRITE_ONLY", - scgraph.Precedence, - "column", "new-primary-index", - func(from, to NodeVars) rel.Clauses { - ic := MkNodeVars("index-column") - relationID, columnID, indexID := rel.Var("table-id"), rel.Var("old-column-id"), rel.Var("index-id") - return rel.Clauses{ - from.Type((*scpb.Column)(nil)), - to.Type((*scpb.PrimaryIndex)(nil)), - ColumnInSourcePrimaryIndex(ic, to, relationID, columnID, indexID), - JoinOnColumnID(ic, from, relationID, columnID), - from.TargetStatus(scpb.ToAbsent), - from.CurrentStatus(scpb.Status_WRITE_ONLY), - to.TargetStatus(scpb.ToPublic), - to.CurrentStatus(scpb.Status_PUBLIC), - IsNotDroppedColumnPartOfAlterColumnTypeOp("table-id", "old-column-id"), - } - }, - ) - - // This rule is similar to the previous one but applies specifically to ALTER COLUMN ... TYPE operations. - // It uses SameStagePrecedence to enable the swapping of dropped and added columns within the same stage. - registerDepRule( - "New primary index for alter column type should go public in the same stage as dropped column", - scgraph.SameStagePrecedence, - "column", "new-primary-index", - func(from, to NodeVars) rel.Clauses { - ic := MkNodeVars("index-column") - relationID, columnID, indexID := rel.Var("table-id"), rel.Var("old-column-id"), rel.Var("index-id") - return rel.Clauses{ - from.Type((*scpb.Column)(nil)), - to.Type((*scpb.PrimaryIndex)(nil)), - ColumnInSourcePrimaryIndex(ic, to, relationID, columnID, indexID), - JoinOnColumnID(ic, from, relationID, columnID), - from.TargetStatus(scpb.ToAbsent), - from.CurrentStatus(scpb.Status_WRITE_ONLY), - to.TargetStatus(scpb.ToPublic), - to.CurrentStatus(scpb.Status_PUBLIC), - rel.And(IsDroppedColumnPartOfAlterColumnTypeOp("table-id", "old-column-id")...), - } - }, - ) -} - -// Special rules partial predicate expressions, which ensure that any columns -// used by them are not cleaned up before the partial index peredicate is -// removed. -func init() { - registerDepRuleForDrop( - "secondary index partial no longer public before referenced column", - scgraph.Precedence, - "secondary-partial-index", "column", - scpb.Status_DELETE_ONLY, scpb.Status_WRITE_ONLY, - func(from, to NodeVars) rel.Clauses { - return rel.Clauses{ - from.Type((*scpb.SecondaryIndex)(nil)), - to.Type((*scpb.Column)(nil)), - JoinOnDescID(from, to, "table-id"), - descriptorIsNotBeingDropped(from.El), - FilterElements("secondaryIndexReferencesColumn", from, to, - func(index *scpb.SecondaryIndex, column *scpb.Column) bool { - if index.EmbeddedExpr == nil { - return false - } - for _, refColumns := range index.EmbeddedExpr.ReferencedColumnIDs { - if refColumns == column.ColumnID { - return true - } - } - return false - }), - } - }, - ) -} - -// Special rules to ensure that swapping default expressions is done in order. -func init() { - registerDepRule( - "handle default column expression swaps", - scgraph.Precedence, - "old-column-expression", "new-column-expression", - func(from, to NodeVars) rel.Clauses { - return rel.Clauses{ - from.Type((*scpb.ColumnDefaultExpression)(nil), (*scpb.ColumnOnUpdateExpression)(nil)), - to.Type((*scpb.ColumnDefaultExpression)(nil), (*scpb.ColumnOnUpdateExpression)(nil)), - from.El.AttrEqVar(rel.Type, "same-type"), - to.El.AttrEqVar(rel.Type, "same-type"), - JoinOnColumnID(from, to, "table-id", "col-id"), - from.TargetStatus(scpb.ToAbsent), - from.CurrentStatus(scpb.Status_ABSENT), - to.TargetStatus(scpb.ToPublic), - to.CurrentStatus(scpb.Status_PUBLIC), - } - }, - ) -} diff --git a/pkg/sql/schemachanger/scplan/internal/rules/release_25_2/dep_drop_constraint.go b/pkg/sql/schemachanger/scplan/internal/rules/release_25_2/dep_drop_constraint.go deleted file mode 100644 index f579fdebb68c..000000000000 --- a/pkg/sql/schemachanger/scplan/internal/rules/release_25_2/dep_drop_constraint.go +++ /dev/null @@ -1,96 +0,0 @@ -// Copyright 2022 The Cockroach Authors. -// -// Use of this software is governed by the CockroachDB Software License -// included in the /LICENSE file. - -package release_25_2 - -import ( - "github.com/cockroachdb/cockroach/pkg/sql/schemachanger/rel" - "github.com/cockroachdb/cockroach/pkg/sql/schemachanger/scpb" - . "github.com/cockroachdb/cockroach/pkg/sql/schemachanger/scplan/internal/rules" - "github.com/cockroachdb/cockroach/pkg/sql/schemachanger/scplan/internal/scgraph" -) - -// These rules ensure that constraint-dependent elements, like an constraint's -// name, etc. disappear once the constraint reaches a suitable state. -func init() { - - registerDepRuleForDrop( - "constraint no longer public before dependents", - scgraph.Precedence, - "constraint", "dependent", - scpb.Status_VALIDATED, scpb.Status_ABSENT, - func(from, to NodeVars) rel.Clauses { - return rel.Clauses{ - from.TypeFilter(rulesVersionKey, isNonIndexBackedConstraint, isSubjectTo2VersionInvariant), - to.TypeFilter(rulesVersionKey, isConstraintDependent, Not(isConstraintWithoutIndexName)), - JoinOnConstraintID(from, to, "table-id", "constraint-id"), - } - }, - ) - - registerDepRuleForDrop( - "dependents removed before constraint", - scgraph.Precedence, - "dependents", "constraint", - scpb.Status_ABSENT, scpb.Status_ABSENT, - func(from, to NodeVars) rel.Clauses { - return rel.Clauses{ - from.TypeFilter(rulesVersionKey, isConstraintDependent, Not(isConstraintWithoutIndexName)), - to.TypeFilter(rulesVersionKey, isNonIndexBackedConstraint, isSubjectTo2VersionInvariant), - JoinOnConstraintID(from, to, "table-id", "constraint-id"), - } - }, - ) -} - -// These rules apply to simple constraints and ensure that their dependents, like -// their names, comments, etc., disappear right before the simple constraint. -func init() { - - registerDepRuleForDrop( - "dependents removed right before simple constraint", - scgraph.SameStagePrecedence, - "dependents", "constraint", - scpb.Status_ABSENT, scpb.Status_ABSENT, - func(from, to NodeVars) rel.Clauses { - return rel.Clauses{ - from.TypeFilter(rulesVersionKey, isConstraintDependent, Not(isConstraintWithoutIndexName)), - to.TypeFilter(rulesVersionKey, isNonIndexBackedConstraint, Not(isSubjectTo2VersionInvariant)), - JoinOnConstraintID(from, to, "table-id", "constraint-id"), - } - }, - ) - - // Constraint name should be cleared right before the constraint is no - // longer visible. - registerDepRuleForDrop( - "Constraint should be hidden before name", - scgraph.Precedence, - "constraint-name", "constraint", - scpb.Status_ABSENT, scpb.Status_ABSENT, - func(from, to NodeVars) rel.Clauses { - return rel.Clauses{ - from.Type((*scpb.ConstraintWithoutIndexName)(nil)), - to.TypeFilter(rulesVersionKey, isNonIndexBackedConstraint), - JoinOnConstraintID(from, to, "table-id", "constraint-id"), - } - }, - ) - // Constraint should be validated before the constraint name is attempted - // to be cleaned. - registerDepRuleForDrop( - "Constraint should be hidden before name", - scgraph.Precedence, - "constraint", "constraint-name", - scpb.Status_VALIDATED, scpb.Status_ABSENT, - func(from, to NodeVars) rel.Clauses { - return rel.Clauses{ - from.TypeFilter(rulesVersionKey, isNonIndexBackedConstraint), - to.Type((*scpb.ConstraintWithoutIndexName)(nil)), - JoinOnConstraintID(from, to, "table-id", "constraint-id"), - } - }, - ) -} diff --git a/pkg/sql/schemachanger/scplan/internal/rules/release_25_2/dep_drop_index.go b/pkg/sql/schemachanger/scplan/internal/rules/release_25_2/dep_drop_index.go deleted file mode 100644 index 200f2f040943..000000000000 --- a/pkg/sql/schemachanger/scplan/internal/rules/release_25_2/dep_drop_index.go +++ /dev/null @@ -1,177 +0,0 @@ -// Copyright 2022 The Cockroach Authors. -// -// Use of this software is governed by the CockroachDB Software License -// included in the /LICENSE file. - -package release_25_2 - -import ( - "github.com/cockroachdb/cockroach/pkg/sql/schemachanger/rel" - "github.com/cockroachdb/cockroach/pkg/sql/schemachanger/scpb" - . "github.com/cockroachdb/cockroach/pkg/sql/schemachanger/scplan/internal/rules" - "github.com/cockroachdb/cockroach/pkg/sql/schemachanger/scplan/internal/scgraph" -) - -// These rules ensure that index-dependent elements, like an index's name, its -// partitioning, etc. disappear once the index reaches a suitable state. -func init() { - - // For a column to be removed from an index, the index must be validated, - // which will not happen for temporary ones. - registerDepRuleForDrop( - "index no longer public before dependents, excluding columns", - scgraph.Precedence, - "index", "dependent", - scpb.Status_VALIDATED, scpb.Status_ABSENT, - func(from, to NodeVars) rel.Clauses { - return rel.Clauses{ - from.TypeFilter(rulesVersionKey, isIndex), - to.TypeFilter(rulesVersionKey, isIndexDependent, Not(isIndexColumn)), - JoinOnIndexID(from, to, "table-id", "index-id"), - } - }, - ) - // For temporary indexes we have to wait till DELETE_ONLY for primary index - // swaps, as the temporary index transitions into a drop state. Normally these - // get optimized out, so it should be safe to wait longer for all index types. - registerDepRuleForDrop( - "index drop mutation visible before cleaning up index columns", - scgraph.Precedence, - "index", "dependent", - scpb.Status_DELETE_ONLY, scpb.Status_ABSENT, - func(from, to NodeVars) rel.Clauses { - return rel.Clauses{ - from.TypeFilter(rulesVersionKey, isIndex), - to.TypeFilter(rulesVersionKey, isIndexColumn), - JoinOnIndexID(from, to, "table-id", "index-id"), - } - }, - ) - registerDepRuleForDrop( - "dependents removed before index", - scgraph.Precedence, - "dependent", "index", - scpb.Status_ABSENT, scpb.Status_ABSENT, - func(from, to NodeVars) rel.Clauses { - return rel.Clauses{ - from.TypeFilter(rulesVersionKey, isIndexDependent), - to.TypeFilter(rulesVersionKey, isIndex), - JoinOnIndexID(from, to, "table-id", "index-id"), - } - }, - ) - - // This rule helps us to have the index name inside event log entries. - registerDepRuleForDrop( - "index no longer public before index name", - scgraph.Precedence, - "index", "name", - scpb.Status_DELETE_ONLY, scpb.Status_ABSENT, - func(from, to NodeVars) rel.Clauses { - return rel.Clauses{ - from.Type((*scpb.SecondaryIndex)(nil)), - to.Type((*scpb.IndexName)(nil)), - JoinOnIndexID(from, to, "table-id", "index-id"), - } - }, - ) -} - -// Special cases of the above. -func init() { - - // If we're going to be removing columns from an index, we know that - // it'll be because we're dropping the index. If we're dropping the - // index and not the descriptor, we need to make sure that we only - // do it once the index is definitely being dropped. The reason for - // this is roundabout: dropping a column from an index which is itself - // being dropped is treated as a no-op by the op rules. - // - // TODO(ajwerner): This rule really feels like it ought to be a - // same stage precedence sort of rule where we remove the columns from the - // index when we remove the index, but for some reason, that overconstrains - // the graph when dropping the table. Because of that, we allow the column - // to be removed from the index in DELETE_ONLY, and we no-op the removal. - registerDepRuleForDrop( - "remove columns from index right before removing index", - scgraph.Precedence, - "index-column", "index", - scpb.Status_DELETE_ONLY, scpb.Status_ABSENT, - func(from, to NodeVars) rel.Clauses { - return rel.Clauses{ - from.Type((*scpb.IndexColumn)(nil)), - to.TypeFilter(rulesVersionKey, isIndex), - JoinOnIndexID(from, to, "table-id", "index-id"), - } - }, - ) -} - -func init() { - // TODO(fqazi): We need to model these rules better to use indexes, - // since they may perform terrible in scenarios where we are dropping - // a large number of views and indexes (i.e. O(views * indexes) ). - registerDepRuleForDrop( - "dependent view no longer public before secondary index", - scgraph.Precedence, - "view", "index", - scpb.Status_DROPPED, scpb.Status_VALIDATED, - func(from, to NodeVars) rel.Clauses { - return rel.Clauses{ - from.Type((*scpb.View)(nil)), - to.Type((*scpb.SecondaryIndex)(nil)), - FilterElements("viewReferencesIndex", from, to, func(from *scpb.View, to *scpb.SecondaryIndex) bool { - for _, ref := range from.ForwardReferences { - if ref.ToID == to.TableID && - ref.IndexID == to.IndexID { - return true - } - } - return false - }), - } - }, - ) - registerDepRuleForDrop( - "secondary index should be validated before dependent view can be absent", - scgraph.Precedence, - "index", "view", - scpb.Status_VALIDATED, scpb.Status_ABSENT, - func(from, to NodeVars) rel.Clauses { - return rel.Clauses{ - from.Type((*scpb.SecondaryIndex)(nil)), - to.Type((*scpb.View)(nil)), - FilterElements("viewReferencesIndex", from, to, func(from *scpb.SecondaryIndex, to *scpb.View) bool { - for _, ref := range to.ForwardReferences { - if ref.ToID == from.TableID && - ref.IndexID == from.IndexID { - return true - } - } - return false - }), - } - }, - ) - registerDepRuleForDrop( - "dependent view absent before secondary index", - scgraph.Precedence, - "view", "index", - scpb.Status_ABSENT, scpb.Status_ABSENT, - func(from, to NodeVars) rel.Clauses { - return rel.Clauses{ - from.Type((*scpb.View)(nil)), - to.Type((*scpb.SecondaryIndex)(nil)), - FilterElements("viewReferencesIndex", from, to, func(from *scpb.View, to *scpb.SecondaryIndex) bool { - for _, ref := range from.ForwardReferences { - if ref.ToID == to.TableID && - ref.IndexID == to.IndexID { - return true - } - } - return false - }), - } - }, - ) -} diff --git a/pkg/sql/schemachanger/scplan/internal/rules/release_25_2/dep_drop_index_and_column.go b/pkg/sql/schemachanger/scplan/internal/rules/release_25_2/dep_drop_index_and_column.go deleted file mode 100644 index e828265cb667..000000000000 --- a/pkg/sql/schemachanger/scplan/internal/rules/release_25_2/dep_drop_index_and_column.go +++ /dev/null @@ -1,82 +0,0 @@ -// Copyright 2022 The Cockroach Authors. -// -// Use of this software is governed by the CockroachDB Software License -// included in the /LICENSE file. - -package release_25_2 - -import ( - "github.com/cockroachdb/cockroach/pkg/sql/schemachanger/rel" - "github.com/cockroachdb/cockroach/pkg/sql/schemachanger/scpb" - . "github.com/cockroachdb/cockroach/pkg/sql/schemachanger/scplan/internal/rules" - "github.com/cockroachdb/cockroach/pkg/sql/schemachanger/scplan/internal/scgraph" -) - -// These rules ensure that columns and indexes containing these columns -// disappear from existence in the correct order. -func init() { - - // Without this rule, we might have an index which exists and contains - // a column which does not exist. This would lead to panics inside the - // optimizer and an invalid table descriptor. - registerDepRuleForDrop("indexes containing column reach absent before column", - scgraph.Precedence, - "index", "column", - scpb.Status_ABSENT, scpb.Status_ABSENT, - func(from, to NodeVars) rel.Clauses { - ic := MkNodeVars("index-column") - relationID, columnID := rel.Var("table-id"), rel.Var("column-id") - return rel.Clauses{ - from.Type((*scpb.PrimaryIndex)(nil), (*scpb.SecondaryIndex)(nil)), - to.Type((*scpb.Column)(nil)), - ColumnInIndex(ic, from, relationID, columnID, "index-id"), - JoinOnColumnID(ic, to, relationID, columnID), - descriptorIsNotBeingDropped(ic.El), - } - }) - - registerDepRule("secondary indexes containing column as key reach write-only before column", - scgraph.Precedence, - "index", "column", - func(from, to NodeVars) rel.Clauses { - ic := MkNodeVars("index-column") - relationID, columnID := rel.Var("table-id"), rel.Var("column-id") - return rel.Clauses{ - from.Type((*scpb.SecondaryIndex)(nil)), - to.Type((*scpb.Column)(nil)), - ColumnInIndex(ic, from, relationID, columnID, "index-id"), - JoinOnColumnID(ic, to, relationID, columnID), - StatusesToAbsent(from, scpb.Status_VALIDATED, to, scpb.Status_WRITE_ONLY), - descriptorIsNotBeingDropped(ic.El), - rel.Filter("isIndexKeyColumnKey", ic.El)( - func(ic *scpb.IndexColumn) bool { - return ic.Kind == scpb.IndexColumn_KEY || ic.Kind == scpb.IndexColumn_KEY_SUFFIX - }, - ), - } - }) - - // This rule ensures if we are dropping a column, we only transition to non-public after - // all adding indexes are present in the table descriptor (i.e. all adding indexes reached - // BACKFILL_ONLY). - // This is used when we are dropping a column but have intermediate primary indexes; - // we should delay transitioning the column to non-public after all primary indexes - // have been added to the table descriptor as mutations. - registerDepRule("all adding indexes reached BACKFILL_ONLY before any of their columns disappear", - scgraph.Precedence, - "index", "column", - func(from, to NodeVars) rel.Clauses { - ic := MkNodeVars("index-column") - relationID, columnID := rel.Var("table-id"), rel.Var("column-id") - return rel.Clauses{ - from.Type((*scpb.PrimaryIndex)(nil), (*scpb.SecondaryIndex)(nil)), - to.Type((*scpb.Column)(nil)), - ColumnInIndex(ic, from, relationID, columnID, "index-id"), - JoinOnColumnID(ic, to, relationID, columnID), - from.TargetStatus(scpb.ToPublic, scpb.TransientAbsent), - from.CurrentStatus(scpb.Status_BACKFILL_ONLY), - to.TargetStatus(scpb.ToAbsent), - to.CurrentStatus(scpb.Status_WRITE_ONLY), - } - }) -} diff --git a/pkg/sql/schemachanger/scplan/internal/rules/release_25_2/dep_drop_object.go b/pkg/sql/schemachanger/scplan/internal/rules/release_25_2/dep_drop_object.go deleted file mode 100644 index bf0b1bf1dd2d..000000000000 --- a/pkg/sql/schemachanger/scplan/internal/rules/release_25_2/dep_drop_object.go +++ /dev/null @@ -1,295 +0,0 @@ -// Copyright 2022 The Cockroach Authors. -// -// Use of this software is governed by the CockroachDB Software License -// included in the /LICENSE file. - -package release_25_2 - -import ( - "github.com/cockroachdb/cockroach/pkg/sql/schemachanger/rel" - "github.com/cockroachdb/cockroach/pkg/sql/schemachanger/scpb" - . "github.com/cockroachdb/cockroach/pkg/sql/schemachanger/scplan/internal/rules" - "github.com/cockroachdb/cockroach/pkg/sql/schemachanger/scplan/internal/scgraph" - "github.com/cockroachdb/cockroach/pkg/sql/schemachanger/screl" -) - -// These rules ensure that: -// - a descriptor reaches ABSENT in a different transaction than it reaches -// DROPPED (i.e. it cannot be removed until PostCommit). -// - a descriptor element reaches the DROPPED state in the txn before -// its dependent elements (namespace entry, comments, column names, etc) -// reach the ABSENT state; -// - or the WRITE_ONLY state for those dependent elements subject to the -// 2-version invariant. -func init() { - - registerDepRule( - "descriptor dropped in transaction before removal", - scgraph.PreviousTransactionPrecedence, - "dropped", "absent", - func(from, to NodeVars) rel.Clauses { - return rel.Clauses{ - from.TypeFilter(rulesVersionKey, isDescriptor), - from.El.AttrEqVar(screl.DescID, "_"), - from.El.AttrEqVar(rel.Self, to.El), - StatusesToAbsent(from, scpb.Status_DROPPED, to, scpb.Status_ABSENT), - } - }) - - registerDepRule( - "descriptor dropped before dependent element removal", - scgraph.Precedence, - "descriptor", "dependent", - func(from, to NodeVars) rel.Clauses { - return rel.Clauses{ - from.TypeFilter(rulesVersionKey, isDescriptor), - to.TypeFilter(rulesVersionKey, Or(isSimpleDependent, isOwner), Not(isConstraintDependent)), - JoinOnDescID(from, to, "desc-id"), - StatusesToAbsent(from, scpb.Status_DROPPED, to, scpb.Status_ABSENT), - } - }) - - registerDepRule( - "relation dropped before dependent column", - scgraph.Precedence, - "descriptor", "column", - func(from, to NodeVars) rel.Clauses { - return rel.Clauses{ - from.Type((*scpb.Table)(nil), (*scpb.View)(nil), (*scpb.Sequence)(nil)), - to.TypeFilter(rulesVersionKey, isColumn), - JoinOnDescID(from, to, "desc-id"), - StatusesToAbsent(from, scpb.Status_DROPPED, to, scpb.Status_WRITE_ONLY), - } - }) - - registerDepRule( - "relation dropped before dependent index", - scgraph.Precedence, - "descriptor", "index", - func(from, to NodeVars) rel.Clauses { - return rel.Clauses{ - from.Type((*scpb.Table)(nil), (*scpb.View)(nil)), - to.TypeFilter(rulesVersionKey, isIndex), - JoinOnDescID(from, to, "desc-id"), - StatusesToAbsent(from, scpb.Status_DROPPED, to, scpb.Status_VALIDATED), - } - }, - ) - - registerDepRule( - "relation dropped before dependent constraint", - scgraph.Precedence, - "descriptor", "constraint", - func(from, to NodeVars) rel.Clauses { - return rel.Clauses{ - from.Type((*scpb.Table)(nil)), - to.TypeFilter(rulesVersionKey, isNonIndexBackedConstraint, isSubjectTo2VersionInvariant, Not(isNonIndexBackedCrossDescriptorConstraint)), - JoinOnDescID(from, to, "desc-id"), - StatusesToAbsent(from, scpb.Status_DROPPED, to, scpb.Status_VALIDATED), - } - }, - ) - -} - -// These rules ensure that cross-referencing simple dependent elements reach -// ABSENT in the same stage right after the referenced descriptor element -// reaches DROPPED. -// -// References from simple dependent elements to other descriptors exist as -// follows: -// - simple dependent elements with a ReferencedDescID attribute, -// - those which embed a TypeT, -// - those which embed an Expression. -func init() { - - registerDepRule( - "descriptor drop right before removing dependent with attr ref", - scgraph.SameStagePrecedence, - "referenced-descriptor", "referencing-via-attr", - func(from, to NodeVars) rel.Clauses { - return rel.Clauses{ - from.TypeFilter(rulesVersionKey, isDescriptor), - to.TypeFilter(rulesVersionKey, isSimpleDependent, Not(isDescriptorParentReference)), - JoinReferencedDescID(to, from, "desc-id"), - StatusesToAbsent(from, scpb.Status_DROPPED, to, scpb.Status_ABSENT), - } - }, - ) - - // If the descriptor references this type is already being dropped, then - // the back references don't really matter. - registerDepRule( - "descriptor drop right before removing dependent between types", - scgraph.SameStagePrecedence, - "referenced-descriptor", "referencing-via-type", - func(from, to NodeVars) rel.Clauses { - fromDescID := rel.Var("fromDescID") - return rel.Clauses{ - from.TypeFilter(rulesVersionKey, isTypeDescriptor), - from.DescIDEq(fromDescID), - to.ReferencedTypeDescIDsContain(fromDescID), - to.TypeFilter(rulesVersionKey, isSimpleDependent, isWithTypeT), - StatusesToAbsent(from, scpb.Status_DROPPED, to, scpb.Status_ABSENT), - } - }, - ) - registerDepRule( - "descriptor drop right before removing dependent with type refs in expressions", - scgraph.SameStagePrecedence, - "referenced-descriptor", "referencing-via-type", - func(from, to NodeVars) rel.Clauses { - fromDescID := rel.Var("fromDescID") - return rel.Clauses{ - from.TypeFilter(rulesVersionKey, isTypeDescriptor), - from.DescIDEq(fromDescID), - to.ReferencedTypeDescIDsContain(fromDescID), - descriptorIsNotBeingDropped(to.El), - to.TypeFilter(rulesVersionKey, isSimpleDependent, isWithExpression), - StatusesToAbsent(from, scpb.Status_DROPPED, to, scpb.Status_ABSENT), - } - }, - ) - - registerDepRule( - "descriptor drop right before removing dependent with expr ref to sequence", - scgraph.SameStagePrecedence, - "referenced-descriptor", "referencing-via-expr", - func(from, to NodeVars) rel.Clauses { - seqID := rel.Var("seqID") - return rel.Clauses{ - from.Type((*scpb.Sequence)(nil)), - from.DescIDEq(seqID), - to.ReferencedSequenceIDsContains(seqID), - to.TypeFilter(rulesVersionKey, isSimpleDependent, isWithExpression), - StatusesToAbsent(from, scpb.Status_DROPPED, to, scpb.Status_ABSENT), - } - }, - ) - - registerDepRule( - "descriptor drop right before removing dependent with function refs in columns", - scgraph.SameStagePrecedence, - "referenced-descriptor", "referencing-via-function", - func(from, to NodeVars) rel.Clauses { - fromDescID := rel.Var("fromDescID") - return rel.Clauses{ - from.Type((*scpb.Function)(nil)), - from.DescIDEq(fromDescID), - to.ReferencedFunctionIDsContains(fromDescID), - to.TypeFilter(rulesVersionKey, isSimpleDependent, isWithExpression), - StatusesToAbsent(from, scpb.Status_DROPPED, to, scpb.Status_ABSENT), - } - }, - ) - -} - -// These rules ensure that descriptor, back-reference in parent descriptor, -// and parent descriptor are dropped in appropriate order. -func init() { - - // We don't like those parent-descriptor-back-reference elements: in hindsight, - // we shouldn't have them in the first place because we cannot modify - // back-references in parent descriptor in isolation with the SQL syntax. - // This rule is to deal with this fact by tightly coupling them to the descriptor. - registerDepRule( - "descriptor dropped right before removing back-reference in its parent descriptor", - scgraph.SameStagePrecedence, - "descriptor", "back-reference-in-parent-descriptor", - func(from, to NodeVars) rel.Clauses { - return rel.Clauses{ - from.TypeFilter(rulesVersionKey, isDescriptor), - to.TypeFilter(rulesVersionKey, isDescriptorParentReference), - JoinOnDescID(from, to, "desc-id"), - StatusesToAbsent(from, scpb.Status_DROPPED, to, scpb.Status_ABSENT), - } - }) - - registerDepRule( - "back-reference in parent descriptor is removed before parent descriptor is dropped", - scgraph.Precedence, - "back-reference-in-parent-descriptor", "parent-descriptor", - func(from, to NodeVars) rel.Clauses { - return rel.Clauses{ - from.TypeFilter(rulesVersionKey, isDescriptorParentReference), - to.TypeFilter(rulesVersionKey, isDescriptor), - JoinReferencedDescID(from, to, "desc-id"), - StatusesToAbsent(from, scpb.Status_ABSENT, to, scpb.Status_DROPPED), - } - }, - ) -} - -// These rules ensure that dependents get removed before the descriptor. -// Some operations might require the descriptor to actually be present. -func init() { - registerDepRule( - "non-data dependents removed before descriptor", - scgraph.Precedence, - "dependent", "descriptor", - func(from, to NodeVars) rel.Clauses { - return rel.Clauses{ - from.TypeFilter(rulesVersionKey, Not(isDescriptor), Not(isData)), - to.TypeFilter(rulesVersionKey, isDescriptor), - JoinOnDescID(from, to, "desc-id"), - StatusesToAbsent(from, scpb.Status_ABSENT, to, scpb.Status_ABSENT), - } - }) -} - -// These rules ensures we drop cross-descriptor constraints before dropping -// descriptors, both the referencing and referenced. Namely, -// 1. cross-descriptor constraints are absent before referenced descriptor, if -// the referencing table is not being dropped. -// 2. cross-descriptor constraints are absent before referencing descriptor, if -// the referenced table is not dropped. -// -// A canonical example is FKs: -// To illustrate why rule 1 is necessary, consider we have tables `t1` and `t2`, -// and `t1` has a FK to `t2` (call this schema `S1`). The statement is -// `DROP TABLE t2 CASCADE`. We will have to first transition the FK (dropped as -// a result of CASCADE) to an intermediate state and then (in a separate -// transaction) transition the table to the dropped state. Otherwise, if the FK -// transition to absent in the same transaction as the table becomes dropped -// (call this schema `S2`), it becomes unsafe for `S1` and `S2` to exist in the -// cluster at the same time, because allowed inserts under `S2` will violate `S1`. -// -// To illustrate why rule 2 is necessary, consider we have tables `t1`, `t2`, `t3`, -// and `t1` FKs to `t2` (call it `FK1`) and `t3` FKs to `t2` (call it `FK2`). -// The statement is `DROP TABLE t1, t2 CASCADE`. Without rule 2, rule 1 alone will -// ensure that `FK2` moves to an intermediate state first, and at the same stage, -// `t1` will be dropped together with `FK1`. Validation will then fail because -// `t2` will have an enforced FK constraint whose origin table (`t1`) is dropped. -// It's worth noting that relaxing validation in this case is safe but we choose -// not to do so because it requires other related changes and makes reasoning -// harder. -func init() { - registerDepRule( - "cross-descriptor constraint is absent before referenced descriptor is dropped", - scgraph.Precedence, - "cross-desc-constraint", "referenced-descriptor", - func(from, to NodeVars) rel.Clauses { - return rel.Clauses{ - from.TypeFilter(rulesVersionKey, isNonIndexBackedCrossDescriptorConstraint, isSubjectTo2VersionInvariant), - to.TypeFilter(rulesVersionKey, isDescriptor), - JoinReferencedDescID(from, to, "desc-id"), - StatusesToAbsent(from, scpb.Status_ABSENT, to, scpb.Status_DROPPED), - } - }, - ) - - registerDepRule( - "cross-descriptor constraint is absent before referencing descriptor is dropped", - scgraph.Precedence, - "cross-desc-constraint", "referencing-descriptor", - func(from, to NodeVars) rel.Clauses { - return rel.Clauses{ - from.TypeFilter(rulesVersionKey, isNonIndexBackedCrossDescriptorConstraint, isSubjectTo2VersionInvariant), - to.TypeFilter(rulesVersionKey, isDescriptor), - JoinOnDescID(from, to, "desc-id"), - StatusesToAbsent(from, scpb.Status_ABSENT, to, scpb.Status_DROPPED), - } - }, - ) -} diff --git a/pkg/sql/schemachanger/scplan/internal/rules/release_25_2/dep_drop_policy.go b/pkg/sql/schemachanger/scplan/internal/rules/release_25_2/dep_drop_policy.go deleted file mode 100644 index 3562188b04bc..000000000000 --- a/pkg/sql/schemachanger/scplan/internal/rules/release_25_2/dep_drop_policy.go +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2025 The Cockroach Authors. -// -// Use of this software is governed by the CockroachDB Software License -// included in the /LICENSE file. - -package release_25_2 - -import ( - "github.com/cockroachdb/cockroach/pkg/sql/schemachanger/rel" - "github.com/cockroachdb/cockroach/pkg/sql/schemachanger/scpb" - . "github.com/cockroachdb/cockroach/pkg/sql/schemachanger/scplan/internal/rules" - "github.com/cockroachdb/cockroach/pkg/sql/schemachanger/scplan/internal/scgraph" -) - -func init() { - registerDepRuleForDrop( - "dependents removed before policy", - scgraph.SameStagePrecedence, - "dependent", "policy", - scpb.Status_ABSENT, scpb.Status_ABSENT, - func(from, to NodeVars) rel.Clauses { - return rel.Clauses{ - from.TypeFilter(rulesVersionKey, isPolicyDependent), - to.Type((*scpb.Policy)(nil)), - JoinOnPolicyID(from, to, "table-id", "policy-id"), - } - }, - ) -} diff --git a/pkg/sql/schemachanger/scplan/internal/rules/release_25_2/dep_drop_trigger.go b/pkg/sql/schemachanger/scplan/internal/rules/release_25_2/dep_drop_trigger.go deleted file mode 100644 index 2f0d09d0c973..000000000000 --- a/pkg/sql/schemachanger/scplan/internal/rules/release_25_2/dep_drop_trigger.go +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright 2024 The Cockroach Authors. -// -// Use of this software is governed by the CockroachDB Software License -// included in the /LICENSE file. - -package release_25_2 - -import ( - "github.com/cockroachdb/cockroach/pkg/sql/schemachanger/rel" - "github.com/cockroachdb/cockroach/pkg/sql/schemachanger/scpb" - . "github.com/cockroachdb/cockroach/pkg/sql/schemachanger/scplan/internal/rules" - "github.com/cockroachdb/cockroach/pkg/sql/schemachanger/scplan/internal/scgraph" -) - -func init() { - // The Trigger element must be removed before TriggerDeps in particular, in - // order to ensure that back-references are updated correctly. - registerDepRuleForDrop( - "trigger removed before dependents", - scgraph.Precedence, - "trigger", "dependents", - scpb.Status_ABSENT, scpb.Status_PUBLIC, - func(from, to NodeVars) rel.Clauses { - return rel.Clauses{ - to.Type((*scpb.Trigger)(nil)), - from.TypeFilter(rulesVersionKey, isTriggerDependent), - JoinOnTriggerID(from, to, "table-id", "trigger-id"), - } - }, - ) -} diff --git a/pkg/sql/schemachanger/scplan/internal/rules/release_25_2/dep_garbage_collection.go b/pkg/sql/schemachanger/scplan/internal/rules/release_25_2/dep_garbage_collection.go deleted file mode 100644 index 91d9d231f690..000000000000 --- a/pkg/sql/schemachanger/scplan/internal/rules/release_25_2/dep_garbage_collection.go +++ /dev/null @@ -1,153 +0,0 @@ -// Copyright 2022 The Cockroach Authors. -// -// Use of this software is governed by the CockroachDB Software License -// included in the /LICENSE file. - -package release_25_2 - -import ( - "github.com/cockroachdb/cockroach/pkg/sql/schemachanger/rel" - "github.com/cockroachdb/cockroach/pkg/sql/schemachanger/scpb" - . "github.com/cockroachdb/cockroach/pkg/sql/schemachanger/scplan/internal/rules" - "github.com/cockroachdb/cockroach/pkg/sql/schemachanger/scplan/internal/scgraph" - "github.com/cockroachdb/cockroach/pkg/sql/sem/catid" -) - -// Rules related to garbage collection. -// Garbage collection must occur: -// - in the same stage as the descriptor disappears; -// - for indexes, not before the index disappears; -// - all in the same stage for each descriptor. -func init() { - - registerDepRule( - "table removed right before garbage collection", - scgraph.SameStagePrecedence, - "table", "data", - func(from, to NodeVars) rel.Clauses { - return rel.Clauses{ - from.TypeFilter(rulesVersionKey, isDescriptor), - to.Type((*scpb.TableData)(nil)), - JoinOnDescID(from, to, "table-id"), - StatusesToAbsent(from, scpb.Status_ABSENT, to, scpb.Status_DROPPED), - } - }, - ) - - registerDepRule( - "descriptor removed right before garbage collection", - scgraph.SameStagePrecedence, - "database", "data", - func(from, to NodeVars) rel.Clauses { - return rel.Clauses{ - from.TypeFilter(rulesVersionKey, isDescriptor), - to.Type((*scpb.DatabaseData)(nil)), - JoinOnDescID(from, to, "db-id"), - StatusesToAbsent(from, scpb.Status_ABSENT, to, scpb.Status_DROPPED), - } - }, - ) - - registerDepRuleForDrop( - "index removed before garbage collection", - scgraph.Precedence, - "index", "index-data", - scpb.Status_ABSENT, scpb.Status_DROPPED, - func(from, to NodeVars) rel.Clauses { - return rel.Clauses{ - from.TypeFilter(rulesVersionKey, isIndex), - to.Type((*scpb.IndexData)(nil)), - JoinOnIndexID(from, to, "table-id", "index-id"), - } - }, - ) - - dataIDs := func(data scpb.Element) (catid.DescID, catid.IndexID) { - switch data := data.(type) { - case *scpb.DatabaseData: - return data.DatabaseID, 0 - case *scpb.TableData: - return data.TableID, 0 - case *scpb.IndexData: - return data.TableID, data.IndexID - } - return 0, 0 - } - - // GC jobs should all be scheduled in the same transaction. - registerDepRuleForDrop( - "schedule all GC jobs for a descriptor in the same stage", - scgraph.SameStagePrecedence, - "data-a", "data-b", - scpb.Status_DROPPED, scpb.Status_DROPPED, - func(from, to NodeVars) rel.Clauses { - return rel.Clauses{ - from.TypeFilter(rulesVersionKey, isData), - to.TypeFilter(rulesVersionKey, isData), - JoinOnDescID(from, to, "desc-id"), - FilterElements("SmallerIDsFirst", from, to, func(a, b scpb.Element) bool { - aDescID, aIdxID := dataIDs(a) - bDescID, bIdxID := dataIDs(b) - if aDescID == bDescID { - return aIdxID < bIdxID - } - return aDescID < bDescID - }), - } - }, - ) -} - -// Rules to ensure proper garbage collection on rollbacks. -// A GC job is required as soon as a new index receives data. -func init() { - - registerDepRule( - "index data exists as soon as index accepts backfills", - scgraph.SameStagePrecedence, - "index-name", "index", - func(from, to NodeVars) rel.Clauses { - return rel.Clauses{ - from.Type( - (*scpb.PrimaryIndex)(nil), - (*scpb.SecondaryIndex)(nil), - ), - to.Type((*scpb.IndexData)(nil)), - JoinOnIndexID(from, to, "table-id", "index-id"), - StatusesToPublicOrTransient(from, scpb.Status_BACKFILL_ONLY, to, scpb.Status_PUBLIC), - } - }, - ) - - registerDepRule( - "temp index data exists as soon as temp index accepts writes", - scgraph.SameStagePrecedence, - "temp-index", "temp-index-data", - func(from, to NodeVars) rel.Clauses { - return rel.Clauses{ - from.Type((*scpb.TemporaryIndex)(nil)), - to.Type((*scpb.IndexData)(nil)), - JoinOnIndexID(from, to, "table-id", "index-id"), - StatusesToPublicOrTransient(from, scpb.Status_WRITE_ONLY, to, scpb.Status_PUBLIC), - } - }, - ) -} - -// Rules to ensure for created objects the table data will be live after the -// descriptor is public. -func init() { - registerDepRule( - "table added right before data element", - scgraph.Precedence, - "table", "data", - func(from, to NodeVars) rel.Clauses { - return rel.Clauses{ - from.TypeFilter(rulesVersionKey, isDescriptor), - to.TypeFilter(rulesVersionKey, isData), - JoinOnDescID(from, to, "table-id"), - StatusesToPublicOrTransient(from, scpb.Status_PUBLIC, to, scpb.Status_PUBLIC), - } - }, - ) -} diff --git a/pkg/sql/schemachanger/scplan/internal/rules/release_25_2/dep_schema_locked.go b/pkg/sql/schemachanger/scplan/internal/rules/release_25_2/dep_schema_locked.go deleted file mode 100644 index 18c75529941b..000000000000 --- a/pkg/sql/schemachanger/scplan/internal/rules/release_25_2/dep_schema_locked.go +++ /dev/null @@ -1,72 +0,0 @@ -// Copyright 2025 The Cockroach Authors. -// -// Use of this software is governed by the CockroachDB Software License -// included in the /LICENSE file. - -package release_25_2 - -import ( - "github.com/cockroachdb/cockroach/pkg/sql/schemachanger/rel" - "github.com/cockroachdb/cockroach/pkg/sql/schemachanger/scpb" - . "github.com/cockroachdb/cockroach/pkg/sql/schemachanger/scplan/internal/rules" - "github.com/cockroachdb/cockroach/pkg/sql/schemachanger/scplan/internal/scgraph" -) - -func init() { - // This rule ensures that the schema_locked element is unset before any - // operation that adds elements. - registerDepRule("schema locked is unset before any operation (add)", - scgraph.Precedence, - "schema-locked", "descriptor-element", - func(from, to NodeVars) rel.Clauses { - return rel.Clauses{ - from.Type((*scpb.TableSchemaLocked)(nil)), - to.TypeFilter(rulesVersionKey, Not(isSchemaLocked)), - JoinOnDescID(from, to, "descID"), - TransientPublicPrecedesInitialPublic(from, to), - } - }) - // This rule ensures that the schema_locked element is unset before any - // operation that drops elements. - registerDepRule("schema locked is unset before any operation (drop)", - scgraph.Precedence, - "schema-locked", "descriptor-element", - func(from, to NodeVars) rel.Clauses { - return rel.Clauses{ - from.Type((*scpb.TableSchemaLocked)(nil)), - to.TypeFilter(rulesVersionKey, Not(isSchemaLocked)), - JoinOnDescID(from, to, "descID"), - TransientPublicPrecedesInitialDrop(from, to), - } - }) - - // This rule ensures that the schema_locked element is set after all terminal - // drop operations - registerDepRule("schema locked is set after all other operations (drop)", - scgraph.PreviousTransactionPrecedence, - "descriptor-element", "schema-locked", - func(from, to NodeVars) rel.Clauses { - return rel.Clauses{ - from.TypeFilter(rulesVersionKey, Not(isSchemaLocked)), - to.Type((*scpb.TableSchemaLocked)(nil)), - JoinOnDescID(from, to, "descID"), - // Schema locked can only happen after terminal states - DropTerminalPrecedesTransientPublic(from, to), - } - }) - - // This rule ensures that the schema_locked element is set after all terminal - // drop operations. - registerDepRule("schema locked is set after all other operations (add)", - scgraph.PreviousTransactionPrecedence, - "descriptor-element", "schema-locked", - func(from, to NodeVars) rel.Clauses { - return rel.Clauses{ - from.TypeFilter(rulesVersionKey, Not(isSchemaLocked)), - to.Type((*scpb.TableSchemaLocked)(nil)), - JoinOnDescID(from, to, "descID"), - // Schema locked can only happen after terminal states - PublicTerminalPrecedesTransientPublic(from, to), - } - }) -} diff --git a/pkg/sql/schemachanger/scplan/internal/rules/release_25_2/dep_swap_index.go b/pkg/sql/schemachanger/scplan/internal/rules/release_25_2/dep_swap_index.go deleted file mode 100644 index 2ea56460adf1..000000000000 --- a/pkg/sql/schemachanger/scplan/internal/rules/release_25_2/dep_swap_index.go +++ /dev/null @@ -1,146 +0,0 @@ -// Copyright 2022 The Cockroach Authors. -// -// Use of this software is governed by the CockroachDB Software License -// included in the /LICENSE file. - -package release_25_2 - -import ( - "github.com/cockroachdb/cockroach/pkg/sql/schemachanger/rel" - "github.com/cockroachdb/cockroach/pkg/sql/schemachanger/scpb" - . "github.com/cockroachdb/cockroach/pkg/sql/schemachanger/scplan/internal/rules" - "github.com/cockroachdb/cockroach/pkg/sql/schemachanger/scplan/internal/scgraph" - "github.com/cockroachdb/cockroach/pkg/sql/schemachanger/screl" -) - -// This rule ensures that a new primary index becomes public right after the -// old primary index starts getting removed, effectively swapping one for the -// other. This rule also applies when the schema change gets reverted. -func init() { - registerDepRule( - "primary index swap", - scgraph.SameStagePrecedence, - "old-index", "new-index", - func(from, to NodeVars) rel.Clauses { - return rel.Clauses{ - from.Type((*scpb.PrimaryIndex)(nil)), - to.Type((*scpb.PrimaryIndex)(nil)), - JoinOnDescID(from, to, "table-id"), - JoinOn( - from, screl.IndexID, - to, screl.SourceIndexID, - "old-index-id", - ), - from.TargetStatus(scpb.ToAbsent), - from.CurrentStatus(scpb.Status_VALIDATED), - to.TargetStatus(scpb.ToPublic, scpb.TransientAbsent), - to.CurrentStatus(scpb.Status_PUBLIC), - } - }, - ) - - registerDepRule( - "primary index swap", - scgraph.SameStagePrecedence, - "old-index", "new-index", - func(from, to NodeVars) rel.Clauses { - return rel.Clauses{ - from.Type((*scpb.PrimaryIndex)(nil)), - to.Type((*scpb.PrimaryIndex)(nil)), - JoinOnDescID(from, to, "table-id"), - JoinOn( - from, screl.IndexID, - to, screl.SourceIndexID, - "old-index-id", - ), - from.TargetStatus(scpb.TransientAbsent), - from.CurrentStatus(scpb.Status_TRANSIENT_VALIDATED), - to.TargetStatus(scpb.ToPublic, scpb.TransientAbsent), - to.CurrentStatus(scpb.Status_PUBLIC), - } - }, - ) - - registerDepRule( - "primary index swap", - scgraph.SameStagePrecedence, - "new-index", "old-index", - func(from, to NodeVars) rel.Clauses { - return rel.Clauses{ - from.Type((*scpb.PrimaryIndex)(nil)), - to.Type((*scpb.PrimaryIndex)(nil)), - JoinOnDescID(from, to, "table-id"), - JoinOn( - from, screl.SourceIndexID, - to, screl.IndexID, - "old-index-id", - ), - from.TargetStatus(scpb.ToAbsent), - from.CurrentStatus(scpb.Status_VALIDATED), - to.TargetStatus(scpb.ToPublic), - to.CurrentStatus(scpb.Status_PUBLIC), - } - }, - ) -} - -// This rule ensures that when a transient primary index is involved in the -// swap, the old index is gone before the new index is instated. -func init() { - - registerDepRule( - "old index absent before new index public when swapping with transient", - scgraph.Precedence, - "old-primary-index", "new-primary-index", - func(from, to NodeVars) rel.Clauses { - union := MkNodeVars("transient-primary-index") - relationID := rel.Var("table-id") - return rel.Clauses{ - from.Type((*scpb.PrimaryIndex)(nil)), - union.Type((*scpb.PrimaryIndex)(nil)), - to.Type((*scpb.PrimaryIndex)(nil)), - JoinOnDescID(from, union, relationID), - JoinOn( - from, screl.IndexID, - union, screl.SourceIndexID, - "old-index-id", - ), - JoinOnDescID(union, to, relationID), - JoinOn( - union, screl.IndexID, - to, screl.SourceIndexID, - "transient-index-id", - ), - from.TargetStatus(scpb.ToAbsent), - from.CurrentStatus(scpb.Status_ABSENT), - to.TargetStatus(scpb.ToPublic), - to.CurrentStatus(scpb.Status_PUBLIC), - } - }, - ) -} - -// This rule ensures that when secondary indexes are re-created after a primary -// index key is changed, that the secondary indexes are swapped in an atomic -// manner, so that queries are not impacted by missing indexes. -func init() { - // This ia strict version of the rule that will only work, when a node - // is generating a plan on the latest master / 23.1. The StrictRecreate flag - // will be used to tag if the existing secondary index was created on a - // new enough version. - registerDepRule( - "replacement secondary index should be validated before the old one becomes invisible", - scgraph.Precedence, - "new-index", "old-index", - func(from, to NodeVars) rel.Clauses { - // Detect a potential secondary index recreation because of a ALTER - // PRIMARY KEY, and require that the new index should be public, - // before the old index can be hidden (i.e. they are swapped - // an atomic manner). - return append(IsPotentialSecondaryIndexSwap("index-id", "table-id"), - from.CurrentStatus(scpb.Status_PUBLIC), - to.CurrentStatus(scpb.Status_VALIDATED), - ) - }, - ) -} diff --git a/pkg/sql/schemachanger/scplan/internal/rules/release_25_2/dep_two_version.go b/pkg/sql/schemachanger/scplan/internal/rules/release_25_2/dep_two_version.go deleted file mode 100644 index 73301b880f59..000000000000 --- a/pkg/sql/schemachanger/scplan/internal/rules/release_25_2/dep_two_version.go +++ /dev/null @@ -1,126 +0,0 @@ -// Copyright 2022 The Cockroach Authors. -// -// Use of this software is governed by the CockroachDB Software License -// included in the /LICENSE file. - -package release_25_2 - -import ( - "fmt" - "reflect" - - "github.com/cockroachdb/cockroach/pkg/sql/schemachanger/rel" - "github.com/cockroachdb/cockroach/pkg/sql/schemachanger/scpb" - "github.com/cockroachdb/cockroach/pkg/sql/schemachanger/scplan/internal/opgen" - . "github.com/cockroachdb/cockroach/pkg/sql/schemachanger/scplan/internal/rules" - "github.com/cockroachdb/cockroach/pkg/sql/schemachanger/scplan/internal/scgraph" - "github.com/cockroachdb/cockroach/pkg/sql/schemachanger/screl" -) - -// These rules ensure that changes to properties of descriptors which need to -// be sequenced in order to safely enact online schema changes are sequenced -// in separate transactions. -func init() { - - findNoopSourceStatuses := func( - el scpb.Element, targetStatus scpb.TargetStatus, - ) map[scpb.Status][]scpb.Status { - // We want to skip the dependency edges if the status which got us into - // the current status was a no-op. We track the no-op status parent nodes, - // and we'll add a not-join to make sure there does not exist a node - // with such a status when installing the rule. - // - // This is necessary to deal with cases like the transition from - // BACKFILL_ONLY to its equivalent DELETE_ONLY in the rollback of an - // ADD COLUMN. We don't want or need a dependency edge from DELETE_ONLY - // to ABSENT in that case, but if we didn't check whether we got to - // DELETE_ONLY from BACKFILL_ONLY, then we'd have one implicitly. - statusMap := map[scpb.Status][]scpb.Status{} - if err := opgen.IterateTransitions(el, targetStatus, func( - t opgen.Transition, - ) error { - if !t.OpType().IsValid() { - statusMap[t.To()] = append(statusMap[t.To()], t.From()) - } - return nil - }); err != nil { - panic(err) - } - return statusMap - } - clausesForTwoVersionEdge := func( - from, to NodeVars, - el scpb.Element, - targetStatus scpb.TargetStatus, - t opgen.Transition, - prePrevStatuses []scpb.Status, - ) rel.Clauses { - descriptorData := MkNodeVars("descriptor-data") - var descID rel.Var = "descID" - clauses := rel.Clauses{ - from.Type(el), - to.Type(el), - from.El.AttrEqVar(screl.DescID, descID), - from.El.AttrEqVar(rel.Self, to.El), - from.Target.AttrEqVar(rel.Self, to.Target), - from.Target.AttrEq(screl.TargetStatus, targetStatus.Status()), - from.Node.AttrEq(screl.CurrentStatus, t.From()), - to.Node.AttrEq(screl.CurrentStatus, t.To()), - descriptorIsNotBeingDropped(from.El), - // Make sure to join a data element to confirm that data exists. - descriptorData.Type((*scpb.TableData)(nil)), - descriptorData.JoinTargetNode(), - descriptorData.CurrentStatus(scpb.Status_PUBLIC), - descriptorData.DescIDEq(descID), - descriptorDataIsNotBeingAdded(descID), - } - if len(prePrevStatuses) > 0 { - clauses = append(clauses, - GetNotJoinOnNodeWithStatusIn(prePrevStatuses)(from.Target), - ) - } - return clauses - } - addRules := func(el scpb.Element, targetStatus scpb.TargetStatus) { - statusMap := findNoopSourceStatuses(el, targetStatus) - if err := opgen.IterateTransitions(el, targetStatus, func( - t opgen.Transition, - ) error { - elemName := reflect.TypeOf(el).Elem().Name() - ruleName := scgraph.RuleName(fmt.Sprintf( - "%s transitions to %s uphold 2-version invariant: %s->%s", - elemName, targetStatus.Status(), t.From(), t.To(), - )) - registerDepRule( - ruleName, - scgraph.PreviousTransactionPrecedence, - "prev", "next", - func(from, to NodeVars) rel.Clauses { - return clausesForTwoVersionEdge( - from, to, el, targetStatus, t, statusMap[t.From()], - ) - }, - ) - return nil - }); err != nil { - panic(err) - } - } - _ = scpb.ForEachElementType(func(el scpb.Element) error { - if !isSubjectTo2VersionInvariant(el) { - return nil - } - if opgen.HasPublic(el) { - addRules(el, scpb.ToPublic) - } - if opgen.HasTransient(el) { - addRules(el, scpb.TransientAbsent) - } - if opgen.HasTransientPublic(el) { - addRules(el, scpb.TransientPublic) - } - - addRules(el, scpb.ToAbsent) // every element has ToAbsent - return nil - }) -} diff --git a/pkg/sql/schemachanger/scplan/internal/rules/release_25_2/helpers.go b/pkg/sql/schemachanger/scplan/internal/rules/release_25_2/helpers.go deleted file mode 100644 index 5001a70f88ff..000000000000 --- a/pkg/sql/schemachanger/scplan/internal/rules/release_25_2/helpers.go +++ /dev/null @@ -1,368 +0,0 @@ -// Copyright 2023 The Cockroach Authors. -// -// Use of this software is governed by the CockroachDB Software License -// included in the /LICENSE file. - -package release_25_2 - -import ( - "github.com/cockroachdb/cockroach/pkg/clusterversion" - "github.com/cockroachdb/cockroach/pkg/sql/schemachanger/rel" - "github.com/cockroachdb/cockroach/pkg/sql/schemachanger/scpb" - "github.com/cockroachdb/cockroach/pkg/sql/schemachanger/scplan/internal/rules" - "github.com/cockroachdb/cockroach/pkg/sql/schemachanger/screl" - "github.com/cockroachdb/errors" -) - -const ( - // rulesVersion version of elements that can be appended to rel rule names. - rulesVersion = "-25.2" -) - -// rulesVersionKey version of elements used by this rule set. -var rulesVersionKey = clusterversion.V25_2 - -// descriptorIsNotBeingDropped creates a clause which leads to the outer clause -// failing to unify if the passed element is part of a descriptor and -// that descriptor is being dropped. -var descriptorIsNotBeingDropped = screl.Schema.DefNotJoin1( - "descriptorIsNotBeingDropped"+rulesVersion, "element", func( - element rel.Var, - ) rel.Clauses { - descriptor := rules.MkNodeVars("descriptor") - return rel.Clauses{ - descriptor.TypeFilter(rulesVersionKey, isDescriptor), - descriptor.JoinTarget(), - rules.JoinOnDescIDUntyped(descriptor.El, element, "id"), - descriptor.TargetStatus(scpb.ToAbsent), - } - }, -) - -// descriptorDataIsNotBeingAdded indicates if we are operating on a descriptor -// that already exists and was not created in the current transaction. This is -// determined by detecting if the data element is public, and not going from -// absent to public which newly created descriptors will. -var descriptorDataIsNotBeingAdded = screl.Schema.DefNotJoin1( - "descriptorIsDataNotBeingAdded"+rulesVersion, "descID", func( - descID rel.Var, - ) rel.Clauses { - descriptorData := rules.MkNodeVars("descriptor-data") - prevDescriptorData := rules.MkNodeVars("prev-descriptor-data") - return rel.Clauses{ - descriptorData.Type((*scpb.TableData)(nil)), - descriptorData.JoinTargetNode(), - descriptorData.CurrentStatus(scpb.Status_PUBLIC), - descriptorData.DescIDEq(descID), - prevDescriptorData.Type((*scpb.TableData)(nil)), - prevDescriptorData.JoinTargetNode(), - prevDescriptorData.CurrentStatus(scpb.Status_ABSENT), - prevDescriptorData.DescIDEq(descID), - prevDescriptorData.El.AttrEqVar(rel.Self, descriptorData.El), - } - }, -) - -// isDescriptor returns true for a descriptor-element, i.e. an element which -// owns its corresponding descriptor. -func isDescriptor(e scpb.Element) bool { - switch e.(type) { - case *scpb.Database, *scpb.Schema, *scpb.Table, *scpb.View, *scpb.Sequence, - *scpb.AliasType, *scpb.EnumType, *scpb.CompositeType, *scpb.Function: - return true - } - return false -} - -func isSubjectTo2VersionInvariant(e scpb.Element) bool { - // TODO(ajwerner): This should include constraints and enum values but it - // currently does not because we do not support dropping them unless we're - // dropping the descriptor and we do not support adding them. - if isIndex(e) || isColumn(e) { - return true - } - switch e.(type) { - case *scpb.CheckConstraint, *scpb.UniqueWithoutIndexConstraint, *scpb.ForeignKeyConstraint, - *scpb.ColumnNotNull, *scpb.TableSchemaLocked: - return true - } - return false -} - -func isIndex(e scpb.Element) bool { - switch e.(type) { - case *scpb.PrimaryIndex, *scpb.SecondaryIndex, *scpb.TemporaryIndex: - return true - } - return false -} - -func isIndexColumn(e scpb.Element) bool { - switch e.(type) { - case *scpb.IndexColumn: - return true - } - return false -} - -func isColumn(e scpb.Element) bool { - _, ok := e.(*scpb.Column) - return ok -} - -func isTableSchemaLocked(e scpb.Element) bool { - _, ok := e.(*scpb.TableSchemaLocked) - return ok -} - -func isSimpleDependent(e scpb.Element) bool { - return !isDescriptor(e) && !isSubjectTo2VersionInvariant(e) && !isData(e) -} - -func getTypeT(element scpb.Element) (*scpb.TypeT, error) { - switch e := element.(type) { - case *scpb.ColumnType: - if e == nil { - return nil, nil - } - return &e.TypeT, nil - case *scpb.AliasType: - if e == nil { - return nil, nil - } - return &e.TypeT, nil - } - return nil, errors.AssertionFailedf("element %T does not have an embedded scpb.TypeT", element) -} - -func isWithTypeT(element scpb.Element) bool { - _, err := getTypeT(element) - return err == nil -} - -func getExpression(element scpb.Element) (*scpb.Expression, error) { - switch e := element.(type) { - case *scpb.ColumnType: - if e == nil { - return nil, nil - } - return e.ComputeExpr, nil - case *scpb.ColumnComputeExpression: - if e == nil { - return nil, nil - } - return &e.Expression, nil - case *scpb.ColumnDefaultExpression: - if e == nil { - return nil, nil - } - return &e.Expression, nil - case *scpb.ColumnOnUpdateExpression: - if e == nil { - return nil, nil - } - return &e.Expression, nil - case *scpb.SecondaryIndex: - if e == nil || e.EmbeddedExpr == nil { - return nil, nil - } - return e.EmbeddedExpr, nil - case *scpb.CheckConstraint: - if e == nil { - return nil, nil - } - return &e.Expression, nil - case *scpb.CheckConstraintUnvalidated: - if e == nil { - return nil, nil - } - return &e.Expression, nil - case *scpb.PolicyUsingExpr: - if e == nil { - return nil, nil - } - return &e.Expression, nil - case *scpb.PolicyWithCheckExpr: - if e == nil { - return nil, nil - } - return &e.Expression, nil - } - return nil, errors.AssertionFailedf("element %T does not have an embedded scpb.Expression", element) -} - -func isWithExpression(element scpb.Element) bool { - _, err := getExpression(element) - return err == nil -} - -func isTypeDescriptor(element scpb.Element) bool { - switch element.(type) { - case *scpb.EnumType, *scpb.AliasType, *scpb.CompositeType: - return true - default: - return false - } -} - -func isColumnDependent(e scpb.Element) bool { - switch e.(type) { - case *scpb.ColumnType, *scpb.ColumnNotNull: - return true - case *scpb.ColumnName, *scpb.ColumnComment, *scpb.IndexColumn: - return true - } - return isColumnTypeDependent(e) -} - -func isColumnDependentExceptColumnName(e scpb.Element) bool { - switch e.(type) { - case *scpb.ColumnName: - return false - } - return isColumnDependent(e) -} - -func isColumnNotNull(e scpb.Element) bool { - switch e.(type) { - case *scpb.ColumnNotNull: - return true - } - return false -} -func isColumnTypeDependent(e scpb.Element) bool { - switch e.(type) { - case *scpb.SequenceOwner, *scpb.ColumnDefaultExpression, *scpb.ColumnOnUpdateExpression, *scpb.ColumnComputeExpression: - return true - } - return false -} - -func isIndexDependent(e scpb.Element) bool { - switch e.(type) { - case *scpb.IndexName, *scpb.IndexComment, *scpb.IndexColumn, - *scpb.IndexZoneConfig: - return true - case *scpb.IndexPartitioning, *scpb.PartitionZoneConfig: - return true - } - return false -} - -// CRDB supports five constraints of two categories: -// - PK, Unique (index-backed) -// - Check, UniqueWithoutIndex, FK (non-index-backed) -func isConstraint(e scpb.Element) bool { - return isIndex(e) || isNonIndexBackedConstraint(e) -} - -// isNonIndexBackedConstraint returns true if `e` is a non-index-backed constraint. -func isNonIndexBackedConstraint(e scpb.Element) bool { - switch e.(type) { - case *scpb.CheckConstraint, *scpb.UniqueWithoutIndexConstraint, *scpb.ForeignKeyConstraint, - *scpb.ColumnNotNull: - return true - case *scpb.CheckConstraintUnvalidated, *scpb.UniqueWithoutIndexConstraintUnvalidated, - *scpb.ForeignKeyConstraintUnvalidated: - return true - } - return false -} - -// isNonIndexBackedCrossDescriptorConstraint returns true if `e` is a -// non-index-backed constraint and it can potentially reference another -// descriptor. -// -// This filter exists because in general we need to drop the constraint first -// before dropping referencing/referenced descriptor. Read rules that use -// this filter for more details. -// -// TODO (xiang): UniqueWithoutIndex and UniqueWithoutIndexNotValid should -// also be treated as cross-descriptor constraint because its partial predicate -// can references other descriptors. -func isNonIndexBackedCrossDescriptorConstraint(e scpb.Element) bool { - switch e.(type) { - case *scpb.CheckConstraint, *scpb.UniqueWithoutIndexConstraint, - *scpb.ForeignKeyConstraint: - return true - case *scpb.CheckConstraintUnvalidated, *scpb.UniqueWithoutIndexConstraintUnvalidated, - *scpb.ForeignKeyConstraintUnvalidated: - return true - } - return false -} - -func isConstraintDependent(e scpb.Element) bool { - switch e.(type) { - case *scpb.ConstraintWithoutIndexName: - return true - case *scpb.ConstraintComment: - return true - case *scpb.TableLocalityRegionalByRowUsingConstraint: - return true - } - return false -} - -func isConstraintWithoutIndexName(e scpb.Element) bool { - switch e.(type) { - case *scpb.ConstraintWithoutIndexName: - return true - } - return false -} - -func isTriggerDependent(e scpb.Element) bool { - switch e.(type) { - case *scpb.TriggerName, *scpb.TriggerEnabled, *scpb.TriggerTiming, - *scpb.TriggerEvents, *scpb.TriggerTransition, *scpb.TriggerWhen, - *scpb.TriggerFunctionCall, *scpb.TriggerDeps: - return true - } - return false -} - -func isPolicyDependent(e scpb.Element) bool { - switch e.(type) { - case *scpb.PolicyName, *scpb.PolicyRole, *scpb.PolicyUsingExpr, - *scpb.PolicyWithCheckExpr, *scpb.PolicyDeps: - return true - } - return false -} - -func isData(e scpb.Element) bool { - switch e.(type) { - case *scpb.DatabaseData: - return true - case *scpb.TableData: - return true - case *scpb.IndexData: - return true - } - return false -} - -func isDescriptorParentReference(e scpb.Element) bool { - switch e.(type) { - case *scpb.SchemaChild, *scpb.SchemaParent: - return true - } - return false -} - -func isOwner(e scpb.Element) bool { - switch e.(type) { - case *scpb.Owner: - return true - } - return false -} - -func isSchemaLocked(e scpb.Element) bool { - switch e.(type) { - case *scpb.TableSchemaLocked: - return true - } - return false -} diff --git a/pkg/sql/schemachanger/scplan/internal/rules/release_25_2/registry.go b/pkg/sql/schemachanger/scplan/internal/rules/release_25_2/registry.go deleted file mode 100644 index 45f8efe44251..000000000000 --- a/pkg/sql/schemachanger/scplan/internal/rules/release_25_2/registry.go +++ /dev/null @@ -1,47 +0,0 @@ -// Copyright 2023 The Cockroach Authors. -// -// Use of this software is governed by the CockroachDB Software License -// included in the /LICENSE file. - -package release_25_2 - -import ( - "github.com/cockroachdb/cockroach/pkg/sql/schemachanger/rel" - "github.com/cockroachdb/cockroach/pkg/sql/schemachanger/scpb" - . "github.com/cockroachdb/cockroach/pkg/sql/schemachanger/scplan/internal/rules" - "github.com/cockroachdb/cockroach/pkg/sql/schemachanger/scplan/internal/scgraph" -) - -var registry = NewRegistry() - -func registerDepRule( - ruleName scgraph.RuleName, - kind scgraph.DepEdgeKind, - fromEl, toEl string, - def func(from, to NodeVars) rel.Clauses, -) { - registry.RegisterDepRule(ruleName, - kind, - fromEl, toEl, - def) -} - -func registerDepRuleForDrop( - ruleName scgraph.RuleName, - kind scgraph.DepEdgeKind, - from, to string, - fromStatus, toStatus scpb.Status, - fn func(from, to NodeVars) rel.Clauses, -) { - RegisterDepRuleForDrop(registry, - ruleName, - kind, - from, to, - fromStatus, toStatus, - fn) -} - -// GetRegistry returns the registry for this cockroach release. -func GetRegistry() *Registry { - return registry -} diff --git a/pkg/sql/schemachanger/scplan/internal/rules/release_25_2/rules_test.go b/pkg/sql/schemachanger/scplan/internal/rules/release_25_2/rules_test.go deleted file mode 100644 index a6ca764b76dd..000000000000 --- a/pkg/sql/schemachanger/scplan/internal/rules/release_25_2/rules_test.go +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright 2021 The Cockroach Authors. -// -// Use of this software is governed by the CockroachDB Software License -// included in the /LICENSE file. - -package release_25_2 - -import ( - "sort" - "testing" - - "github.com/cockroachdb/cockroach/pkg/sql/schemachanger/rel" - "github.com/cockroachdb/cockroach/pkg/sql/schemachanger/screl" - "github.com/cockroachdb/cockroach/pkg/testutils/datapathutils" - "github.com/cockroachdb/datadriven" - "github.com/stretchr/testify/require" - "gopkg.in/yaml.v3" -) - -// TestRulesYAML outputs the rules to yaml as a way to visualize changes. -// Rules are sorted by name to ensure stable output. -func TestRulesYAML(t *testing.T) { - datadriven.Walk(t, datapathutils.TestDataPath(t), func(t *testing.T, path string) { - datadriven.RunTest(t, path, func(t *testing.T, d *datadriven.TestData) string { - switch d.Cmd { - case "rules": - var m yaml.Node - m.Kind = yaml.MappingNode - var s []rel.RuleDef - screl.Schema.ForEachRule(func(def rel.RuleDef) { - s = append(s, def) - }) - sort.SliceStable(s, func(i, j int) bool { - return s[i].Name < s[j].Name - }) - for _, def := range s { - var rule yaml.Node - if err := rule.Encode(def); err != nil { - panic(err) - } - m.Content = append(m.Content, rule.Content...) - } - out, err := yaml.Marshal(m) - if err != nil { - d.Fatalf(t, "failed to marshal rules: %v", err) - } - return string(out) - case "deprules": - out, err := registry.MarshalDepRules() - require.NoError(t, err) - return out - } - d.Fatalf(t, "deprules, oprules, and rules are the only commands, got %s", d.Cmd) - return "" - }) - }) -} diff --git a/pkg/sql/schemachanger/scplan/internal/rules/release_25_2/testdata/deprules b/pkg/sql/schemachanger/scplan/internal/rules/release_25_2/testdata/deprules deleted file mode 100644 index 84e1d6527e40..000000000000 --- a/pkg/sql/schemachanger/scplan/internal/rules/release_25_2/testdata/deprules +++ /dev/null @@ -1,9633 +0,0 @@ -deprules ----- -- name: 'CheckConstraint transitions to ABSENT uphold 2-version invariant: PUBLIC->VALIDATED' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.CheckConstraint' - - $next[Type] = '*scpb.CheckConstraint' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = ABSENT - - $prev-Node[CurrentStatus] = PUBLIC - - $next-Node[CurrentStatus] = VALIDATED - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'CheckConstraint transitions to ABSENT uphold 2-version invariant: TRANSIENT_ABSENT->ABSENT' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.CheckConstraint' - - $next[Type] = '*scpb.CheckConstraint' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = ABSENT - - $prev-Node[CurrentStatus] = TRANSIENT_ABSENT - - $next-Node[CurrentStatus] = ABSENT - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'CheckConstraint transitions to ABSENT uphold 2-version invariant: TRANSIENT_VALIDATED->VALIDATED' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.CheckConstraint' - - $next[Type] = '*scpb.CheckConstraint' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = ABSENT - - $prev-Node[CurrentStatus] = TRANSIENT_VALIDATED - - $next-Node[CurrentStatus] = VALIDATED - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'CheckConstraint transitions to ABSENT uphold 2-version invariant: TRANSIENT_WRITE_ONLY->VALIDATED' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.CheckConstraint' - - $next[Type] = '*scpb.CheckConstraint' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = ABSENT - - $prev-Node[CurrentStatus] = TRANSIENT_WRITE_ONLY - - $next-Node[CurrentStatus] = VALIDATED - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'CheckConstraint transitions to ABSENT uphold 2-version invariant: VALIDATED->ABSENT' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.CheckConstraint' - - $next[Type] = '*scpb.CheckConstraint' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = ABSENT - - $prev-Node[CurrentStatus] = VALIDATED - - $next-Node[CurrentStatus] = ABSENT - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - nodeNotExistsWithStatusIn_TRANSIENT_VALIDATED_WRITE_ONLY_TRANSIENT_WRITE_ONLY($prev-Target) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'CheckConstraint transitions to ABSENT uphold 2-version invariant: WRITE_ONLY->VALIDATED' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.CheckConstraint' - - $next[Type] = '*scpb.CheckConstraint' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = ABSENT - - $prev-Node[CurrentStatus] = WRITE_ONLY - - $next-Node[CurrentStatus] = VALIDATED - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'CheckConstraint transitions to PUBLIC uphold 2-version invariant: ABSENT->WRITE_ONLY' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.CheckConstraint' - - $next[Type] = '*scpb.CheckConstraint' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = PUBLIC - - $prev-Node[CurrentStatus] = ABSENT - - $next-Node[CurrentStatus] = WRITE_ONLY - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'CheckConstraint transitions to PUBLIC uphold 2-version invariant: VALIDATED->PUBLIC' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.CheckConstraint' - - $next[Type] = '*scpb.CheckConstraint' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = PUBLIC - - $prev-Node[CurrentStatus] = VALIDATED - - $next-Node[CurrentStatus] = PUBLIC - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'CheckConstraint transitions to PUBLIC uphold 2-version invariant: WRITE_ONLY->VALIDATED' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.CheckConstraint' - - $next[Type] = '*scpb.CheckConstraint' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = PUBLIC - - $prev-Node[CurrentStatus] = WRITE_ONLY - - $next-Node[CurrentStatus] = VALIDATED - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'CheckConstraint transitions to TRANSIENT_ABSENT uphold 2-version invariant: ABSENT->WRITE_ONLY' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.CheckConstraint' - - $next[Type] = '*scpb.CheckConstraint' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = TRANSIENT_ABSENT - - $prev-Node[CurrentStatus] = ABSENT - - $next-Node[CurrentStatus] = WRITE_ONLY - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'CheckConstraint transitions to TRANSIENT_ABSENT uphold 2-version invariant: PUBLIC->TRANSIENT_VALIDATED' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.CheckConstraint' - - $next[Type] = '*scpb.CheckConstraint' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = TRANSIENT_ABSENT - - $prev-Node[CurrentStatus] = PUBLIC - - $next-Node[CurrentStatus] = TRANSIENT_VALIDATED - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'CheckConstraint transitions to TRANSIENT_ABSENT uphold 2-version invariant: TRANSIENT_VALIDATED->TRANSIENT_ABSENT' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.CheckConstraint' - - $next[Type] = '*scpb.CheckConstraint' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = TRANSIENT_ABSENT - - $prev-Node[CurrentStatus] = TRANSIENT_VALIDATED - - $next-Node[CurrentStatus] = TRANSIENT_ABSENT - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - nodeNotExistsWithStatusIn_TRANSIENT_WRITE_ONLY($prev-Target) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'CheckConstraint transitions to TRANSIENT_ABSENT uphold 2-version invariant: TRANSIENT_WRITE_ONLY->TRANSIENT_VALIDATED' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.CheckConstraint' - - $next[Type] = '*scpb.CheckConstraint' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = TRANSIENT_ABSENT - - $prev-Node[CurrentStatus] = TRANSIENT_WRITE_ONLY - - $next-Node[CurrentStatus] = TRANSIENT_VALIDATED - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'CheckConstraint transitions to TRANSIENT_ABSENT uphold 2-version invariant: VALIDATED->PUBLIC' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.CheckConstraint' - - $next[Type] = '*scpb.CheckConstraint' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = TRANSIENT_ABSENT - - $prev-Node[CurrentStatus] = VALIDATED - - $next-Node[CurrentStatus] = PUBLIC - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'CheckConstraint transitions to TRANSIENT_ABSENT uphold 2-version invariant: WRITE_ONLY->VALIDATED' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.CheckConstraint' - - $next[Type] = '*scpb.CheckConstraint' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = TRANSIENT_ABSENT - - $prev-Node[CurrentStatus] = WRITE_ONLY - - $next-Node[CurrentStatus] = VALIDATED - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'Column transitions to ABSENT uphold 2-version invariant: DELETE_ONLY->ABSENT' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.Column' - - $next[Type] = '*scpb.Column' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = ABSENT - - $prev-Node[CurrentStatus] = DELETE_ONLY - - $next-Node[CurrentStatus] = ABSENT - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'Column transitions to ABSENT uphold 2-version invariant: PUBLIC->WRITE_ONLY' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.Column' - - $next[Type] = '*scpb.Column' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = ABSENT - - $prev-Node[CurrentStatus] = PUBLIC - - $next-Node[CurrentStatus] = WRITE_ONLY - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'Column transitions to ABSENT uphold 2-version invariant: WRITE_ONLY->DELETE_ONLY' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.Column' - - $next[Type] = '*scpb.Column' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = ABSENT - - $prev-Node[CurrentStatus] = WRITE_ONLY - - $next-Node[CurrentStatus] = DELETE_ONLY - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'Column transitions to PUBLIC uphold 2-version invariant: ABSENT->DELETE_ONLY' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.Column' - - $next[Type] = '*scpb.Column' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = PUBLIC - - $prev-Node[CurrentStatus] = ABSENT - - $next-Node[CurrentStatus] = DELETE_ONLY - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'Column transitions to PUBLIC uphold 2-version invariant: DELETE_ONLY->WRITE_ONLY' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.Column' - - $next[Type] = '*scpb.Column' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = PUBLIC - - $prev-Node[CurrentStatus] = DELETE_ONLY - - $next-Node[CurrentStatus] = WRITE_ONLY - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'Column transitions to PUBLIC uphold 2-version invariant: WRITE_ONLY->PUBLIC' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.Column' - - $next[Type] = '*scpb.Column' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = PUBLIC - - $prev-Node[CurrentStatus] = WRITE_ONLY - - $next-Node[CurrentStatus] = PUBLIC - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'ColumnNotNull transitions to ABSENT uphold 2-version invariant: PUBLIC->VALIDATED' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.ColumnNotNull' - - $next[Type] = '*scpb.ColumnNotNull' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = ABSENT - - $prev-Node[CurrentStatus] = PUBLIC - - $next-Node[CurrentStatus] = VALIDATED - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'ColumnNotNull transitions to ABSENT uphold 2-version invariant: VALIDATED->ABSENT' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.ColumnNotNull' - - $next[Type] = '*scpb.ColumnNotNull' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = ABSENT - - $prev-Node[CurrentStatus] = VALIDATED - - $next-Node[CurrentStatus] = ABSENT - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - nodeNotExistsWithStatusIn_WRITE_ONLY($prev-Target) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'ColumnNotNull transitions to ABSENT uphold 2-version invariant: WRITE_ONLY->VALIDATED' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.ColumnNotNull' - - $next[Type] = '*scpb.ColumnNotNull' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = ABSENT - - $prev-Node[CurrentStatus] = WRITE_ONLY - - $next-Node[CurrentStatus] = VALIDATED - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'ColumnNotNull transitions to PUBLIC uphold 2-version invariant: ABSENT->WRITE_ONLY' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.ColumnNotNull' - - $next[Type] = '*scpb.ColumnNotNull' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = PUBLIC - - $prev-Node[CurrentStatus] = ABSENT - - $next-Node[CurrentStatus] = WRITE_ONLY - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'ColumnNotNull transitions to PUBLIC uphold 2-version invariant: VALIDATED->PUBLIC' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.ColumnNotNull' - - $next[Type] = '*scpb.ColumnNotNull' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = PUBLIC - - $prev-Node[CurrentStatus] = VALIDATED - - $next-Node[CurrentStatus] = PUBLIC - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'ColumnNotNull transitions to PUBLIC uphold 2-version invariant: WRITE_ONLY->VALIDATED' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.ColumnNotNull' - - $next[Type] = '*scpb.ColumnNotNull' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = PUBLIC - - $prev-Node[CurrentStatus] = WRITE_ONLY - - $next-Node[CurrentStatus] = VALIDATED - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: Computed column expression is dropped before the column it depends on - from: column-expr-Node - kind: Precedence - to: column-Node - query: - - $column-expr[Type] = '*scpb.ColumnComputeExpression' - - $column[Type] = '*scpb.Column' - - joinOnDescID($column-expr, $column, $table-id) - - computedColumnTypeReferencesColumn(*scpb.ColumnComputeExpression, *scpb.Column)($column-expr, $column) - - toAbsent($column-expr-Target, $column-Target) - - $column-expr-Node[CurrentStatus] = ABSENT - - $column-Node[CurrentStatus] = WRITE_ONLY - - joinTargetNode($column-expr, $column-expr-Target, $column-expr-Node) - - joinTargetNode($column, $column-Target, $column-Node) -- name: Computed column expression is dropped before the column it depends on - from: column-expr-Node - kind: Precedence - to: column-Node - query: - - $column-expr[Type] = '*scpb.ColumnComputeExpression' - - $column[Type] = '*scpb.Column' - - joinOnDescID($column-expr, $column, $table-id) - - computedColumnTypeReferencesColumn(*scpb.ColumnComputeExpression, *scpb.Column)($column-expr, $column) - - transient($column-expr-Target, $column-Target) - - $column-expr-Node[CurrentStatus] = TRANSIENT_ABSENT - - $column-Node[CurrentStatus] = TRANSIENT_WRITE_ONLY - - joinTargetNode($column-expr, $column-expr-Target, $column-expr-Node) - - joinTargetNode($column, $column-Target, $column-Node) -- name: Computed column expression is dropped before the column it depends on - from: column-expr-Node - kind: Precedence - to: column-Node - query: - - $column-expr[Type] = '*scpb.ColumnComputeExpression' - - $column[Type] = '*scpb.Column' - - joinOnDescID($column-expr, $column, $table-id) - - computedColumnTypeReferencesColumn(*scpb.ColumnComputeExpression, *scpb.Column)($column-expr, $column) - - $column-expr-Target[TargetStatus] = TRANSIENT_ABSENT - - $column-expr-Node[CurrentStatus] = TRANSIENT_ABSENT - - $column-Target[TargetStatus] = ABSENT - - $column-Node[CurrentStatus] = WRITE_ONLY - - joinTargetNode($column-expr, $column-expr-Target, $column-expr-Node) - - joinTargetNode($column, $column-Target, $column-Node) -- name: Computed column expression is dropped before the column it depends on - from: column-expr-Node - kind: Precedence - to: column-Node - query: - - $column-expr[Type] = '*scpb.ColumnComputeExpression' - - $column[Type] = '*scpb.Column' - - joinOnDescID($column-expr, $column, $table-id) - - computedColumnTypeReferencesColumn(*scpb.ColumnComputeExpression, *scpb.Column)($column-expr, $column) - - $column-expr-Target[TargetStatus] = ABSENT - - $column-expr-Node[CurrentStatus] = ABSENT - - $column-Target[TargetStatus] = TRANSIENT_ABSENT - - $column-Node[CurrentStatus] = TRANSIENT_WRITE_ONLY - - joinTargetNode($column-expr, $column-expr-Target, $column-expr-Node) - - joinTargetNode($column, $column-Target, $column-Node) -- name: Constraint should be hidden before name - from: constraint-name-Node - kind: Precedence - to: constraint-Node - query: - - $constraint-name[Type] = '*scpb.ConstraintWithoutIndexName' - - $constraint[Type] IN ['*scpb.CheckConstraint', '*scpb.CheckConstraintUnvalidated', '*scpb.ColumnNotNull', '*scpb.ForeignKeyConstraint', '*scpb.ForeignKeyConstraintUnvalidated', '*scpb.UniqueWithoutIndexConstraint', '*scpb.UniqueWithoutIndexConstraintUnvalidated'] - - joinOnConstraintID($constraint-name, $constraint, $table-id, $constraint-id) - - toAbsent($constraint-name-Target, $constraint-Target) - - $constraint-name-Node[CurrentStatus] = ABSENT - - $constraint-Node[CurrentStatus] = ABSENT - - joinTargetNode($constraint-name, $constraint-name-Target, $constraint-name-Node) - - joinTargetNode($constraint, $constraint-Target, $constraint-Node) -- name: Constraint should be hidden before name - from: constraint-name-Node - kind: Precedence - to: constraint-Node - query: - - $constraint-name[Type] = '*scpb.ConstraintWithoutIndexName' - - $constraint[Type] IN ['*scpb.CheckConstraint', '*scpb.CheckConstraintUnvalidated', '*scpb.ColumnNotNull', '*scpb.ForeignKeyConstraint', '*scpb.ForeignKeyConstraintUnvalidated', '*scpb.UniqueWithoutIndexConstraint', '*scpb.UniqueWithoutIndexConstraintUnvalidated'] - - joinOnConstraintID($constraint-name, $constraint, $table-id, $constraint-id) - - transient($constraint-name-Target, $constraint-Target) - - $constraint-name-Node[CurrentStatus] = TRANSIENT_ABSENT - - $constraint-Node[CurrentStatus] = TRANSIENT_ABSENT - - joinTargetNode($constraint-name, $constraint-name-Target, $constraint-name-Node) - - joinTargetNode($constraint, $constraint-Target, $constraint-Node) -- name: Constraint should be hidden before name - from: constraint-name-Node - kind: Precedence - to: constraint-Node - query: - - $constraint-name[Type] = '*scpb.ConstraintWithoutIndexName' - - $constraint[Type] IN ['*scpb.CheckConstraint', '*scpb.CheckConstraintUnvalidated', '*scpb.ColumnNotNull', '*scpb.ForeignKeyConstraint', '*scpb.ForeignKeyConstraintUnvalidated', '*scpb.UniqueWithoutIndexConstraint', '*scpb.UniqueWithoutIndexConstraintUnvalidated'] - - joinOnConstraintID($constraint-name, $constraint, $table-id, $constraint-id) - - $constraint-name-Target[TargetStatus] = TRANSIENT_ABSENT - - $constraint-name-Node[CurrentStatus] = TRANSIENT_ABSENT - - $constraint-Target[TargetStatus] = ABSENT - - $constraint-Node[CurrentStatus] = ABSENT - - joinTargetNode($constraint-name, $constraint-name-Target, $constraint-name-Node) - - joinTargetNode($constraint, $constraint-Target, $constraint-Node) -- name: Constraint should be hidden before name - from: constraint-name-Node - kind: Precedence - to: constraint-Node - query: - - $constraint-name[Type] = '*scpb.ConstraintWithoutIndexName' - - $constraint[Type] IN ['*scpb.CheckConstraint', '*scpb.CheckConstraintUnvalidated', '*scpb.ColumnNotNull', '*scpb.ForeignKeyConstraint', '*scpb.ForeignKeyConstraintUnvalidated', '*scpb.UniqueWithoutIndexConstraint', '*scpb.UniqueWithoutIndexConstraintUnvalidated'] - - joinOnConstraintID($constraint-name, $constraint, $table-id, $constraint-id) - - $constraint-name-Target[TargetStatus] = ABSENT - - $constraint-name-Node[CurrentStatus] = ABSENT - - $constraint-Target[TargetStatus] = TRANSIENT_ABSENT - - $constraint-Node[CurrentStatus] = TRANSIENT_ABSENT - - joinTargetNode($constraint-name, $constraint-name-Target, $constraint-name-Node) - - joinTargetNode($constraint, $constraint-Target, $constraint-Node) -- name: Constraint should be hidden before name - from: constraint-Node - kind: Precedence - to: constraint-name-Node - query: - - $constraint[Type] IN ['*scpb.CheckConstraint', '*scpb.CheckConstraintUnvalidated', '*scpb.ColumnNotNull', '*scpb.ForeignKeyConstraint', '*scpb.ForeignKeyConstraintUnvalidated', '*scpb.UniqueWithoutIndexConstraint', '*scpb.UniqueWithoutIndexConstraintUnvalidated'] - - $constraint-name[Type] = '*scpb.ConstraintWithoutIndexName' - - joinOnConstraintID($constraint, $constraint-name, $table-id, $constraint-id) - - toAbsent($constraint-Target, $constraint-name-Target) - - $constraint-Node[CurrentStatus] = VALIDATED - - $constraint-name-Node[CurrentStatus] = ABSENT - - joinTargetNode($constraint, $constraint-Target, $constraint-Node) - - joinTargetNode($constraint-name, $constraint-name-Target, $constraint-name-Node) -- name: Constraint should be hidden before name - from: constraint-Node - kind: Precedence - to: constraint-name-Node - query: - - $constraint[Type] IN ['*scpb.CheckConstraint', '*scpb.CheckConstraintUnvalidated', '*scpb.ColumnNotNull', '*scpb.ForeignKeyConstraint', '*scpb.ForeignKeyConstraintUnvalidated', '*scpb.UniqueWithoutIndexConstraint', '*scpb.UniqueWithoutIndexConstraintUnvalidated'] - - $constraint-name[Type] = '*scpb.ConstraintWithoutIndexName' - - joinOnConstraintID($constraint, $constraint-name, $table-id, $constraint-id) - - transient($constraint-Target, $constraint-name-Target) - - $constraint-Node[CurrentStatus] = TRANSIENT_VALIDATED - - $constraint-name-Node[CurrentStatus] = TRANSIENT_ABSENT - - joinTargetNode($constraint, $constraint-Target, $constraint-Node) - - joinTargetNode($constraint-name, $constraint-name-Target, $constraint-name-Node) -- name: Constraint should be hidden before name - from: constraint-Node - kind: Precedence - to: constraint-name-Node - query: - - $constraint[Type] IN ['*scpb.CheckConstraint', '*scpb.CheckConstraintUnvalidated', '*scpb.ColumnNotNull', '*scpb.ForeignKeyConstraint', '*scpb.ForeignKeyConstraintUnvalidated', '*scpb.UniqueWithoutIndexConstraint', '*scpb.UniqueWithoutIndexConstraintUnvalidated'] - - $constraint-name[Type] = '*scpb.ConstraintWithoutIndexName' - - joinOnConstraintID($constraint, $constraint-name, $table-id, $constraint-id) - - $constraint-Target[TargetStatus] = TRANSIENT_ABSENT - - $constraint-Node[CurrentStatus] = TRANSIENT_VALIDATED - - $constraint-name-Target[TargetStatus] = ABSENT - - $constraint-name-Node[CurrentStatus] = ABSENT - - joinTargetNode($constraint, $constraint-Target, $constraint-Node) - - joinTargetNode($constraint-name, $constraint-name-Target, $constraint-name-Node) -- name: Constraint should be hidden before name - from: constraint-Node - kind: Precedence - to: constraint-name-Node - query: - - $constraint[Type] IN ['*scpb.CheckConstraint', '*scpb.CheckConstraintUnvalidated', '*scpb.ColumnNotNull', '*scpb.ForeignKeyConstraint', '*scpb.ForeignKeyConstraintUnvalidated', '*scpb.UniqueWithoutIndexConstraint', '*scpb.UniqueWithoutIndexConstraintUnvalidated'] - - $constraint-name[Type] = '*scpb.ConstraintWithoutIndexName' - - joinOnConstraintID($constraint, $constraint-name, $table-id, $constraint-id) - - $constraint-Target[TargetStatus] = ABSENT - - $constraint-Node[CurrentStatus] = VALIDATED - - $constraint-name-Target[TargetStatus] = TRANSIENT_ABSENT - - $constraint-name-Node[CurrentStatus] = TRANSIENT_ABSENT - - joinTargetNode($constraint, $constraint-Target, $constraint-Node) - - joinTargetNode($constraint-name, $constraint-name-Target, $constraint-name-Node) -- name: DEFAULT or ON UPDATE existence precedes writes to column, except if they are added as part of a alter column type - from: expr-Node - kind: Precedence - to: column-Node - query: - - $expr[Type] IN ['*scpb.ColumnDefaultExpression', '*scpb.ColumnOnUpdateExpression'] - - $column[Type] = '*scpb.Column' - - joinOnColumnID($expr, $column, $table-id, $col-id) - - no column type alteration in progress($table-id, $col-id) - - ToPublicOrTransient($expr-Target, $column-Target) - - $expr-Node[CurrentStatus] = PUBLIC - - $column-Node[CurrentStatus] = WRITE_ONLY - - joinTargetNode($expr, $expr-Target, $expr-Node) - - joinTargetNode($column, $column-Target, $column-Node) -- name: DEFAULT or ON UPDATE expressions is public after transient compute expression transitions to absent - from: transient-compute-expression-Node - kind: SameStagePrecedence - to: column-expr-Node - query: - - $transient-compute-expression[Type] = '*scpb.ColumnComputeExpression' - - $column-expr[Type] IN ['*scpb.ColumnDefaultExpression', '*scpb.ColumnOnUpdateExpression'] - - joinOnColumnID($transient-compute-expression, $column-expr, $table-id, $col-id) - - ToPublicOrTransient($transient-compute-expression-Target, $column-expr-Target) - - $transient-compute-expression-Node[CurrentStatus] = TRANSIENT_ABSENT - - $column-expr-Node[CurrentStatus] = PUBLIC - - joinTargetNode($transient-compute-expression, $transient-compute-expression-Target, $transient-compute-expression-Node) - - joinTargetNode($column-expr, $column-expr-Target, $column-expr-Node) -- name: Final compute expression is always added after transient compute expression - from: transient-compute-expression-Node - kind: SameStagePrecedence - to: final-compute-expression-Node - query: - - $transient-compute-expression[Type] = '*scpb.ColumnComputeExpression' - - $final-compute-expression[Type] = '*scpb.ColumnComputeExpression' - - joinOnColumnID($transient-compute-expression, $final-compute-expression, $table-id, $col-id) - - $transient-compute-expression[Usage] = ALTER_TYPE_USING - - $final-compute-expression[Usage] = REGULAR - - ToPublicOrTransient($transient-compute-expression-Target, $final-compute-expression-Target) - - $transient-compute-expression-Node[CurrentStatus] = TRANSIENT_ABSENT - - $final-compute-expression-Node[CurrentStatus] = PUBLIC - - joinTargetNode($transient-compute-expression, $transient-compute-expression-Target, $transient-compute-expression-Node) - - joinTargetNode($final-compute-expression, $final-compute-expression-Target, $final-compute-expression-Node) -- name: 'ForeignKeyConstraint transitions to ABSENT uphold 2-version invariant: PUBLIC->VALIDATED' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.ForeignKeyConstraint' - - $next[Type] = '*scpb.ForeignKeyConstraint' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = ABSENT - - $prev-Node[CurrentStatus] = PUBLIC - - $next-Node[CurrentStatus] = VALIDATED - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'ForeignKeyConstraint transitions to ABSENT uphold 2-version invariant: VALIDATED->ABSENT' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.ForeignKeyConstraint' - - $next[Type] = '*scpb.ForeignKeyConstraint' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = ABSENT - - $prev-Node[CurrentStatus] = VALIDATED - - $next-Node[CurrentStatus] = ABSENT - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - nodeNotExistsWithStatusIn_WRITE_ONLY($prev-Target) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'ForeignKeyConstraint transitions to ABSENT uphold 2-version invariant: WRITE_ONLY->VALIDATED' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.ForeignKeyConstraint' - - $next[Type] = '*scpb.ForeignKeyConstraint' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = ABSENT - - $prev-Node[CurrentStatus] = WRITE_ONLY - - $next-Node[CurrentStatus] = VALIDATED - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'ForeignKeyConstraint transitions to PUBLIC uphold 2-version invariant: ABSENT->WRITE_ONLY' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.ForeignKeyConstraint' - - $next[Type] = '*scpb.ForeignKeyConstraint' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = PUBLIC - - $prev-Node[CurrentStatus] = ABSENT - - $next-Node[CurrentStatus] = WRITE_ONLY - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'ForeignKeyConstraint transitions to PUBLIC uphold 2-version invariant: VALIDATED->PUBLIC' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.ForeignKeyConstraint' - - $next[Type] = '*scpb.ForeignKeyConstraint' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = PUBLIC - - $prev-Node[CurrentStatus] = VALIDATED - - $next-Node[CurrentStatus] = PUBLIC - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'ForeignKeyConstraint transitions to PUBLIC uphold 2-version invariant: WRITE_ONLY->VALIDATED' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.ForeignKeyConstraint' - - $next[Type] = '*scpb.ForeignKeyConstraint' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = PUBLIC - - $prev-Node[CurrentStatus] = WRITE_ONLY - - $next-Node[CurrentStatus] = VALIDATED - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: New primary index for alter column type should go public in the same stage as dropped column - from: column-Node - kind: SameStagePrecedence - to: new-primary-index-Node - query: - - $column[Type] = '*scpb.Column' - - $new-primary-index[Type] = '*scpb.PrimaryIndex' - - ColumnInSourcePrimaryIndex($index-column, $new-primary-index, $table-id, $old-column-id, $index-id) - - joinOnColumnID($index-column, $column, $table-id, $old-column-id) - - $column-Target[TargetStatus] = ABSENT - - $column-Node[CurrentStatus] = WRITE_ONLY - - $new-primary-index-Target[TargetStatus] = PUBLIC - - $new-primary-index-Node[CurrentStatus] = PUBLIC - - $old-column-name[Type] = '*scpb.ColumnName' - - $new-column-name[Type] = '*scpb.ColumnName' - - joinOnColumnName($old-column-name, $new-column-name, $table-id, $column-name) - - $old-column-name[ColumnID] = $old-column-id - - $old-column-name-Target[TargetStatus] = ABSENT - - $new-column-name-Target[TargetStatus] = PUBLIC - - $compute-expression[Type] = '*scpb.ColumnComputeExpression' - - joinOnColumnID($new-column-name, $compute-expression, $table-id, $new-column-id) - - $compute-expression[Usage] = ALTER_TYPE_USING - - joinTargetNode($old-column-name, $old-column-name-Target, $old-column-name-Node) - - joinTargetNode($new-column-name, $new-column-name-Target, $new-column-name-Node) - - joinTargetNode($compute-expression, $compute-expression-Target, $compute-expression-Node) - - joinTargetNode($column, $column-Target, $column-Node) - - joinTargetNode($new-primary-index, $new-primary-index-Target, $new-primary-index-Node) -- name: New primary index should go public only after columns being dropped move to WRITE_ONLY - from: column-Node - kind: Precedence - to: new-primary-index-Node - query: - - $column[Type] = '*scpb.Column' - - $new-primary-index[Type] = '*scpb.PrimaryIndex' - - ColumnInSourcePrimaryIndex($index-column, $new-primary-index, $table-id, $old-column-id, $index-id) - - joinOnColumnID($index-column, $column, $table-id, $old-column-id) - - $column-Target[TargetStatus] = ABSENT - - $column-Node[CurrentStatus] = WRITE_ONLY - - $new-primary-index-Target[TargetStatus] = PUBLIC - - $new-primary-index-Node[CurrentStatus] = PUBLIC - - dropped column is not part of column type operation($table-id, $old-column-id) - - joinTargetNode($column, $column-Target, $column-Node) - - joinTargetNode($new-primary-index, $new-primary-index-Target, $new-primary-index-Node) -- name: 'PrimaryIndex transitions to ABSENT uphold 2-version invariant: BACKFILLED->DELETE_ONLY' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.PrimaryIndex' - - $next[Type] = '*scpb.PrimaryIndex' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = ABSENT - - $prev-Node[CurrentStatus] = BACKFILLED - - $next-Node[CurrentStatus] = DELETE_ONLY - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'PrimaryIndex transitions to ABSENT uphold 2-version invariant: BACKFILL_ONLY->DELETE_ONLY' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.PrimaryIndex' - - $next[Type] = '*scpb.PrimaryIndex' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = ABSENT - - $prev-Node[CurrentStatus] = BACKFILL_ONLY - - $next-Node[CurrentStatus] = DELETE_ONLY - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'PrimaryIndex transitions to ABSENT uphold 2-version invariant: DELETE_ONLY->ABSENT' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.PrimaryIndex' - - $next[Type] = '*scpb.PrimaryIndex' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = ABSENT - - $prev-Node[CurrentStatus] = DELETE_ONLY - - $next-Node[CurrentStatus] = ABSENT - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - nodeNotExistsWithStatusIn_TRANSIENT_DELETE_ONLY_BACKFILLED_TRANSIENT_BACKFILLED_BACKFILL_ONLY_TRANSIENT_BACKFILL_ONLY($prev-Target) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'PrimaryIndex transitions to ABSENT uphold 2-version invariant: MERGED->WRITE_ONLY' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.PrimaryIndex' - - $next[Type] = '*scpb.PrimaryIndex' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = ABSENT - - $prev-Node[CurrentStatus] = MERGED - - $next-Node[CurrentStatus] = WRITE_ONLY - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'PrimaryIndex transitions to ABSENT uphold 2-version invariant: MERGE_ONLY->WRITE_ONLY' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.PrimaryIndex' - - $next[Type] = '*scpb.PrimaryIndex' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = ABSENT - - $prev-Node[CurrentStatus] = MERGE_ONLY - - $next-Node[CurrentStatus] = WRITE_ONLY - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'PrimaryIndex transitions to ABSENT uphold 2-version invariant: PUBLIC->VALIDATED' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.PrimaryIndex' - - $next[Type] = '*scpb.PrimaryIndex' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = ABSENT - - $prev-Node[CurrentStatus] = PUBLIC - - $next-Node[CurrentStatus] = VALIDATED - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'PrimaryIndex transitions to ABSENT uphold 2-version invariant: TRANSIENT_ABSENT->ABSENT' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.PrimaryIndex' - - $next[Type] = '*scpb.PrimaryIndex' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = ABSENT - - $prev-Node[CurrentStatus] = TRANSIENT_ABSENT - - $next-Node[CurrentStatus] = ABSENT - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'PrimaryIndex transitions to ABSENT uphold 2-version invariant: TRANSIENT_BACKFILLED->DELETE_ONLY' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.PrimaryIndex' - - $next[Type] = '*scpb.PrimaryIndex' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = ABSENT - - $prev-Node[CurrentStatus] = TRANSIENT_BACKFILLED - - $next-Node[CurrentStatus] = DELETE_ONLY - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'PrimaryIndex transitions to ABSENT uphold 2-version invariant: TRANSIENT_BACKFILL_ONLY->DELETE_ONLY' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.PrimaryIndex' - - $next[Type] = '*scpb.PrimaryIndex' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = ABSENT - - $prev-Node[CurrentStatus] = TRANSIENT_BACKFILL_ONLY - - $next-Node[CurrentStatus] = DELETE_ONLY - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'PrimaryIndex transitions to ABSENT uphold 2-version invariant: TRANSIENT_DELETE_ONLY->DELETE_ONLY' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.PrimaryIndex' - - $next[Type] = '*scpb.PrimaryIndex' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = ABSENT - - $prev-Node[CurrentStatus] = TRANSIENT_DELETE_ONLY - - $next-Node[CurrentStatus] = DELETE_ONLY - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'PrimaryIndex transitions to ABSENT uphold 2-version invariant: TRANSIENT_MERGED->WRITE_ONLY' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.PrimaryIndex' - - $next[Type] = '*scpb.PrimaryIndex' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = ABSENT - - $prev-Node[CurrentStatus] = TRANSIENT_MERGED - - $next-Node[CurrentStatus] = WRITE_ONLY - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'PrimaryIndex transitions to ABSENT uphold 2-version invariant: TRANSIENT_MERGE_ONLY->WRITE_ONLY' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.PrimaryIndex' - - $next[Type] = '*scpb.PrimaryIndex' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = ABSENT - - $prev-Node[CurrentStatus] = TRANSIENT_MERGE_ONLY - - $next-Node[CurrentStatus] = WRITE_ONLY - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'PrimaryIndex transitions to ABSENT uphold 2-version invariant: TRANSIENT_VALIDATED->VALIDATED' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.PrimaryIndex' - - $next[Type] = '*scpb.PrimaryIndex' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = ABSENT - - $prev-Node[CurrentStatus] = TRANSIENT_VALIDATED - - $next-Node[CurrentStatus] = VALIDATED - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'PrimaryIndex transitions to ABSENT uphold 2-version invariant: TRANSIENT_WRITE_ONLY->WRITE_ONLY' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.PrimaryIndex' - - $next[Type] = '*scpb.PrimaryIndex' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = ABSENT - - $prev-Node[CurrentStatus] = TRANSIENT_WRITE_ONLY - - $next-Node[CurrentStatus] = WRITE_ONLY - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'PrimaryIndex transitions to ABSENT uphold 2-version invariant: VALIDATED->WRITE_ONLY' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.PrimaryIndex' - - $next[Type] = '*scpb.PrimaryIndex' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = ABSENT - - $prev-Node[CurrentStatus] = VALIDATED - - $next-Node[CurrentStatus] = WRITE_ONLY - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - nodeNotExistsWithStatusIn_TRANSIENT_VALIDATED($prev-Target) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'PrimaryIndex transitions to ABSENT uphold 2-version invariant: WRITE_ONLY->DELETE_ONLY' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.PrimaryIndex' - - $next[Type] = '*scpb.PrimaryIndex' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = ABSENT - - $prev-Node[CurrentStatus] = WRITE_ONLY - - $next-Node[CurrentStatus] = DELETE_ONLY - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - nodeNotExistsWithStatusIn_VALIDATED_TRANSIENT_WRITE_ONLY_MERGE_ONLY_TRANSIENT_MERGE_ONLY_MERGED_TRANSIENT_MERGED($prev-Target) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'PrimaryIndex transitions to PUBLIC uphold 2-version invariant: ABSENT->BACKFILL_ONLY' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.PrimaryIndex' - - $next[Type] = '*scpb.PrimaryIndex' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = PUBLIC - - $prev-Node[CurrentStatus] = ABSENT - - $next-Node[CurrentStatus] = BACKFILL_ONLY - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'PrimaryIndex transitions to PUBLIC uphold 2-version invariant: BACKFILLED->DELETE_ONLY' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.PrimaryIndex' - - $next[Type] = '*scpb.PrimaryIndex' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = PUBLIC - - $prev-Node[CurrentStatus] = BACKFILLED - - $next-Node[CurrentStatus] = DELETE_ONLY - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'PrimaryIndex transitions to PUBLIC uphold 2-version invariant: BACKFILL_ONLY->BACKFILLED' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.PrimaryIndex' - - $next[Type] = '*scpb.PrimaryIndex' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = PUBLIC - - $prev-Node[CurrentStatus] = BACKFILL_ONLY - - $next-Node[CurrentStatus] = BACKFILLED - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'PrimaryIndex transitions to PUBLIC uphold 2-version invariant: DELETE_ONLY->MERGE_ONLY' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.PrimaryIndex' - - $next[Type] = '*scpb.PrimaryIndex' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = PUBLIC - - $prev-Node[CurrentStatus] = DELETE_ONLY - - $next-Node[CurrentStatus] = MERGE_ONLY - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'PrimaryIndex transitions to PUBLIC uphold 2-version invariant: MERGED->WRITE_ONLY' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.PrimaryIndex' - - $next[Type] = '*scpb.PrimaryIndex' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = PUBLIC - - $prev-Node[CurrentStatus] = MERGED - - $next-Node[CurrentStatus] = WRITE_ONLY - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'PrimaryIndex transitions to PUBLIC uphold 2-version invariant: MERGE_ONLY->MERGED' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.PrimaryIndex' - - $next[Type] = '*scpb.PrimaryIndex' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = PUBLIC - - $prev-Node[CurrentStatus] = MERGE_ONLY - - $next-Node[CurrentStatus] = MERGED - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'PrimaryIndex transitions to PUBLIC uphold 2-version invariant: VALIDATED->PUBLIC' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.PrimaryIndex' - - $next[Type] = '*scpb.PrimaryIndex' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = PUBLIC - - $prev-Node[CurrentStatus] = VALIDATED - - $next-Node[CurrentStatus] = PUBLIC - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'PrimaryIndex transitions to PUBLIC uphold 2-version invariant: WRITE_ONLY->VALIDATED' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.PrimaryIndex' - - $next[Type] = '*scpb.PrimaryIndex' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = PUBLIC - - $prev-Node[CurrentStatus] = WRITE_ONLY - - $next-Node[CurrentStatus] = VALIDATED - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'PrimaryIndex transitions to TRANSIENT_ABSENT uphold 2-version invariant: ABSENT->BACKFILL_ONLY' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.PrimaryIndex' - - $next[Type] = '*scpb.PrimaryIndex' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = TRANSIENT_ABSENT - - $prev-Node[CurrentStatus] = ABSENT - - $next-Node[CurrentStatus] = BACKFILL_ONLY - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'PrimaryIndex transitions to TRANSIENT_ABSENT uphold 2-version invariant: BACKFILLED->DELETE_ONLY' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.PrimaryIndex' - - $next[Type] = '*scpb.PrimaryIndex' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = TRANSIENT_ABSENT - - $prev-Node[CurrentStatus] = BACKFILLED - - $next-Node[CurrentStatus] = DELETE_ONLY - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'PrimaryIndex transitions to TRANSIENT_ABSENT uphold 2-version invariant: BACKFILL_ONLY->BACKFILLED' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.PrimaryIndex' - - $next[Type] = '*scpb.PrimaryIndex' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = TRANSIENT_ABSENT - - $prev-Node[CurrentStatus] = BACKFILL_ONLY - - $next-Node[CurrentStatus] = BACKFILLED - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'PrimaryIndex transitions to TRANSIENT_ABSENT uphold 2-version invariant: DELETE_ONLY->MERGE_ONLY' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.PrimaryIndex' - - $next[Type] = '*scpb.PrimaryIndex' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = TRANSIENT_ABSENT - - $prev-Node[CurrentStatus] = DELETE_ONLY - - $next-Node[CurrentStatus] = MERGE_ONLY - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'PrimaryIndex transitions to TRANSIENT_ABSENT uphold 2-version invariant: MERGED->WRITE_ONLY' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.PrimaryIndex' - - $next[Type] = '*scpb.PrimaryIndex' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = TRANSIENT_ABSENT - - $prev-Node[CurrentStatus] = MERGED - - $next-Node[CurrentStatus] = WRITE_ONLY - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'PrimaryIndex transitions to TRANSIENT_ABSENT uphold 2-version invariant: MERGE_ONLY->MERGED' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.PrimaryIndex' - - $next[Type] = '*scpb.PrimaryIndex' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = TRANSIENT_ABSENT - - $prev-Node[CurrentStatus] = MERGE_ONLY - - $next-Node[CurrentStatus] = MERGED - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'PrimaryIndex transitions to TRANSIENT_ABSENT uphold 2-version invariant: PUBLIC->TRANSIENT_VALIDATED' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.PrimaryIndex' - - $next[Type] = '*scpb.PrimaryIndex' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = TRANSIENT_ABSENT - - $prev-Node[CurrentStatus] = PUBLIC - - $next-Node[CurrentStatus] = TRANSIENT_VALIDATED - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'PrimaryIndex transitions to TRANSIENT_ABSENT uphold 2-version invariant: TRANSIENT_BACKFILLED->TRANSIENT_DELETE_ONLY' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.PrimaryIndex' - - $next[Type] = '*scpb.PrimaryIndex' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = TRANSIENT_ABSENT - - $prev-Node[CurrentStatus] = TRANSIENT_BACKFILLED - - $next-Node[CurrentStatus] = TRANSIENT_DELETE_ONLY - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'PrimaryIndex transitions to TRANSIENT_ABSENT uphold 2-version invariant: TRANSIENT_BACKFILL_ONLY->TRANSIENT_DELETE_ONLY' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.PrimaryIndex' - - $next[Type] = '*scpb.PrimaryIndex' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = TRANSIENT_ABSENT - - $prev-Node[CurrentStatus] = TRANSIENT_BACKFILL_ONLY - - $next-Node[CurrentStatus] = TRANSIENT_DELETE_ONLY - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'PrimaryIndex transitions to TRANSIENT_ABSENT uphold 2-version invariant: TRANSIENT_DELETE_ONLY->TRANSIENT_ABSENT' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.PrimaryIndex' - - $next[Type] = '*scpb.PrimaryIndex' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = TRANSIENT_ABSENT - - $prev-Node[CurrentStatus] = TRANSIENT_DELETE_ONLY - - $next-Node[CurrentStatus] = TRANSIENT_ABSENT - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - nodeNotExistsWithStatusIn_TRANSIENT_BACKFILLED_TRANSIENT_BACKFILL_ONLY($prev-Target) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'PrimaryIndex transitions to TRANSIENT_ABSENT uphold 2-version invariant: TRANSIENT_MERGED->TRANSIENT_WRITE_ONLY' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.PrimaryIndex' - - $next[Type] = '*scpb.PrimaryIndex' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = TRANSIENT_ABSENT - - $prev-Node[CurrentStatus] = TRANSIENT_MERGED - - $next-Node[CurrentStatus] = TRANSIENT_WRITE_ONLY - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'PrimaryIndex transitions to TRANSIENT_ABSENT uphold 2-version invariant: TRANSIENT_MERGE_ONLY->TRANSIENT_WRITE_ONLY' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.PrimaryIndex' - - $next[Type] = '*scpb.PrimaryIndex' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = TRANSIENT_ABSENT - - $prev-Node[CurrentStatus] = TRANSIENT_MERGE_ONLY - - $next-Node[CurrentStatus] = TRANSIENT_WRITE_ONLY - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'PrimaryIndex transitions to TRANSIENT_ABSENT uphold 2-version invariant: TRANSIENT_VALIDATED->TRANSIENT_WRITE_ONLY' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.PrimaryIndex' - - $next[Type] = '*scpb.PrimaryIndex' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = TRANSIENT_ABSENT - - $prev-Node[CurrentStatus] = TRANSIENT_VALIDATED - - $next-Node[CurrentStatus] = TRANSIENT_WRITE_ONLY - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'PrimaryIndex transitions to TRANSIENT_ABSENT uphold 2-version invariant: TRANSIENT_WRITE_ONLY->TRANSIENT_DELETE_ONLY' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.PrimaryIndex' - - $next[Type] = '*scpb.PrimaryIndex' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = TRANSIENT_ABSENT - - $prev-Node[CurrentStatus] = TRANSIENT_WRITE_ONLY - - $next-Node[CurrentStatus] = TRANSIENT_DELETE_ONLY - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - nodeNotExistsWithStatusIn_TRANSIENT_VALIDATED_TRANSIENT_MERGE_ONLY_TRANSIENT_MERGED($prev-Target) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'PrimaryIndex transitions to TRANSIENT_ABSENT uphold 2-version invariant: VALIDATED->PUBLIC' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.PrimaryIndex' - - $next[Type] = '*scpb.PrimaryIndex' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = TRANSIENT_ABSENT - - $prev-Node[CurrentStatus] = VALIDATED - - $next-Node[CurrentStatus] = PUBLIC - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'PrimaryIndex transitions to TRANSIENT_ABSENT uphold 2-version invariant: WRITE_ONLY->VALIDATED' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.PrimaryIndex' - - $next[Type] = '*scpb.PrimaryIndex' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = TRANSIENT_ABSENT - - $prev-Node[CurrentStatus] = WRITE_ONLY - - $next-Node[CurrentStatus] = VALIDATED - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'SecondaryIndex transitions to ABSENT uphold 2-version invariant: BACKFILLED->DELETE_ONLY' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.SecondaryIndex' - - $next[Type] = '*scpb.SecondaryIndex' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = ABSENT - - $prev-Node[CurrentStatus] = BACKFILLED - - $next-Node[CurrentStatus] = DELETE_ONLY - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'SecondaryIndex transitions to ABSENT uphold 2-version invariant: BACKFILL_ONLY->DELETE_ONLY' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.SecondaryIndex' - - $next[Type] = '*scpb.SecondaryIndex' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = ABSENT - - $prev-Node[CurrentStatus] = BACKFILL_ONLY - - $next-Node[CurrentStatus] = DELETE_ONLY - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'SecondaryIndex transitions to ABSENT uphold 2-version invariant: DELETE_ONLY->ABSENT' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.SecondaryIndex' - - $next[Type] = '*scpb.SecondaryIndex' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = ABSENT - - $prev-Node[CurrentStatus] = DELETE_ONLY - - $next-Node[CurrentStatus] = ABSENT - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - nodeNotExistsWithStatusIn_BACKFILLED_BACKFILL_ONLY($prev-Target) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'SecondaryIndex transitions to ABSENT uphold 2-version invariant: MERGED->WRITE_ONLY' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.SecondaryIndex' - - $next[Type] = '*scpb.SecondaryIndex' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = ABSENT - - $prev-Node[CurrentStatus] = MERGED - - $next-Node[CurrentStatus] = WRITE_ONLY - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'SecondaryIndex transitions to ABSENT uphold 2-version invariant: MERGE_ONLY->WRITE_ONLY' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.SecondaryIndex' - - $next[Type] = '*scpb.SecondaryIndex' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = ABSENT - - $prev-Node[CurrentStatus] = MERGE_ONLY - - $next-Node[CurrentStatus] = WRITE_ONLY - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'SecondaryIndex transitions to ABSENT uphold 2-version invariant: PUBLIC->VALIDATED' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.SecondaryIndex' - - $next[Type] = '*scpb.SecondaryIndex' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = ABSENT - - $prev-Node[CurrentStatus] = PUBLIC - - $next-Node[CurrentStatus] = VALIDATED - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'SecondaryIndex transitions to ABSENT uphold 2-version invariant: VALIDATED->WRITE_ONLY' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.SecondaryIndex' - - $next[Type] = '*scpb.SecondaryIndex' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = ABSENT - - $prev-Node[CurrentStatus] = VALIDATED - - $next-Node[CurrentStatus] = WRITE_ONLY - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'SecondaryIndex transitions to ABSENT uphold 2-version invariant: WRITE_ONLY->DELETE_ONLY' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.SecondaryIndex' - - $next[Type] = '*scpb.SecondaryIndex' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = ABSENT - - $prev-Node[CurrentStatus] = WRITE_ONLY - - $next-Node[CurrentStatus] = DELETE_ONLY - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - nodeNotExistsWithStatusIn_VALIDATED_MERGE_ONLY_MERGED($prev-Target) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'SecondaryIndex transitions to PUBLIC uphold 2-version invariant: ABSENT->BACKFILL_ONLY' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.SecondaryIndex' - - $next[Type] = '*scpb.SecondaryIndex' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = PUBLIC - - $prev-Node[CurrentStatus] = ABSENT - - $next-Node[CurrentStatus] = BACKFILL_ONLY - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'SecondaryIndex transitions to PUBLIC uphold 2-version invariant: BACKFILLED->DELETE_ONLY' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.SecondaryIndex' - - $next[Type] = '*scpb.SecondaryIndex' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = PUBLIC - - $prev-Node[CurrentStatus] = BACKFILLED - - $next-Node[CurrentStatus] = DELETE_ONLY - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'SecondaryIndex transitions to PUBLIC uphold 2-version invariant: BACKFILL_ONLY->BACKFILLED' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.SecondaryIndex' - - $next[Type] = '*scpb.SecondaryIndex' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = PUBLIC - - $prev-Node[CurrentStatus] = BACKFILL_ONLY - - $next-Node[CurrentStatus] = BACKFILLED - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'SecondaryIndex transitions to PUBLIC uphold 2-version invariant: DELETE_ONLY->MERGE_ONLY' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.SecondaryIndex' - - $next[Type] = '*scpb.SecondaryIndex' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = PUBLIC - - $prev-Node[CurrentStatus] = DELETE_ONLY - - $next-Node[CurrentStatus] = MERGE_ONLY - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'SecondaryIndex transitions to PUBLIC uphold 2-version invariant: MERGED->WRITE_ONLY' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.SecondaryIndex' - - $next[Type] = '*scpb.SecondaryIndex' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = PUBLIC - - $prev-Node[CurrentStatus] = MERGED - - $next-Node[CurrentStatus] = WRITE_ONLY - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'SecondaryIndex transitions to PUBLIC uphold 2-version invariant: MERGE_ONLY->MERGED' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.SecondaryIndex' - - $next[Type] = '*scpb.SecondaryIndex' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = PUBLIC - - $prev-Node[CurrentStatus] = MERGE_ONLY - - $next-Node[CurrentStatus] = MERGED - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'SecondaryIndex transitions to PUBLIC uphold 2-version invariant: VALIDATED->PUBLIC' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.SecondaryIndex' - - $next[Type] = '*scpb.SecondaryIndex' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = PUBLIC - - $prev-Node[CurrentStatus] = VALIDATED - - $next-Node[CurrentStatus] = PUBLIC - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'SecondaryIndex transitions to PUBLIC uphold 2-version invariant: WRITE_ONLY->VALIDATED' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.SecondaryIndex' - - $next[Type] = '*scpb.SecondaryIndex' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = PUBLIC - - $prev-Node[CurrentStatus] = WRITE_ONLY - - $next-Node[CurrentStatus] = VALIDATED - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'TableSchemaLocked transitions to ABSENT uphold 2-version invariant: PUBLIC->ABSENT' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.TableSchemaLocked' - - $next[Type] = '*scpb.TableSchemaLocked' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = ABSENT - - $prev-Node[CurrentStatus] = PUBLIC - - $next-Node[CurrentStatus] = ABSENT - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - nodeNotExistsWithStatusIn_TRANSIENT_PUBLIC($prev-Target) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'TableSchemaLocked transitions to ABSENT uphold 2-version invariant: TRANSIENT_PUBLIC->PUBLIC' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.TableSchemaLocked' - - $next[Type] = '*scpb.TableSchemaLocked' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = ABSENT - - $prev-Node[CurrentStatus] = TRANSIENT_PUBLIC - - $next-Node[CurrentStatus] = PUBLIC - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'TableSchemaLocked transitions to PUBLIC uphold 2-version invariant: ABSENT->PUBLIC' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.TableSchemaLocked' - - $next[Type] = '*scpb.TableSchemaLocked' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = PUBLIC - - $prev-Node[CurrentStatus] = ABSENT - - $next-Node[CurrentStatus] = PUBLIC - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'TableSchemaLocked transitions to TRANSIENT_PUBLIC uphold 2-version invariant: ABSENT->TRANSIENT_PUBLIC' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.TableSchemaLocked' - - $next[Type] = '*scpb.TableSchemaLocked' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = TRANSIENT_PUBLIC - - $prev-Node[CurrentStatus] = ABSENT - - $next-Node[CurrentStatus] = TRANSIENT_PUBLIC - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'TableSchemaLocked transitions to TRANSIENT_PUBLIC uphold 2-version invariant: PUBLIC->ABSENT' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.TableSchemaLocked' - - $next[Type] = '*scpb.TableSchemaLocked' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = TRANSIENT_PUBLIC - - $prev-Node[CurrentStatus] = PUBLIC - - $next-Node[CurrentStatus] = ABSENT - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'TemporaryIndex transitions to ABSENT uphold 2-version invariant: DELETE_ONLY->ABSENT' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.TemporaryIndex' - - $next[Type] = '*scpb.TemporaryIndex' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = ABSENT - - $prev-Node[CurrentStatus] = DELETE_ONLY - - $next-Node[CurrentStatus] = ABSENT - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - nodeNotExistsWithStatusIn_TRANSIENT_DELETE_ONLY($prev-Target) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'TemporaryIndex transitions to ABSENT uphold 2-version invariant: TRANSIENT_ABSENT->ABSENT' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.TemporaryIndex' - - $next[Type] = '*scpb.TemporaryIndex' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = ABSENT - - $prev-Node[CurrentStatus] = TRANSIENT_ABSENT - - $next-Node[CurrentStatus] = ABSENT - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'TemporaryIndex transitions to ABSENT uphold 2-version invariant: TRANSIENT_DELETE_ONLY->DELETE_ONLY' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.TemporaryIndex' - - $next[Type] = '*scpb.TemporaryIndex' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = ABSENT - - $prev-Node[CurrentStatus] = TRANSIENT_DELETE_ONLY - - $next-Node[CurrentStatus] = DELETE_ONLY - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'TemporaryIndex transitions to ABSENT uphold 2-version invariant: WRITE_ONLY->DELETE_ONLY' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.TemporaryIndex' - - $next[Type] = '*scpb.TemporaryIndex' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = ABSENT - - $prev-Node[CurrentStatus] = WRITE_ONLY - - $next-Node[CurrentStatus] = DELETE_ONLY - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'TemporaryIndex transitions to TRANSIENT_ABSENT uphold 2-version invariant: ABSENT->DELETE_ONLY' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.TemporaryIndex' - - $next[Type] = '*scpb.TemporaryIndex' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = TRANSIENT_ABSENT - - $prev-Node[CurrentStatus] = ABSENT - - $next-Node[CurrentStatus] = DELETE_ONLY - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'TemporaryIndex transitions to TRANSIENT_ABSENT uphold 2-version invariant: DELETE_ONLY->WRITE_ONLY' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.TemporaryIndex' - - $next[Type] = '*scpb.TemporaryIndex' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = TRANSIENT_ABSENT - - $prev-Node[CurrentStatus] = DELETE_ONLY - - $next-Node[CurrentStatus] = WRITE_ONLY - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'TemporaryIndex transitions to TRANSIENT_ABSENT uphold 2-version invariant: TRANSIENT_DELETE_ONLY->TRANSIENT_ABSENT' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.TemporaryIndex' - - $next[Type] = '*scpb.TemporaryIndex' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = TRANSIENT_ABSENT - - $prev-Node[CurrentStatus] = TRANSIENT_DELETE_ONLY - - $next-Node[CurrentStatus] = TRANSIENT_ABSENT - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'TemporaryIndex transitions to TRANSIENT_ABSENT uphold 2-version invariant: WRITE_ONLY->TRANSIENT_DELETE_ONLY' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.TemporaryIndex' - - $next[Type] = '*scpb.TemporaryIndex' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = TRANSIENT_ABSENT - - $prev-Node[CurrentStatus] = WRITE_ONLY - - $next-Node[CurrentStatus] = TRANSIENT_DELETE_ONLY - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'UniqueWithoutIndexConstraint transitions to ABSENT uphold 2-version invariant: PUBLIC->VALIDATED' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.UniqueWithoutIndexConstraint' - - $next[Type] = '*scpb.UniqueWithoutIndexConstraint' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = ABSENT - - $prev-Node[CurrentStatus] = PUBLIC - - $next-Node[CurrentStatus] = VALIDATED - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'UniqueWithoutIndexConstraint transitions to ABSENT uphold 2-version invariant: VALIDATED->ABSENT' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.UniqueWithoutIndexConstraint' - - $next[Type] = '*scpb.UniqueWithoutIndexConstraint' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = ABSENT - - $prev-Node[CurrentStatus] = VALIDATED - - $next-Node[CurrentStatus] = ABSENT - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - nodeNotExistsWithStatusIn_WRITE_ONLY($prev-Target) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'UniqueWithoutIndexConstraint transitions to ABSENT uphold 2-version invariant: WRITE_ONLY->VALIDATED' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.UniqueWithoutIndexConstraint' - - $next[Type] = '*scpb.UniqueWithoutIndexConstraint' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = ABSENT - - $prev-Node[CurrentStatus] = WRITE_ONLY - - $next-Node[CurrentStatus] = VALIDATED - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'UniqueWithoutIndexConstraint transitions to PUBLIC uphold 2-version invariant: ABSENT->WRITE_ONLY' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.UniqueWithoutIndexConstraint' - - $next[Type] = '*scpb.UniqueWithoutIndexConstraint' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = PUBLIC - - $prev-Node[CurrentStatus] = ABSENT - - $next-Node[CurrentStatus] = WRITE_ONLY - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'UniqueWithoutIndexConstraint transitions to PUBLIC uphold 2-version invariant: VALIDATED->PUBLIC' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.UniqueWithoutIndexConstraint' - - $next[Type] = '*scpb.UniqueWithoutIndexConstraint' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = PUBLIC - - $prev-Node[CurrentStatus] = VALIDATED - - $next-Node[CurrentStatus] = PUBLIC - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'UniqueWithoutIndexConstraint transitions to PUBLIC uphold 2-version invariant: WRITE_ONLY->VALIDATED' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.UniqueWithoutIndexConstraint' - - $next[Type] = '*scpb.UniqueWithoutIndexConstraint' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = PUBLIC - - $prev-Node[CurrentStatus] = WRITE_ONLY - - $next-Node[CurrentStatus] = VALIDATED - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: adding a transient column compute expression moves to 'absent' after PK validation to ensures it's there for the backfill - from: primary-index-Node - kind: Precedence - to: transient-column-compute-Node - query: - - $primary-index[Type] = '*scpb.PrimaryIndex' - - $transient-column-compute[Type] = '*scpb.ColumnComputeExpression' - - joinOnDescID($primary-index, $transient-column-compute, $table-id) - - $primary-index-Target[TargetStatus] = PUBLIC - - $transient-column-compute-Target[TargetStatus] = TRANSIENT_ABSENT - - $primary-index-Node[CurrentStatus] = VALIDATED - - $transient-column-compute-Node[CurrentStatus] = TRANSIENT_ABSENT - - joinTargetNode($primary-index, $primary-index-Target, $primary-index-Node) - - joinTargetNode($transient-column-compute, $transient-column-compute-Target, $transient-column-compute-Node) -- name: all adding indexes reached BACKFILL_ONLY before any of their columns disappear - from: index-Node - kind: Precedence - to: column-Node - query: - - $index[Type] IN ['*scpb.PrimaryIndex', '*scpb.SecondaryIndex'] - - $column[Type] = '*scpb.Column' - - ColumnInIndex($index-column, $index, $table-id, $column-id, $index-id) - - joinOnColumnID($index-column, $column, $table-id, $column-id) - - $index-Target[TargetStatus] IN [PUBLIC, TRANSIENT_ABSENT] - - $index-Node[CurrentStatus] = BACKFILL_ONLY - - $column-Target[TargetStatus] = ABSENT - - $column-Node[CurrentStatus] = WRITE_ONLY - - joinTargetNode($index, $index-Target, $index-Node) - - joinTargetNode($column, $column-Target, $column-Node) -- name: back-reference in parent descriptor is removed before parent descriptor is dropped - from: back-reference-in-parent-descriptor-Node - kind: Precedence - to: parent-descriptor-Node - query: - - $back-reference-in-parent-descriptor[Type] IN ['*scpb.SchemaChild', '*scpb.SchemaParent'] - - $parent-descriptor[Type] IN ['*scpb.AliasType', '*scpb.CompositeType', '*scpb.Database', '*scpb.EnumType', '*scpb.Function', '*scpb.Schema', '*scpb.Sequence', '*scpb.Table', '*scpb.View'] - - joinReferencedDescID($back-reference-in-parent-descriptor, $parent-descriptor, $desc-id) - - toAbsent($back-reference-in-parent-descriptor-Target, $parent-descriptor-Target) - - $back-reference-in-parent-descriptor-Node[CurrentStatus] = ABSENT - - $parent-descriptor-Node[CurrentStatus] = DROPPED - - joinTargetNode($back-reference-in-parent-descriptor, $back-reference-in-parent-descriptor-Target, $back-reference-in-parent-descriptor-Node) - - joinTargetNode($parent-descriptor, $parent-descriptor-Target, $parent-descriptor-Node) -- name: column constraint removed right before column reaches write only - from: column-constraint-Node - kind: Precedence - to: column-Node - query: - - $column-constraint[Type] IN ['*scpb.CheckConstraint', '*scpb.ColumnNotNull', '*scpb.ForeignKeyConstraint', '*scpb.UniqueWithoutIndexConstraint'] - - $column[Type] = '*scpb.Column' - - joinOnColumnID($column-constraint, $column, $table-id, $col-id) - - toAbsent($column-constraint-Target, $column-Target) - - $column-constraint-Node[CurrentStatus] = ABSENT - - $column-Node[CurrentStatus] = WRITE_ONLY - - joinTargetNode($column-constraint, $column-constraint-Target, $column-constraint-Node) - - joinTargetNode($column, $column-Target, $column-Node) -- name: column constraint removed right before column reaches write only - from: column-constraint-Node - kind: Precedence - to: column-Node - query: - - $column-constraint[Type] IN ['*scpb.CheckConstraint', '*scpb.ColumnNotNull', '*scpb.ForeignKeyConstraint', '*scpb.UniqueWithoutIndexConstraint'] - - $column[Type] = '*scpb.Column' - - joinOnColumnID($column-constraint, $column, $table-id, $col-id) - - transient($column-constraint-Target, $column-Target) - - $column-constraint-Node[CurrentStatus] = TRANSIENT_ABSENT - - $column-Node[CurrentStatus] = TRANSIENT_WRITE_ONLY - - joinTargetNode($column-constraint, $column-constraint-Target, $column-constraint-Node) - - joinTargetNode($column, $column-Target, $column-Node) -- name: column constraint removed right before column reaches write only - from: column-constraint-Node - kind: Precedence - to: column-Node - query: - - $column-constraint[Type] IN ['*scpb.CheckConstraint', '*scpb.ColumnNotNull', '*scpb.ForeignKeyConstraint', '*scpb.UniqueWithoutIndexConstraint'] - - $column[Type] = '*scpb.Column' - - joinOnColumnID($column-constraint, $column, $table-id, $col-id) - - $column-constraint-Target[TargetStatus] = TRANSIENT_ABSENT - - $column-constraint-Node[CurrentStatus] = TRANSIENT_ABSENT - - $column-Target[TargetStatus] = ABSENT - - $column-Node[CurrentStatus] = WRITE_ONLY - - joinTargetNode($column-constraint, $column-constraint-Target, $column-constraint-Node) - - joinTargetNode($column, $column-Target, $column-Node) -- name: column constraint removed right before column reaches write only - from: column-constraint-Node - kind: Precedence - to: column-Node - query: - - $column-constraint[Type] IN ['*scpb.CheckConstraint', '*scpb.ColumnNotNull', '*scpb.ForeignKeyConstraint', '*scpb.UniqueWithoutIndexConstraint'] - - $column[Type] = '*scpb.Column' - - joinOnColumnID($column-constraint, $column, $table-id, $col-id) - - $column-constraint-Target[TargetStatus] = ABSENT - - $column-constraint-Node[CurrentStatus] = ABSENT - - $column-Target[TargetStatus] = TRANSIENT_ABSENT - - $column-Node[CurrentStatus] = TRANSIENT_WRITE_ONLY - - joinTargetNode($column-constraint, $column-constraint-Target, $column-constraint-Node) - - joinTargetNode($column, $column-Target, $column-Node) -- name: column dependents exist before column becomes public - from: dependent-Node - kind: Precedence - to: column-Node - query: - - $dependent[Type] IN ['*scpb.ColumnComment', '*scpb.ColumnComputeExpression', '*scpb.ColumnDefaultExpression', '*scpb.ColumnName', '*scpb.ColumnNotNull', '*scpb.ColumnOnUpdateExpression', '*scpb.ColumnType', '*scpb.IndexColumn', '*scpb.SequenceOwner'] - - $column[Type] = '*scpb.Column' - - joinOnColumnID($dependent, $column, $table-id, $col-id) - - ToPublicOrTransient($dependent-Target, $column-Target) - - $dependent-Node[CurrentStatus] = PUBLIC - - $column-Node[CurrentStatus] = PUBLIC - - joinTargetNode($dependent, $dependent-Target, $dependent-Node) - - joinTargetNode($column, $column-Target, $column-Node) -- name: column existence precedes column dependents - from: column-Node - kind: Precedence - to: dependent-Node - query: - - $column[Type] = '*scpb.Column' - - $dependent[Type] IN ['*scpb.ColumnComment', '*scpb.ColumnComputeExpression', '*scpb.ColumnDefaultExpression', '*scpb.ColumnName', '*scpb.ColumnNotNull', '*scpb.ColumnOnUpdateExpression', '*scpb.ColumnType', '*scpb.IndexColumn', '*scpb.SequenceOwner'] - - joinOnColumnID($column, $dependent, $table-id, $col-id) - - ToPublicOrTransient($column-Target, $dependent-Target) - - $column-Node[CurrentStatus] = DELETE_ONLY - - $dependent-Node[CurrentStatus] = PUBLIC - - no column type alteration in progress($table-id, $col-id) - - joinTargetNode($column, $column-Target, $column-Node) - - joinTargetNode($dependent, $dependent-Target, $dependent-Node) -- name: column existence precedes column dependents during an alter column type - from: column-Node - kind: Precedence - to: dependent-Node - query: - - $column[Type] = '*scpb.Column' - - $dependent[Type] IN ['*scpb.ColumnComment', '*scpb.ColumnComputeExpression', '*scpb.ColumnDefaultExpression', '*scpb.ColumnNotNull', '*scpb.ColumnOnUpdateExpression', '*scpb.ColumnType', '*scpb.IndexColumn', '*scpb.SequenceOwner'] - - joinOnColumnID($column, $dependent, $table-id, $col-id) - - ToPublicOrTransient($column-Target, $dependent-Target) - - $column-Node[CurrentStatus] = DELETE_ONLY - - $dependent-Node[CurrentStatus] = PUBLIC - - $column[Type] = '*scpb.Column' - - $compute-expression[Type] = '*scpb.ColumnComputeExpression' - - joinOnColumnID($column, $compute-expression, $table-id, $col-id) - - $compute-expression[Usage] = ALTER_TYPE_USING - - joinTargetNode($column, $column-Target, $column-Node) - - joinTargetNode($compute-expression, $compute-expression-Target, $compute-expression-Node) - - joinTargetNode($column, $column-Target, $column-Node) - - joinTargetNode($dependent, $dependent-Target, $dependent-Node) -- name: column existence precedes index existence - from: column-Node - kind: Precedence - to: index-Node - query: - - $column[Type] = '*scpb.Column' - - $index[Type] IN ['*scpb.PrimaryIndex', '*scpb.SecondaryIndex'] - - joinOnColumnID($column, $index-column, $table-id, $column-id) - - ColumnInIndex($index-column, $index, $table-id, $column-id, $index-id) - - ToPublicOrTransient($column-Target, $index-Target) - - $column-Node[CurrentStatus] = DELETE_ONLY - - $index-Node[CurrentStatus] = BACKFILL_ONLY - - joinTargetNode($column, $column-Target, $column-Node) - - joinTargetNode($index, $index-Target, $index-Node) -- name: column existence precedes temp index existence - from: column-Node - kind: Precedence - to: index-Node - query: - - $column[Type] = '*scpb.Column' - - $index[Type] = '*scpb.TemporaryIndex' - - joinOnColumnID($index-column, $column, $table-id, $column-id) - - ColumnInIndex($index-column, $index, $table-id, $column-id, $index-id) - - ToPublicOrTransient($column-Target, $index-Target) - - $column-Node[CurrentStatus] = DELETE_ONLY - - $index-Node[CurrentStatus] = DELETE_ONLY - - joinTargetNode($column, $column-Target, $column-Node) - - joinTargetNode($index, $index-Target, $index-Node) -- name: column is WRITE_ONLY before temporary index is WRITE_ONLY - from: column-Node - kind: Precedence - to: index-Node - query: - - $column[Type] = '*scpb.Column' - - $index[Type] = '*scpb.TemporaryIndex' - - joinOnColumnID($index-column, $column, $table-id, $column-id) - - ColumnInIndex($index-column, $index, $table-id, $column-id, $index-id) - - ToPublicOrTransient($column-Target, $index-Target) - - $column-Node[CurrentStatus] = WRITE_ONLY - - $index-Node[CurrentStatus] = WRITE_ONLY - - joinTargetNode($column, $column-Target, $column-Node) - - joinTargetNode($index, $index-Target, $index-Node) -- name: column name set right after column existence, except for alter column type - from: column-Node - kind: SameStagePrecedence - to: column-name-or-type-Node - query: - - $column[Type] = '*scpb.Column' - - $column-name-or-type[Type] = '*scpb.ColumnName' - - ToPublicOrTransient($column-Target, $column-name-or-type-Target) - - $column-Node[CurrentStatus] = DELETE_ONLY - - $column-name-or-type-Node[CurrentStatus] = PUBLIC - - joinOnColumnID($column, $column-name-or-type, $table-id, $col-id) - - no column type alteration in progress($table-id, $col-id) - - joinTargetNode($column, $column-Target, $column-Node) - - joinTargetNode($column-name-or-type, $column-name-or-type-Target, $column-name-or-type-Node) -- name: column no longer public before dependents - from: column-Node - kind: Precedence - to: dependent-Node - query: - - $column[Type] = '*scpb.Column' - - $dependent[Type] IN ['*scpb.ColumnComment', '*scpb.ColumnComputeExpression', '*scpb.ColumnDefaultExpression', '*scpb.ColumnName', '*scpb.ColumnOnUpdateExpression', '*scpb.ColumnType', '*scpb.IndexColumn', '*scpb.SequenceOwner'] - - joinOnColumnID($column, $dependent, $table-id, $col-id) - - toAbsent($column-Target, $dependent-Target) - - $column-Node[CurrentStatus] = WRITE_ONLY - - $dependent-Node[CurrentStatus] = ABSENT - - joinTargetNode($column, $column-Target, $column-Node) - - joinTargetNode($dependent, $dependent-Target, $dependent-Node) -- name: column no longer public before dependents - from: column-Node - kind: Precedence - to: dependent-Node - query: - - $column[Type] = '*scpb.Column' - - $dependent[Type] IN ['*scpb.ColumnComment', '*scpb.ColumnComputeExpression', '*scpb.ColumnDefaultExpression', '*scpb.ColumnName', '*scpb.ColumnOnUpdateExpression', '*scpb.ColumnType', '*scpb.IndexColumn', '*scpb.SequenceOwner'] - - joinOnColumnID($column, $dependent, $table-id, $col-id) - - transient($column-Target, $dependent-Target) - - $column-Node[CurrentStatus] = TRANSIENT_WRITE_ONLY - - $dependent-Node[CurrentStatus] = TRANSIENT_ABSENT - - joinTargetNode($column, $column-Target, $column-Node) - - joinTargetNode($dependent, $dependent-Target, $dependent-Node) -- name: column no longer public before dependents - from: column-Node - kind: Precedence - to: dependent-Node - query: - - $column[Type] = '*scpb.Column' - - $dependent[Type] IN ['*scpb.ColumnComment', '*scpb.ColumnComputeExpression', '*scpb.ColumnDefaultExpression', '*scpb.ColumnName', '*scpb.ColumnOnUpdateExpression', '*scpb.ColumnType', '*scpb.IndexColumn', '*scpb.SequenceOwner'] - - joinOnColumnID($column, $dependent, $table-id, $col-id) - - $column-Target[TargetStatus] = TRANSIENT_ABSENT - - $column-Node[CurrentStatus] = TRANSIENT_WRITE_ONLY - - $dependent-Target[TargetStatus] = ABSENT - - $dependent-Node[CurrentStatus] = ABSENT - - joinTargetNode($column, $column-Target, $column-Node) - - joinTargetNode($dependent, $dependent-Target, $dependent-Node) -- name: column no longer public before dependents - from: column-Node - kind: Precedence - to: dependent-Node - query: - - $column[Type] = '*scpb.Column' - - $dependent[Type] IN ['*scpb.ColumnComment', '*scpb.ColumnComputeExpression', '*scpb.ColumnDefaultExpression', '*scpb.ColumnName', '*scpb.ColumnOnUpdateExpression', '*scpb.ColumnType', '*scpb.IndexColumn', '*scpb.SequenceOwner'] - - joinOnColumnID($column, $dependent, $table-id, $col-id) - - $column-Target[TargetStatus] = ABSENT - - $column-Node[CurrentStatus] = WRITE_ONLY - - $dependent-Target[TargetStatus] = TRANSIENT_ABSENT - - $dependent-Node[CurrentStatus] = TRANSIENT_ABSENT - - joinTargetNode($column, $column-Target, $column-Node) - - joinTargetNode($dependent, $dependent-Target, $dependent-Node) -- name: column public before non-index-backed constraint (including hash-sharded) is created - from: column-Node - kind: Precedence - to: constraint-Node - query: - - $column[Type] = '*scpb.Column' - - $constraint[Type] IN ['*scpb.CheckConstraint', '*scpb.CheckConstraintUnvalidated', '*scpb.ColumnNotNull', '*scpb.ForeignKeyConstraint', '*scpb.ForeignKeyConstraintUnvalidated', '*scpb.UniqueWithoutIndexConstraint', '*scpb.UniqueWithoutIndexConstraintUnvalidated'] - - $column[ColumnID] = $columnID - - $constraint[ReferencedColumnIDs] CONTAINS $columnID - - joinOnDescID($column, $constraint, $table-id) - - ToPublicOrTransient($column-Target, $constraint-Target) - - $column-Node[CurrentStatus] = PUBLIC - - $constraint-Node[CurrentStatus] = WRITE_ONLY - - joinTargetNode($column, $column-Target, $column-Node) - - joinTargetNode($constraint, $constraint-Target, $constraint-Node) -- name: 'column type dependents removed right before column type, except if part of a column type alteration ' - from: dependent-Node - kind: SameStagePrecedence - to: column-type-Node - query: - - $dependent[Type] IN ['*scpb.ColumnComputeExpression', '*scpb.ColumnDefaultExpression', '*scpb.ColumnOnUpdateExpression', '*scpb.SequenceOwner'] - - $column-type[Type] = '*scpb.ColumnType' - - joinOnColumnID($dependent, $column-type, $table-id, $col-id) - - no column type alteration in progress($table-id, $col-id) - - toAbsent($dependent-Target, $column-type-Target) - - $dependent-Node[CurrentStatus] = ABSENT - - $column-type-Node[CurrentStatus] = ABSENT - - joinTargetNode($dependent, $dependent-Target, $dependent-Node) - - joinTargetNode($column-type, $column-type-Target, $column-type-Node) -- name: column type is changed to public after doing validation of a transient check constraint - from: transient-check-constraint-Node - kind: SameStagePrecedence - to: column-type-Node - query: - - $transient-check-constraint[Type] = '*scpb.CheckConstraint' - - $column-type[Type] = '*scpb.ColumnType' - - joinOnDescID($transient-check-constraint, $column-type, $table-id) - - $column-type[ColumnID] = $columnID - - $transient-check-constraint[ReferencedColumnIDs] CONTAINS $columnID - - $transient-check-constraint-Target[TargetStatus] = TRANSIENT_ABSENT - - $column-type-Target[TargetStatus] = PUBLIC - - $transient-check-constraint-Node[CurrentStatus] = TRANSIENT_VALIDATED - - $column-type-Node[CurrentStatus] = PUBLIC - - joinTargetNode($transient-check-constraint, $transient-check-constraint-Target, $transient-check-constraint-Node) - - joinTargetNode($column-type, $column-type-Target, $column-type-Node) -- name: column type removed before column family - from: column-type-Node - kind: Precedence - to: column-family-Node - query: - - $column-type[Type] = '*scpb.ColumnType' - - $column-family[Type] = '*scpb.ColumnFamily' - - joinOnColumnFamilyID($column-type, $column-family, $table-id, $family-id) - - toAbsent($column-type-Target, $column-family-Target) - - $column-type-Node[CurrentStatus] = ABSENT - - $column-family-Node[CurrentStatus] = ABSENT - - joinTargetNode($column-type, $column-type-Target, $column-type-Node) - - joinTargetNode($column-family, $column-family-Target, $column-family-Node) -- name: column type removed right before column when not dropping relation - from: column-type-Node - kind: SameStagePrecedence - to: column-Node - query: - - $column-type[Type] = '*scpb.ColumnType' - - descriptorIsNotBeingDropped-25.2($column-type) - - $column[Type] = '*scpb.Column' - - joinOnColumnID($column-type, $column, $table-id, $col-id) - - toAbsent($column-type-Target, $column-Target) - - $column-type-Node[CurrentStatus] = ABSENT - - $column-Node[CurrentStatus] = ABSENT - - joinTargetNode($column-type, $column-type-Target, $column-type-Node) - - joinTargetNode($column, $column-Target, $column-Node) -- name: column type set right after column existence - from: column-Node - kind: SameStagePrecedence - to: column-type-Node - query: - - $column[Type] = '*scpb.Column' - - $column-type[Type] = '*scpb.ColumnType' - - ToPublicOrTransient($column-Target, $column-type-Target) - - $column-Node[CurrentStatus] = DELETE_ONLY - - $column-type-Node[CurrentStatus] = PUBLIC - - joinOnColumnID($column, $column-type, $table-id, $col-id) - - joinTargetNode($column, $column-Target, $column-Node) - - joinTargetNode($column-type, $column-type-Target, $column-type-Node) -- name: column type update is decomposed as a drop then add - from: old-column-type-Node - kind: Precedence - to: new-column-type-Node - query: - - $old-column-type[Type] = '*scpb.ColumnType' - - $new-column-type[Type] = '*scpb.ColumnType' - - joinOnColumnID($old-column-type, $new-column-type, $table-id, $col-id) - - $old-column-type-Target[TargetStatus] = ABSENT - - $old-column-type-Node[CurrentStatus] = PUBLIC - - $new-column-type-Target[TargetStatus] = PUBLIC - - $new-column-type-Node[CurrentStatus] = ABSENT - - joinTargetNode($old-column-type, $old-column-type-Target, $old-column-type-Node) - - joinTargetNode($new-column-type, $new-column-type-Target, $new-column-type-Node) -- name: column writable right before column constraint is enforced. - from: column-Node - kind: SameStagePrecedence - to: column-constraint-Node - query: - - $column[Type] = '*scpb.Column' - - $column-constraint[Type] = '*scpb.ColumnNotNull' - - joinOnColumnID($column, $column-constraint, $table-id, $col-id) - - ToPublicOrTransient($column-Target, $column-constraint-Target) - - $column-Node[CurrentStatus] = WRITE_ONLY - - $column-constraint-Node[CurrentStatus] = WRITE_ONLY - - joinTargetNode($column, $column-Target, $column-Node) - - joinTargetNode($column-constraint, $column-constraint-Target, $column-constraint-Node) -- name: constraint dependent public right before complex constraint - from: dependent-Node - kind: SameStagePrecedence - to: complex-constraint-Node - query: - - $dependent[Type] = '*scpb.ConstraintComment' - - $complex-constraint[Type] IN ['*scpb.CheckConstraint', '*scpb.ColumnNotNull', '*scpb.ForeignKeyConstraint', '*scpb.UniqueWithoutIndexConstraint'] - - joinOnConstraintID($dependent, $complex-constraint, $table-id, $constraint-id) - - ToPublicOrTransient($dependent-Target, $complex-constraint-Target) - - $dependent-Node[CurrentStatus] = PUBLIC - - $complex-constraint-Node[CurrentStatus] = PUBLIC - - joinTargetNode($dependent, $dependent-Target, $dependent-Node) - - joinTargetNode($complex-constraint, $complex-constraint-Target, $complex-constraint-Node) -- name: constraint no longer public before dependents - from: constraint-Node - kind: Precedence - to: dependent-Node - query: - - $constraint[Type] IN ['*scpb.CheckConstraint', '*scpb.ColumnNotNull', '*scpb.ForeignKeyConstraint', '*scpb.UniqueWithoutIndexConstraint'] - - $dependent[Type] = '*scpb.ConstraintComment' - - joinOnConstraintID($constraint, $dependent, $table-id, $constraint-id) - - toAbsent($constraint-Target, $dependent-Target) - - $constraint-Node[CurrentStatus] = VALIDATED - - $dependent-Node[CurrentStatus] = ABSENT - - joinTargetNode($constraint, $constraint-Target, $constraint-Node) - - joinTargetNode($dependent, $dependent-Target, $dependent-Node) -- name: constraint no longer public before dependents - from: constraint-Node - kind: Precedence - to: dependent-Node - query: - - $constraint[Type] IN ['*scpb.CheckConstraint', '*scpb.ColumnNotNull', '*scpb.ForeignKeyConstraint', '*scpb.UniqueWithoutIndexConstraint'] - - $dependent[Type] = '*scpb.ConstraintComment' - - joinOnConstraintID($constraint, $dependent, $table-id, $constraint-id) - - transient($constraint-Target, $dependent-Target) - - $constraint-Node[CurrentStatus] = TRANSIENT_VALIDATED - - $dependent-Node[CurrentStatus] = TRANSIENT_ABSENT - - joinTargetNode($constraint, $constraint-Target, $constraint-Node) - - joinTargetNode($dependent, $dependent-Target, $dependent-Node) -- name: constraint no longer public before dependents - from: constraint-Node - kind: Precedence - to: dependent-Node - query: - - $constraint[Type] IN ['*scpb.CheckConstraint', '*scpb.ColumnNotNull', '*scpb.ForeignKeyConstraint', '*scpb.UniqueWithoutIndexConstraint'] - - $dependent[Type] = '*scpb.ConstraintComment' - - joinOnConstraintID($constraint, $dependent, $table-id, $constraint-id) - - $constraint-Target[TargetStatus] = TRANSIENT_ABSENT - - $constraint-Node[CurrentStatus] = TRANSIENT_VALIDATED - - $dependent-Target[TargetStatus] = ABSENT - - $dependent-Node[CurrentStatus] = ABSENT - - joinTargetNode($constraint, $constraint-Target, $constraint-Node) - - joinTargetNode($dependent, $dependent-Target, $dependent-Node) -- name: constraint no longer public before dependents - from: constraint-Node - kind: Precedence - to: dependent-Node - query: - - $constraint[Type] IN ['*scpb.CheckConstraint', '*scpb.ColumnNotNull', '*scpb.ForeignKeyConstraint', '*scpb.UniqueWithoutIndexConstraint'] - - $dependent[Type] = '*scpb.ConstraintComment' - - joinOnConstraintID($constraint, $dependent, $table-id, $constraint-id) - - $constraint-Target[TargetStatus] = ABSENT - - $constraint-Node[CurrentStatus] = VALIDATED - - $dependent-Target[TargetStatus] = TRANSIENT_ABSENT - - $dependent-Node[CurrentStatus] = TRANSIENT_ABSENT - - joinTargetNode($constraint, $constraint-Target, $constraint-Node) - - joinTargetNode($dependent, $dependent-Target, $dependent-Node) -- name: cross-descriptor constraint is absent before referenced descriptor is dropped - from: cross-desc-constraint-Node - kind: Precedence - to: referenced-descriptor-Node - query: - - $cross-desc-constraint[Type] IN ['*scpb.CheckConstraint', '*scpb.ForeignKeyConstraint', '*scpb.UniqueWithoutIndexConstraint'] - - $referenced-descriptor[Type] IN ['*scpb.AliasType', '*scpb.CompositeType', '*scpb.Database', '*scpb.EnumType', '*scpb.Function', '*scpb.Schema', '*scpb.Sequence', '*scpb.Table', '*scpb.View'] - - joinReferencedDescID($cross-desc-constraint, $referenced-descriptor, $desc-id) - - toAbsent($cross-desc-constraint-Target, $referenced-descriptor-Target) - - $cross-desc-constraint-Node[CurrentStatus] = ABSENT - - $referenced-descriptor-Node[CurrentStatus] = DROPPED - - joinTargetNode($cross-desc-constraint, $cross-desc-constraint-Target, $cross-desc-constraint-Node) - - joinTargetNode($referenced-descriptor, $referenced-descriptor-Target, $referenced-descriptor-Node) -- name: cross-descriptor constraint is absent before referencing descriptor is dropped - from: cross-desc-constraint-Node - kind: Precedence - to: referencing-descriptor-Node - query: - - $cross-desc-constraint[Type] IN ['*scpb.CheckConstraint', '*scpb.ForeignKeyConstraint', '*scpb.UniqueWithoutIndexConstraint'] - - $referencing-descriptor[Type] IN ['*scpb.AliasType', '*scpb.CompositeType', '*scpb.Database', '*scpb.EnumType', '*scpb.Function', '*scpb.Schema', '*scpb.Sequence', '*scpb.Table', '*scpb.View'] - - joinOnDescID($cross-desc-constraint, $referencing-descriptor, $desc-id) - - toAbsent($cross-desc-constraint-Target, $referencing-descriptor-Target) - - $cross-desc-constraint-Node[CurrentStatus] = ABSENT - - $referencing-descriptor-Node[CurrentStatus] = DROPPED - - joinTargetNode($cross-desc-constraint, $cross-desc-constraint-Target, $cross-desc-constraint-Node) - - joinTargetNode($referencing-descriptor, $referencing-descriptor-Target, $referencing-descriptor-Node) -- name: dependent view absent before secondary index - from: view-Node - kind: Precedence - to: index-Node - query: - - $view[Type] = '*scpb.View' - - $index[Type] = '*scpb.SecondaryIndex' - - viewReferencesIndex(*scpb.View, *scpb.SecondaryIndex)($view, $index) - - toAbsent($view-Target, $index-Target) - - $view-Node[CurrentStatus] = ABSENT - - $index-Node[CurrentStatus] = ABSENT - - joinTargetNode($view, $view-Target, $view-Node) - - joinTargetNode($index, $index-Target, $index-Node) -- name: dependent view absent before secondary index - from: view-Node - kind: Precedence - to: index-Node - query: - - $view[Type] = '*scpb.View' - - $index[Type] = '*scpb.SecondaryIndex' - - viewReferencesIndex(*scpb.View, *scpb.SecondaryIndex)($view, $index) - - transient($view-Target, $index-Target) - - $view-Node[CurrentStatus] = TRANSIENT_ABSENT - - $index-Node[CurrentStatus] = TRANSIENT_ABSENT - - joinTargetNode($view, $view-Target, $view-Node) - - joinTargetNode($index, $index-Target, $index-Node) -- name: dependent view absent before secondary index - from: view-Node - kind: Precedence - to: index-Node - query: - - $view[Type] = '*scpb.View' - - $index[Type] = '*scpb.SecondaryIndex' - - viewReferencesIndex(*scpb.View, *scpb.SecondaryIndex)($view, $index) - - $view-Target[TargetStatus] = TRANSIENT_ABSENT - - $view-Node[CurrentStatus] = TRANSIENT_ABSENT - - $index-Target[TargetStatus] = ABSENT - - $index-Node[CurrentStatus] = ABSENT - - joinTargetNode($view, $view-Target, $view-Node) - - joinTargetNode($index, $index-Target, $index-Node) -- name: dependent view absent before secondary index - from: view-Node - kind: Precedence - to: index-Node - query: - - $view[Type] = '*scpb.View' - - $index[Type] = '*scpb.SecondaryIndex' - - viewReferencesIndex(*scpb.View, *scpb.SecondaryIndex)($view, $index) - - $view-Target[TargetStatus] = ABSENT - - $view-Node[CurrentStatus] = ABSENT - - $index-Target[TargetStatus] = TRANSIENT_ABSENT - - $index-Node[CurrentStatus] = TRANSIENT_ABSENT - - joinTargetNode($view, $view-Target, $view-Node) - - joinTargetNode($index, $index-Target, $index-Node) -- name: dependent view no longer public before secondary index - from: view-Node - kind: Precedence - to: index-Node - query: - - $view[Type] = '*scpb.View' - - $index[Type] = '*scpb.SecondaryIndex' - - viewReferencesIndex(*scpb.View, *scpb.SecondaryIndex)($view, $index) - - toAbsent($view-Target, $index-Target) - - $view-Node[CurrentStatus] = DROPPED - - $index-Node[CurrentStatus] = VALIDATED - - joinTargetNode($view, $view-Target, $view-Node) - - joinTargetNode($index, $index-Target, $index-Node) -- name: dependent view no longer public before secondary index - from: view-Node - kind: Precedence - to: index-Node - query: - - $view[Type] = '*scpb.View' - - $index[Type] = '*scpb.SecondaryIndex' - - viewReferencesIndex(*scpb.View, *scpb.SecondaryIndex)($view, $index) - - transient($view-Target, $index-Target) - - $view-Node[CurrentStatus] = TRANSIENT_DROPPED - - $index-Node[CurrentStatus] = TRANSIENT_VALIDATED - - joinTargetNode($view, $view-Target, $view-Node) - - joinTargetNode($index, $index-Target, $index-Node) -- name: dependent view no longer public before secondary index - from: view-Node - kind: Precedence - to: index-Node - query: - - $view[Type] = '*scpb.View' - - $index[Type] = '*scpb.SecondaryIndex' - - viewReferencesIndex(*scpb.View, *scpb.SecondaryIndex)($view, $index) - - $view-Target[TargetStatus] = TRANSIENT_ABSENT - - $view-Node[CurrentStatus] = TRANSIENT_DROPPED - - $index-Target[TargetStatus] = ABSENT - - $index-Node[CurrentStatus] = VALIDATED - - joinTargetNode($view, $view-Target, $view-Node) - - joinTargetNode($index, $index-Target, $index-Node) -- name: dependent view no longer public before secondary index - from: view-Node - kind: Precedence - to: index-Node - query: - - $view[Type] = '*scpb.View' - - $index[Type] = '*scpb.SecondaryIndex' - - viewReferencesIndex(*scpb.View, *scpb.SecondaryIndex)($view, $index) - - $view-Target[TargetStatus] = ABSENT - - $view-Node[CurrentStatus] = DROPPED - - $index-Target[TargetStatus] = TRANSIENT_ABSENT - - $index-Node[CurrentStatus] = TRANSIENT_VALIDATED - - joinTargetNode($view, $view-Target, $view-Node) - - joinTargetNode($index, $index-Target, $index-Node) -- name: dependents added after policy - from: policy-Node - kind: SameStagePrecedence - to: dependent-Node - query: - - $policy[Type] = '*scpb.Policy' - - $dependent[Type] IN ['*scpb.PolicyDeps', '*scpb.PolicyName', '*scpb.PolicyRole', '*scpb.PolicyUsingExpr', '*scpb.PolicyWithCheckExpr'] - - joinOnPolicyID($policy, $dependent, $table-id, $policy-id) - - ToPublicOrTransient($policy-Target, $dependent-Target) - - $policy-Node[CurrentStatus] = PUBLIC - - $dependent-Node[CurrentStatus] = PUBLIC - - joinTargetNode($policy, $policy-Target, $policy-Node) - - joinTargetNode($dependent, $dependent-Target, $dependent-Node) -- name: dependents exist before descriptor becomes public - from: dependent-Node - kind: Precedence - to: relation-Node - query: - - $dependent[Type] IN ['*scpb.CheckConstraint', '*scpb.CheckConstraintUnvalidated', '*scpb.Column', '*scpb.ColumnComment', '*scpb.ColumnComputeExpression', '*scpb.ColumnDefaultExpression', '*scpb.ColumnFamily', '*scpb.ColumnName', '*scpb.ColumnNotNull', '*scpb.ColumnOnUpdateExpression', '*scpb.ColumnType', '*scpb.CompositeTypeAttrName', '*scpb.CompositeTypeAttrType', '*scpb.ConstraintComment', '*scpb.ConstraintWithoutIndexName', '*scpb.DatabaseComment', '*scpb.DatabaseRegionConfig', '*scpb.DatabaseRoleSetting', '*scpb.DatabaseZoneConfig', '*scpb.EnumTypeValue', '*scpb.ForeignKeyConstraint', '*scpb.ForeignKeyConstraintUnvalidated', '*scpb.FunctionBody', '*scpb.FunctionLeakProof', '*scpb.FunctionName', '*scpb.FunctionNullInputBehavior', '*scpb.FunctionSecurity', '*scpb.FunctionVolatility', '*scpb.IndexColumn', '*scpb.IndexComment', '*scpb.IndexName', '*scpb.IndexPartitioning', '*scpb.IndexZoneConfig', '*scpb.LDRJobIDs', '*scpb.NamedRangeZoneConfig', '*scpb.Namespace', '*scpb.Owner', '*scpb.PartitionZoneConfig', '*scpb.Policy', '*scpb.PolicyDeps', '*scpb.PolicyName', '*scpb.PolicyRole', '*scpb.PolicyUsingExpr', '*scpb.PolicyWithCheckExpr', '*scpb.PrimaryIndex', '*scpb.RowLevelSecurityEnabled', '*scpb.RowLevelSecurityForced', '*scpb.RowLevelTTL', '*scpb.SchemaChild', '*scpb.SchemaComment', '*scpb.SchemaParent', '*scpb.SecondaryIndex', '*scpb.SequenceOption', '*scpb.SequenceOwner', '*scpb.TableComment', '*scpb.TableLocalityGlobal', '*scpb.TableLocalityPrimaryRegion', '*scpb.TableLocalityRegionalByRow', '*scpb.TableLocalitySecondaryRegion', '*scpb.TablePartitioning', '*scpb.TableSchemaLocked', '*scpb.TableZoneConfig', '*scpb.TemporaryIndex', '*scpb.Trigger', '*scpb.TriggerDeps', '*scpb.TriggerEnabled', '*scpb.TriggerEvents', '*scpb.TriggerFunctionCall', '*scpb.TriggerName', '*scpb.TriggerTiming', '*scpb.TriggerTransition', '*scpb.TriggerWhen', '*scpb.TypeComment', '*scpb.UniqueWithoutIndexConstraint', '*scpb.UniqueWithoutIndexConstraintUnvalidated', '*scpb.UserPrivileges'] - - $relation[Type] IN ['*scpb.AliasType', '*scpb.CompositeType', '*scpb.Database', '*scpb.EnumType', '*scpb.Function', '*scpb.Schema', '*scpb.Sequence', '*scpb.Table', '*scpb.View'] - - joinOnDescID($dependent, $relation, $relation-id) - - ToPublicOrTransient($dependent-Target, $relation-Target) - - $dependent-Node[CurrentStatus] = PUBLIC - - $relation-Node[CurrentStatus] = PUBLIC - - joinTargetNode($dependent, $dependent-Target, $dependent-Node) - - joinTargetNode($relation, $relation-Target, $relation-Node) -- name: dependents removed before column - from: dependent-Node - kind: Precedence - to: column-Node - query: - - $dependent[Type] IN ['*scpb.ColumnComment', '*scpb.ColumnComputeExpression', '*scpb.ColumnDefaultExpression', '*scpb.ColumnName', '*scpb.ColumnNotNull', '*scpb.ColumnOnUpdateExpression', '*scpb.ColumnType', '*scpb.IndexColumn', '*scpb.SequenceOwner'] - - $column[Type] = '*scpb.Column' - - joinOnColumnID($dependent, $column, $table-id, $col-id) - - toAbsent($dependent-Target, $column-Target) - - $dependent-Node[CurrentStatus] = ABSENT - - $column-Node[CurrentStatus] = ABSENT - - joinTargetNode($dependent, $dependent-Target, $dependent-Node) - - joinTargetNode($column, $column-Target, $column-Node) -- name: dependents removed before column - from: dependent-Node - kind: Precedence - to: column-Node - query: - - $dependent[Type] IN ['*scpb.ColumnComment', '*scpb.ColumnComputeExpression', '*scpb.ColumnDefaultExpression', '*scpb.ColumnName', '*scpb.ColumnNotNull', '*scpb.ColumnOnUpdateExpression', '*scpb.ColumnType', '*scpb.IndexColumn', '*scpb.SequenceOwner'] - - $column[Type] = '*scpb.Column' - - joinOnColumnID($dependent, $column, $table-id, $col-id) - - transient($dependent-Target, $column-Target) - - $dependent-Node[CurrentStatus] = TRANSIENT_ABSENT - - $column-Node[CurrentStatus] = TRANSIENT_ABSENT - - joinTargetNode($dependent, $dependent-Target, $dependent-Node) - - joinTargetNode($column, $column-Target, $column-Node) -- name: dependents removed before column - from: dependent-Node - kind: Precedence - to: column-Node - query: - - $dependent[Type] IN ['*scpb.ColumnComment', '*scpb.ColumnComputeExpression', '*scpb.ColumnDefaultExpression', '*scpb.ColumnName', '*scpb.ColumnNotNull', '*scpb.ColumnOnUpdateExpression', '*scpb.ColumnType', '*scpb.IndexColumn', '*scpb.SequenceOwner'] - - $column[Type] = '*scpb.Column' - - joinOnColumnID($dependent, $column, $table-id, $col-id) - - $dependent-Target[TargetStatus] = TRANSIENT_ABSENT - - $dependent-Node[CurrentStatus] = TRANSIENT_ABSENT - - $column-Target[TargetStatus] = ABSENT - - $column-Node[CurrentStatus] = ABSENT - - joinTargetNode($dependent, $dependent-Target, $dependent-Node) - - joinTargetNode($column, $column-Target, $column-Node) -- name: dependents removed before column - from: dependent-Node - kind: Precedence - to: column-Node - query: - - $dependent[Type] IN ['*scpb.ColumnComment', '*scpb.ColumnComputeExpression', '*scpb.ColumnDefaultExpression', '*scpb.ColumnName', '*scpb.ColumnNotNull', '*scpb.ColumnOnUpdateExpression', '*scpb.ColumnType', '*scpb.IndexColumn', '*scpb.SequenceOwner'] - - $column[Type] = '*scpb.Column' - - joinOnColumnID($dependent, $column, $table-id, $col-id) - - $dependent-Target[TargetStatus] = ABSENT - - $dependent-Node[CurrentStatus] = ABSENT - - $column-Target[TargetStatus] = TRANSIENT_ABSENT - - $column-Node[CurrentStatus] = TRANSIENT_ABSENT - - joinTargetNode($dependent, $dependent-Target, $dependent-Node) - - joinTargetNode($column, $column-Target, $column-Node) -- name: dependents removed before constraint - from: dependents-Node - kind: Precedence - to: constraint-Node - query: - - $dependents[Type] = '*scpb.ConstraintComment' - - $constraint[Type] IN ['*scpb.CheckConstraint', '*scpb.ColumnNotNull', '*scpb.ForeignKeyConstraint', '*scpb.UniqueWithoutIndexConstraint'] - - joinOnConstraintID($dependents, $constraint, $table-id, $constraint-id) - - toAbsent($dependents-Target, $constraint-Target) - - $dependents-Node[CurrentStatus] = ABSENT - - $constraint-Node[CurrentStatus] = ABSENT - - joinTargetNode($dependents, $dependents-Target, $dependents-Node) - - joinTargetNode($constraint, $constraint-Target, $constraint-Node) -- name: dependents removed before constraint - from: dependents-Node - kind: Precedence - to: constraint-Node - query: - - $dependents[Type] = '*scpb.ConstraintComment' - - $constraint[Type] IN ['*scpb.CheckConstraint', '*scpb.ColumnNotNull', '*scpb.ForeignKeyConstraint', '*scpb.UniqueWithoutIndexConstraint'] - - joinOnConstraintID($dependents, $constraint, $table-id, $constraint-id) - - transient($dependents-Target, $constraint-Target) - - $dependents-Node[CurrentStatus] = TRANSIENT_ABSENT - - $constraint-Node[CurrentStatus] = TRANSIENT_ABSENT - - joinTargetNode($dependents, $dependents-Target, $dependents-Node) - - joinTargetNode($constraint, $constraint-Target, $constraint-Node) -- name: dependents removed before constraint - from: dependents-Node - kind: Precedence - to: constraint-Node - query: - - $dependents[Type] = '*scpb.ConstraintComment' - - $constraint[Type] IN ['*scpb.CheckConstraint', '*scpb.ColumnNotNull', '*scpb.ForeignKeyConstraint', '*scpb.UniqueWithoutIndexConstraint'] - - joinOnConstraintID($dependents, $constraint, $table-id, $constraint-id) - - $dependents-Target[TargetStatus] = TRANSIENT_ABSENT - - $dependents-Node[CurrentStatus] = TRANSIENT_ABSENT - - $constraint-Target[TargetStatus] = ABSENT - - $constraint-Node[CurrentStatus] = ABSENT - - joinTargetNode($dependents, $dependents-Target, $dependents-Node) - - joinTargetNode($constraint, $constraint-Target, $constraint-Node) -- name: dependents removed before constraint - from: dependents-Node - kind: Precedence - to: constraint-Node - query: - - $dependents[Type] = '*scpb.ConstraintComment' - - $constraint[Type] IN ['*scpb.CheckConstraint', '*scpb.ColumnNotNull', '*scpb.ForeignKeyConstraint', '*scpb.UniqueWithoutIndexConstraint'] - - joinOnConstraintID($dependents, $constraint, $table-id, $constraint-id) - - $dependents-Target[TargetStatus] = ABSENT - - $dependents-Node[CurrentStatus] = ABSENT - - $constraint-Target[TargetStatus] = TRANSIENT_ABSENT - - $constraint-Node[CurrentStatus] = TRANSIENT_ABSENT - - joinTargetNode($dependents, $dependents-Target, $dependents-Node) - - joinTargetNode($constraint, $constraint-Target, $constraint-Node) -- name: dependents removed before index - from: dependent-Node - kind: Precedence - to: index-Node - query: - - $dependent[Type] IN ['*scpb.IndexColumn', '*scpb.IndexComment', '*scpb.IndexName', '*scpb.IndexPartitioning', '*scpb.IndexZoneConfig', '*scpb.PartitionZoneConfig'] - - $index[Type] IN ['*scpb.PrimaryIndex', '*scpb.SecondaryIndex', '*scpb.TemporaryIndex'] - - joinOnIndexID($dependent, $index, $table-id, $index-id) - - toAbsent($dependent-Target, $index-Target) - - $dependent-Node[CurrentStatus] = ABSENT - - $index-Node[CurrentStatus] = ABSENT - - joinTargetNode($dependent, $dependent-Target, $dependent-Node) - - joinTargetNode($index, $index-Target, $index-Node) -- name: dependents removed before index - from: dependent-Node - kind: Precedence - to: index-Node - query: - - $dependent[Type] IN ['*scpb.IndexColumn', '*scpb.IndexComment', '*scpb.IndexName', '*scpb.IndexPartitioning', '*scpb.IndexZoneConfig', '*scpb.PartitionZoneConfig'] - - $index[Type] IN ['*scpb.PrimaryIndex', '*scpb.SecondaryIndex', '*scpb.TemporaryIndex'] - - joinOnIndexID($dependent, $index, $table-id, $index-id) - - transient($dependent-Target, $index-Target) - - $dependent-Node[CurrentStatus] = TRANSIENT_ABSENT - - $index-Node[CurrentStatus] = TRANSIENT_ABSENT - - joinTargetNode($dependent, $dependent-Target, $dependent-Node) - - joinTargetNode($index, $index-Target, $index-Node) -- name: dependents removed before index - from: dependent-Node - kind: Precedence - to: index-Node - query: - - $dependent[Type] IN ['*scpb.IndexColumn', '*scpb.IndexComment', '*scpb.IndexName', '*scpb.IndexPartitioning', '*scpb.IndexZoneConfig', '*scpb.PartitionZoneConfig'] - - $index[Type] IN ['*scpb.PrimaryIndex', '*scpb.SecondaryIndex', '*scpb.TemporaryIndex'] - - joinOnIndexID($dependent, $index, $table-id, $index-id) - - $dependent-Target[TargetStatus] = TRANSIENT_ABSENT - - $dependent-Node[CurrentStatus] = TRANSIENT_ABSENT - - $index-Target[TargetStatus] = ABSENT - - $index-Node[CurrentStatus] = ABSENT - - joinTargetNode($dependent, $dependent-Target, $dependent-Node) - - joinTargetNode($index, $index-Target, $index-Node) -- name: dependents removed before index - from: dependent-Node - kind: Precedence - to: index-Node - query: - - $dependent[Type] IN ['*scpb.IndexColumn', '*scpb.IndexComment', '*scpb.IndexName', '*scpb.IndexPartitioning', '*scpb.IndexZoneConfig', '*scpb.PartitionZoneConfig'] - - $index[Type] IN ['*scpb.PrimaryIndex', '*scpb.SecondaryIndex', '*scpb.TemporaryIndex'] - - joinOnIndexID($dependent, $index, $table-id, $index-id) - - $dependent-Target[TargetStatus] = ABSENT - - $dependent-Node[CurrentStatus] = ABSENT - - $index-Target[TargetStatus] = TRANSIENT_ABSENT - - $index-Node[CurrentStatus] = TRANSIENT_ABSENT - - joinTargetNode($dependent, $dependent-Target, $dependent-Node) - - joinTargetNode($index, $index-Target, $index-Node) -- name: dependents removed before policy - from: dependent-Node - kind: SameStagePrecedence - to: policy-Node - query: - - $dependent[Type] IN ['*scpb.PolicyDeps', '*scpb.PolicyName', '*scpb.PolicyRole', '*scpb.PolicyUsingExpr', '*scpb.PolicyWithCheckExpr'] - - $policy[Type] = '*scpb.Policy' - - joinOnPolicyID($dependent, $policy, $table-id, $policy-id) - - toAbsent($dependent-Target, $policy-Target) - - $dependent-Node[CurrentStatus] = ABSENT - - $policy-Node[CurrentStatus] = ABSENT - - joinTargetNode($dependent, $dependent-Target, $dependent-Node) - - joinTargetNode($policy, $policy-Target, $policy-Node) -- name: dependents removed before policy - from: dependent-Node - kind: SameStagePrecedence - to: policy-Node - query: - - $dependent[Type] IN ['*scpb.PolicyDeps', '*scpb.PolicyName', '*scpb.PolicyRole', '*scpb.PolicyUsingExpr', '*scpb.PolicyWithCheckExpr'] - - $policy[Type] = '*scpb.Policy' - - joinOnPolicyID($dependent, $policy, $table-id, $policy-id) - - transient($dependent-Target, $policy-Target) - - $dependent-Node[CurrentStatus] = TRANSIENT_ABSENT - - $policy-Node[CurrentStatus] = TRANSIENT_ABSENT - - joinTargetNode($dependent, $dependent-Target, $dependent-Node) - - joinTargetNode($policy, $policy-Target, $policy-Node) -- name: dependents removed before policy - from: dependent-Node - kind: SameStagePrecedence - to: policy-Node - query: - - $dependent[Type] IN ['*scpb.PolicyDeps', '*scpb.PolicyName', '*scpb.PolicyRole', '*scpb.PolicyUsingExpr', '*scpb.PolicyWithCheckExpr'] - - $policy[Type] = '*scpb.Policy' - - joinOnPolicyID($dependent, $policy, $table-id, $policy-id) - - $dependent-Target[TargetStatus] = TRANSIENT_ABSENT - - $dependent-Node[CurrentStatus] = TRANSIENT_ABSENT - - $policy-Target[TargetStatus] = ABSENT - - $policy-Node[CurrentStatus] = ABSENT - - joinTargetNode($dependent, $dependent-Target, $dependent-Node) - - joinTargetNode($policy, $policy-Target, $policy-Node) -- name: dependents removed before policy - from: dependent-Node - kind: SameStagePrecedence - to: policy-Node - query: - - $dependent[Type] IN ['*scpb.PolicyDeps', '*scpb.PolicyName', '*scpb.PolicyRole', '*scpb.PolicyUsingExpr', '*scpb.PolicyWithCheckExpr'] - - $policy[Type] = '*scpb.Policy' - - joinOnPolicyID($dependent, $policy, $table-id, $policy-id) - - $dependent-Target[TargetStatus] = ABSENT - - $dependent-Node[CurrentStatus] = ABSENT - - $policy-Target[TargetStatus] = TRANSIENT_ABSENT - - $policy-Node[CurrentStatus] = TRANSIENT_ABSENT - - joinTargetNode($dependent, $dependent-Target, $dependent-Node) - - joinTargetNode($policy, $policy-Target, $policy-Node) -- name: dependents removed right before simple constraint - from: dependents-Node - kind: SameStagePrecedence - to: constraint-Node - query: - - $dependents[Type] = '*scpb.ConstraintComment' - - $constraint[Type] IN ['*scpb.CheckConstraintUnvalidated', '*scpb.ForeignKeyConstraintUnvalidated', '*scpb.UniqueWithoutIndexConstraintUnvalidated'] - - joinOnConstraintID($dependents, $constraint, $table-id, $constraint-id) - - toAbsent($dependents-Target, $constraint-Target) - - $dependents-Node[CurrentStatus] = ABSENT - - $constraint-Node[CurrentStatus] = ABSENT - - joinTargetNode($dependents, $dependents-Target, $dependents-Node) - - joinTargetNode($constraint, $constraint-Target, $constraint-Node) -- name: dependents removed right before simple constraint - from: dependents-Node - kind: SameStagePrecedence - to: constraint-Node - query: - - $dependents[Type] = '*scpb.ConstraintComment' - - $constraint[Type] IN ['*scpb.CheckConstraintUnvalidated', '*scpb.ForeignKeyConstraintUnvalidated', '*scpb.UniqueWithoutIndexConstraintUnvalidated'] - - joinOnConstraintID($dependents, $constraint, $table-id, $constraint-id) - - transient($dependents-Target, $constraint-Target) - - $dependents-Node[CurrentStatus] = TRANSIENT_ABSENT - - $constraint-Node[CurrentStatus] = TRANSIENT_ABSENT - - joinTargetNode($dependents, $dependents-Target, $dependents-Node) - - joinTargetNode($constraint, $constraint-Target, $constraint-Node) -- name: dependents removed right before simple constraint - from: dependents-Node - kind: SameStagePrecedence - to: constraint-Node - query: - - $dependents[Type] = '*scpb.ConstraintComment' - - $constraint[Type] IN ['*scpb.CheckConstraintUnvalidated', '*scpb.ForeignKeyConstraintUnvalidated', '*scpb.UniqueWithoutIndexConstraintUnvalidated'] - - joinOnConstraintID($dependents, $constraint, $table-id, $constraint-id) - - $dependents-Target[TargetStatus] = TRANSIENT_ABSENT - - $dependents-Node[CurrentStatus] = TRANSIENT_ABSENT - - $constraint-Target[TargetStatus] = ABSENT - - $constraint-Node[CurrentStatus] = ABSENT - - joinTargetNode($dependents, $dependents-Target, $dependents-Node) - - joinTargetNode($constraint, $constraint-Target, $constraint-Node) -- name: dependents removed right before simple constraint - from: dependents-Node - kind: SameStagePrecedence - to: constraint-Node - query: - - $dependents[Type] = '*scpb.ConstraintComment' - - $constraint[Type] IN ['*scpb.CheckConstraintUnvalidated', '*scpb.ForeignKeyConstraintUnvalidated', '*scpb.UniqueWithoutIndexConstraintUnvalidated'] - - joinOnConstraintID($dependents, $constraint, $table-id, $constraint-id) - - $dependents-Target[TargetStatus] = ABSENT - - $dependents-Node[CurrentStatus] = ABSENT - - $constraint-Target[TargetStatus] = TRANSIENT_ABSENT - - $constraint-Node[CurrentStatus] = TRANSIENT_ABSENT - - joinTargetNode($dependents, $dependents-Target, $dependents-Node) - - joinTargetNode($constraint, $constraint-Target, $constraint-Node) -- name: descriptor drop right before removing dependent between types - from: referenced-descriptor-Node - kind: SameStagePrecedence - to: referencing-via-type-Node - query: - - $referenced-descriptor[Type] IN ['*scpb.AliasType', '*scpb.CompositeType', '*scpb.EnumType'] - - $referenced-descriptor[DescID] = $fromDescID - - $referencing-via-type[ReferencedTypeIDs] CONTAINS $fromDescID - - $referencing-via-type[Type] = '*scpb.ColumnType' - - toAbsent($referenced-descriptor-Target, $referencing-via-type-Target) - - $referenced-descriptor-Node[CurrentStatus] = DROPPED - - $referencing-via-type-Node[CurrentStatus] = ABSENT - - joinTargetNode($referenced-descriptor, $referenced-descriptor-Target, $referenced-descriptor-Node) - - joinTargetNode($referencing-via-type, $referencing-via-type-Target, $referencing-via-type-Node) -- name: descriptor drop right before removing dependent with attr ref - from: referenced-descriptor-Node - kind: SameStagePrecedence - to: referencing-via-attr-Node - query: - - $referenced-descriptor[Type] IN ['*scpb.AliasType', '*scpb.CompositeType', '*scpb.Database', '*scpb.EnumType', '*scpb.Function', '*scpb.Schema', '*scpb.Sequence', '*scpb.Table', '*scpb.View'] - - $referencing-via-attr[Type] IN ['*scpb.CheckConstraintUnvalidated', '*scpb.ColumnComment', '*scpb.ColumnComputeExpression', '*scpb.ColumnDefaultExpression', '*scpb.ColumnFamily', '*scpb.ColumnName', '*scpb.ColumnOnUpdateExpression', '*scpb.ColumnType', '*scpb.CompositeTypeAttrName', '*scpb.CompositeTypeAttrType', '*scpb.ConstraintComment', '*scpb.ConstraintWithoutIndexName', '*scpb.DatabaseComment', '*scpb.DatabaseRegionConfig', '*scpb.DatabaseRoleSetting', '*scpb.DatabaseZoneConfig', '*scpb.EnumTypeValue', '*scpb.ForeignKeyConstraintUnvalidated', '*scpb.FunctionBody', '*scpb.FunctionLeakProof', '*scpb.FunctionName', '*scpb.FunctionNullInputBehavior', '*scpb.FunctionSecurity', '*scpb.FunctionVolatility', '*scpb.IndexColumn', '*scpb.IndexComment', '*scpb.IndexName', '*scpb.IndexPartitioning', '*scpb.IndexZoneConfig', '*scpb.LDRJobIDs', '*scpb.NamedRangeZoneConfig', '*scpb.Namespace', '*scpb.Owner', '*scpb.PartitionZoneConfig', '*scpb.Policy', '*scpb.PolicyDeps', '*scpb.PolicyName', '*scpb.PolicyRole', '*scpb.PolicyUsingExpr', '*scpb.PolicyWithCheckExpr', '*scpb.RowLevelSecurityEnabled', '*scpb.RowLevelSecurityForced', '*scpb.RowLevelTTL', '*scpb.SchemaComment', '*scpb.SequenceOption', '*scpb.SequenceOwner', '*scpb.TableComment', '*scpb.TableLocalityGlobal', '*scpb.TableLocalityPrimaryRegion', '*scpb.TableLocalityRegionalByRow', '*scpb.TableLocalitySecondaryRegion', '*scpb.TablePartitioning', '*scpb.TableZoneConfig', '*scpb.Trigger', '*scpb.TriggerDeps', '*scpb.TriggerEnabled', '*scpb.TriggerEvents', '*scpb.TriggerFunctionCall', '*scpb.TriggerName', '*scpb.TriggerTiming', '*scpb.TriggerTransition', '*scpb.TriggerWhen', '*scpb.TypeComment', '*scpb.UniqueWithoutIndexConstraintUnvalidated', '*scpb.UserPrivileges'] - - joinReferencedDescID($referencing-via-attr, $referenced-descriptor, $desc-id) - - toAbsent($referenced-descriptor-Target, $referencing-via-attr-Target) - - $referenced-descriptor-Node[CurrentStatus] = DROPPED - - $referencing-via-attr-Node[CurrentStatus] = ABSENT - - joinTargetNode($referenced-descriptor, $referenced-descriptor-Target, $referenced-descriptor-Node) - - joinTargetNode($referencing-via-attr, $referencing-via-attr-Target, $referencing-via-attr-Node) -- name: descriptor drop right before removing dependent with expr ref to sequence - from: referenced-descriptor-Node - kind: SameStagePrecedence - to: referencing-via-expr-Node - query: - - $referenced-descriptor[Type] = '*scpb.Sequence' - - $referenced-descriptor[DescID] = $seqID - - $referencing-via-expr[ReferencedSequenceIDs] CONTAINS $seqID - - $referencing-via-expr[Type] IN ['*scpb.CheckConstraintUnvalidated', '*scpb.ColumnComputeExpression', '*scpb.ColumnDefaultExpression', '*scpb.ColumnOnUpdateExpression', '*scpb.ColumnType', '*scpb.PolicyUsingExpr', '*scpb.PolicyWithCheckExpr'] - - toAbsent($referenced-descriptor-Target, $referencing-via-expr-Target) - - $referenced-descriptor-Node[CurrentStatus] = DROPPED - - $referencing-via-expr-Node[CurrentStatus] = ABSENT - - joinTargetNode($referenced-descriptor, $referenced-descriptor-Target, $referenced-descriptor-Node) - - joinTargetNode($referencing-via-expr, $referencing-via-expr-Target, $referencing-via-expr-Node) -- name: descriptor drop right before removing dependent with function refs in columns - from: referenced-descriptor-Node - kind: SameStagePrecedence - to: referencing-via-function-Node - query: - - $referenced-descriptor[Type] = '*scpb.Function' - - $referenced-descriptor[DescID] = $fromDescID - - $referencing-via-function[ReferencedFunctionIDs] CONTAINS $fromDescID - - $referencing-via-function[Type] IN ['*scpb.CheckConstraintUnvalidated', '*scpb.ColumnComputeExpression', '*scpb.ColumnDefaultExpression', '*scpb.ColumnOnUpdateExpression', '*scpb.ColumnType', '*scpb.PolicyUsingExpr', '*scpb.PolicyWithCheckExpr'] - - toAbsent($referenced-descriptor-Target, $referencing-via-function-Target) - - $referenced-descriptor-Node[CurrentStatus] = DROPPED - - $referencing-via-function-Node[CurrentStatus] = ABSENT - - joinTargetNode($referenced-descriptor, $referenced-descriptor-Target, $referenced-descriptor-Node) - - joinTargetNode($referencing-via-function, $referencing-via-function-Target, $referencing-via-function-Node) -- name: descriptor drop right before removing dependent with type refs in expressions - from: referenced-descriptor-Node - kind: SameStagePrecedence - to: referencing-via-type-Node - query: - - $referenced-descriptor[Type] IN ['*scpb.AliasType', '*scpb.CompositeType', '*scpb.EnumType'] - - $referenced-descriptor[DescID] = $fromDescID - - $referencing-via-type[ReferencedTypeIDs] CONTAINS $fromDescID - - descriptorIsNotBeingDropped-25.2($referencing-via-type) - - $referencing-via-type[Type] IN ['*scpb.CheckConstraintUnvalidated', '*scpb.ColumnComputeExpression', '*scpb.ColumnDefaultExpression', '*scpb.ColumnOnUpdateExpression', '*scpb.ColumnType', '*scpb.PolicyUsingExpr', '*scpb.PolicyWithCheckExpr'] - - toAbsent($referenced-descriptor-Target, $referencing-via-type-Target) - - $referenced-descriptor-Node[CurrentStatus] = DROPPED - - $referencing-via-type-Node[CurrentStatus] = ABSENT - - joinTargetNode($referenced-descriptor, $referenced-descriptor-Target, $referenced-descriptor-Node) - - joinTargetNode($referencing-via-type, $referencing-via-type-Target, $referencing-via-type-Node) -- name: descriptor dropped before dependent element removal - from: descriptor-Node - kind: Precedence - to: dependent-Node - query: - - $descriptor[Type] IN ['*scpb.AliasType', '*scpb.CompositeType', '*scpb.Database', '*scpb.EnumType', '*scpb.Function', '*scpb.Schema', '*scpb.Sequence', '*scpb.Table', '*scpb.View'] - - $dependent[Type] IN ['*scpb.CheckConstraintUnvalidated', '*scpb.ColumnComment', '*scpb.ColumnComputeExpression', '*scpb.ColumnDefaultExpression', '*scpb.ColumnFamily', '*scpb.ColumnName', '*scpb.ColumnOnUpdateExpression', '*scpb.ColumnType', '*scpb.CompositeTypeAttrName', '*scpb.CompositeTypeAttrType', '*scpb.DatabaseComment', '*scpb.DatabaseRegionConfig', '*scpb.DatabaseRoleSetting', '*scpb.DatabaseZoneConfig', '*scpb.EnumTypeValue', '*scpb.ForeignKeyConstraintUnvalidated', '*scpb.FunctionBody', '*scpb.FunctionLeakProof', '*scpb.FunctionName', '*scpb.FunctionNullInputBehavior', '*scpb.FunctionSecurity', '*scpb.FunctionVolatility', '*scpb.IndexColumn', '*scpb.IndexComment', '*scpb.IndexName', '*scpb.IndexPartitioning', '*scpb.IndexZoneConfig', '*scpb.LDRJobIDs', '*scpb.NamedRangeZoneConfig', '*scpb.Namespace', '*scpb.Owner', '*scpb.PartitionZoneConfig', '*scpb.Policy', '*scpb.PolicyDeps', '*scpb.PolicyName', '*scpb.PolicyRole', '*scpb.PolicyUsingExpr', '*scpb.PolicyWithCheckExpr', '*scpb.RowLevelSecurityEnabled', '*scpb.RowLevelSecurityForced', '*scpb.RowLevelTTL', '*scpb.SchemaChild', '*scpb.SchemaComment', '*scpb.SchemaParent', '*scpb.SequenceOption', '*scpb.SequenceOwner', '*scpb.TableComment', '*scpb.TableLocalityGlobal', '*scpb.TableLocalityPrimaryRegion', '*scpb.TableLocalityRegionalByRow', '*scpb.TableLocalitySecondaryRegion', '*scpb.TablePartitioning', '*scpb.TableZoneConfig', '*scpb.Trigger', '*scpb.TriggerDeps', '*scpb.TriggerEnabled', '*scpb.TriggerEvents', '*scpb.TriggerFunctionCall', '*scpb.TriggerName', '*scpb.TriggerTiming', '*scpb.TriggerTransition', '*scpb.TriggerWhen', '*scpb.TypeComment', '*scpb.UniqueWithoutIndexConstraintUnvalidated', '*scpb.UserPrivileges'] - - joinOnDescID($descriptor, $dependent, $desc-id) - - toAbsent($descriptor-Target, $dependent-Target) - - $descriptor-Node[CurrentStatus] = DROPPED - - $dependent-Node[CurrentStatus] = ABSENT - - joinTargetNode($descriptor, $descriptor-Target, $descriptor-Node) - - joinTargetNode($dependent, $dependent-Target, $dependent-Node) -- name: descriptor dropped in transaction before removal - from: dropped-Node - kind: PreviousTransactionPrecedence - to: absent-Node - query: - - $dropped[Type] IN ['*scpb.AliasType', '*scpb.CompositeType', '*scpb.Database', '*scpb.EnumType', '*scpb.Function', '*scpb.Schema', '*scpb.Sequence', '*scpb.Table', '*scpb.View'] - - $dropped[DescID] = $_ - - $dropped[Self] = $absent - - toAbsent($dropped-Target, $absent-Target) - - $dropped-Node[CurrentStatus] = DROPPED - - $absent-Node[CurrentStatus] = ABSENT - - joinTargetNode($dropped, $dropped-Target, $dropped-Node) - - joinTargetNode($absent, $absent-Target, $absent-Node) -- name: descriptor dropped right before removing back-reference in its parent descriptor - from: descriptor-Node - kind: SameStagePrecedence - to: back-reference-in-parent-descriptor-Node - query: - - $descriptor[Type] IN ['*scpb.AliasType', '*scpb.CompositeType', '*scpb.Database', '*scpb.EnumType', '*scpb.Function', '*scpb.Schema', '*scpb.Sequence', '*scpb.Table', '*scpb.View'] - - $back-reference-in-parent-descriptor[Type] IN ['*scpb.SchemaChild', '*scpb.SchemaParent'] - - joinOnDescID($descriptor, $back-reference-in-parent-descriptor, $desc-id) - - toAbsent($descriptor-Target, $back-reference-in-parent-descriptor-Target) - - $descriptor-Node[CurrentStatus] = DROPPED - - $back-reference-in-parent-descriptor-Node[CurrentStatus] = ABSENT - - joinTargetNode($descriptor, $descriptor-Target, $descriptor-Node) - - joinTargetNode($back-reference-in-parent-descriptor, $back-reference-in-parent-descriptor-Target, $back-reference-in-parent-descriptor-Node) -- name: descriptor existence precedes dependents - from: relation-Node - kind: Precedence - to: dependent-Node - query: - - $relation[Type] IN ['*scpb.AliasType', '*scpb.CompositeType', '*scpb.Database', '*scpb.EnumType', '*scpb.Function', '*scpb.Schema', '*scpb.Sequence', '*scpb.Table', '*scpb.View'] - - $dependent[Type] IN ['*scpb.CheckConstraint', '*scpb.CheckConstraintUnvalidated', '*scpb.Column', '*scpb.ColumnComment', '*scpb.ColumnComputeExpression', '*scpb.ColumnDefaultExpression', '*scpb.ColumnFamily', '*scpb.ColumnName', '*scpb.ColumnNotNull', '*scpb.ColumnOnUpdateExpression', '*scpb.ColumnType', '*scpb.CompositeTypeAttrName', '*scpb.CompositeTypeAttrType', '*scpb.ConstraintComment', '*scpb.ConstraintWithoutIndexName', '*scpb.DatabaseComment', '*scpb.DatabaseData', '*scpb.DatabaseRegionConfig', '*scpb.DatabaseRoleSetting', '*scpb.DatabaseZoneConfig', '*scpb.EnumTypeValue', '*scpb.ForeignKeyConstraint', '*scpb.ForeignKeyConstraintUnvalidated', '*scpb.FunctionBody', '*scpb.FunctionLeakProof', '*scpb.FunctionName', '*scpb.FunctionNullInputBehavior', '*scpb.FunctionSecurity', '*scpb.FunctionVolatility', '*scpb.IndexColumn', '*scpb.IndexComment', '*scpb.IndexData', '*scpb.IndexName', '*scpb.IndexPartitioning', '*scpb.IndexZoneConfig', '*scpb.LDRJobIDs', '*scpb.NamedRangeZoneConfig', '*scpb.Namespace', '*scpb.Owner', '*scpb.PartitionZoneConfig', '*scpb.Policy', '*scpb.PolicyDeps', '*scpb.PolicyName', '*scpb.PolicyRole', '*scpb.PolicyUsingExpr', '*scpb.PolicyWithCheckExpr', '*scpb.PrimaryIndex', '*scpb.RowLevelSecurityEnabled', '*scpb.RowLevelSecurityForced', '*scpb.RowLevelTTL', '*scpb.SchemaChild', '*scpb.SchemaComment', '*scpb.SchemaParent', '*scpb.SecondaryIndex', '*scpb.SequenceOption', '*scpb.SequenceOwner', '*scpb.TableComment', '*scpb.TableData', '*scpb.TableLocalityGlobal', '*scpb.TableLocalityPrimaryRegion', '*scpb.TableLocalityRegionalByRow', '*scpb.TableLocalitySecondaryRegion', '*scpb.TablePartitioning', '*scpb.TableSchemaLocked', '*scpb.TableZoneConfig', '*scpb.TemporaryIndex', '*scpb.Trigger', '*scpb.TriggerDeps', '*scpb.TriggerEnabled', '*scpb.TriggerEvents', '*scpb.TriggerFunctionCall', '*scpb.TriggerName', '*scpb.TriggerTiming', '*scpb.TriggerTransition', '*scpb.TriggerWhen', '*scpb.TypeComment', '*scpb.UniqueWithoutIndexConstraint', '*scpb.UniqueWithoutIndexConstraintUnvalidated', '*scpb.UserPrivileges'] - - joinOnDescID($relation, $dependent, $relation-id) - - ToPublicOrTransient($relation-Target, $dependent-Target) - - $relation-Node[CurrentStatus] = DESCRIPTOR_ADDED - - $dependent-Node[CurrentStatus] = PUBLIC - - joinTargetNode($relation, $relation-Target, $relation-Node) - - joinTargetNode($dependent, $dependent-Target, $dependent-Node) -- name: descriptor removed right before garbage collection - from: database-Node - kind: SameStagePrecedence - to: data-Node - query: - - $database[Type] IN ['*scpb.AliasType', '*scpb.CompositeType', '*scpb.Database', '*scpb.EnumType', '*scpb.Function', '*scpb.Schema', '*scpb.Sequence', '*scpb.Table', '*scpb.View'] - - $data[Type] = '*scpb.DatabaseData' - - joinOnDescID($database, $data, $db-id) - - toAbsent($database-Target, $data-Target) - - $database-Node[CurrentStatus] = ABSENT - - $data-Node[CurrentStatus] = DROPPED - - joinTargetNode($database, $database-Target, $database-Node) - - joinTargetNode($data, $data-Target, $data-Node) -- name: during a column type alterations, column type dependents removed before column type - from: dependent-Node - kind: Precedence - to: column-type-Node - query: - - $dependent[Type] IN ['*scpb.ColumnComputeExpression', '*scpb.ColumnDefaultExpression', '*scpb.ColumnOnUpdateExpression', '*scpb.SequenceOwner'] - - $column-type[Type] = '*scpb.ColumnType' - - joinOnColumnID($dependent, $column-type, $table-id, $col-id) - - $column[Type] = '*scpb.Column' - - $compute-expression[Type] = '*scpb.ColumnComputeExpression' - - joinOnColumnID($column, $compute-expression, $table-id, $col-id) - - $compute-expression[Usage] = ALTER_TYPE_USING - - joinTargetNode($column, $column-Target, $column-Node) - - joinTargetNode($compute-expression, $compute-expression-Target, $compute-expression-Node) - - toAbsent($dependent-Target, $column-type-Target) - - $dependent-Node[CurrentStatus] = ABSENT - - $column-type-Node[CurrentStatus] = ABSENT - - joinTargetNode($dependent, $dependent-Target, $dependent-Node) - - joinTargetNode($column-type, $column-type-Target, $column-type-Node) -- name: during alter column type, column names for old and new columns are swapped in the same stage - from: old-column-name-Node - kind: SameStagePrecedence - to: new-column-name-Node - query: - - $old-column-name[Type] = '*scpb.ColumnName' - - $new-column-name[Type] = '*scpb.ColumnName' - - $old-column-name-Target[TargetStatus] = ABSENT - - $old-column-name-Node[CurrentStatus] = ABSENT - - $new-column-name-Target[TargetStatus] = PUBLIC - - $new-column-name-Node[CurrentStatus] = PUBLIC - - joinOnDescID($old-column-name, $new-column-name, $table-id) - - $new-column-name[ColumnID] = $new-col-id - - $column[Type] = '*scpb.Column' - - $compute-expression[Type] = '*scpb.ColumnComputeExpression' - - joinOnColumnID($column, $compute-expression, $table-id, $new-col-id) - - $compute-expression[Usage] = ALTER_TYPE_USING - - joinTargetNode($column, $column-Target, $column-Node) - - joinTargetNode($compute-expression, $compute-expression-Target, $compute-expression-Node) - - joinTargetNode($old-column-name, $old-column-name-Target, $old-column-name-Node) - - joinTargetNode($new-column-name, $new-column-name-Target, $new-column-name-Node) -- name: ensure columns are in increasing order - from: later-column-Node - kind: Precedence - to: earlier-column-Node - query: - - $later-column[Type] = '*scpb.Column' - - joinTargetNode($later-column, $later-column-Target, $later-column-Node) - - $earlier-column[Type] = '*scpb.Column' - - joinOnDescID($later-column, $earlier-column, $table-id) - - ToPublicOrTransient($later-column-Target, $earlier-column-Target) - - $status IN [WRITE_ONLY, PUBLIC] - - $later-column-Node[CurrentStatus] = $status - - $earlier-column-Node[CurrentStatus] = $status - - SmallerColumnIDFirst(*scpb.Column, *scpb.Column)($later-column, $earlier-column) - - joinTargetNode($later-column, $later-column-Target, $later-column-Node) - - joinTargetNode($earlier-column, $earlier-column-Target, $earlier-column-Node) -- name: ensure database zone configs are in increasing seqNum order - from: later-seqNum-Node - kind: Precedence - to: earlier-seqNum-Node - query: - - $later-seqNum[Type] = '*scpb.DatabaseZoneConfig' - - joinTargetNode($later-seqNum, $later-seqNum-Target, $later-seqNum-Node) - - $earlier-seqNum[Type] = '*scpb.DatabaseZoneConfig' - - joinOnDescID($later-seqNum, $earlier-seqNum, $seqnum) - - ToPublicOrTransient($later-seqNum-Target, $earlier-seqNum-Target) - - $later-seqNum-Node[CurrentStatus] = $status - - $earlier-seqNum-Node[CurrentStatus] = $status - - SmallerSeqNumFirst(*scpb.DatabaseZoneConfig, *scpb.DatabaseZoneConfig)($later-seqNum, $earlier-seqNum) - - joinTargetNode($later-seqNum, $later-seqNum-Target, $later-seqNum-Node) - - joinTargetNode($earlier-seqNum, $earlier-seqNum-Target, $earlier-seqNum-Node) -- name: ensure index columns are in increasing order - from: later-column-Node - kind: Precedence - to: earlier-column-Node - query: - - $later-column[Type] = '*scpb.IndexColumn' - - joinTargetNode($later-column, $later-column-Target, $later-column-Node) - - $earlier-column[Type] = '*scpb.IndexColumn' - - joinOnIndexID($later-column, $earlier-column, $table-id, $index-id) - - ToPublicOrTransient($later-column-Target, $earlier-column-Target) - - ToPublicOrTransient($later-column-Target, $earlier-column-Target) - - $later-column-Node[CurrentStatus] = PUBLIC - - $earlier-column-Node[CurrentStatus] = PUBLIC - - SmallerColumnIDFirst(*scpb.IndexColumn, *scpb.IndexColumn)($later-column, $earlier-column) - - joinTargetNode($later-column, $later-column-Target, $later-column-Node) - - joinTargetNode($earlier-column, $earlier-column-Target, $earlier-column-Node) -- name: ensure index zone configs are in increasing seqNum order - from: later-seqNum-Node - kind: Precedence - to: earlier-seqNum-Node - query: - - $later-seqNum[Type] = '*scpb.IndexZoneConfig' - - joinTargetNode($later-seqNum, $later-seqNum-Target, $later-seqNum-Node) - - $earlier-seqNum[Type] = '*scpb.IndexZoneConfig' - - joinOnDescID($later-seqNum, $earlier-seqNum, $seqnum) - - joinOnIndexID($later-seqNum, $earlier-seqNum, $table-id, $index-id) - - ToPublicOrTransient($later-seqNum-Target, $earlier-seqNum-Target) - - $later-seqNum-Node[CurrentStatus] = $status - - $earlier-seqNum-Node[CurrentStatus] = $status - - SmallerSeqNumFirst(*scpb.IndexZoneConfig, *scpb.IndexZoneConfig)($later-seqNum, $earlier-seqNum) - - joinTargetNode($later-seqNum, $later-seqNum-Target, $later-seqNum-Node) - - joinTargetNode($earlier-seqNum, $earlier-seqNum-Target, $earlier-seqNum-Node) -- name: ensure named range zone configs are in increasing seqNum order - from: later-seqNum-Node - kind: Precedence - to: earlier-seqNum-Node - query: - - $later-seqNum[Type] = '*scpb.NamedRangeZoneConfig' - - joinTargetNode($later-seqNum, $later-seqNum-Target, $later-seqNum-Node) - - $earlier-seqNum[Type] = '*scpb.NamedRangeZoneConfig' - - joinOnDescID($later-seqNum, $earlier-seqNum, $seqnum) - - ToPublicOrTransient($later-seqNum-Target, $earlier-seqNum-Target) - - $later-seqNum-Node[CurrentStatus] = $status - - $earlier-seqNum-Node[CurrentStatus] = $status - - SmallerSeqNumFirst(*scpb.NamedRangeZoneConfig, *scpb.NamedRangeZoneConfig)($later-seqNum, $earlier-seqNum) - - joinTargetNode($later-seqNum, $later-seqNum-Target, $later-seqNum-Node) - - joinTargetNode($earlier-seqNum, $earlier-seqNum-Target, $earlier-seqNum-Node) -- name: ensure partition zone configs are in increasing seqNum order - from: later-seqNum-Node - kind: Precedence - to: earlier-seqNum-Node - query: - - $later-seqNum[Type] = '*scpb.PartitionZoneConfig' - - joinTargetNode($later-seqNum, $later-seqNum-Target, $later-seqNum-Node) - - $earlier-seqNum[Type] = '*scpb.PartitionZoneConfig' - - joinOnDescID($later-seqNum, $earlier-seqNum, $seqnum) - - joinOnIndexID($later-seqNum, $earlier-seqNum, $table-id, $index-id) - - joinOnPartitionName($later-seqNum, $earlier-seqNum, $table-id, $index-id, $partition-name) - - ToPublicOrTransient($later-seqNum-Target, $earlier-seqNum-Target) - - $later-seqNum-Node[CurrentStatus] = $status - - $earlier-seqNum-Node[CurrentStatus] = $status - - SmallerSeqNumFirst(*scpb.PartitionZoneConfig, *scpb.PartitionZoneConfig)($later-seqNum, $earlier-seqNum) - - joinTargetNode($later-seqNum, $later-seqNum-Target, $later-seqNum-Node) - - joinTargetNode($earlier-seqNum, $earlier-seqNum-Target, $earlier-seqNum-Node) -- name: ensure table zone configs are in increasing seqNum order - from: later-seqNum-Node - kind: Precedence - to: earlier-seqNum-Node - query: - - $later-seqNum[Type] = '*scpb.TableZoneConfig' - - joinTargetNode($later-seqNum, $later-seqNum-Target, $later-seqNum-Node) - - $earlier-seqNum[Type] = '*scpb.TableZoneConfig' - - joinOnDescID($later-seqNum, $earlier-seqNum, $seqnum) - - ToPublicOrTransient($later-seqNum-Target, $earlier-seqNum-Target) - - $later-seqNum-Node[CurrentStatus] = $status - - $earlier-seqNum-Node[CurrentStatus] = $status - - SmallerSeqNumFirst(*scpb.TableZoneConfig, *scpb.TableZoneConfig)($later-seqNum, $earlier-seqNum) - - joinTargetNode($later-seqNum, $later-seqNum-Target, $later-seqNum-Node) - - joinTargetNode($earlier-seqNum, $earlier-seqNum-Target, $earlier-seqNum-Node) -- name: function name should be set before parent ids - from: function-name-Node - kind: Precedence - to: function-parent-Node - query: - - $function-name[Type] = '*scpb.FunctionName' - - $function-parent[Type] = '*scpb.SchemaChild' - - joinOnDescID($function-name, $function-parent, $function-id) - - ToPublicOrTransient($function-name-Target, $function-parent-Target) - - $function-name-Node[CurrentStatus] = PUBLIC - - $function-parent-Node[CurrentStatus] = PUBLIC - - joinTargetNode($function-name, $function-name-Target, $function-name-Node) - - joinTargetNode($function-parent, $function-parent-Target, $function-parent-Node) -- name: handle default column expression swaps - from: old-column-expression-Node - kind: Precedence - to: new-column-expression-Node - query: - - $old-column-expression[Type] IN ['*scpb.ColumnDefaultExpression', '*scpb.ColumnOnUpdateExpression'] - - $new-column-expression[Type] IN ['*scpb.ColumnDefaultExpression', '*scpb.ColumnOnUpdateExpression'] - - $old-column-expression[Type] = $same-type - - $new-column-expression[Type] = $same-type - - joinOnColumnID($old-column-expression, $new-column-expression, $table-id, $col-id) - - $old-column-expression-Target[TargetStatus] = ABSENT - - $old-column-expression-Node[CurrentStatus] = ABSENT - - $new-column-expression-Target[TargetStatus] = PUBLIC - - $new-column-expression-Node[CurrentStatus] = PUBLIC - - joinTargetNode($old-column-expression, $old-column-expression-Target, $old-column-expression-Node) - - joinTargetNode($new-column-expression, $new-column-expression-Target, $new-column-expression-Node) -- name: index data exists as soon as index accepts backfills - from: index-name-Node - kind: SameStagePrecedence - to: index-Node - query: - - $index-name[Type] IN ['*scpb.PrimaryIndex', '*scpb.SecondaryIndex'] - - $index[Type] = '*scpb.IndexData' - - joinOnIndexID($index-name, $index, $table-id, $index-id) - - ToPublicOrTransient($index-name-Target, $index-Target) - - $index-name-Node[CurrentStatus] = BACKFILL_ONLY - - $index-Node[CurrentStatus] = PUBLIC - - joinTargetNode($index-name, $index-name-Target, $index-name-Node) - - joinTargetNode($index, $index-Target, $index-Node) -- name: index dependents exist before index becomes public - from: dependent-Node - kind: Precedence - to: index-Node - query: - - $dependent[Type] IN ['*scpb.IndexColumn', '*scpb.IndexComment', '*scpb.IndexName', '*scpb.IndexPartitioning', '*scpb.IndexZoneConfig', '*scpb.PartitionZoneConfig'] - - $index[Type] IN ['*scpb.PrimaryIndex', '*scpb.SecondaryIndex', '*scpb.TemporaryIndex'] - - joinOnIndexID($dependent, $index, $table-id, $index-id) - - ToPublicOrTransient($dependent-Target, $index-Target) - - $dependent-Node[CurrentStatus] = PUBLIC - - $index-Node[CurrentStatus] = PUBLIC - - joinTargetNode($dependent, $dependent-Target, $dependent-Node) - - joinTargetNode($index, $index-Target, $index-Node) -- name: index drop mutation visible before cleaning up index columns - from: index-Node - kind: Precedence - to: dependent-Node - query: - - $index[Type] IN ['*scpb.PrimaryIndex', '*scpb.SecondaryIndex', '*scpb.TemporaryIndex'] - - $dependent[Type] = '*scpb.IndexColumn' - - joinOnIndexID($index, $dependent, $table-id, $index-id) - - toAbsent($index-Target, $dependent-Target) - - $index-Node[CurrentStatus] = DELETE_ONLY - - $dependent-Node[CurrentStatus] = ABSENT - - joinTargetNode($index, $index-Target, $index-Node) - - joinTargetNode($dependent, $dependent-Target, $dependent-Node) -- name: index drop mutation visible before cleaning up index columns - from: index-Node - kind: Precedence - to: dependent-Node - query: - - $index[Type] IN ['*scpb.PrimaryIndex', '*scpb.SecondaryIndex', '*scpb.TemporaryIndex'] - - $dependent[Type] = '*scpb.IndexColumn' - - joinOnIndexID($index, $dependent, $table-id, $index-id) - - transient($index-Target, $dependent-Target) - - $index-Node[CurrentStatus] = TRANSIENT_DELETE_ONLY - - $dependent-Node[CurrentStatus] = TRANSIENT_ABSENT - - joinTargetNode($index, $index-Target, $index-Node) - - joinTargetNode($dependent, $dependent-Target, $dependent-Node) -- name: index drop mutation visible before cleaning up index columns - from: index-Node - kind: Precedence - to: dependent-Node - query: - - $index[Type] IN ['*scpb.PrimaryIndex', '*scpb.SecondaryIndex', '*scpb.TemporaryIndex'] - - $dependent[Type] = '*scpb.IndexColumn' - - joinOnIndexID($index, $dependent, $table-id, $index-id) - - $index-Target[TargetStatus] = TRANSIENT_ABSENT - - $index-Node[CurrentStatus] = TRANSIENT_DELETE_ONLY - - $dependent-Target[TargetStatus] = ABSENT - - $dependent-Node[CurrentStatus] = ABSENT - - joinTargetNode($index, $index-Target, $index-Node) - - joinTargetNode($dependent, $dependent-Target, $dependent-Node) -- name: index drop mutation visible before cleaning up index columns - from: index-Node - kind: Precedence - to: dependent-Node - query: - - $index[Type] IN ['*scpb.PrimaryIndex', '*scpb.SecondaryIndex', '*scpb.TemporaryIndex'] - - $dependent[Type] = '*scpb.IndexColumn' - - joinOnIndexID($index, $dependent, $table-id, $index-id) - - $index-Target[TargetStatus] = ABSENT - - $index-Node[CurrentStatus] = DELETE_ONLY - - $dependent-Target[TargetStatus] = TRANSIENT_ABSENT - - $dependent-Node[CurrentStatus] = TRANSIENT_ABSENT - - joinTargetNode($index, $index-Target, $index-Node) - - joinTargetNode($dependent, $dependent-Target, $dependent-Node) -- name: index existence precedes index dependents - from: index-Node - kind: Precedence - to: dependent-Node - query: - - $index[Type] IN ['*scpb.PrimaryIndex', '*scpb.SecondaryIndex'] - - $dependent[Type] IN ['*scpb.IndexColumn', '*scpb.IndexComment', '*scpb.IndexName', '*scpb.IndexPartitioning', '*scpb.IndexZoneConfig', '*scpb.PartitionZoneConfig'] - - joinOnIndexID($index, $dependent, $table-id, $index-id) - - ToPublicOrTransient($index-Target, $dependent-Target) - - $index-Node[CurrentStatus] = BACKFILL_ONLY - - $dependent-Node[CurrentStatus] = PUBLIC - - joinTargetNode($index, $index-Target, $index-Node) - - joinTargetNode($dependent, $dependent-Target, $dependent-Node) -- name: index is MERGED before its temp index starts to disappear - from: index-Node - kind: Precedence - to: temp-Node - query: - - $index[Type] IN ['*scpb.PrimaryIndex', '*scpb.SecondaryIndex'] - - $temp[Type] = '*scpb.TemporaryIndex' - - joinOnDescID($index, $temp, $table-id) - - $index[TemporaryIndexID] = $temp-index-id - - $temp[IndexID] = $temp-index-id - - $index-Target[TargetStatus] IN [PUBLIC, TRANSIENT_ABSENT] - - $index-Node[CurrentStatus] = MERGED - - $temp-Target[TargetStatus] = TRANSIENT_ABSENT - - $temp-Node[CurrentStatus] = TRANSIENT_DELETE_ONLY - - joinTargetNode($index, $index-Target, $index-Node) - - joinTargetNode($temp, $temp-Target, $temp-Node) -- name: index is ready to be validated before we validate constraint on it - from: index-Node - kind: Precedence - to: constraint-Node - query: - - $index[Type] = '*scpb.PrimaryIndex' - - $constraint[Type] IN ['*scpb.CheckConstraint', '*scpb.ColumnNotNull', '*scpb.ForeignKeyConstraint', '*scpb.UniqueWithoutIndexConstraint'] - - joinOnDescID($index, $constraint, $table-id) - - $index[IndexID] = $index-id-for-validation - - $constraint[IndexID] = $index-id-for-validation - - ToPublicOrTransient($index-Target, $constraint-Target) - - $index-Node[CurrentStatus] = VALIDATED - - $constraint-Node[CurrentStatus] = VALIDATED - - joinTargetNode($index, $index-Target, $index-Node) - - joinTargetNode($constraint, $constraint-Target, $constraint-Node) -- name: index no longer public before dependents, excluding columns - from: index-Node - kind: Precedence - to: dependent-Node - query: - - $index[Type] IN ['*scpb.PrimaryIndex', '*scpb.SecondaryIndex', '*scpb.TemporaryIndex'] - - $dependent[Type] IN ['*scpb.IndexComment', '*scpb.IndexName', '*scpb.IndexPartitioning', '*scpb.IndexZoneConfig', '*scpb.PartitionZoneConfig'] - - joinOnIndexID($index, $dependent, $table-id, $index-id) - - toAbsent($index-Target, $dependent-Target) - - $index-Node[CurrentStatus] = VALIDATED - - $dependent-Node[CurrentStatus] = ABSENT - - joinTargetNode($index, $index-Target, $index-Node) - - joinTargetNode($dependent, $dependent-Target, $dependent-Node) -- name: index no longer public before dependents, excluding columns - from: index-Node - kind: Precedence - to: dependent-Node - query: - - $index[Type] IN ['*scpb.PrimaryIndex', '*scpb.SecondaryIndex', '*scpb.TemporaryIndex'] - - $dependent[Type] IN ['*scpb.IndexComment', '*scpb.IndexName', '*scpb.IndexPartitioning', '*scpb.IndexZoneConfig', '*scpb.PartitionZoneConfig'] - - joinOnIndexID($index, $dependent, $table-id, $index-id) - - transient($index-Target, $dependent-Target) - - $index-Node[CurrentStatus] = TRANSIENT_VALIDATED - - $dependent-Node[CurrentStatus] = TRANSIENT_ABSENT - - joinTargetNode($index, $index-Target, $index-Node) - - joinTargetNode($dependent, $dependent-Target, $dependent-Node) -- name: index no longer public before dependents, excluding columns - from: index-Node - kind: Precedence - to: dependent-Node - query: - - $index[Type] IN ['*scpb.PrimaryIndex', '*scpb.SecondaryIndex', '*scpb.TemporaryIndex'] - - $dependent[Type] IN ['*scpb.IndexComment', '*scpb.IndexName', '*scpb.IndexPartitioning', '*scpb.IndexZoneConfig', '*scpb.PartitionZoneConfig'] - - joinOnIndexID($index, $dependent, $table-id, $index-id) - - $index-Target[TargetStatus] = TRANSIENT_ABSENT - - $index-Node[CurrentStatus] = TRANSIENT_VALIDATED - - $dependent-Target[TargetStatus] = ABSENT - - $dependent-Node[CurrentStatus] = ABSENT - - joinTargetNode($index, $index-Target, $index-Node) - - joinTargetNode($dependent, $dependent-Target, $dependent-Node) -- name: index no longer public before dependents, excluding columns - from: index-Node - kind: Precedence - to: dependent-Node - query: - - $index[Type] IN ['*scpb.PrimaryIndex', '*scpb.SecondaryIndex', '*scpb.TemporaryIndex'] - - $dependent[Type] IN ['*scpb.IndexComment', '*scpb.IndexName', '*scpb.IndexPartitioning', '*scpb.IndexZoneConfig', '*scpb.PartitionZoneConfig'] - - joinOnIndexID($index, $dependent, $table-id, $index-id) - - $index-Target[TargetStatus] = ABSENT - - $index-Node[CurrentStatus] = VALIDATED - - $dependent-Target[TargetStatus] = TRANSIENT_ABSENT - - $dependent-Node[CurrentStatus] = TRANSIENT_ABSENT - - joinTargetNode($index, $index-Target, $index-Node) - - joinTargetNode($dependent, $dependent-Target, $dependent-Node) -- name: index no longer public before index name - from: index-Node - kind: Precedence - to: name-Node - query: - - $index[Type] = '*scpb.SecondaryIndex' - - $name[Type] = '*scpb.IndexName' - - joinOnIndexID($index, $name, $table-id, $index-id) - - toAbsent($index-Target, $name-Target) - - $index-Node[CurrentStatus] = DELETE_ONLY - - $name-Node[CurrentStatus] = ABSENT - - joinTargetNode($index, $index-Target, $index-Node) - - joinTargetNode($name, $name-Target, $name-Node) -- name: index no longer public before index name - from: index-Node - kind: Precedence - to: name-Node - query: - - $index[Type] = '*scpb.SecondaryIndex' - - $name[Type] = '*scpb.IndexName' - - joinOnIndexID($index, $name, $table-id, $index-id) - - transient($index-Target, $name-Target) - - $index-Node[CurrentStatus] = TRANSIENT_DELETE_ONLY - - $name-Node[CurrentStatus] = TRANSIENT_ABSENT - - joinTargetNode($index, $index-Target, $index-Node) - - joinTargetNode($name, $name-Target, $name-Node) -- name: index no longer public before index name - from: index-Node - kind: Precedence - to: name-Node - query: - - $index[Type] = '*scpb.SecondaryIndex' - - $name[Type] = '*scpb.IndexName' - - joinOnIndexID($index, $name, $table-id, $index-id) - - $index-Target[TargetStatus] = TRANSIENT_ABSENT - - $index-Node[CurrentStatus] = TRANSIENT_DELETE_ONLY - - $name-Target[TargetStatus] = ABSENT - - $name-Node[CurrentStatus] = ABSENT - - joinTargetNode($index, $index-Target, $index-Node) - - joinTargetNode($name, $name-Target, $name-Node) -- name: index no longer public before index name - from: index-Node - kind: Precedence - to: name-Node - query: - - $index[Type] = '*scpb.SecondaryIndex' - - $name[Type] = '*scpb.IndexName' - - joinOnIndexID($index, $name, $table-id, $index-id) - - $index-Target[TargetStatus] = ABSENT - - $index-Node[CurrentStatus] = DELETE_ONLY - - $name-Target[TargetStatus] = TRANSIENT_ABSENT - - $name-Node[CurrentStatus] = TRANSIENT_ABSENT - - joinTargetNode($index, $index-Target, $index-Node) - - joinTargetNode($name, $name-Target, $name-Node) -- name: index removed before garbage collection - from: index-Node - kind: Precedence - to: index-data-Node - query: - - $index[Type] IN ['*scpb.PrimaryIndex', '*scpb.SecondaryIndex', '*scpb.TemporaryIndex'] - - $index-data[Type] = '*scpb.IndexData' - - joinOnIndexID($index, $index-data, $table-id, $index-id) - - toAbsent($index-Target, $index-data-Target) - - $index-Node[CurrentStatus] = ABSENT - - $index-data-Node[CurrentStatus] = DROPPED - - joinTargetNode($index, $index-Target, $index-Node) - - joinTargetNode($index-data, $index-data-Target, $index-data-Node) -- name: index removed before garbage collection - from: index-Node - kind: Precedence - to: index-data-Node - query: - - $index[Type] IN ['*scpb.PrimaryIndex', '*scpb.SecondaryIndex', '*scpb.TemporaryIndex'] - - $index-data[Type] = '*scpb.IndexData' - - joinOnIndexID($index, $index-data, $table-id, $index-id) - - transient($index-Target, $index-data-Target) - - $index-Node[CurrentStatus] = TRANSIENT_ABSENT - - $index-data-Node[CurrentStatus] = TRANSIENT_DROPPED - - joinTargetNode($index, $index-Target, $index-Node) - - joinTargetNode($index-data, $index-data-Target, $index-data-Node) -- name: index removed before garbage collection - from: index-Node - kind: Precedence - to: index-data-Node - query: - - $index[Type] IN ['*scpb.PrimaryIndex', '*scpb.SecondaryIndex', '*scpb.TemporaryIndex'] - - $index-data[Type] = '*scpb.IndexData' - - joinOnIndexID($index, $index-data, $table-id, $index-id) - - $index-Target[TargetStatus] = TRANSIENT_ABSENT - - $index-Node[CurrentStatus] = TRANSIENT_ABSENT - - $index-data-Target[TargetStatus] = ABSENT - - $index-data-Node[CurrentStatus] = DROPPED - - joinTargetNode($index, $index-Target, $index-Node) - - joinTargetNode($index-data, $index-data-Target, $index-data-Node) -- name: index removed before garbage collection - from: index-Node - kind: Precedence - to: index-data-Node - query: - - $index[Type] IN ['*scpb.PrimaryIndex', '*scpb.SecondaryIndex', '*scpb.TemporaryIndex'] - - $index-data[Type] = '*scpb.IndexData' - - joinOnIndexID($index, $index-data, $table-id, $index-id) - - $index-Target[TargetStatus] = ABSENT - - $index-Node[CurrentStatus] = ABSENT - - $index-data-Target[TargetStatus] = TRANSIENT_ABSENT - - $index-data-Node[CurrentStatus] = TRANSIENT_DROPPED - - joinTargetNode($index, $index-Target, $index-Node) - - joinTargetNode($index-data, $index-data-Target, $index-data-Node) -- name: index-column added to index before index is backfilled - from: index-column-Node - kind: Precedence - to: index-Node - query: - - $index-column[Type] = '*scpb.IndexColumn' - - $index[Type] IN ['*scpb.PrimaryIndex', '*scpb.SecondaryIndex'] - - joinOnIndexID($index-column, $index, $table-id, $index-id) - - ToPublicOrTransient($index-column-Target, $index-Target) - - $index-column-Node[CurrentStatus] = PUBLIC - - $index-Node[CurrentStatus] = BACKFILLED - - joinTargetNode($index-column, $index-column-Target, $index-column-Node) - - joinTargetNode($index, $index-Target, $index-Node) -- name: index-column added to index before temp index receives writes - from: index-column-Node - kind: Precedence - to: index-Node - query: - - $index-column[Type] = '*scpb.IndexColumn' - - $index[Type] = '*scpb.TemporaryIndex' - - joinOnIndexID($index-column, $index, $table-id, $index-id) - - transient($index-column-Target, $index-Target) - - $index-column-Node[CurrentStatus] = PUBLIC - - $index-Node[CurrentStatus] = WRITE_ONLY - - joinTargetNode($index-column, $index-column-Target, $index-column-Node) - - joinTargetNode($index, $index-Target, $index-Node) -- name: indexes containing column reach absent before column - from: index-Node - kind: Precedence - to: column-Node - query: - - $index[Type] IN ['*scpb.PrimaryIndex', '*scpb.SecondaryIndex'] - - $column[Type] = '*scpb.Column' - - ColumnInIndex($index-column, $index, $table-id, $column-id, $index-id) - - joinOnColumnID($index-column, $column, $table-id, $column-id) - - descriptorIsNotBeingDropped-25.2($index-column) - - toAbsent($index-Target, $column-Target) - - $index-Node[CurrentStatus] = ABSENT - - $column-Node[CurrentStatus] = ABSENT - - joinTargetNode($index, $index-Target, $index-Node) - - joinTargetNode($column, $column-Target, $column-Node) -- name: indexes containing column reach absent before column - from: index-Node - kind: Precedence - to: column-Node - query: - - $index[Type] IN ['*scpb.PrimaryIndex', '*scpb.SecondaryIndex'] - - $column[Type] = '*scpb.Column' - - ColumnInIndex($index-column, $index, $table-id, $column-id, $index-id) - - joinOnColumnID($index-column, $column, $table-id, $column-id) - - descriptorIsNotBeingDropped-25.2($index-column) - - transient($index-Target, $column-Target) - - $index-Node[CurrentStatus] = TRANSIENT_ABSENT - - $column-Node[CurrentStatus] = TRANSIENT_ABSENT - - joinTargetNode($index, $index-Target, $index-Node) - - joinTargetNode($column, $column-Target, $column-Node) -- name: indexes containing column reach absent before column - from: index-Node - kind: Precedence - to: column-Node - query: - - $index[Type] IN ['*scpb.PrimaryIndex', '*scpb.SecondaryIndex'] - - $column[Type] = '*scpb.Column' - - ColumnInIndex($index-column, $index, $table-id, $column-id, $index-id) - - joinOnColumnID($index-column, $column, $table-id, $column-id) - - descriptorIsNotBeingDropped-25.2($index-column) - - $index-Target[TargetStatus] = TRANSIENT_ABSENT - - $index-Node[CurrentStatus] = TRANSIENT_ABSENT - - $column-Target[TargetStatus] = ABSENT - - $column-Node[CurrentStatus] = ABSENT - - joinTargetNode($index, $index-Target, $index-Node) - - joinTargetNode($column, $column-Target, $column-Node) -- name: indexes containing column reach absent before column - from: index-Node - kind: Precedence - to: column-Node - query: - - $index[Type] IN ['*scpb.PrimaryIndex', '*scpb.SecondaryIndex'] - - $column[Type] = '*scpb.Column' - - ColumnInIndex($index-column, $index, $table-id, $column-id, $index-id) - - joinOnColumnID($index-column, $column, $table-id, $column-id) - - descriptorIsNotBeingDropped-25.2($index-column) - - $index-Target[TargetStatus] = ABSENT - - $index-Node[CurrentStatus] = ABSENT - - $column-Target[TargetStatus] = TRANSIENT_ABSENT - - $column-Node[CurrentStatus] = TRANSIENT_ABSENT - - joinTargetNode($index, $index-Target, $index-Node) - - joinTargetNode($column, $column-Target, $column-Node) -- name: namespace exist before schema parent - from: dependent-Node - kind: Precedence - to: relation-Node - query: - - $dependent[Type] = '*scpb.Namespace' - - $relation[Type] = '*scpb.SchemaParent' - - joinOnDescID($dependent, $relation, $schema-id) - - ToPublicOrTransient($dependent-Target, $relation-Target) - - $dependent-Node[CurrentStatus] = PUBLIC - - $relation-Node[CurrentStatus] = PUBLIC - - joinTargetNode($dependent, $dependent-Target, $dependent-Node) - - joinTargetNode($relation, $relation-Target, $relation-Node) -- name: non-data dependents removed before descriptor - from: dependent-Node - kind: Precedence - to: descriptor-Node - query: - - $dependent[Type] IN ['*scpb.CheckConstraint', '*scpb.CheckConstraintUnvalidated', '*scpb.Column', '*scpb.ColumnComment', '*scpb.ColumnComputeExpression', '*scpb.ColumnDefaultExpression', '*scpb.ColumnFamily', '*scpb.ColumnName', '*scpb.ColumnNotNull', '*scpb.ColumnOnUpdateExpression', '*scpb.ColumnType', '*scpb.CompositeTypeAttrName', '*scpb.CompositeTypeAttrType', '*scpb.ConstraintComment', '*scpb.ConstraintWithoutIndexName', '*scpb.DatabaseComment', '*scpb.DatabaseRegionConfig', '*scpb.DatabaseRoleSetting', '*scpb.DatabaseZoneConfig', '*scpb.EnumTypeValue', '*scpb.ForeignKeyConstraint', '*scpb.ForeignKeyConstraintUnvalidated', '*scpb.FunctionBody', '*scpb.FunctionLeakProof', '*scpb.FunctionName', '*scpb.FunctionNullInputBehavior', '*scpb.FunctionSecurity', '*scpb.FunctionVolatility', '*scpb.IndexColumn', '*scpb.IndexComment', '*scpb.IndexName', '*scpb.IndexPartitioning', '*scpb.IndexZoneConfig', '*scpb.LDRJobIDs', '*scpb.NamedRangeZoneConfig', '*scpb.Namespace', '*scpb.Owner', '*scpb.PartitionZoneConfig', '*scpb.Policy', '*scpb.PolicyDeps', '*scpb.PolicyName', '*scpb.PolicyRole', '*scpb.PolicyUsingExpr', '*scpb.PolicyWithCheckExpr', '*scpb.PrimaryIndex', '*scpb.RowLevelSecurityEnabled', '*scpb.RowLevelSecurityForced', '*scpb.RowLevelTTL', '*scpb.SchemaChild', '*scpb.SchemaComment', '*scpb.SchemaParent', '*scpb.SecondaryIndex', '*scpb.SequenceOption', '*scpb.SequenceOwner', '*scpb.TableComment', '*scpb.TableLocalityGlobal', '*scpb.TableLocalityPrimaryRegion', '*scpb.TableLocalityRegionalByRow', '*scpb.TableLocalitySecondaryRegion', '*scpb.TablePartitioning', '*scpb.TableSchemaLocked', '*scpb.TableZoneConfig', '*scpb.TemporaryIndex', '*scpb.Trigger', '*scpb.TriggerDeps', '*scpb.TriggerEnabled', '*scpb.TriggerEvents', '*scpb.TriggerFunctionCall', '*scpb.TriggerName', '*scpb.TriggerTiming', '*scpb.TriggerTransition', '*scpb.TriggerWhen', '*scpb.TypeComment', '*scpb.UniqueWithoutIndexConstraint', '*scpb.UniqueWithoutIndexConstraintUnvalidated', '*scpb.UserPrivileges'] - - $descriptor[Type] IN ['*scpb.AliasType', '*scpb.CompositeType', '*scpb.Database', '*scpb.EnumType', '*scpb.Function', '*scpb.Schema', '*scpb.Sequence', '*scpb.Table', '*scpb.View'] - - joinOnDescID($dependent, $descriptor, $desc-id) - - toAbsent($dependent-Target, $descriptor-Target) - - $dependent-Node[CurrentStatus] = ABSENT - - $descriptor-Node[CurrentStatus] = ABSENT - - joinTargetNode($dependent, $dependent-Target, $dependent-Node) - - joinTargetNode($descriptor, $descriptor-Target, $descriptor-Node) -- name: old index absent before new index public when swapping with transient - from: old-primary-index-Node - kind: Precedence - to: new-primary-index-Node - query: - - $old-primary-index[Type] = '*scpb.PrimaryIndex' - - $transient-primary-index[Type] = '*scpb.PrimaryIndex' - - $new-primary-index[Type] = '*scpb.PrimaryIndex' - - joinOnDescID($old-primary-index, $transient-primary-index, $table-id) - - $old-primary-index[IndexID] = $old-index-id - - $transient-primary-index[SourceIndexID] = $old-index-id - - joinOnDescID($transient-primary-index, $new-primary-index, $table-id) - - $transient-primary-index[IndexID] = $transient-index-id - - $new-primary-index[SourceIndexID] = $transient-index-id - - $old-primary-index-Target[TargetStatus] = ABSENT - - $old-primary-index-Node[CurrentStatus] = ABSENT - - $new-primary-index-Target[TargetStatus] = PUBLIC - - $new-primary-index-Node[CurrentStatus] = PUBLIC - - joinTargetNode($old-primary-index, $old-primary-index-Target, $old-primary-index-Node) - - joinTargetNode($new-primary-index, $new-primary-index-Target, $new-primary-index-Node) -- name: primary index named right before index becomes public - from: index-name-Node - kind: SameStagePrecedence - to: index-Node - query: - - $index-name[Type] = '*scpb.IndexName' - - $index[Type] = '*scpb.PrimaryIndex' - - joinOnIndexID($index-name, $index, $table-id, $index-id) - - ToPublicOrTransient($index-name-Target, $index-Target) - - $index-name-Node[CurrentStatus] = PUBLIC - - $index-Node[CurrentStatus] = PUBLIC - - joinTargetNode($index-name, $index-name-Target, $index-name-Node) - - joinTargetNode($index, $index-Target, $index-Node) -- name: primary index swap - from: old-index-Node - kind: SameStagePrecedence - to: new-index-Node - query: - - $old-index[Type] = '*scpb.PrimaryIndex' - - $new-index[Type] = '*scpb.PrimaryIndex' - - joinOnDescID($old-index, $new-index, $table-id) - - $old-index[IndexID] = $old-index-id - - $new-index[SourceIndexID] = $old-index-id - - $old-index-Target[TargetStatus] = ABSENT - - $old-index-Node[CurrentStatus] = VALIDATED - - $new-index-Target[TargetStatus] IN [PUBLIC, TRANSIENT_ABSENT] - - $new-index-Node[CurrentStatus] = PUBLIC - - joinTargetNode($old-index, $old-index-Target, $old-index-Node) - - joinTargetNode($new-index, $new-index-Target, $new-index-Node) -- name: primary index swap - from: old-index-Node - kind: SameStagePrecedence - to: new-index-Node - query: - - $old-index[Type] = '*scpb.PrimaryIndex' - - $new-index[Type] = '*scpb.PrimaryIndex' - - joinOnDescID($old-index, $new-index, $table-id) - - $old-index[IndexID] = $old-index-id - - $new-index[SourceIndexID] = $old-index-id - - $old-index-Target[TargetStatus] = TRANSIENT_ABSENT - - $old-index-Node[CurrentStatus] = TRANSIENT_VALIDATED - - $new-index-Target[TargetStatus] IN [PUBLIC, TRANSIENT_ABSENT] - - $new-index-Node[CurrentStatus] = PUBLIC - - joinTargetNode($old-index, $old-index-Target, $old-index-Node) - - joinTargetNode($new-index, $new-index-Target, $new-index-Node) -- name: primary index swap - from: new-index-Node - kind: SameStagePrecedence - to: old-index-Node - query: - - $new-index[Type] = '*scpb.PrimaryIndex' - - $old-index[Type] = '*scpb.PrimaryIndex' - - joinOnDescID($new-index, $old-index, $table-id) - - $new-index[SourceIndexID] = $old-index-id - - $old-index[IndexID] = $old-index-id - - $new-index-Target[TargetStatus] = ABSENT - - $new-index-Node[CurrentStatus] = VALIDATED - - $old-index-Target[TargetStatus] = PUBLIC - - $old-index-Node[CurrentStatus] = PUBLIC - - joinTargetNode($new-index, $new-index-Target, $new-index-Node) - - joinTargetNode($old-index, $old-index-Target, $old-index-Node) -- name: primary index with new columns should exist before temp indexes - from: primary-index-Node - kind: Precedence - to: temp-index-Node - query: - - $primary-index[Type] = '*scpb.PrimaryIndex' - - $temp-index[Type] = '*scpb.TemporaryIndex' - - joinOnDescID($primary-index, $temp-index, $table-id) - - $primary-index[IndexID] = $primary-index-id - - $temp-index[SourceIndexID] = $primary-index-id - - ToPublicOrTransient($primary-index-Target, $temp-index-Target) - - $primary-index-Node[CurrentStatus] = VALIDATED - - $temp-index-Node[CurrentStatus] = DELETE_ONLY - - joinTargetNode($primary-index, $primary-index-Target, $primary-index-Node) - - joinTargetNode($temp-index, $temp-index-Target, $temp-index-Node) -- name: primary index with new columns should validated before secondary indexes - from: primary-index-Node - kind: Precedence - to: secondary-index-Node - query: - - $primary-index[Type] = '*scpb.PrimaryIndex' - - $secondary-index[Type] = '*scpb.SecondaryIndex' - - joinOnDescID($primary-index, $secondary-index, $table-id) - - $primary-index[IndexID] = $primary-index-id - - $secondary-index[SourceIndexID] = $primary-index-id - - ToPublicOrTransient($primary-index-Target, $secondary-index-Target) - - $primary-index-Node[CurrentStatus] = VALIDATED - - $secondary-index-Node[CurrentStatus] = BACKFILL_ONLY - - joinTargetNode($primary-index, $primary-index-Target, $primary-index-Node) - - joinTargetNode($secondary-index, $secondary-index-Target, $secondary-index-Node) -- name: relation dropped before dependent column - from: descriptor-Node - kind: Precedence - to: column-Node - query: - - $descriptor[Type] IN ['*scpb.Table', '*scpb.View', '*scpb.Sequence'] - - $column[Type] = '*scpb.Column' - - joinOnDescID($descriptor, $column, $desc-id) - - toAbsent($descriptor-Target, $column-Target) - - $descriptor-Node[CurrentStatus] = DROPPED - - $column-Node[CurrentStatus] = WRITE_ONLY - - joinTargetNode($descriptor, $descriptor-Target, $descriptor-Node) - - joinTargetNode($column, $column-Target, $column-Node) -- name: relation dropped before dependent constraint - from: descriptor-Node - kind: Precedence - to: constraint-Node - query: - - $descriptor[Type] = '*scpb.Table' - - $constraint[Type] = '*scpb.ColumnNotNull' - - joinOnDescID($descriptor, $constraint, $desc-id) - - toAbsent($descriptor-Target, $constraint-Target) - - $descriptor-Node[CurrentStatus] = DROPPED - - $constraint-Node[CurrentStatus] = VALIDATED - - joinTargetNode($descriptor, $descriptor-Target, $descriptor-Node) - - joinTargetNode($constraint, $constraint-Target, $constraint-Node) -- name: relation dropped before dependent index - from: descriptor-Node - kind: Precedence - to: index-Node - query: - - $descriptor[Type] IN ['*scpb.Table', '*scpb.View'] - - $index[Type] IN ['*scpb.PrimaryIndex', '*scpb.SecondaryIndex', '*scpb.TemporaryIndex'] - - joinOnDescID($descriptor, $index, $desc-id) - - toAbsent($descriptor-Target, $index-Target) - - $descriptor-Node[CurrentStatus] = DROPPED - - $index-Node[CurrentStatus] = VALIDATED - - joinTargetNode($descriptor, $descriptor-Target, $descriptor-Node) - - joinTargetNode($index, $index-Target, $index-Node) -- name: remove columns from index right before removing index - from: index-column-Node - kind: Precedence - to: index-Node - query: - - $index-column[Type] = '*scpb.IndexColumn' - - $index[Type] IN ['*scpb.PrimaryIndex', '*scpb.SecondaryIndex', '*scpb.TemporaryIndex'] - - joinOnIndexID($index-column, $index, $table-id, $index-id) - - toAbsent($index-column-Target, $index-Target) - - $index-column-Node[CurrentStatus] = DELETE_ONLY - - $index-Node[CurrentStatus] = ABSENT - - joinTargetNode($index-column, $index-column-Target, $index-column-Node) - - joinTargetNode($index, $index-Target, $index-Node) -- name: remove columns from index right before removing index - from: index-column-Node - kind: Precedence - to: index-Node - query: - - $index-column[Type] = '*scpb.IndexColumn' - - $index[Type] IN ['*scpb.PrimaryIndex', '*scpb.SecondaryIndex', '*scpb.TemporaryIndex'] - - joinOnIndexID($index-column, $index, $table-id, $index-id) - - transient($index-column-Target, $index-Target) - - $index-column-Node[CurrentStatus] = TRANSIENT_DELETE_ONLY - - $index-Node[CurrentStatus] = TRANSIENT_ABSENT - - joinTargetNode($index-column, $index-column-Target, $index-column-Node) - - joinTargetNode($index, $index-Target, $index-Node) -- name: remove columns from index right before removing index - from: index-column-Node - kind: Precedence - to: index-Node - query: - - $index-column[Type] = '*scpb.IndexColumn' - - $index[Type] IN ['*scpb.PrimaryIndex', '*scpb.SecondaryIndex', '*scpb.TemporaryIndex'] - - joinOnIndexID($index-column, $index, $table-id, $index-id) - - $index-column-Target[TargetStatus] = TRANSIENT_ABSENT - - $index-column-Node[CurrentStatus] = TRANSIENT_DELETE_ONLY - - $index-Target[TargetStatus] = ABSENT - - $index-Node[CurrentStatus] = ABSENT - - joinTargetNode($index-column, $index-column-Target, $index-column-Node) - - joinTargetNode($index, $index-Target, $index-Node) -- name: remove columns from index right before removing index - from: index-column-Node - kind: Precedence - to: index-Node - query: - - $index-column[Type] = '*scpb.IndexColumn' - - $index[Type] IN ['*scpb.PrimaryIndex', '*scpb.SecondaryIndex', '*scpb.TemporaryIndex'] - - joinOnIndexID($index-column, $index, $table-id, $index-id) - - $index-column-Target[TargetStatus] = ABSENT - - $index-column-Node[CurrentStatus] = DELETE_ONLY - - $index-Target[TargetStatus] = TRANSIENT_ABSENT - - $index-Node[CurrentStatus] = TRANSIENT_ABSENT - - joinTargetNode($index-column, $index-column-Target, $index-column-Node) - - joinTargetNode($index, $index-Target, $index-Node) -- name: replacement secondary index should be validated before the old one becomes invisible - from: new-index-Node - kind: Precedence - to: old-index-Node - query: - - $old-index[Type] = '*scpb.SecondaryIndex' - - $new-index[Type] = '*scpb.SecondaryIndex' - - $old-index-Target[TargetStatus] = ABSENT - - $new-index-Target[TargetStatus] IN [PUBLIC, TRANSIENT_ABSENT] - - joinOnDescID($old-index, $new-index, $table-id) - - $new-index[IndexID] = $index-id - - $old-index[IndexID] = $old-index-id - - $new-index[RecreateSourceIndexID] = $old-index-id - - joinTargetNode($old-index, $old-index-Target, $old-index-Node) - - joinTargetNode($new-index, $new-index-Target, $new-index-Node) - - $new-index-Node[CurrentStatus] = PUBLIC - - $old-index-Node[CurrentStatus] = VALIDATED - - joinTargetNode($new-index, $new-index-Target, $new-index-Node) - - joinTargetNode($old-index, $old-index-Target, $old-index-Node) -- name: schedule all GC jobs for a descriptor in the same stage - from: data-a-Node - kind: SameStagePrecedence - to: data-b-Node - query: - - $data-a[Type] IN ['*scpb.DatabaseData', '*scpb.IndexData', '*scpb.TableData'] - - $data-b[Type] IN ['*scpb.DatabaseData', '*scpb.IndexData', '*scpb.TableData'] - - joinOnDescID($data-a, $data-b, $desc-id) - - SmallerIDsFirst(scpb.Element, scpb.Element)($data-a, $data-b) - - toAbsent($data-a-Target, $data-b-Target) - - $data-a-Node[CurrentStatus] = DROPPED - - $data-b-Node[CurrentStatus] = DROPPED - - joinTargetNode($data-a, $data-a-Target, $data-a-Node) - - joinTargetNode($data-b, $data-b-Target, $data-b-Node) -- name: schedule all GC jobs for a descriptor in the same stage - from: data-a-Node - kind: SameStagePrecedence - to: data-b-Node - query: - - $data-a[Type] IN ['*scpb.DatabaseData', '*scpb.IndexData', '*scpb.TableData'] - - $data-b[Type] IN ['*scpb.DatabaseData', '*scpb.IndexData', '*scpb.TableData'] - - joinOnDescID($data-a, $data-b, $desc-id) - - SmallerIDsFirst(scpb.Element, scpb.Element)($data-a, $data-b) - - transient($data-a-Target, $data-b-Target) - - $data-a-Node[CurrentStatus] = TRANSIENT_DROPPED - - $data-b-Node[CurrentStatus] = TRANSIENT_DROPPED - - joinTargetNode($data-a, $data-a-Target, $data-a-Node) - - joinTargetNode($data-b, $data-b-Target, $data-b-Node) -- name: schedule all GC jobs for a descriptor in the same stage - from: data-a-Node - kind: SameStagePrecedence - to: data-b-Node - query: - - $data-a[Type] IN ['*scpb.DatabaseData', '*scpb.IndexData', '*scpb.TableData'] - - $data-b[Type] IN ['*scpb.DatabaseData', '*scpb.IndexData', '*scpb.TableData'] - - joinOnDescID($data-a, $data-b, $desc-id) - - SmallerIDsFirst(scpb.Element, scpb.Element)($data-a, $data-b) - - $data-a-Target[TargetStatus] = TRANSIENT_ABSENT - - $data-a-Node[CurrentStatus] = TRANSIENT_DROPPED - - $data-b-Target[TargetStatus] = ABSENT - - $data-b-Node[CurrentStatus] = DROPPED - - joinTargetNode($data-a, $data-a-Target, $data-a-Node) - - joinTargetNode($data-b, $data-b-Target, $data-b-Node) -- name: schedule all GC jobs for a descriptor in the same stage - from: data-a-Node - kind: SameStagePrecedence - to: data-b-Node - query: - - $data-a[Type] IN ['*scpb.DatabaseData', '*scpb.IndexData', '*scpb.TableData'] - - $data-b[Type] IN ['*scpb.DatabaseData', '*scpb.IndexData', '*scpb.TableData'] - - joinOnDescID($data-a, $data-b, $desc-id) - - SmallerIDsFirst(scpb.Element, scpb.Element)($data-a, $data-b) - - $data-a-Target[TargetStatus] = ABSENT - - $data-a-Node[CurrentStatus] = DROPPED - - $data-b-Target[TargetStatus] = TRANSIENT_ABSENT - - $data-b-Node[CurrentStatus] = TRANSIENT_DROPPED - - joinTargetNode($data-a, $data-a-Target, $data-a-Node) - - joinTargetNode($data-b, $data-b-Target, $data-b-Node) -- name: schema locked is set after all other operations (add) - from: descriptor-element-Node - kind: PreviousTransactionPrecedence - to: schema-locked-Node - query: - - $descriptor-element[Type] IN ['*scpb.AliasType', '*scpb.CheckConstraint', '*scpb.CheckConstraintUnvalidated', '*scpb.Column', '*scpb.ColumnComment', '*scpb.ColumnComputeExpression', '*scpb.ColumnDefaultExpression', '*scpb.ColumnFamily', '*scpb.ColumnName', '*scpb.ColumnNotNull', '*scpb.ColumnOnUpdateExpression', '*scpb.ColumnType', '*scpb.CompositeType', '*scpb.CompositeTypeAttrName', '*scpb.CompositeTypeAttrType', '*scpb.ConstraintComment', '*scpb.ConstraintWithoutIndexName', '*scpb.Database', '*scpb.DatabaseComment', '*scpb.DatabaseData', '*scpb.DatabaseRegionConfig', '*scpb.DatabaseRoleSetting', '*scpb.DatabaseZoneConfig', '*scpb.EnumType', '*scpb.EnumTypeValue', '*scpb.ForeignKeyConstraint', '*scpb.ForeignKeyConstraintUnvalidated', '*scpb.Function', '*scpb.FunctionBody', '*scpb.FunctionLeakProof', '*scpb.FunctionName', '*scpb.FunctionNullInputBehavior', '*scpb.FunctionSecurity', '*scpb.FunctionVolatility', '*scpb.IndexColumn', '*scpb.IndexComment', '*scpb.IndexData', '*scpb.IndexName', '*scpb.IndexPartitioning', '*scpb.IndexZoneConfig', '*scpb.LDRJobIDs', '*scpb.NamedRangeZoneConfig', '*scpb.Namespace', '*scpb.Owner', '*scpb.PartitionZoneConfig', '*scpb.Policy', '*scpb.PolicyDeps', '*scpb.PolicyName', '*scpb.PolicyRole', '*scpb.PolicyUsingExpr', '*scpb.PolicyWithCheckExpr', '*scpb.PrimaryIndex', '*scpb.RowLevelSecurityEnabled', '*scpb.RowLevelSecurityForced', '*scpb.RowLevelTTL', '*scpb.Schema', '*scpb.SchemaChild', '*scpb.SchemaComment', '*scpb.SchemaParent', '*scpb.SecondaryIndex', '*scpb.Sequence', '*scpb.SequenceOption', '*scpb.SequenceOwner', '*scpb.Table', '*scpb.TableComment', '*scpb.TableData', '*scpb.TableLocalityGlobal', '*scpb.TableLocalityPrimaryRegion', '*scpb.TableLocalityRegionalByRow', '*scpb.TableLocalitySecondaryRegion', '*scpb.TablePartitioning', '*scpb.TableZoneConfig', '*scpb.TemporaryIndex', '*scpb.Trigger', '*scpb.TriggerDeps', '*scpb.TriggerEnabled', '*scpb.TriggerEvents', '*scpb.TriggerFunctionCall', '*scpb.TriggerName', '*scpb.TriggerTiming', '*scpb.TriggerTransition', '*scpb.TriggerWhen', '*scpb.TypeComment', '*scpb.UniqueWithoutIndexConstraint', '*scpb.UniqueWithoutIndexConstraintUnvalidated', '*scpb.UserPrivileges', '*scpb.View'] - - $schema-locked[Type] = '*scpb.TableSchemaLocked' - - joinOnDescID($descriptor-element, $schema-locked, $descID) - - toPublicToTransientPublicUntyped($descriptor-element-Target, $schema-locked-Target) - - $schema-locked-Node[CurrentStatus] = TRANSIENT_PUBLIC - - $descriptor-element-Node[CurrentStatus] = PUBLIC - - joinTargetNode($descriptor-element, $descriptor-element-Target, $descriptor-element-Node) - - joinTargetNode($schema-locked, $schema-locked-Target, $schema-locked-Node) -- name: schema locked is set after all other operations (drop) - from: descriptor-element-Node - kind: PreviousTransactionPrecedence - to: schema-locked-Node - query: - - $descriptor-element[Type] IN ['*scpb.AliasType', '*scpb.CheckConstraint', '*scpb.CheckConstraintUnvalidated', '*scpb.Column', '*scpb.ColumnComment', '*scpb.ColumnComputeExpression', '*scpb.ColumnDefaultExpression', '*scpb.ColumnFamily', '*scpb.ColumnName', '*scpb.ColumnNotNull', '*scpb.ColumnOnUpdateExpression', '*scpb.ColumnType', '*scpb.CompositeType', '*scpb.CompositeTypeAttrName', '*scpb.CompositeTypeAttrType', '*scpb.ConstraintComment', '*scpb.ConstraintWithoutIndexName', '*scpb.Database', '*scpb.DatabaseComment', '*scpb.DatabaseData', '*scpb.DatabaseRegionConfig', '*scpb.DatabaseRoleSetting', '*scpb.DatabaseZoneConfig', '*scpb.EnumType', '*scpb.EnumTypeValue', '*scpb.ForeignKeyConstraint', '*scpb.ForeignKeyConstraintUnvalidated', '*scpb.Function', '*scpb.FunctionBody', '*scpb.FunctionLeakProof', '*scpb.FunctionName', '*scpb.FunctionNullInputBehavior', '*scpb.FunctionSecurity', '*scpb.FunctionVolatility', '*scpb.IndexColumn', '*scpb.IndexComment', '*scpb.IndexData', '*scpb.IndexName', '*scpb.IndexPartitioning', '*scpb.IndexZoneConfig', '*scpb.LDRJobIDs', '*scpb.NamedRangeZoneConfig', '*scpb.Namespace', '*scpb.Owner', '*scpb.PartitionZoneConfig', '*scpb.Policy', '*scpb.PolicyDeps', '*scpb.PolicyName', '*scpb.PolicyRole', '*scpb.PolicyUsingExpr', '*scpb.PolicyWithCheckExpr', '*scpb.PrimaryIndex', '*scpb.RowLevelSecurityEnabled', '*scpb.RowLevelSecurityForced', '*scpb.RowLevelTTL', '*scpb.Schema', '*scpb.SchemaChild', '*scpb.SchemaComment', '*scpb.SchemaParent', '*scpb.SecondaryIndex', '*scpb.Sequence', '*scpb.SequenceOption', '*scpb.SequenceOwner', '*scpb.Table', '*scpb.TableComment', '*scpb.TableData', '*scpb.TableLocalityGlobal', '*scpb.TableLocalityPrimaryRegion', '*scpb.TableLocalityRegionalByRow', '*scpb.TableLocalitySecondaryRegion', '*scpb.TablePartitioning', '*scpb.TableZoneConfig', '*scpb.TemporaryIndex', '*scpb.Trigger', '*scpb.TriggerDeps', '*scpb.TriggerEnabled', '*scpb.TriggerEvents', '*scpb.TriggerFunctionCall', '*scpb.TriggerName', '*scpb.TriggerTiming', '*scpb.TriggerTransition', '*scpb.TriggerWhen', '*scpb.TypeComment', '*scpb.UniqueWithoutIndexConstraint', '*scpb.UniqueWithoutIndexConstraintUnvalidated', '*scpb.UserPrivileges', '*scpb.View'] - - $schema-locked[Type] = '*scpb.TableSchemaLocked' - - joinOnDescID($descriptor-element, $schema-locked, $descID) - - toDropToTransientPublicUntyped($descriptor-element-Target, $schema-locked-Target) - - $schema-locked-Node[CurrentStatus] = TRANSIENT_PUBLIC - - $descriptor-element-Node[CurrentStatus] = ABSENT - - joinTargetNode($descriptor-element, $descriptor-element-Target, $descriptor-element-Node) - - joinTargetNode($schema-locked, $schema-locked-Target, $schema-locked-Node) -- name: schema locked is unset before any operation (add) - from: schema-locked-Node - kind: Precedence - to: descriptor-element-Node - query: - - $schema-locked[Type] = '*scpb.TableSchemaLocked' - - $descriptor-element[Type] IN ['*scpb.AliasType', '*scpb.CheckConstraint', '*scpb.CheckConstraintUnvalidated', '*scpb.Column', '*scpb.ColumnComment', '*scpb.ColumnComputeExpression', '*scpb.ColumnDefaultExpression', '*scpb.ColumnFamily', '*scpb.ColumnName', '*scpb.ColumnNotNull', '*scpb.ColumnOnUpdateExpression', '*scpb.ColumnType', '*scpb.CompositeType', '*scpb.CompositeTypeAttrName', '*scpb.CompositeTypeAttrType', '*scpb.ConstraintComment', '*scpb.ConstraintWithoutIndexName', '*scpb.Database', '*scpb.DatabaseComment', '*scpb.DatabaseData', '*scpb.DatabaseRegionConfig', '*scpb.DatabaseRoleSetting', '*scpb.DatabaseZoneConfig', '*scpb.EnumType', '*scpb.EnumTypeValue', '*scpb.ForeignKeyConstraint', '*scpb.ForeignKeyConstraintUnvalidated', '*scpb.Function', '*scpb.FunctionBody', '*scpb.FunctionLeakProof', '*scpb.FunctionName', '*scpb.FunctionNullInputBehavior', '*scpb.FunctionSecurity', '*scpb.FunctionVolatility', '*scpb.IndexColumn', '*scpb.IndexComment', '*scpb.IndexData', '*scpb.IndexName', '*scpb.IndexPartitioning', '*scpb.IndexZoneConfig', '*scpb.LDRJobIDs', '*scpb.NamedRangeZoneConfig', '*scpb.Namespace', '*scpb.Owner', '*scpb.PartitionZoneConfig', '*scpb.Policy', '*scpb.PolicyDeps', '*scpb.PolicyName', '*scpb.PolicyRole', '*scpb.PolicyUsingExpr', '*scpb.PolicyWithCheckExpr', '*scpb.PrimaryIndex', '*scpb.RowLevelSecurityEnabled', '*scpb.RowLevelSecurityForced', '*scpb.RowLevelTTL', '*scpb.Schema', '*scpb.SchemaChild', '*scpb.SchemaComment', '*scpb.SchemaParent', '*scpb.SecondaryIndex', '*scpb.Sequence', '*scpb.SequenceOption', '*scpb.SequenceOwner', '*scpb.Table', '*scpb.TableComment', '*scpb.TableData', '*scpb.TableLocalityGlobal', '*scpb.TableLocalityPrimaryRegion', '*scpb.TableLocalityRegionalByRow', '*scpb.TableLocalitySecondaryRegion', '*scpb.TablePartitioning', '*scpb.TableZoneConfig', '*scpb.TemporaryIndex', '*scpb.Trigger', '*scpb.TriggerDeps', '*scpb.TriggerEnabled', '*scpb.TriggerEvents', '*scpb.TriggerFunctionCall', '*scpb.TriggerName', '*scpb.TriggerTiming', '*scpb.TriggerTransition', '*scpb.TriggerWhen', '*scpb.TypeComment', '*scpb.UniqueWithoutIndexConstraint', '*scpb.UniqueWithoutIndexConstraintUnvalidated', '*scpb.UserPrivileges', '*scpb.View'] - - joinOnDescID($schema-locked, $descriptor-element, $descID) - - toPublicToTransientPublicUntyped($descriptor-element-Target, $schema-locked-Target) - - $schema-locked-Node[CurrentStatus] = ABSENT - - joinTargetNode($schema-locked, $schema-locked-Target, $schema-locked-Node) - - joinTargetNode($descriptor-element, $descriptor-element-Target, $descriptor-element-Node) -- name: schema locked is unset before any operation (drop) - from: schema-locked-Node - kind: Precedence - to: descriptor-element-Node - query: - - $schema-locked[Type] = '*scpb.TableSchemaLocked' - - $descriptor-element[Type] IN ['*scpb.AliasType', '*scpb.CheckConstraint', '*scpb.CheckConstraintUnvalidated', '*scpb.Column', '*scpb.ColumnComment', '*scpb.ColumnComputeExpression', '*scpb.ColumnDefaultExpression', '*scpb.ColumnFamily', '*scpb.ColumnName', '*scpb.ColumnNotNull', '*scpb.ColumnOnUpdateExpression', '*scpb.ColumnType', '*scpb.CompositeType', '*scpb.CompositeTypeAttrName', '*scpb.CompositeTypeAttrType', '*scpb.ConstraintComment', '*scpb.ConstraintWithoutIndexName', '*scpb.Database', '*scpb.DatabaseComment', '*scpb.DatabaseData', '*scpb.DatabaseRegionConfig', '*scpb.DatabaseRoleSetting', '*scpb.DatabaseZoneConfig', '*scpb.EnumType', '*scpb.EnumTypeValue', '*scpb.ForeignKeyConstraint', '*scpb.ForeignKeyConstraintUnvalidated', '*scpb.Function', '*scpb.FunctionBody', '*scpb.FunctionLeakProof', '*scpb.FunctionName', '*scpb.FunctionNullInputBehavior', '*scpb.FunctionSecurity', '*scpb.FunctionVolatility', '*scpb.IndexColumn', '*scpb.IndexComment', '*scpb.IndexData', '*scpb.IndexName', '*scpb.IndexPartitioning', '*scpb.IndexZoneConfig', '*scpb.LDRJobIDs', '*scpb.NamedRangeZoneConfig', '*scpb.Namespace', '*scpb.Owner', '*scpb.PartitionZoneConfig', '*scpb.Policy', '*scpb.PolicyDeps', '*scpb.PolicyName', '*scpb.PolicyRole', '*scpb.PolicyUsingExpr', '*scpb.PolicyWithCheckExpr', '*scpb.PrimaryIndex', '*scpb.RowLevelSecurityEnabled', '*scpb.RowLevelSecurityForced', '*scpb.RowLevelTTL', '*scpb.Schema', '*scpb.SchemaChild', '*scpb.SchemaComment', '*scpb.SchemaParent', '*scpb.SecondaryIndex', '*scpb.Sequence', '*scpb.SequenceOption', '*scpb.SequenceOwner', '*scpb.Table', '*scpb.TableComment', '*scpb.TableData', '*scpb.TableLocalityGlobal', '*scpb.TableLocalityPrimaryRegion', '*scpb.TableLocalityRegionalByRow', '*scpb.TableLocalitySecondaryRegion', '*scpb.TablePartitioning', '*scpb.TableZoneConfig', '*scpb.TemporaryIndex', '*scpb.Trigger', '*scpb.TriggerDeps', '*scpb.TriggerEnabled', '*scpb.TriggerEvents', '*scpb.TriggerFunctionCall', '*scpb.TriggerName', '*scpb.TriggerTiming', '*scpb.TriggerTransition', '*scpb.TriggerWhen', '*scpb.TypeComment', '*scpb.UniqueWithoutIndexConstraint', '*scpb.UniqueWithoutIndexConstraintUnvalidated', '*scpb.UserPrivileges', '*scpb.View'] - - joinOnDescID($schema-locked, $descriptor-element, $descID) - - toDropToTransientPublicUntyped($descriptor-element-Target, $schema-locked-Target) - - $schema-locked-Node[CurrentStatus] = ABSENT - - joinTargetNode($schema-locked, $schema-locked-Target, $schema-locked-Node) - - joinTargetNode($descriptor-element, $descriptor-element-Target, $descriptor-element-Node) -- name: secondary index named before public (with index swap) - from: index-Node - kind: Precedence - to: index-name-Node - query: - - $index-name[Type] = '*scpb.IndexName' - - $index[Type] = '*scpb.SecondaryIndex' - - joinOnIndexID($index, $index-name, $table-id, $index-id) - - ToPublicOrTransient($index-Target, $index-name-Target) - - $index-Node[CurrentStatus] = VALIDATED - - $index-name-Node[CurrentStatus] = PUBLIC - - $old-index[Type] = '*scpb.SecondaryIndex' - - $new-index[Type] = '*scpb.SecondaryIndex' - - $old-index-Target[TargetStatus] = ABSENT - - $new-index-Target[TargetStatus] IN [PUBLIC, TRANSIENT_ABSENT] - - joinOnDescID($old-index, $new-index, $table-id) - - $new-index[IndexID] = $index-id - - $old-index[IndexID] = $old-index-id - - $new-index[RecreateSourceIndexID] = $old-index-id - - joinTargetNode($old-index, $old-index-Target, $old-index-Node) - - joinTargetNode($new-index, $new-index-Target, $new-index-Node) - - joinTargetNode($index, $index-Target, $index-Node) - - joinTargetNode($index-name, $index-name-Target, $index-name-Node) -- name: secondary index named before validation (without index swap) - from: index-name-Node - kind: Precedence - to: index-Node - query: - - $index-name[Type] = '*scpb.IndexName' - - $index[Type] = '*scpb.SecondaryIndex' - - joinOnIndexID($index-name, $index, $table-id, $index-id) - - no secondary index swap is on going($table-id, $index-id) - - ToPublicOrTransient($index-name-Target, $index-Target) - - $index-name-Node[CurrentStatus] = PUBLIC - - $index-Node[CurrentStatus] = VALIDATED - - joinTargetNode($index-name, $index-name-Target, $index-name-Node) - - joinTargetNode($index, $index-Target, $index-Node) -- name: secondary index partial no longer public before referenced column - from: secondary-partial-index-Node - kind: Precedence - to: column-Node - query: - - $secondary-partial-index[Type] = '*scpb.SecondaryIndex' - - $column[Type] = '*scpb.Column' - - joinOnDescID($secondary-partial-index, $column, $table-id) - - descriptorIsNotBeingDropped-25.2($secondary-partial-index) - - secondaryIndexReferencesColumn(*scpb.SecondaryIndex, *scpb.Column)($secondary-partial-index, $column) - - toAbsent($secondary-partial-index-Target, $column-Target) - - $secondary-partial-index-Node[CurrentStatus] = DELETE_ONLY - - $column-Node[CurrentStatus] = WRITE_ONLY - - joinTargetNode($secondary-partial-index, $secondary-partial-index-Target, $secondary-partial-index-Node) - - joinTargetNode($column, $column-Target, $column-Node) -- name: secondary index partial no longer public before referenced column - from: secondary-partial-index-Node - kind: Precedence - to: column-Node - query: - - $secondary-partial-index[Type] = '*scpb.SecondaryIndex' - - $column[Type] = '*scpb.Column' - - joinOnDescID($secondary-partial-index, $column, $table-id) - - descriptorIsNotBeingDropped-25.2($secondary-partial-index) - - secondaryIndexReferencesColumn(*scpb.SecondaryIndex, *scpb.Column)($secondary-partial-index, $column) - - transient($secondary-partial-index-Target, $column-Target) - - $secondary-partial-index-Node[CurrentStatus] = TRANSIENT_DELETE_ONLY - - $column-Node[CurrentStatus] = TRANSIENT_WRITE_ONLY - - joinTargetNode($secondary-partial-index, $secondary-partial-index-Target, $secondary-partial-index-Node) - - joinTargetNode($column, $column-Target, $column-Node) -- name: secondary index partial no longer public before referenced column - from: secondary-partial-index-Node - kind: Precedence - to: column-Node - query: - - $secondary-partial-index[Type] = '*scpb.SecondaryIndex' - - $column[Type] = '*scpb.Column' - - joinOnDescID($secondary-partial-index, $column, $table-id) - - descriptorIsNotBeingDropped-25.2($secondary-partial-index) - - secondaryIndexReferencesColumn(*scpb.SecondaryIndex, *scpb.Column)($secondary-partial-index, $column) - - $secondary-partial-index-Target[TargetStatus] = TRANSIENT_ABSENT - - $secondary-partial-index-Node[CurrentStatus] = TRANSIENT_DELETE_ONLY - - $column-Target[TargetStatus] = ABSENT - - $column-Node[CurrentStatus] = WRITE_ONLY - - joinTargetNode($secondary-partial-index, $secondary-partial-index-Target, $secondary-partial-index-Node) - - joinTargetNode($column, $column-Target, $column-Node) -- name: secondary index partial no longer public before referenced column - from: secondary-partial-index-Node - kind: Precedence - to: column-Node - query: - - $secondary-partial-index[Type] = '*scpb.SecondaryIndex' - - $column[Type] = '*scpb.Column' - - joinOnDescID($secondary-partial-index, $column, $table-id) - - descriptorIsNotBeingDropped-25.2($secondary-partial-index) - - secondaryIndexReferencesColumn(*scpb.SecondaryIndex, *scpb.Column)($secondary-partial-index, $column) - - $secondary-partial-index-Target[TargetStatus] = ABSENT - - $secondary-partial-index-Node[CurrentStatus] = DELETE_ONLY - - $column-Target[TargetStatus] = TRANSIENT_ABSENT - - $column-Node[CurrentStatus] = TRANSIENT_WRITE_ONLY - - joinTargetNode($secondary-partial-index, $secondary-partial-index-Target, $secondary-partial-index-Node) - - joinTargetNode($column, $column-Target, $column-Node) -- name: secondary index should be validated before dependent view can be absent - from: index-Node - kind: Precedence - to: view-Node - query: - - $index[Type] = '*scpb.SecondaryIndex' - - $view[Type] = '*scpb.View' - - viewReferencesIndex(*scpb.SecondaryIndex, *scpb.View)($index, $view) - - toAbsent($index-Target, $view-Target) - - $index-Node[CurrentStatus] = VALIDATED - - $view-Node[CurrentStatus] = ABSENT - - joinTargetNode($index, $index-Target, $index-Node) - - joinTargetNode($view, $view-Target, $view-Node) -- name: secondary index should be validated before dependent view can be absent - from: index-Node - kind: Precedence - to: view-Node - query: - - $index[Type] = '*scpb.SecondaryIndex' - - $view[Type] = '*scpb.View' - - viewReferencesIndex(*scpb.SecondaryIndex, *scpb.View)($index, $view) - - transient($index-Target, $view-Target) - - $index-Node[CurrentStatus] = TRANSIENT_VALIDATED - - $view-Node[CurrentStatus] = TRANSIENT_ABSENT - - joinTargetNode($index, $index-Target, $index-Node) - - joinTargetNode($view, $view-Target, $view-Node) -- name: secondary index should be validated before dependent view can be absent - from: index-Node - kind: Precedence - to: view-Node - query: - - $index[Type] = '*scpb.SecondaryIndex' - - $view[Type] = '*scpb.View' - - viewReferencesIndex(*scpb.SecondaryIndex, *scpb.View)($index, $view) - - $index-Target[TargetStatus] = TRANSIENT_ABSENT - - $index-Node[CurrentStatus] = TRANSIENT_VALIDATED - - $view-Target[TargetStatus] = ABSENT - - $view-Node[CurrentStatus] = ABSENT - - joinTargetNode($index, $index-Target, $index-Node) - - joinTargetNode($view, $view-Target, $view-Node) -- name: secondary index should be validated before dependent view can be absent - from: index-Node - kind: Precedence - to: view-Node - query: - - $index[Type] = '*scpb.SecondaryIndex' - - $view[Type] = '*scpb.View' - - viewReferencesIndex(*scpb.SecondaryIndex, *scpb.View)($index, $view) - - $index-Target[TargetStatus] = ABSENT - - $index-Node[CurrentStatus] = VALIDATED - - $view-Target[TargetStatus] = TRANSIENT_ABSENT - - $view-Node[CurrentStatus] = TRANSIENT_ABSENT - - joinTargetNode($index, $index-Target, $index-Node) - - joinTargetNode($view, $view-Target, $view-Node) -- name: secondary indexes containing column as key reach write-only before column - from: index-Node - kind: Precedence - to: column-Node - query: - - $index[Type] = '*scpb.SecondaryIndex' - - $column[Type] = '*scpb.Column' - - ColumnInIndex($index-column, $index, $table-id, $column-id, $index-id) - - joinOnColumnID($index-column, $column, $table-id, $column-id) - - toAbsent($index-Target, $column-Target) - - $index-Node[CurrentStatus] = VALIDATED - - $column-Node[CurrentStatus] = WRITE_ONLY - - descriptorIsNotBeingDropped-25.2($index-column) - - isIndexKeyColumnKey(*scpb.IndexColumn)($index-column) - - joinTargetNode($index, $index-Target, $index-Node) - - joinTargetNode($column, $column-Target, $column-Node) -- name: secondary indexes should be in a validated state before primary indexes can go public - from: secondary-index-Node - kind: Precedence - to: primary-index-Node - query: - - $secondary-index[Type] = '*scpb.SecondaryIndex' - - $primary-index[Type] = '*scpb.PrimaryIndex' - - joinOnDescID($secondary-index, $primary-index, $table-id) - - $secondary-index[SourceIndexID] = $primary-index-id - - $primary-index[IndexID] = $primary-index-id - - ToPublicOrTransient($secondary-index-Target, $primary-index-Target) - - $secondary-index-Node[CurrentStatus] = VALIDATED - - $primary-index-Node[CurrentStatus] = PUBLIC - - joinTargetNode($secondary-index, $secondary-index-Target, $secondary-index-Node) - - joinTargetNode($primary-index, $primary-index-Target, $primary-index-Node) -- name: simple constraint public right before its dependents - from: simple-constraint-Node - kind: SameStagePrecedence - to: dependent-Node - query: - - $simple-constraint[Type] = '*scpb.ColumnNotNull' - - $dependent[Type] IN ['*scpb.ConstraintComment', '*scpb.ConstraintWithoutIndexName'] - - joinOnConstraintID($simple-constraint, $dependent, $table-id, $constraint-id) - - ToPublicOrTransient($simple-constraint-Target, $dependent-Target) - - $simple-constraint-Node[CurrentStatus] = PUBLIC - - $dependent-Node[CurrentStatus] = PUBLIC - - joinTargetNode($simple-constraint, $simple-constraint-Target, $simple-constraint-Node) - - joinTargetNode($dependent, $dependent-Target, $dependent-Node) -- name: simple constraint visible before name - from: simple-constraint-Node - kind: Precedence - to: constraint-name-Node - query: - - $simple-constraint[Type] IN ['*scpb.CheckConstraint', '*scpb.CheckConstraintUnvalidated', '*scpb.ColumnNotNull', '*scpb.ForeignKeyConstraint', '*scpb.ForeignKeyConstraintUnvalidated', '*scpb.UniqueWithoutIndexConstraint', '*scpb.UniqueWithoutIndexConstraintUnvalidated'] - - $constraint-name[Type] = '*scpb.ConstraintWithoutIndexName' - - joinOnConstraintID($simple-constraint, $constraint-name, $table-id, $constraint-id) - - ToPublicOrTransient($simple-constraint-Target, $constraint-name-Target) - - $simple-constraint-Node[CurrentStatus] = WRITE_ONLY - - $constraint-name-Node[CurrentStatus] = PUBLIC - - joinTargetNode($simple-constraint, $simple-constraint-Target, $simple-constraint-Node) - - joinTargetNode($constraint-name, $constraint-name-Target, $constraint-name-Node) -- name: swapped primary index public before column - from: index-Node - kind: Precedence - to: column-Node - query: - - $index[Type] = '*scpb.PrimaryIndex' - - $column[Type] = '*scpb.Column' - - ColumnInSwappedInPrimaryIndex($index-column, $index, $table-id, $column-id, $index-id) - - joinOnColumnID($index-column, $column, $table-id, $column-id) - - ToPublicOrTransient($index-Target, $column-Target) - - $index-Node[CurrentStatus] = PUBLIC - - $column-Node[CurrentStatus] = PUBLIC - - joinTargetNode($index, $index-Target, $index-Node) - - joinTargetNode($column, $column-Target, $column-Node) -- name: table added right before data element - from: table-Node - kind: Precedence - to: data-Node - query: - - $table[Type] IN ['*scpb.AliasType', '*scpb.CompositeType', '*scpb.Database', '*scpb.EnumType', '*scpb.Function', '*scpb.Schema', '*scpb.Sequence', '*scpb.Table', '*scpb.View'] - - $data[Type] IN ['*scpb.DatabaseData', '*scpb.IndexData', '*scpb.TableData'] - - joinOnDescID($table, $data, $table-id) - - ToPublicOrTransient($table-Target, $data-Target) - - $table-Node[CurrentStatus] = PUBLIC - - $data-Node[CurrentStatus] = PUBLIC - - joinTargetNode($table, $table-Target, $table-Node) - - joinTargetNode($data, $data-Target, $data-Node) -- name: table removed right before garbage collection - from: table-Node - kind: SameStagePrecedence - to: data-Node - query: - - $table[Type] IN ['*scpb.AliasType', '*scpb.CompositeType', '*scpb.Database', '*scpb.EnumType', '*scpb.Function', '*scpb.Schema', '*scpb.Sequence', '*scpb.Table', '*scpb.View'] - - $data[Type] = '*scpb.TableData' - - joinOnDescID($table, $data, $table-id) - - toAbsent($table-Target, $data-Target) - - $table-Node[CurrentStatus] = ABSENT - - $data-Node[CurrentStatus] = DROPPED - - joinTargetNode($table, $table-Target, $table-Node) - - joinTargetNode($data, $data-Target, $data-Node) -- name: temp index data exists as soon as temp index accepts writes - from: temp-index-Node - kind: SameStagePrecedence - to: temp-index-data-Node - query: - - $temp-index[Type] = '*scpb.TemporaryIndex' - - $temp-index-data[Type] = '*scpb.IndexData' - - joinOnIndexID($temp-index, $temp-index-data, $table-id, $index-id) - - ToPublicOrTransient($temp-index-Target, $temp-index-data-Target) - - $temp-index-Node[CurrentStatus] = WRITE_ONLY - - $temp-index-data-Node[CurrentStatus] = PUBLIC - - joinTargetNode($temp-index, $temp-index-Target, $temp-index-Node) - - joinTargetNode($temp-index-data, $temp-index-data-Target, $temp-index-data-Node) -- name: temp index disappeared before its master index reaches WRITE_ONLY - from: temp-Node - kind: Precedence - to: index-Node - query: - - $temp[Type] = '*scpb.TemporaryIndex' - - $index[Type] IN ['*scpb.PrimaryIndex', '*scpb.SecondaryIndex'] - - joinOnDescID($temp, $index, $table-id) - - $temp[IndexID] = $temp-index-id - - $index[TemporaryIndexID] = $temp-index-id - - $temp-Target[TargetStatus] = TRANSIENT_ABSENT - - $temp-Node[CurrentStatus] = TRANSIENT_DELETE_ONLY - - $index-Target[TargetStatus] IN [PUBLIC, TRANSIENT_ABSENT] - - $index-Node[CurrentStatus] = WRITE_ONLY - - joinTargetNode($temp, $temp-Target, $temp-Node) - - joinTargetNode($index, $index-Target, $index-Node) -- name: temp index existence precedes index dependents - from: index-Node - kind: Precedence - to: dependent-Node - query: - - $index[Type] = '*scpb.TemporaryIndex' - - $dependent[Type] IN ['*scpb.IndexColumn', '*scpb.IndexComment', '*scpb.IndexName', '*scpb.IndexPartitioning', '*scpb.IndexZoneConfig', '*scpb.PartitionZoneConfig'] - - joinOnIndexID($index, $dependent, $table-id, $index-id) - - ToPublicOrTransient($index-Target, $dependent-Target) - - $index-Node[CurrentStatus] = DELETE_ONLY - - $dependent-Node[CurrentStatus] = PUBLIC - - joinTargetNode($index, $index-Target, $index-Node) - - joinTargetNode($dependent, $dependent-Target, $dependent-Node) -- name: temp index is WRITE_ONLY before backfill - from: temp-Node - kind: Precedence - to: index-Node - query: - - $temp[Type] = '*scpb.TemporaryIndex' - - $index[Type] IN ['*scpb.PrimaryIndex', '*scpb.SecondaryIndex'] - - joinOnDescID($temp, $index, $table-id) - - $temp[IndexID] = $temp-index-id - - $index[TemporaryIndexID] = $temp-index-id - - $temp-Target[TargetStatus] = TRANSIENT_ABSENT - - $index-Target[TargetStatus] IN [PUBLIC, TRANSIENT_ABSENT] - - $temp-Node[CurrentStatus] = WRITE_ONLY - - $index-Node[CurrentStatus] = BACKFILLED - - joinTargetNode($temp, $temp-Target, $temp-Node) - - joinTargetNode($index, $index-Target, $index-Node) -- name: trigger public before its dependents - from: trigger-Node - kind: Precedence - to: dependent-Node - query: - - $trigger[Type] = '*scpb.Trigger' - - $dependent[Type] IN ['*scpb.TriggerDeps', '*scpb.TriggerEnabled', '*scpb.TriggerEvents', '*scpb.TriggerFunctionCall', '*scpb.TriggerName', '*scpb.TriggerTiming', '*scpb.TriggerTransition', '*scpb.TriggerWhen'] - - joinOnTriggerID($trigger, $dependent, $table-id, $trigger-id) - - ToPublicOrTransient($trigger-Target, $dependent-Target) - - $trigger-Node[CurrentStatus] = PUBLIC - - $dependent-Node[CurrentStatus] = PUBLIC - - joinTargetNode($trigger, $trigger-Target, $trigger-Node) - - joinTargetNode($dependent, $dependent-Target, $dependent-Node) -- name: trigger removed before dependents - from: trigger-Node - kind: Precedence - to: dependents-Node - query: - - $dependents[Type] = '*scpb.Trigger' - - $trigger[Type] IN ['*scpb.TriggerDeps', '*scpb.TriggerEnabled', '*scpb.TriggerEvents', '*scpb.TriggerFunctionCall', '*scpb.TriggerName', '*scpb.TriggerTiming', '*scpb.TriggerTransition', '*scpb.TriggerWhen'] - - joinOnTriggerID($trigger, $dependents, $table-id, $trigger-id) - - toAbsent($trigger-Target, $dependents-Target) - - $trigger-Node[CurrentStatus] = ABSENT - - $dependents-Node[CurrentStatus] = PUBLIC - - joinTargetNode($trigger, $trigger-Target, $trigger-Node) - - joinTargetNode($dependents, $dependents-Target, $dependents-Node) -- name: trigger removed before dependents - from: trigger-Node - kind: Precedence - to: dependents-Node - query: - - $dependents[Type] = '*scpb.Trigger' - - $trigger[Type] IN ['*scpb.TriggerDeps', '*scpb.TriggerEnabled', '*scpb.TriggerEvents', '*scpb.TriggerFunctionCall', '*scpb.TriggerName', '*scpb.TriggerTiming', '*scpb.TriggerTransition', '*scpb.TriggerWhen'] - - joinOnTriggerID($trigger, $dependents, $table-id, $trigger-id) - - transient($trigger-Target, $dependents-Target) - - $trigger-Node[CurrentStatus] = TRANSIENT_ABSENT - - $dependents-Node[CurrentStatus] = TRANSIENT_PUBLIC - - joinTargetNode($trigger, $trigger-Target, $trigger-Node) - - joinTargetNode($dependents, $dependents-Target, $dependents-Node) -- name: trigger removed before dependents - from: trigger-Node - kind: Precedence - to: dependents-Node - query: - - $dependents[Type] = '*scpb.Trigger' - - $trigger[Type] IN ['*scpb.TriggerDeps', '*scpb.TriggerEnabled', '*scpb.TriggerEvents', '*scpb.TriggerFunctionCall', '*scpb.TriggerName', '*scpb.TriggerTiming', '*scpb.TriggerTransition', '*scpb.TriggerWhen'] - - joinOnTriggerID($trigger, $dependents, $table-id, $trigger-id) - - $trigger-Target[TargetStatus] = TRANSIENT_ABSENT - - $trigger-Node[CurrentStatus] = TRANSIENT_ABSENT - - $dependents-Target[TargetStatus] = ABSENT - - $dependents-Node[CurrentStatus] = PUBLIC - - joinTargetNode($trigger, $trigger-Target, $trigger-Node) - - joinTargetNode($dependents, $dependents-Target, $dependents-Node) -- name: trigger removed before dependents - from: trigger-Node - kind: Precedence - to: dependents-Node - query: - - $dependents[Type] = '*scpb.Trigger' - - $trigger[Type] IN ['*scpb.TriggerDeps', '*scpb.TriggerEnabled', '*scpb.TriggerEvents', '*scpb.TriggerFunctionCall', '*scpb.TriggerName', '*scpb.TriggerTiming', '*scpb.TriggerTransition', '*scpb.TriggerWhen'] - - joinOnTriggerID($trigger, $dependents, $table-id, $trigger-id) - - $trigger-Target[TargetStatus] = ABSENT - - $trigger-Node[CurrentStatus] = ABSENT - - $dependents-Target[TargetStatus] = TRANSIENT_ABSENT - - $dependents-Node[CurrentStatus] = TRANSIENT_PUBLIC - - joinTargetNode($trigger, $trigger-Target, $trigger-Node) - - joinTargetNode($dependents, $dependents-Target, $dependents-Node) - -deprules ----- -- name: 'CheckConstraint transitions to ABSENT uphold 2-version invariant: PUBLIC->VALIDATED' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.CheckConstraint' - - $next[Type] = '*scpb.CheckConstraint' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = ABSENT - - $prev-Node[CurrentStatus] = PUBLIC - - $next-Node[CurrentStatus] = VALIDATED - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'CheckConstraint transitions to ABSENT uphold 2-version invariant: TRANSIENT_ABSENT->ABSENT' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.CheckConstraint' - - $next[Type] = '*scpb.CheckConstraint' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = ABSENT - - $prev-Node[CurrentStatus] = TRANSIENT_ABSENT - - $next-Node[CurrentStatus] = ABSENT - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'CheckConstraint transitions to ABSENT uphold 2-version invariant: TRANSIENT_VALIDATED->VALIDATED' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.CheckConstraint' - - $next[Type] = '*scpb.CheckConstraint' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = ABSENT - - $prev-Node[CurrentStatus] = TRANSIENT_VALIDATED - - $next-Node[CurrentStatus] = VALIDATED - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'CheckConstraint transitions to ABSENT uphold 2-version invariant: TRANSIENT_WRITE_ONLY->VALIDATED' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.CheckConstraint' - - $next[Type] = '*scpb.CheckConstraint' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = ABSENT - - $prev-Node[CurrentStatus] = TRANSIENT_WRITE_ONLY - - $next-Node[CurrentStatus] = VALIDATED - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'CheckConstraint transitions to ABSENT uphold 2-version invariant: VALIDATED->ABSENT' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.CheckConstraint' - - $next[Type] = '*scpb.CheckConstraint' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = ABSENT - - $prev-Node[CurrentStatus] = VALIDATED - - $next-Node[CurrentStatus] = ABSENT - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - nodeNotExistsWithStatusIn_TRANSIENT_VALIDATED_WRITE_ONLY_TRANSIENT_WRITE_ONLY($prev-Target) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'CheckConstraint transitions to ABSENT uphold 2-version invariant: WRITE_ONLY->VALIDATED' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.CheckConstraint' - - $next[Type] = '*scpb.CheckConstraint' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = ABSENT - - $prev-Node[CurrentStatus] = WRITE_ONLY - - $next-Node[CurrentStatus] = VALIDATED - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'CheckConstraint transitions to PUBLIC uphold 2-version invariant: ABSENT->WRITE_ONLY' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.CheckConstraint' - - $next[Type] = '*scpb.CheckConstraint' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = PUBLIC - - $prev-Node[CurrentStatus] = ABSENT - - $next-Node[CurrentStatus] = WRITE_ONLY - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'CheckConstraint transitions to PUBLIC uphold 2-version invariant: VALIDATED->PUBLIC' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.CheckConstraint' - - $next[Type] = '*scpb.CheckConstraint' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = PUBLIC - - $prev-Node[CurrentStatus] = VALIDATED - - $next-Node[CurrentStatus] = PUBLIC - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'CheckConstraint transitions to PUBLIC uphold 2-version invariant: WRITE_ONLY->VALIDATED' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.CheckConstraint' - - $next[Type] = '*scpb.CheckConstraint' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = PUBLIC - - $prev-Node[CurrentStatus] = WRITE_ONLY - - $next-Node[CurrentStatus] = VALIDATED - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'CheckConstraint transitions to TRANSIENT_ABSENT uphold 2-version invariant: ABSENT->WRITE_ONLY' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.CheckConstraint' - - $next[Type] = '*scpb.CheckConstraint' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = TRANSIENT_ABSENT - - $prev-Node[CurrentStatus] = ABSENT - - $next-Node[CurrentStatus] = WRITE_ONLY - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'CheckConstraint transitions to TRANSIENT_ABSENT uphold 2-version invariant: PUBLIC->TRANSIENT_VALIDATED' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.CheckConstraint' - - $next[Type] = '*scpb.CheckConstraint' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = TRANSIENT_ABSENT - - $prev-Node[CurrentStatus] = PUBLIC - - $next-Node[CurrentStatus] = TRANSIENT_VALIDATED - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'CheckConstraint transitions to TRANSIENT_ABSENT uphold 2-version invariant: TRANSIENT_VALIDATED->TRANSIENT_ABSENT' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.CheckConstraint' - - $next[Type] = '*scpb.CheckConstraint' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = TRANSIENT_ABSENT - - $prev-Node[CurrentStatus] = TRANSIENT_VALIDATED - - $next-Node[CurrentStatus] = TRANSIENT_ABSENT - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - nodeNotExistsWithStatusIn_TRANSIENT_WRITE_ONLY($prev-Target) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'CheckConstraint transitions to TRANSIENT_ABSENT uphold 2-version invariant: TRANSIENT_WRITE_ONLY->TRANSIENT_VALIDATED' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.CheckConstraint' - - $next[Type] = '*scpb.CheckConstraint' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = TRANSIENT_ABSENT - - $prev-Node[CurrentStatus] = TRANSIENT_WRITE_ONLY - - $next-Node[CurrentStatus] = TRANSIENT_VALIDATED - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'CheckConstraint transitions to TRANSIENT_ABSENT uphold 2-version invariant: VALIDATED->PUBLIC' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.CheckConstraint' - - $next[Type] = '*scpb.CheckConstraint' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = TRANSIENT_ABSENT - - $prev-Node[CurrentStatus] = VALIDATED - - $next-Node[CurrentStatus] = PUBLIC - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'CheckConstraint transitions to TRANSIENT_ABSENT uphold 2-version invariant: WRITE_ONLY->VALIDATED' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.CheckConstraint' - - $next[Type] = '*scpb.CheckConstraint' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = TRANSIENT_ABSENT - - $prev-Node[CurrentStatus] = WRITE_ONLY - - $next-Node[CurrentStatus] = VALIDATED - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'Column transitions to ABSENT uphold 2-version invariant: DELETE_ONLY->ABSENT' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.Column' - - $next[Type] = '*scpb.Column' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = ABSENT - - $prev-Node[CurrentStatus] = DELETE_ONLY - - $next-Node[CurrentStatus] = ABSENT - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'Column transitions to ABSENT uphold 2-version invariant: PUBLIC->WRITE_ONLY' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.Column' - - $next[Type] = '*scpb.Column' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = ABSENT - - $prev-Node[CurrentStatus] = PUBLIC - - $next-Node[CurrentStatus] = WRITE_ONLY - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'Column transitions to ABSENT uphold 2-version invariant: WRITE_ONLY->DELETE_ONLY' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.Column' - - $next[Type] = '*scpb.Column' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = ABSENT - - $prev-Node[CurrentStatus] = WRITE_ONLY - - $next-Node[CurrentStatus] = DELETE_ONLY - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'Column transitions to PUBLIC uphold 2-version invariant: ABSENT->DELETE_ONLY' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.Column' - - $next[Type] = '*scpb.Column' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = PUBLIC - - $prev-Node[CurrentStatus] = ABSENT - - $next-Node[CurrentStatus] = DELETE_ONLY - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'Column transitions to PUBLIC uphold 2-version invariant: DELETE_ONLY->WRITE_ONLY' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.Column' - - $next[Type] = '*scpb.Column' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = PUBLIC - - $prev-Node[CurrentStatus] = DELETE_ONLY - - $next-Node[CurrentStatus] = WRITE_ONLY - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'Column transitions to PUBLIC uphold 2-version invariant: WRITE_ONLY->PUBLIC' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.Column' - - $next[Type] = '*scpb.Column' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = PUBLIC - - $prev-Node[CurrentStatus] = WRITE_ONLY - - $next-Node[CurrentStatus] = PUBLIC - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'ColumnNotNull transitions to ABSENT uphold 2-version invariant: PUBLIC->VALIDATED' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.ColumnNotNull' - - $next[Type] = '*scpb.ColumnNotNull' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = ABSENT - - $prev-Node[CurrentStatus] = PUBLIC - - $next-Node[CurrentStatus] = VALIDATED - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'ColumnNotNull transitions to ABSENT uphold 2-version invariant: VALIDATED->ABSENT' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.ColumnNotNull' - - $next[Type] = '*scpb.ColumnNotNull' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = ABSENT - - $prev-Node[CurrentStatus] = VALIDATED - - $next-Node[CurrentStatus] = ABSENT - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - nodeNotExistsWithStatusIn_WRITE_ONLY($prev-Target) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'ColumnNotNull transitions to ABSENT uphold 2-version invariant: WRITE_ONLY->VALIDATED' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.ColumnNotNull' - - $next[Type] = '*scpb.ColumnNotNull' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = ABSENT - - $prev-Node[CurrentStatus] = WRITE_ONLY - - $next-Node[CurrentStatus] = VALIDATED - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'ColumnNotNull transitions to PUBLIC uphold 2-version invariant: ABSENT->WRITE_ONLY' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.ColumnNotNull' - - $next[Type] = '*scpb.ColumnNotNull' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = PUBLIC - - $prev-Node[CurrentStatus] = ABSENT - - $next-Node[CurrentStatus] = WRITE_ONLY - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'ColumnNotNull transitions to PUBLIC uphold 2-version invariant: VALIDATED->PUBLIC' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.ColumnNotNull' - - $next[Type] = '*scpb.ColumnNotNull' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = PUBLIC - - $prev-Node[CurrentStatus] = VALIDATED - - $next-Node[CurrentStatus] = PUBLIC - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'ColumnNotNull transitions to PUBLIC uphold 2-version invariant: WRITE_ONLY->VALIDATED' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.ColumnNotNull' - - $next[Type] = '*scpb.ColumnNotNull' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = PUBLIC - - $prev-Node[CurrentStatus] = WRITE_ONLY - - $next-Node[CurrentStatus] = VALIDATED - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: Computed column expression is dropped before the column it depends on - from: column-expr-Node - kind: Precedence - to: column-Node - query: - - $column-expr[Type] = '*scpb.ColumnComputeExpression' - - $column[Type] = '*scpb.Column' - - joinOnDescID($column-expr, $column, $table-id) - - computedColumnTypeReferencesColumn(*scpb.ColumnComputeExpression, *scpb.Column)($column-expr, $column) - - toAbsent($column-expr-Target, $column-Target) - - $column-expr-Node[CurrentStatus] = ABSENT - - $column-Node[CurrentStatus] = WRITE_ONLY - - joinTargetNode($column-expr, $column-expr-Target, $column-expr-Node) - - joinTargetNode($column, $column-Target, $column-Node) -- name: Computed column expression is dropped before the column it depends on - from: column-expr-Node - kind: Precedence - to: column-Node - query: - - $column-expr[Type] = '*scpb.ColumnComputeExpression' - - $column[Type] = '*scpb.Column' - - joinOnDescID($column-expr, $column, $table-id) - - computedColumnTypeReferencesColumn(*scpb.ColumnComputeExpression, *scpb.Column)($column-expr, $column) - - transient($column-expr-Target, $column-Target) - - $column-expr-Node[CurrentStatus] = TRANSIENT_ABSENT - - $column-Node[CurrentStatus] = TRANSIENT_WRITE_ONLY - - joinTargetNode($column-expr, $column-expr-Target, $column-expr-Node) - - joinTargetNode($column, $column-Target, $column-Node) -- name: Computed column expression is dropped before the column it depends on - from: column-expr-Node - kind: Precedence - to: column-Node - query: - - $column-expr[Type] = '*scpb.ColumnComputeExpression' - - $column[Type] = '*scpb.Column' - - joinOnDescID($column-expr, $column, $table-id) - - computedColumnTypeReferencesColumn(*scpb.ColumnComputeExpression, *scpb.Column)($column-expr, $column) - - $column-expr-Target[TargetStatus] = TRANSIENT_ABSENT - - $column-expr-Node[CurrentStatus] = TRANSIENT_ABSENT - - $column-Target[TargetStatus] = ABSENT - - $column-Node[CurrentStatus] = WRITE_ONLY - - joinTargetNode($column-expr, $column-expr-Target, $column-expr-Node) - - joinTargetNode($column, $column-Target, $column-Node) -- name: Computed column expression is dropped before the column it depends on - from: column-expr-Node - kind: Precedence - to: column-Node - query: - - $column-expr[Type] = '*scpb.ColumnComputeExpression' - - $column[Type] = '*scpb.Column' - - joinOnDescID($column-expr, $column, $table-id) - - computedColumnTypeReferencesColumn(*scpb.ColumnComputeExpression, *scpb.Column)($column-expr, $column) - - $column-expr-Target[TargetStatus] = ABSENT - - $column-expr-Node[CurrentStatus] = ABSENT - - $column-Target[TargetStatus] = TRANSIENT_ABSENT - - $column-Node[CurrentStatus] = TRANSIENT_WRITE_ONLY - - joinTargetNode($column-expr, $column-expr-Target, $column-expr-Node) - - joinTargetNode($column, $column-Target, $column-Node) -- name: Constraint should be hidden before name - from: constraint-name-Node - kind: Precedence - to: constraint-Node - query: - - $constraint-name[Type] = '*scpb.ConstraintWithoutIndexName' - - $constraint[Type] IN ['*scpb.CheckConstraint', '*scpb.CheckConstraintUnvalidated', '*scpb.ColumnNotNull', '*scpb.ForeignKeyConstraint', '*scpb.ForeignKeyConstraintUnvalidated', '*scpb.UniqueWithoutIndexConstraint', '*scpb.UniqueWithoutIndexConstraintUnvalidated'] - - joinOnConstraintID($constraint-name, $constraint, $table-id, $constraint-id) - - toAbsent($constraint-name-Target, $constraint-Target) - - $constraint-name-Node[CurrentStatus] = ABSENT - - $constraint-Node[CurrentStatus] = ABSENT - - joinTargetNode($constraint-name, $constraint-name-Target, $constraint-name-Node) - - joinTargetNode($constraint, $constraint-Target, $constraint-Node) -- name: Constraint should be hidden before name - from: constraint-name-Node - kind: Precedence - to: constraint-Node - query: - - $constraint-name[Type] = '*scpb.ConstraintWithoutIndexName' - - $constraint[Type] IN ['*scpb.CheckConstraint', '*scpb.CheckConstraintUnvalidated', '*scpb.ColumnNotNull', '*scpb.ForeignKeyConstraint', '*scpb.ForeignKeyConstraintUnvalidated', '*scpb.UniqueWithoutIndexConstraint', '*scpb.UniqueWithoutIndexConstraintUnvalidated'] - - joinOnConstraintID($constraint-name, $constraint, $table-id, $constraint-id) - - transient($constraint-name-Target, $constraint-Target) - - $constraint-name-Node[CurrentStatus] = TRANSIENT_ABSENT - - $constraint-Node[CurrentStatus] = TRANSIENT_ABSENT - - joinTargetNode($constraint-name, $constraint-name-Target, $constraint-name-Node) - - joinTargetNode($constraint, $constraint-Target, $constraint-Node) -- name: Constraint should be hidden before name - from: constraint-name-Node - kind: Precedence - to: constraint-Node - query: - - $constraint-name[Type] = '*scpb.ConstraintWithoutIndexName' - - $constraint[Type] IN ['*scpb.CheckConstraint', '*scpb.CheckConstraintUnvalidated', '*scpb.ColumnNotNull', '*scpb.ForeignKeyConstraint', '*scpb.ForeignKeyConstraintUnvalidated', '*scpb.UniqueWithoutIndexConstraint', '*scpb.UniqueWithoutIndexConstraintUnvalidated'] - - joinOnConstraintID($constraint-name, $constraint, $table-id, $constraint-id) - - $constraint-name-Target[TargetStatus] = TRANSIENT_ABSENT - - $constraint-name-Node[CurrentStatus] = TRANSIENT_ABSENT - - $constraint-Target[TargetStatus] = ABSENT - - $constraint-Node[CurrentStatus] = ABSENT - - joinTargetNode($constraint-name, $constraint-name-Target, $constraint-name-Node) - - joinTargetNode($constraint, $constraint-Target, $constraint-Node) -- name: Constraint should be hidden before name - from: constraint-name-Node - kind: Precedence - to: constraint-Node - query: - - $constraint-name[Type] = '*scpb.ConstraintWithoutIndexName' - - $constraint[Type] IN ['*scpb.CheckConstraint', '*scpb.CheckConstraintUnvalidated', '*scpb.ColumnNotNull', '*scpb.ForeignKeyConstraint', '*scpb.ForeignKeyConstraintUnvalidated', '*scpb.UniqueWithoutIndexConstraint', '*scpb.UniqueWithoutIndexConstraintUnvalidated'] - - joinOnConstraintID($constraint-name, $constraint, $table-id, $constraint-id) - - $constraint-name-Target[TargetStatus] = ABSENT - - $constraint-name-Node[CurrentStatus] = ABSENT - - $constraint-Target[TargetStatus] = TRANSIENT_ABSENT - - $constraint-Node[CurrentStatus] = TRANSIENT_ABSENT - - joinTargetNode($constraint-name, $constraint-name-Target, $constraint-name-Node) - - joinTargetNode($constraint, $constraint-Target, $constraint-Node) -- name: Constraint should be hidden before name - from: constraint-Node - kind: Precedence - to: constraint-name-Node - query: - - $constraint[Type] IN ['*scpb.CheckConstraint', '*scpb.CheckConstraintUnvalidated', '*scpb.ColumnNotNull', '*scpb.ForeignKeyConstraint', '*scpb.ForeignKeyConstraintUnvalidated', '*scpb.UniqueWithoutIndexConstraint', '*scpb.UniqueWithoutIndexConstraintUnvalidated'] - - $constraint-name[Type] = '*scpb.ConstraintWithoutIndexName' - - joinOnConstraintID($constraint, $constraint-name, $table-id, $constraint-id) - - toAbsent($constraint-Target, $constraint-name-Target) - - $constraint-Node[CurrentStatus] = VALIDATED - - $constraint-name-Node[CurrentStatus] = ABSENT - - joinTargetNode($constraint, $constraint-Target, $constraint-Node) - - joinTargetNode($constraint-name, $constraint-name-Target, $constraint-name-Node) -- name: Constraint should be hidden before name - from: constraint-Node - kind: Precedence - to: constraint-name-Node - query: - - $constraint[Type] IN ['*scpb.CheckConstraint', '*scpb.CheckConstraintUnvalidated', '*scpb.ColumnNotNull', '*scpb.ForeignKeyConstraint', '*scpb.ForeignKeyConstraintUnvalidated', '*scpb.UniqueWithoutIndexConstraint', '*scpb.UniqueWithoutIndexConstraintUnvalidated'] - - $constraint-name[Type] = '*scpb.ConstraintWithoutIndexName' - - joinOnConstraintID($constraint, $constraint-name, $table-id, $constraint-id) - - transient($constraint-Target, $constraint-name-Target) - - $constraint-Node[CurrentStatus] = TRANSIENT_VALIDATED - - $constraint-name-Node[CurrentStatus] = TRANSIENT_ABSENT - - joinTargetNode($constraint, $constraint-Target, $constraint-Node) - - joinTargetNode($constraint-name, $constraint-name-Target, $constraint-name-Node) -- name: Constraint should be hidden before name - from: constraint-Node - kind: Precedence - to: constraint-name-Node - query: - - $constraint[Type] IN ['*scpb.CheckConstraint', '*scpb.CheckConstraintUnvalidated', '*scpb.ColumnNotNull', '*scpb.ForeignKeyConstraint', '*scpb.ForeignKeyConstraintUnvalidated', '*scpb.UniqueWithoutIndexConstraint', '*scpb.UniqueWithoutIndexConstraintUnvalidated'] - - $constraint-name[Type] = '*scpb.ConstraintWithoutIndexName' - - joinOnConstraintID($constraint, $constraint-name, $table-id, $constraint-id) - - $constraint-Target[TargetStatus] = TRANSIENT_ABSENT - - $constraint-Node[CurrentStatus] = TRANSIENT_VALIDATED - - $constraint-name-Target[TargetStatus] = ABSENT - - $constraint-name-Node[CurrentStatus] = ABSENT - - joinTargetNode($constraint, $constraint-Target, $constraint-Node) - - joinTargetNode($constraint-name, $constraint-name-Target, $constraint-name-Node) -- name: Constraint should be hidden before name - from: constraint-Node - kind: Precedence - to: constraint-name-Node - query: - - $constraint[Type] IN ['*scpb.CheckConstraint', '*scpb.CheckConstraintUnvalidated', '*scpb.ColumnNotNull', '*scpb.ForeignKeyConstraint', '*scpb.ForeignKeyConstraintUnvalidated', '*scpb.UniqueWithoutIndexConstraint', '*scpb.UniqueWithoutIndexConstraintUnvalidated'] - - $constraint-name[Type] = '*scpb.ConstraintWithoutIndexName' - - joinOnConstraintID($constraint, $constraint-name, $table-id, $constraint-id) - - $constraint-Target[TargetStatus] = ABSENT - - $constraint-Node[CurrentStatus] = VALIDATED - - $constraint-name-Target[TargetStatus] = TRANSIENT_ABSENT - - $constraint-name-Node[CurrentStatus] = TRANSIENT_ABSENT - - joinTargetNode($constraint, $constraint-Target, $constraint-Node) - - joinTargetNode($constraint-name, $constraint-name-Target, $constraint-name-Node) -- name: DEFAULT or ON UPDATE existence precedes writes to column, except if they are added as part of a alter column type - from: expr-Node - kind: Precedence - to: column-Node - query: - - $expr[Type] IN ['*scpb.ColumnDefaultExpression', '*scpb.ColumnOnUpdateExpression'] - - $column[Type] = '*scpb.Column' - - joinOnColumnID($expr, $column, $table-id, $col-id) - - no column type alteration in progress($table-id, $col-id) - - ToPublicOrTransient($expr-Target, $column-Target) - - $expr-Node[CurrentStatus] = PUBLIC - - $column-Node[CurrentStatus] = WRITE_ONLY - - joinTargetNode($expr, $expr-Target, $expr-Node) - - joinTargetNode($column, $column-Target, $column-Node) -- name: DEFAULT or ON UPDATE expressions is public after transient compute expression transitions to absent - from: transient-compute-expression-Node - kind: SameStagePrecedence - to: column-expr-Node - query: - - $transient-compute-expression[Type] = '*scpb.ColumnComputeExpression' - - $column-expr[Type] IN ['*scpb.ColumnDefaultExpression', '*scpb.ColumnOnUpdateExpression'] - - joinOnColumnID($transient-compute-expression, $column-expr, $table-id, $col-id) - - ToPublicOrTransient($transient-compute-expression-Target, $column-expr-Target) - - $transient-compute-expression-Node[CurrentStatus] = TRANSIENT_ABSENT - - $column-expr-Node[CurrentStatus] = PUBLIC - - joinTargetNode($transient-compute-expression, $transient-compute-expression-Target, $transient-compute-expression-Node) - - joinTargetNode($column-expr, $column-expr-Target, $column-expr-Node) -- name: Final compute expression is always added after transient compute expression - from: transient-compute-expression-Node - kind: SameStagePrecedence - to: final-compute-expression-Node - query: - - $transient-compute-expression[Type] = '*scpb.ColumnComputeExpression' - - $final-compute-expression[Type] = '*scpb.ColumnComputeExpression' - - joinOnColumnID($transient-compute-expression, $final-compute-expression, $table-id, $col-id) - - $transient-compute-expression[Usage] = ALTER_TYPE_USING - - $final-compute-expression[Usage] = REGULAR - - ToPublicOrTransient($transient-compute-expression-Target, $final-compute-expression-Target) - - $transient-compute-expression-Node[CurrentStatus] = TRANSIENT_ABSENT - - $final-compute-expression-Node[CurrentStatus] = PUBLIC - - joinTargetNode($transient-compute-expression, $transient-compute-expression-Target, $transient-compute-expression-Node) - - joinTargetNode($final-compute-expression, $final-compute-expression-Target, $final-compute-expression-Node) -- name: 'ForeignKeyConstraint transitions to ABSENT uphold 2-version invariant: PUBLIC->VALIDATED' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.ForeignKeyConstraint' - - $next[Type] = '*scpb.ForeignKeyConstraint' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = ABSENT - - $prev-Node[CurrentStatus] = PUBLIC - - $next-Node[CurrentStatus] = VALIDATED - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'ForeignKeyConstraint transitions to ABSENT uphold 2-version invariant: VALIDATED->ABSENT' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.ForeignKeyConstraint' - - $next[Type] = '*scpb.ForeignKeyConstraint' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = ABSENT - - $prev-Node[CurrentStatus] = VALIDATED - - $next-Node[CurrentStatus] = ABSENT - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - nodeNotExistsWithStatusIn_WRITE_ONLY($prev-Target) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'ForeignKeyConstraint transitions to ABSENT uphold 2-version invariant: WRITE_ONLY->VALIDATED' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.ForeignKeyConstraint' - - $next[Type] = '*scpb.ForeignKeyConstraint' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = ABSENT - - $prev-Node[CurrentStatus] = WRITE_ONLY - - $next-Node[CurrentStatus] = VALIDATED - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'ForeignKeyConstraint transitions to PUBLIC uphold 2-version invariant: ABSENT->WRITE_ONLY' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.ForeignKeyConstraint' - - $next[Type] = '*scpb.ForeignKeyConstraint' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = PUBLIC - - $prev-Node[CurrentStatus] = ABSENT - - $next-Node[CurrentStatus] = WRITE_ONLY - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'ForeignKeyConstraint transitions to PUBLIC uphold 2-version invariant: VALIDATED->PUBLIC' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.ForeignKeyConstraint' - - $next[Type] = '*scpb.ForeignKeyConstraint' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = PUBLIC - - $prev-Node[CurrentStatus] = VALIDATED - - $next-Node[CurrentStatus] = PUBLIC - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'ForeignKeyConstraint transitions to PUBLIC uphold 2-version invariant: WRITE_ONLY->VALIDATED' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.ForeignKeyConstraint' - - $next[Type] = '*scpb.ForeignKeyConstraint' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = PUBLIC - - $prev-Node[CurrentStatus] = WRITE_ONLY - - $next-Node[CurrentStatus] = VALIDATED - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: New primary index for alter column type should go public in the same stage as dropped column - from: column-Node - kind: SameStagePrecedence - to: new-primary-index-Node - query: - - $column[Type] = '*scpb.Column' - - $new-primary-index[Type] = '*scpb.PrimaryIndex' - - ColumnInSourcePrimaryIndex($index-column, $new-primary-index, $table-id, $old-column-id, $index-id) - - joinOnColumnID($index-column, $column, $table-id, $old-column-id) - - $column-Target[TargetStatus] = ABSENT - - $column-Node[CurrentStatus] = WRITE_ONLY - - $new-primary-index-Target[TargetStatus] = PUBLIC - - $new-primary-index-Node[CurrentStatus] = PUBLIC - - $old-column-name[Type] = '*scpb.ColumnName' - - $new-column-name[Type] = '*scpb.ColumnName' - - joinOnColumnName($old-column-name, $new-column-name, $table-id, $column-name) - - $old-column-name[ColumnID] = $old-column-id - - $old-column-name-Target[TargetStatus] = ABSENT - - $new-column-name-Target[TargetStatus] = PUBLIC - - $compute-expression[Type] = '*scpb.ColumnComputeExpression' - - joinOnColumnID($new-column-name, $compute-expression, $table-id, $new-column-id) - - $compute-expression[Usage] = ALTER_TYPE_USING - - joinTargetNode($old-column-name, $old-column-name-Target, $old-column-name-Node) - - joinTargetNode($new-column-name, $new-column-name-Target, $new-column-name-Node) - - joinTargetNode($compute-expression, $compute-expression-Target, $compute-expression-Node) - - joinTargetNode($column, $column-Target, $column-Node) - - joinTargetNode($new-primary-index, $new-primary-index-Target, $new-primary-index-Node) -- name: New primary index should go public only after columns being dropped move to WRITE_ONLY - from: column-Node - kind: Precedence - to: new-primary-index-Node - query: - - $column[Type] = '*scpb.Column' - - $new-primary-index[Type] = '*scpb.PrimaryIndex' - - ColumnInSourcePrimaryIndex($index-column, $new-primary-index, $table-id, $old-column-id, $index-id) - - joinOnColumnID($index-column, $column, $table-id, $old-column-id) - - $column-Target[TargetStatus] = ABSENT - - $column-Node[CurrentStatus] = WRITE_ONLY - - $new-primary-index-Target[TargetStatus] = PUBLIC - - $new-primary-index-Node[CurrentStatus] = PUBLIC - - dropped column is not part of column type operation($table-id, $old-column-id) - - joinTargetNode($column, $column-Target, $column-Node) - - joinTargetNode($new-primary-index, $new-primary-index-Target, $new-primary-index-Node) -- name: 'PrimaryIndex transitions to ABSENT uphold 2-version invariant: BACKFILLED->DELETE_ONLY' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.PrimaryIndex' - - $next[Type] = '*scpb.PrimaryIndex' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = ABSENT - - $prev-Node[CurrentStatus] = BACKFILLED - - $next-Node[CurrentStatus] = DELETE_ONLY - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'PrimaryIndex transitions to ABSENT uphold 2-version invariant: BACKFILL_ONLY->DELETE_ONLY' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.PrimaryIndex' - - $next[Type] = '*scpb.PrimaryIndex' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = ABSENT - - $prev-Node[CurrentStatus] = BACKFILL_ONLY - - $next-Node[CurrentStatus] = DELETE_ONLY - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'PrimaryIndex transitions to ABSENT uphold 2-version invariant: DELETE_ONLY->ABSENT' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.PrimaryIndex' - - $next[Type] = '*scpb.PrimaryIndex' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = ABSENT - - $prev-Node[CurrentStatus] = DELETE_ONLY - - $next-Node[CurrentStatus] = ABSENT - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - nodeNotExistsWithStatusIn_TRANSIENT_DELETE_ONLY_BACKFILLED_TRANSIENT_BACKFILLED_BACKFILL_ONLY_TRANSIENT_BACKFILL_ONLY($prev-Target) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'PrimaryIndex transitions to ABSENT uphold 2-version invariant: MERGED->WRITE_ONLY' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.PrimaryIndex' - - $next[Type] = '*scpb.PrimaryIndex' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = ABSENT - - $prev-Node[CurrentStatus] = MERGED - - $next-Node[CurrentStatus] = WRITE_ONLY - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'PrimaryIndex transitions to ABSENT uphold 2-version invariant: MERGE_ONLY->WRITE_ONLY' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.PrimaryIndex' - - $next[Type] = '*scpb.PrimaryIndex' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = ABSENT - - $prev-Node[CurrentStatus] = MERGE_ONLY - - $next-Node[CurrentStatus] = WRITE_ONLY - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'PrimaryIndex transitions to ABSENT uphold 2-version invariant: PUBLIC->VALIDATED' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.PrimaryIndex' - - $next[Type] = '*scpb.PrimaryIndex' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = ABSENT - - $prev-Node[CurrentStatus] = PUBLIC - - $next-Node[CurrentStatus] = VALIDATED - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'PrimaryIndex transitions to ABSENT uphold 2-version invariant: TRANSIENT_ABSENT->ABSENT' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.PrimaryIndex' - - $next[Type] = '*scpb.PrimaryIndex' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = ABSENT - - $prev-Node[CurrentStatus] = TRANSIENT_ABSENT - - $next-Node[CurrentStatus] = ABSENT - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'PrimaryIndex transitions to ABSENT uphold 2-version invariant: TRANSIENT_BACKFILLED->DELETE_ONLY' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.PrimaryIndex' - - $next[Type] = '*scpb.PrimaryIndex' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = ABSENT - - $prev-Node[CurrentStatus] = TRANSIENT_BACKFILLED - - $next-Node[CurrentStatus] = DELETE_ONLY - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'PrimaryIndex transitions to ABSENT uphold 2-version invariant: TRANSIENT_BACKFILL_ONLY->DELETE_ONLY' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.PrimaryIndex' - - $next[Type] = '*scpb.PrimaryIndex' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = ABSENT - - $prev-Node[CurrentStatus] = TRANSIENT_BACKFILL_ONLY - - $next-Node[CurrentStatus] = DELETE_ONLY - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'PrimaryIndex transitions to ABSENT uphold 2-version invariant: TRANSIENT_DELETE_ONLY->DELETE_ONLY' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.PrimaryIndex' - - $next[Type] = '*scpb.PrimaryIndex' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = ABSENT - - $prev-Node[CurrentStatus] = TRANSIENT_DELETE_ONLY - - $next-Node[CurrentStatus] = DELETE_ONLY - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'PrimaryIndex transitions to ABSENT uphold 2-version invariant: TRANSIENT_MERGED->WRITE_ONLY' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.PrimaryIndex' - - $next[Type] = '*scpb.PrimaryIndex' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = ABSENT - - $prev-Node[CurrentStatus] = TRANSIENT_MERGED - - $next-Node[CurrentStatus] = WRITE_ONLY - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'PrimaryIndex transitions to ABSENT uphold 2-version invariant: TRANSIENT_MERGE_ONLY->WRITE_ONLY' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.PrimaryIndex' - - $next[Type] = '*scpb.PrimaryIndex' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = ABSENT - - $prev-Node[CurrentStatus] = TRANSIENT_MERGE_ONLY - - $next-Node[CurrentStatus] = WRITE_ONLY - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'PrimaryIndex transitions to ABSENT uphold 2-version invariant: TRANSIENT_VALIDATED->VALIDATED' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.PrimaryIndex' - - $next[Type] = '*scpb.PrimaryIndex' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = ABSENT - - $prev-Node[CurrentStatus] = TRANSIENT_VALIDATED - - $next-Node[CurrentStatus] = VALIDATED - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'PrimaryIndex transitions to ABSENT uphold 2-version invariant: TRANSIENT_WRITE_ONLY->WRITE_ONLY' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.PrimaryIndex' - - $next[Type] = '*scpb.PrimaryIndex' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = ABSENT - - $prev-Node[CurrentStatus] = TRANSIENT_WRITE_ONLY - - $next-Node[CurrentStatus] = WRITE_ONLY - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'PrimaryIndex transitions to ABSENT uphold 2-version invariant: VALIDATED->WRITE_ONLY' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.PrimaryIndex' - - $next[Type] = '*scpb.PrimaryIndex' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = ABSENT - - $prev-Node[CurrentStatus] = VALIDATED - - $next-Node[CurrentStatus] = WRITE_ONLY - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - nodeNotExistsWithStatusIn_TRANSIENT_VALIDATED($prev-Target) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'PrimaryIndex transitions to ABSENT uphold 2-version invariant: WRITE_ONLY->DELETE_ONLY' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.PrimaryIndex' - - $next[Type] = '*scpb.PrimaryIndex' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = ABSENT - - $prev-Node[CurrentStatus] = WRITE_ONLY - - $next-Node[CurrentStatus] = DELETE_ONLY - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - nodeNotExistsWithStatusIn_VALIDATED_TRANSIENT_WRITE_ONLY_MERGE_ONLY_TRANSIENT_MERGE_ONLY_MERGED_TRANSIENT_MERGED($prev-Target) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'PrimaryIndex transitions to PUBLIC uphold 2-version invariant: ABSENT->BACKFILL_ONLY' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.PrimaryIndex' - - $next[Type] = '*scpb.PrimaryIndex' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = PUBLIC - - $prev-Node[CurrentStatus] = ABSENT - - $next-Node[CurrentStatus] = BACKFILL_ONLY - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'PrimaryIndex transitions to PUBLIC uphold 2-version invariant: BACKFILLED->DELETE_ONLY' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.PrimaryIndex' - - $next[Type] = '*scpb.PrimaryIndex' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = PUBLIC - - $prev-Node[CurrentStatus] = BACKFILLED - - $next-Node[CurrentStatus] = DELETE_ONLY - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'PrimaryIndex transitions to PUBLIC uphold 2-version invariant: BACKFILL_ONLY->BACKFILLED' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.PrimaryIndex' - - $next[Type] = '*scpb.PrimaryIndex' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = PUBLIC - - $prev-Node[CurrentStatus] = BACKFILL_ONLY - - $next-Node[CurrentStatus] = BACKFILLED - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'PrimaryIndex transitions to PUBLIC uphold 2-version invariant: DELETE_ONLY->MERGE_ONLY' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.PrimaryIndex' - - $next[Type] = '*scpb.PrimaryIndex' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = PUBLIC - - $prev-Node[CurrentStatus] = DELETE_ONLY - - $next-Node[CurrentStatus] = MERGE_ONLY - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'PrimaryIndex transitions to PUBLIC uphold 2-version invariant: MERGED->WRITE_ONLY' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.PrimaryIndex' - - $next[Type] = '*scpb.PrimaryIndex' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = PUBLIC - - $prev-Node[CurrentStatus] = MERGED - - $next-Node[CurrentStatus] = WRITE_ONLY - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'PrimaryIndex transitions to PUBLIC uphold 2-version invariant: MERGE_ONLY->MERGED' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.PrimaryIndex' - - $next[Type] = '*scpb.PrimaryIndex' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = PUBLIC - - $prev-Node[CurrentStatus] = MERGE_ONLY - - $next-Node[CurrentStatus] = MERGED - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'PrimaryIndex transitions to PUBLIC uphold 2-version invariant: VALIDATED->PUBLIC' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.PrimaryIndex' - - $next[Type] = '*scpb.PrimaryIndex' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = PUBLIC - - $prev-Node[CurrentStatus] = VALIDATED - - $next-Node[CurrentStatus] = PUBLIC - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'PrimaryIndex transitions to PUBLIC uphold 2-version invariant: WRITE_ONLY->VALIDATED' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.PrimaryIndex' - - $next[Type] = '*scpb.PrimaryIndex' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = PUBLIC - - $prev-Node[CurrentStatus] = WRITE_ONLY - - $next-Node[CurrentStatus] = VALIDATED - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'PrimaryIndex transitions to TRANSIENT_ABSENT uphold 2-version invariant: ABSENT->BACKFILL_ONLY' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.PrimaryIndex' - - $next[Type] = '*scpb.PrimaryIndex' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = TRANSIENT_ABSENT - - $prev-Node[CurrentStatus] = ABSENT - - $next-Node[CurrentStatus] = BACKFILL_ONLY - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'PrimaryIndex transitions to TRANSIENT_ABSENT uphold 2-version invariant: BACKFILLED->DELETE_ONLY' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.PrimaryIndex' - - $next[Type] = '*scpb.PrimaryIndex' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = TRANSIENT_ABSENT - - $prev-Node[CurrentStatus] = BACKFILLED - - $next-Node[CurrentStatus] = DELETE_ONLY - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'PrimaryIndex transitions to TRANSIENT_ABSENT uphold 2-version invariant: BACKFILL_ONLY->BACKFILLED' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.PrimaryIndex' - - $next[Type] = '*scpb.PrimaryIndex' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = TRANSIENT_ABSENT - - $prev-Node[CurrentStatus] = BACKFILL_ONLY - - $next-Node[CurrentStatus] = BACKFILLED - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'PrimaryIndex transitions to TRANSIENT_ABSENT uphold 2-version invariant: DELETE_ONLY->MERGE_ONLY' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.PrimaryIndex' - - $next[Type] = '*scpb.PrimaryIndex' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = TRANSIENT_ABSENT - - $prev-Node[CurrentStatus] = DELETE_ONLY - - $next-Node[CurrentStatus] = MERGE_ONLY - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'PrimaryIndex transitions to TRANSIENT_ABSENT uphold 2-version invariant: MERGED->WRITE_ONLY' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.PrimaryIndex' - - $next[Type] = '*scpb.PrimaryIndex' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = TRANSIENT_ABSENT - - $prev-Node[CurrentStatus] = MERGED - - $next-Node[CurrentStatus] = WRITE_ONLY - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'PrimaryIndex transitions to TRANSIENT_ABSENT uphold 2-version invariant: MERGE_ONLY->MERGED' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.PrimaryIndex' - - $next[Type] = '*scpb.PrimaryIndex' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = TRANSIENT_ABSENT - - $prev-Node[CurrentStatus] = MERGE_ONLY - - $next-Node[CurrentStatus] = MERGED - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'PrimaryIndex transitions to TRANSIENT_ABSENT uphold 2-version invariant: PUBLIC->TRANSIENT_VALIDATED' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.PrimaryIndex' - - $next[Type] = '*scpb.PrimaryIndex' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = TRANSIENT_ABSENT - - $prev-Node[CurrentStatus] = PUBLIC - - $next-Node[CurrentStatus] = TRANSIENT_VALIDATED - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'PrimaryIndex transitions to TRANSIENT_ABSENT uphold 2-version invariant: TRANSIENT_BACKFILLED->TRANSIENT_DELETE_ONLY' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.PrimaryIndex' - - $next[Type] = '*scpb.PrimaryIndex' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = TRANSIENT_ABSENT - - $prev-Node[CurrentStatus] = TRANSIENT_BACKFILLED - - $next-Node[CurrentStatus] = TRANSIENT_DELETE_ONLY - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'PrimaryIndex transitions to TRANSIENT_ABSENT uphold 2-version invariant: TRANSIENT_BACKFILL_ONLY->TRANSIENT_DELETE_ONLY' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.PrimaryIndex' - - $next[Type] = '*scpb.PrimaryIndex' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = TRANSIENT_ABSENT - - $prev-Node[CurrentStatus] = TRANSIENT_BACKFILL_ONLY - - $next-Node[CurrentStatus] = TRANSIENT_DELETE_ONLY - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'PrimaryIndex transitions to TRANSIENT_ABSENT uphold 2-version invariant: TRANSIENT_DELETE_ONLY->TRANSIENT_ABSENT' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.PrimaryIndex' - - $next[Type] = '*scpb.PrimaryIndex' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = TRANSIENT_ABSENT - - $prev-Node[CurrentStatus] = TRANSIENT_DELETE_ONLY - - $next-Node[CurrentStatus] = TRANSIENT_ABSENT - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - nodeNotExistsWithStatusIn_TRANSIENT_BACKFILLED_TRANSIENT_BACKFILL_ONLY($prev-Target) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'PrimaryIndex transitions to TRANSIENT_ABSENT uphold 2-version invariant: TRANSIENT_MERGED->TRANSIENT_WRITE_ONLY' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.PrimaryIndex' - - $next[Type] = '*scpb.PrimaryIndex' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = TRANSIENT_ABSENT - - $prev-Node[CurrentStatus] = TRANSIENT_MERGED - - $next-Node[CurrentStatus] = TRANSIENT_WRITE_ONLY - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'PrimaryIndex transitions to TRANSIENT_ABSENT uphold 2-version invariant: TRANSIENT_MERGE_ONLY->TRANSIENT_WRITE_ONLY' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.PrimaryIndex' - - $next[Type] = '*scpb.PrimaryIndex' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = TRANSIENT_ABSENT - - $prev-Node[CurrentStatus] = TRANSIENT_MERGE_ONLY - - $next-Node[CurrentStatus] = TRANSIENT_WRITE_ONLY - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'PrimaryIndex transitions to TRANSIENT_ABSENT uphold 2-version invariant: TRANSIENT_VALIDATED->TRANSIENT_WRITE_ONLY' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.PrimaryIndex' - - $next[Type] = '*scpb.PrimaryIndex' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = TRANSIENT_ABSENT - - $prev-Node[CurrentStatus] = TRANSIENT_VALIDATED - - $next-Node[CurrentStatus] = TRANSIENT_WRITE_ONLY - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'PrimaryIndex transitions to TRANSIENT_ABSENT uphold 2-version invariant: TRANSIENT_WRITE_ONLY->TRANSIENT_DELETE_ONLY' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.PrimaryIndex' - - $next[Type] = '*scpb.PrimaryIndex' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = TRANSIENT_ABSENT - - $prev-Node[CurrentStatus] = TRANSIENT_WRITE_ONLY - - $next-Node[CurrentStatus] = TRANSIENT_DELETE_ONLY - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - nodeNotExistsWithStatusIn_TRANSIENT_VALIDATED_TRANSIENT_MERGE_ONLY_TRANSIENT_MERGED($prev-Target) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'PrimaryIndex transitions to TRANSIENT_ABSENT uphold 2-version invariant: VALIDATED->PUBLIC' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.PrimaryIndex' - - $next[Type] = '*scpb.PrimaryIndex' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = TRANSIENT_ABSENT - - $prev-Node[CurrentStatus] = VALIDATED - - $next-Node[CurrentStatus] = PUBLIC - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'PrimaryIndex transitions to TRANSIENT_ABSENT uphold 2-version invariant: WRITE_ONLY->VALIDATED' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.PrimaryIndex' - - $next[Type] = '*scpb.PrimaryIndex' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = TRANSIENT_ABSENT - - $prev-Node[CurrentStatus] = WRITE_ONLY - - $next-Node[CurrentStatus] = VALIDATED - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'SecondaryIndex transitions to ABSENT uphold 2-version invariant: BACKFILLED->DELETE_ONLY' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.SecondaryIndex' - - $next[Type] = '*scpb.SecondaryIndex' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = ABSENT - - $prev-Node[CurrentStatus] = BACKFILLED - - $next-Node[CurrentStatus] = DELETE_ONLY - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'SecondaryIndex transitions to ABSENT uphold 2-version invariant: BACKFILL_ONLY->DELETE_ONLY' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.SecondaryIndex' - - $next[Type] = '*scpb.SecondaryIndex' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = ABSENT - - $prev-Node[CurrentStatus] = BACKFILL_ONLY - - $next-Node[CurrentStatus] = DELETE_ONLY - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'SecondaryIndex transitions to ABSENT uphold 2-version invariant: DELETE_ONLY->ABSENT' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.SecondaryIndex' - - $next[Type] = '*scpb.SecondaryIndex' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = ABSENT - - $prev-Node[CurrentStatus] = DELETE_ONLY - - $next-Node[CurrentStatus] = ABSENT - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - nodeNotExistsWithStatusIn_BACKFILLED_BACKFILL_ONLY($prev-Target) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'SecondaryIndex transitions to ABSENT uphold 2-version invariant: MERGED->WRITE_ONLY' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.SecondaryIndex' - - $next[Type] = '*scpb.SecondaryIndex' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = ABSENT - - $prev-Node[CurrentStatus] = MERGED - - $next-Node[CurrentStatus] = WRITE_ONLY - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'SecondaryIndex transitions to ABSENT uphold 2-version invariant: MERGE_ONLY->WRITE_ONLY' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.SecondaryIndex' - - $next[Type] = '*scpb.SecondaryIndex' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = ABSENT - - $prev-Node[CurrentStatus] = MERGE_ONLY - - $next-Node[CurrentStatus] = WRITE_ONLY - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'SecondaryIndex transitions to ABSENT uphold 2-version invariant: PUBLIC->VALIDATED' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.SecondaryIndex' - - $next[Type] = '*scpb.SecondaryIndex' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = ABSENT - - $prev-Node[CurrentStatus] = PUBLIC - - $next-Node[CurrentStatus] = VALIDATED - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'SecondaryIndex transitions to ABSENT uphold 2-version invariant: VALIDATED->WRITE_ONLY' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.SecondaryIndex' - - $next[Type] = '*scpb.SecondaryIndex' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = ABSENT - - $prev-Node[CurrentStatus] = VALIDATED - - $next-Node[CurrentStatus] = WRITE_ONLY - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'SecondaryIndex transitions to ABSENT uphold 2-version invariant: WRITE_ONLY->DELETE_ONLY' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.SecondaryIndex' - - $next[Type] = '*scpb.SecondaryIndex' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = ABSENT - - $prev-Node[CurrentStatus] = WRITE_ONLY - - $next-Node[CurrentStatus] = DELETE_ONLY - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - nodeNotExistsWithStatusIn_VALIDATED_MERGE_ONLY_MERGED($prev-Target) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'SecondaryIndex transitions to PUBLIC uphold 2-version invariant: ABSENT->BACKFILL_ONLY' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.SecondaryIndex' - - $next[Type] = '*scpb.SecondaryIndex' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = PUBLIC - - $prev-Node[CurrentStatus] = ABSENT - - $next-Node[CurrentStatus] = BACKFILL_ONLY - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'SecondaryIndex transitions to PUBLIC uphold 2-version invariant: BACKFILLED->DELETE_ONLY' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.SecondaryIndex' - - $next[Type] = '*scpb.SecondaryIndex' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = PUBLIC - - $prev-Node[CurrentStatus] = BACKFILLED - - $next-Node[CurrentStatus] = DELETE_ONLY - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'SecondaryIndex transitions to PUBLIC uphold 2-version invariant: BACKFILL_ONLY->BACKFILLED' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.SecondaryIndex' - - $next[Type] = '*scpb.SecondaryIndex' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = PUBLIC - - $prev-Node[CurrentStatus] = BACKFILL_ONLY - - $next-Node[CurrentStatus] = BACKFILLED - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'SecondaryIndex transitions to PUBLIC uphold 2-version invariant: DELETE_ONLY->MERGE_ONLY' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.SecondaryIndex' - - $next[Type] = '*scpb.SecondaryIndex' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = PUBLIC - - $prev-Node[CurrentStatus] = DELETE_ONLY - - $next-Node[CurrentStatus] = MERGE_ONLY - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'SecondaryIndex transitions to PUBLIC uphold 2-version invariant: MERGED->WRITE_ONLY' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.SecondaryIndex' - - $next[Type] = '*scpb.SecondaryIndex' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = PUBLIC - - $prev-Node[CurrentStatus] = MERGED - - $next-Node[CurrentStatus] = WRITE_ONLY - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'SecondaryIndex transitions to PUBLIC uphold 2-version invariant: MERGE_ONLY->MERGED' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.SecondaryIndex' - - $next[Type] = '*scpb.SecondaryIndex' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = PUBLIC - - $prev-Node[CurrentStatus] = MERGE_ONLY - - $next-Node[CurrentStatus] = MERGED - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'SecondaryIndex transitions to PUBLIC uphold 2-version invariant: VALIDATED->PUBLIC' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.SecondaryIndex' - - $next[Type] = '*scpb.SecondaryIndex' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = PUBLIC - - $prev-Node[CurrentStatus] = VALIDATED - - $next-Node[CurrentStatus] = PUBLIC - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'SecondaryIndex transitions to PUBLIC uphold 2-version invariant: WRITE_ONLY->VALIDATED' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.SecondaryIndex' - - $next[Type] = '*scpb.SecondaryIndex' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = PUBLIC - - $prev-Node[CurrentStatus] = WRITE_ONLY - - $next-Node[CurrentStatus] = VALIDATED - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'TableSchemaLocked transitions to ABSENT uphold 2-version invariant: PUBLIC->ABSENT' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.TableSchemaLocked' - - $next[Type] = '*scpb.TableSchemaLocked' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = ABSENT - - $prev-Node[CurrentStatus] = PUBLIC - - $next-Node[CurrentStatus] = ABSENT - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - nodeNotExistsWithStatusIn_TRANSIENT_PUBLIC($prev-Target) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'TableSchemaLocked transitions to ABSENT uphold 2-version invariant: TRANSIENT_PUBLIC->PUBLIC' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.TableSchemaLocked' - - $next[Type] = '*scpb.TableSchemaLocked' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = ABSENT - - $prev-Node[CurrentStatus] = TRANSIENT_PUBLIC - - $next-Node[CurrentStatus] = PUBLIC - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'TableSchemaLocked transitions to PUBLIC uphold 2-version invariant: ABSENT->PUBLIC' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.TableSchemaLocked' - - $next[Type] = '*scpb.TableSchemaLocked' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = PUBLIC - - $prev-Node[CurrentStatus] = ABSENT - - $next-Node[CurrentStatus] = PUBLIC - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'TableSchemaLocked transitions to TRANSIENT_PUBLIC uphold 2-version invariant: ABSENT->TRANSIENT_PUBLIC' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.TableSchemaLocked' - - $next[Type] = '*scpb.TableSchemaLocked' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = TRANSIENT_PUBLIC - - $prev-Node[CurrentStatus] = ABSENT - - $next-Node[CurrentStatus] = TRANSIENT_PUBLIC - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'TableSchemaLocked transitions to TRANSIENT_PUBLIC uphold 2-version invariant: PUBLIC->ABSENT' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.TableSchemaLocked' - - $next[Type] = '*scpb.TableSchemaLocked' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = TRANSIENT_PUBLIC - - $prev-Node[CurrentStatus] = PUBLIC - - $next-Node[CurrentStatus] = ABSENT - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'TemporaryIndex transitions to ABSENT uphold 2-version invariant: DELETE_ONLY->ABSENT' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.TemporaryIndex' - - $next[Type] = '*scpb.TemporaryIndex' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = ABSENT - - $prev-Node[CurrentStatus] = DELETE_ONLY - - $next-Node[CurrentStatus] = ABSENT - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - nodeNotExistsWithStatusIn_TRANSIENT_DELETE_ONLY($prev-Target) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'TemporaryIndex transitions to ABSENT uphold 2-version invariant: TRANSIENT_ABSENT->ABSENT' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.TemporaryIndex' - - $next[Type] = '*scpb.TemporaryIndex' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = ABSENT - - $prev-Node[CurrentStatus] = TRANSIENT_ABSENT - - $next-Node[CurrentStatus] = ABSENT - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'TemporaryIndex transitions to ABSENT uphold 2-version invariant: TRANSIENT_DELETE_ONLY->DELETE_ONLY' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.TemporaryIndex' - - $next[Type] = '*scpb.TemporaryIndex' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = ABSENT - - $prev-Node[CurrentStatus] = TRANSIENT_DELETE_ONLY - - $next-Node[CurrentStatus] = DELETE_ONLY - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'TemporaryIndex transitions to ABSENT uphold 2-version invariant: WRITE_ONLY->DELETE_ONLY' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.TemporaryIndex' - - $next[Type] = '*scpb.TemporaryIndex' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = ABSENT - - $prev-Node[CurrentStatus] = WRITE_ONLY - - $next-Node[CurrentStatus] = DELETE_ONLY - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'TemporaryIndex transitions to TRANSIENT_ABSENT uphold 2-version invariant: ABSENT->DELETE_ONLY' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.TemporaryIndex' - - $next[Type] = '*scpb.TemporaryIndex' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = TRANSIENT_ABSENT - - $prev-Node[CurrentStatus] = ABSENT - - $next-Node[CurrentStatus] = DELETE_ONLY - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'TemporaryIndex transitions to TRANSIENT_ABSENT uphold 2-version invariant: DELETE_ONLY->WRITE_ONLY' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.TemporaryIndex' - - $next[Type] = '*scpb.TemporaryIndex' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = TRANSIENT_ABSENT - - $prev-Node[CurrentStatus] = DELETE_ONLY - - $next-Node[CurrentStatus] = WRITE_ONLY - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'TemporaryIndex transitions to TRANSIENT_ABSENT uphold 2-version invariant: TRANSIENT_DELETE_ONLY->TRANSIENT_ABSENT' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.TemporaryIndex' - - $next[Type] = '*scpb.TemporaryIndex' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = TRANSIENT_ABSENT - - $prev-Node[CurrentStatus] = TRANSIENT_DELETE_ONLY - - $next-Node[CurrentStatus] = TRANSIENT_ABSENT - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'TemporaryIndex transitions to TRANSIENT_ABSENT uphold 2-version invariant: WRITE_ONLY->TRANSIENT_DELETE_ONLY' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.TemporaryIndex' - - $next[Type] = '*scpb.TemporaryIndex' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = TRANSIENT_ABSENT - - $prev-Node[CurrentStatus] = WRITE_ONLY - - $next-Node[CurrentStatus] = TRANSIENT_DELETE_ONLY - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'UniqueWithoutIndexConstraint transitions to ABSENT uphold 2-version invariant: PUBLIC->VALIDATED' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.UniqueWithoutIndexConstraint' - - $next[Type] = '*scpb.UniqueWithoutIndexConstraint' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = ABSENT - - $prev-Node[CurrentStatus] = PUBLIC - - $next-Node[CurrentStatus] = VALIDATED - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'UniqueWithoutIndexConstraint transitions to ABSENT uphold 2-version invariant: VALIDATED->ABSENT' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.UniqueWithoutIndexConstraint' - - $next[Type] = '*scpb.UniqueWithoutIndexConstraint' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = ABSENT - - $prev-Node[CurrentStatus] = VALIDATED - - $next-Node[CurrentStatus] = ABSENT - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - nodeNotExistsWithStatusIn_WRITE_ONLY($prev-Target) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'UniqueWithoutIndexConstraint transitions to ABSENT uphold 2-version invariant: WRITE_ONLY->VALIDATED' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.UniqueWithoutIndexConstraint' - - $next[Type] = '*scpb.UniqueWithoutIndexConstraint' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = ABSENT - - $prev-Node[CurrentStatus] = WRITE_ONLY - - $next-Node[CurrentStatus] = VALIDATED - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'UniqueWithoutIndexConstraint transitions to PUBLIC uphold 2-version invariant: ABSENT->WRITE_ONLY' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.UniqueWithoutIndexConstraint' - - $next[Type] = '*scpb.UniqueWithoutIndexConstraint' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = PUBLIC - - $prev-Node[CurrentStatus] = ABSENT - - $next-Node[CurrentStatus] = WRITE_ONLY - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'UniqueWithoutIndexConstraint transitions to PUBLIC uphold 2-version invariant: VALIDATED->PUBLIC' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.UniqueWithoutIndexConstraint' - - $next[Type] = '*scpb.UniqueWithoutIndexConstraint' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = PUBLIC - - $prev-Node[CurrentStatus] = VALIDATED - - $next-Node[CurrentStatus] = PUBLIC - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: 'UniqueWithoutIndexConstraint transitions to PUBLIC uphold 2-version invariant: WRITE_ONLY->VALIDATED' - from: prev-Node - kind: PreviousTransactionPrecedence - to: next-Node - query: - - $prev[Type] = '*scpb.UniqueWithoutIndexConstraint' - - $next[Type] = '*scpb.UniqueWithoutIndexConstraint' - - $prev[DescID] = $descID - - $prev[Self] = $next - - $prev-Target[Self] = $next-Target - - $prev-Target[TargetStatus] = PUBLIC - - $prev-Node[CurrentStatus] = WRITE_ONLY - - $next-Node[CurrentStatus] = VALIDATED - - descriptorIsNotBeingDropped-25.2($prev) - - $descriptor-data[Type] = '*scpb.TableData' - - joinTargetNode($descriptor-data, $descriptor-data-Target, $descriptor-data-Node) - - $descriptor-data-Node[CurrentStatus] = PUBLIC - - $descriptor-data[DescID] = $descID - - descriptorIsDataNotBeingAdded-25.2($descID) - - joinTargetNode($prev, $prev-Target, $prev-Node) - - joinTargetNode($next, $next-Target, $next-Node) -- name: adding a transient column compute expression moves to 'absent' after PK validation to ensures it's there for the backfill - from: primary-index-Node - kind: Precedence - to: transient-column-compute-Node - query: - - $primary-index[Type] = '*scpb.PrimaryIndex' - - $transient-column-compute[Type] = '*scpb.ColumnComputeExpression' - - joinOnDescID($primary-index, $transient-column-compute, $table-id) - - $primary-index-Target[TargetStatus] = PUBLIC - - $transient-column-compute-Target[TargetStatus] = TRANSIENT_ABSENT - - $primary-index-Node[CurrentStatus] = VALIDATED - - $transient-column-compute-Node[CurrentStatus] = TRANSIENT_ABSENT - - joinTargetNode($primary-index, $primary-index-Target, $primary-index-Node) - - joinTargetNode($transient-column-compute, $transient-column-compute-Target, $transient-column-compute-Node) -- name: all adding indexes reached BACKFILL_ONLY before any of their columns disappear - from: index-Node - kind: Precedence - to: column-Node - query: - - $index[Type] IN ['*scpb.PrimaryIndex', '*scpb.SecondaryIndex'] - - $column[Type] = '*scpb.Column' - - ColumnInIndex($index-column, $index, $table-id, $column-id, $index-id) - - joinOnColumnID($index-column, $column, $table-id, $column-id) - - $index-Target[TargetStatus] IN [PUBLIC, TRANSIENT_ABSENT] - - $index-Node[CurrentStatus] = BACKFILL_ONLY - - $column-Target[TargetStatus] = ABSENT - - $column-Node[CurrentStatus] = WRITE_ONLY - - joinTargetNode($index, $index-Target, $index-Node) - - joinTargetNode($column, $column-Target, $column-Node) -- name: back-reference in parent descriptor is removed before parent descriptor is dropped - from: back-reference-in-parent-descriptor-Node - kind: Precedence - to: parent-descriptor-Node - query: - - $back-reference-in-parent-descriptor[Type] IN ['*scpb.SchemaChild', '*scpb.SchemaParent'] - - $parent-descriptor[Type] IN ['*scpb.AliasType', '*scpb.CompositeType', '*scpb.Database', '*scpb.EnumType', '*scpb.Function', '*scpb.Schema', '*scpb.Sequence', '*scpb.Table', '*scpb.View'] - - joinReferencedDescID($back-reference-in-parent-descriptor, $parent-descriptor, $desc-id) - - toAbsent($back-reference-in-parent-descriptor-Target, $parent-descriptor-Target) - - $back-reference-in-parent-descriptor-Node[CurrentStatus] = ABSENT - - $parent-descriptor-Node[CurrentStatus] = DROPPED - - joinTargetNode($back-reference-in-parent-descriptor, $back-reference-in-parent-descriptor-Target, $back-reference-in-parent-descriptor-Node) - - joinTargetNode($parent-descriptor, $parent-descriptor-Target, $parent-descriptor-Node) -- name: column constraint removed right before column reaches write only - from: column-constraint-Node - kind: Precedence - to: column-Node - query: - - $column-constraint[Type] IN ['*scpb.CheckConstraint', '*scpb.ColumnNotNull', '*scpb.ForeignKeyConstraint', '*scpb.UniqueWithoutIndexConstraint'] - - $column[Type] = '*scpb.Column' - - joinOnColumnID($column-constraint, $column, $table-id, $col-id) - - toAbsent($column-constraint-Target, $column-Target) - - $column-constraint-Node[CurrentStatus] = ABSENT - - $column-Node[CurrentStatus] = WRITE_ONLY - - joinTargetNode($column-constraint, $column-constraint-Target, $column-constraint-Node) - - joinTargetNode($column, $column-Target, $column-Node) -- name: column constraint removed right before column reaches write only - from: column-constraint-Node - kind: Precedence - to: column-Node - query: - - $column-constraint[Type] IN ['*scpb.CheckConstraint', '*scpb.ColumnNotNull', '*scpb.ForeignKeyConstraint', '*scpb.UniqueWithoutIndexConstraint'] - - $column[Type] = '*scpb.Column' - - joinOnColumnID($column-constraint, $column, $table-id, $col-id) - - transient($column-constraint-Target, $column-Target) - - $column-constraint-Node[CurrentStatus] = TRANSIENT_ABSENT - - $column-Node[CurrentStatus] = TRANSIENT_WRITE_ONLY - - joinTargetNode($column-constraint, $column-constraint-Target, $column-constraint-Node) - - joinTargetNode($column, $column-Target, $column-Node) -- name: column constraint removed right before column reaches write only - from: column-constraint-Node - kind: Precedence - to: column-Node - query: - - $column-constraint[Type] IN ['*scpb.CheckConstraint', '*scpb.ColumnNotNull', '*scpb.ForeignKeyConstraint', '*scpb.UniqueWithoutIndexConstraint'] - - $column[Type] = '*scpb.Column' - - joinOnColumnID($column-constraint, $column, $table-id, $col-id) - - $column-constraint-Target[TargetStatus] = TRANSIENT_ABSENT - - $column-constraint-Node[CurrentStatus] = TRANSIENT_ABSENT - - $column-Target[TargetStatus] = ABSENT - - $column-Node[CurrentStatus] = WRITE_ONLY - - joinTargetNode($column-constraint, $column-constraint-Target, $column-constraint-Node) - - joinTargetNode($column, $column-Target, $column-Node) -- name: column constraint removed right before column reaches write only - from: column-constraint-Node - kind: Precedence - to: column-Node - query: - - $column-constraint[Type] IN ['*scpb.CheckConstraint', '*scpb.ColumnNotNull', '*scpb.ForeignKeyConstraint', '*scpb.UniqueWithoutIndexConstraint'] - - $column[Type] = '*scpb.Column' - - joinOnColumnID($column-constraint, $column, $table-id, $col-id) - - $column-constraint-Target[TargetStatus] = ABSENT - - $column-constraint-Node[CurrentStatus] = ABSENT - - $column-Target[TargetStatus] = TRANSIENT_ABSENT - - $column-Node[CurrentStatus] = TRANSIENT_WRITE_ONLY - - joinTargetNode($column-constraint, $column-constraint-Target, $column-constraint-Node) - - joinTargetNode($column, $column-Target, $column-Node) -- name: column dependents exist before column becomes public - from: dependent-Node - kind: Precedence - to: column-Node - query: - - $dependent[Type] IN ['*scpb.ColumnComment', '*scpb.ColumnComputeExpression', '*scpb.ColumnDefaultExpression', '*scpb.ColumnName', '*scpb.ColumnNotNull', '*scpb.ColumnOnUpdateExpression', '*scpb.ColumnType', '*scpb.IndexColumn', '*scpb.SequenceOwner'] - - $column[Type] = '*scpb.Column' - - joinOnColumnID($dependent, $column, $table-id, $col-id) - - ToPublicOrTransient($dependent-Target, $column-Target) - - $dependent-Node[CurrentStatus] = PUBLIC - - $column-Node[CurrentStatus] = PUBLIC - - joinTargetNode($dependent, $dependent-Target, $dependent-Node) - - joinTargetNode($column, $column-Target, $column-Node) -- name: column existence precedes column dependents - from: column-Node - kind: Precedence - to: dependent-Node - query: - - $column[Type] = '*scpb.Column' - - $dependent[Type] IN ['*scpb.ColumnComment', '*scpb.ColumnComputeExpression', '*scpb.ColumnDefaultExpression', '*scpb.ColumnName', '*scpb.ColumnNotNull', '*scpb.ColumnOnUpdateExpression', '*scpb.ColumnType', '*scpb.IndexColumn', '*scpb.SequenceOwner'] - - joinOnColumnID($column, $dependent, $table-id, $col-id) - - ToPublicOrTransient($column-Target, $dependent-Target) - - $column-Node[CurrentStatus] = DELETE_ONLY - - $dependent-Node[CurrentStatus] = PUBLIC - - no column type alteration in progress($table-id, $col-id) - - joinTargetNode($column, $column-Target, $column-Node) - - joinTargetNode($dependent, $dependent-Target, $dependent-Node) -- name: column existence precedes column dependents during an alter column type - from: column-Node - kind: Precedence - to: dependent-Node - query: - - $column[Type] = '*scpb.Column' - - $dependent[Type] IN ['*scpb.ColumnComment', '*scpb.ColumnComputeExpression', '*scpb.ColumnDefaultExpression', '*scpb.ColumnNotNull', '*scpb.ColumnOnUpdateExpression', '*scpb.ColumnType', '*scpb.IndexColumn', '*scpb.SequenceOwner'] - - joinOnColumnID($column, $dependent, $table-id, $col-id) - - ToPublicOrTransient($column-Target, $dependent-Target) - - $column-Node[CurrentStatus] = DELETE_ONLY - - $dependent-Node[CurrentStatus] = PUBLIC - - $column[Type] = '*scpb.Column' - - $compute-expression[Type] = '*scpb.ColumnComputeExpression' - - joinOnColumnID($column, $compute-expression, $table-id, $col-id) - - $compute-expression[Usage] = ALTER_TYPE_USING - - joinTargetNode($column, $column-Target, $column-Node) - - joinTargetNode($compute-expression, $compute-expression-Target, $compute-expression-Node) - - joinTargetNode($column, $column-Target, $column-Node) - - joinTargetNode($dependent, $dependent-Target, $dependent-Node) -- name: column existence precedes index existence - from: column-Node - kind: Precedence - to: index-Node - query: - - $column[Type] = '*scpb.Column' - - $index[Type] IN ['*scpb.PrimaryIndex', '*scpb.SecondaryIndex'] - - joinOnColumnID($column, $index-column, $table-id, $column-id) - - ColumnInIndex($index-column, $index, $table-id, $column-id, $index-id) - - ToPublicOrTransient($column-Target, $index-Target) - - $column-Node[CurrentStatus] = DELETE_ONLY - - $index-Node[CurrentStatus] = BACKFILL_ONLY - - joinTargetNode($column, $column-Target, $column-Node) - - joinTargetNode($index, $index-Target, $index-Node) -- name: column existence precedes temp index existence - from: column-Node - kind: Precedence - to: index-Node - query: - - $column[Type] = '*scpb.Column' - - $index[Type] = '*scpb.TemporaryIndex' - - joinOnColumnID($index-column, $column, $table-id, $column-id) - - ColumnInIndex($index-column, $index, $table-id, $column-id, $index-id) - - ToPublicOrTransient($column-Target, $index-Target) - - $column-Node[CurrentStatus] = DELETE_ONLY - - $index-Node[CurrentStatus] = DELETE_ONLY - - joinTargetNode($column, $column-Target, $column-Node) - - joinTargetNode($index, $index-Target, $index-Node) -- name: column is WRITE_ONLY before temporary index is WRITE_ONLY - from: column-Node - kind: Precedence - to: index-Node - query: - - $column[Type] = '*scpb.Column' - - $index[Type] = '*scpb.TemporaryIndex' - - joinOnColumnID($index-column, $column, $table-id, $column-id) - - ColumnInIndex($index-column, $index, $table-id, $column-id, $index-id) - - ToPublicOrTransient($column-Target, $index-Target) - - $column-Node[CurrentStatus] = WRITE_ONLY - - $index-Node[CurrentStatus] = WRITE_ONLY - - joinTargetNode($column, $column-Target, $column-Node) - - joinTargetNode($index, $index-Target, $index-Node) -- name: column name set right after column existence, except for alter column type - from: column-Node - kind: SameStagePrecedence - to: column-name-or-type-Node - query: - - $column[Type] = '*scpb.Column' - - $column-name-or-type[Type] = '*scpb.ColumnName' - - ToPublicOrTransient($column-Target, $column-name-or-type-Target) - - $column-Node[CurrentStatus] = DELETE_ONLY - - $column-name-or-type-Node[CurrentStatus] = PUBLIC - - joinOnColumnID($column, $column-name-or-type, $table-id, $col-id) - - no column type alteration in progress($table-id, $col-id) - - joinTargetNode($column, $column-Target, $column-Node) - - joinTargetNode($column-name-or-type, $column-name-or-type-Target, $column-name-or-type-Node) -- name: column no longer public before dependents - from: column-Node - kind: Precedence - to: dependent-Node - query: - - $column[Type] = '*scpb.Column' - - $dependent[Type] IN ['*scpb.ColumnComment', '*scpb.ColumnComputeExpression', '*scpb.ColumnDefaultExpression', '*scpb.ColumnName', '*scpb.ColumnOnUpdateExpression', '*scpb.ColumnType', '*scpb.IndexColumn', '*scpb.SequenceOwner'] - - joinOnColumnID($column, $dependent, $table-id, $col-id) - - toAbsent($column-Target, $dependent-Target) - - $column-Node[CurrentStatus] = WRITE_ONLY - - $dependent-Node[CurrentStatus] = ABSENT - - joinTargetNode($column, $column-Target, $column-Node) - - joinTargetNode($dependent, $dependent-Target, $dependent-Node) -- name: column no longer public before dependents - from: column-Node - kind: Precedence - to: dependent-Node - query: - - $column[Type] = '*scpb.Column' - - $dependent[Type] IN ['*scpb.ColumnComment', '*scpb.ColumnComputeExpression', '*scpb.ColumnDefaultExpression', '*scpb.ColumnName', '*scpb.ColumnOnUpdateExpression', '*scpb.ColumnType', '*scpb.IndexColumn', '*scpb.SequenceOwner'] - - joinOnColumnID($column, $dependent, $table-id, $col-id) - - transient($column-Target, $dependent-Target) - - $column-Node[CurrentStatus] = TRANSIENT_WRITE_ONLY - - $dependent-Node[CurrentStatus] = TRANSIENT_ABSENT - - joinTargetNode($column, $column-Target, $column-Node) - - joinTargetNode($dependent, $dependent-Target, $dependent-Node) -- name: column no longer public before dependents - from: column-Node - kind: Precedence - to: dependent-Node - query: - - $column[Type] = '*scpb.Column' - - $dependent[Type] IN ['*scpb.ColumnComment', '*scpb.ColumnComputeExpression', '*scpb.ColumnDefaultExpression', '*scpb.ColumnName', '*scpb.ColumnOnUpdateExpression', '*scpb.ColumnType', '*scpb.IndexColumn', '*scpb.SequenceOwner'] - - joinOnColumnID($column, $dependent, $table-id, $col-id) - - $column-Target[TargetStatus] = TRANSIENT_ABSENT - - $column-Node[CurrentStatus] = TRANSIENT_WRITE_ONLY - - $dependent-Target[TargetStatus] = ABSENT - - $dependent-Node[CurrentStatus] = ABSENT - - joinTargetNode($column, $column-Target, $column-Node) - - joinTargetNode($dependent, $dependent-Target, $dependent-Node) -- name: column no longer public before dependents - from: column-Node - kind: Precedence - to: dependent-Node - query: - - $column[Type] = '*scpb.Column' - - $dependent[Type] IN ['*scpb.ColumnComment', '*scpb.ColumnComputeExpression', '*scpb.ColumnDefaultExpression', '*scpb.ColumnName', '*scpb.ColumnOnUpdateExpression', '*scpb.ColumnType', '*scpb.IndexColumn', '*scpb.SequenceOwner'] - - joinOnColumnID($column, $dependent, $table-id, $col-id) - - $column-Target[TargetStatus] = ABSENT - - $column-Node[CurrentStatus] = WRITE_ONLY - - $dependent-Target[TargetStatus] = TRANSIENT_ABSENT - - $dependent-Node[CurrentStatus] = TRANSIENT_ABSENT - - joinTargetNode($column, $column-Target, $column-Node) - - joinTargetNode($dependent, $dependent-Target, $dependent-Node) -- name: column public before non-index-backed constraint (including hash-sharded) is created - from: column-Node - kind: Precedence - to: constraint-Node - query: - - $column[Type] = '*scpb.Column' - - $constraint[Type] IN ['*scpb.CheckConstraint', '*scpb.CheckConstraintUnvalidated', '*scpb.ColumnNotNull', '*scpb.ForeignKeyConstraint', '*scpb.ForeignKeyConstraintUnvalidated', '*scpb.UniqueWithoutIndexConstraint', '*scpb.UniqueWithoutIndexConstraintUnvalidated'] - - $column[ColumnID] = $columnID - - $constraint[ReferencedColumnIDs] CONTAINS $columnID - - joinOnDescID($column, $constraint, $table-id) - - ToPublicOrTransient($column-Target, $constraint-Target) - - $column-Node[CurrentStatus] = PUBLIC - - $constraint-Node[CurrentStatus] = WRITE_ONLY - - joinTargetNode($column, $column-Target, $column-Node) - - joinTargetNode($constraint, $constraint-Target, $constraint-Node) -- name: 'column type dependents removed right before column type, except if part of a column type alteration ' - from: dependent-Node - kind: SameStagePrecedence - to: column-type-Node - query: - - $dependent[Type] IN ['*scpb.ColumnComputeExpression', '*scpb.ColumnDefaultExpression', '*scpb.ColumnOnUpdateExpression', '*scpb.SequenceOwner'] - - $column-type[Type] = '*scpb.ColumnType' - - joinOnColumnID($dependent, $column-type, $table-id, $col-id) - - no column type alteration in progress($table-id, $col-id) - - toAbsent($dependent-Target, $column-type-Target) - - $dependent-Node[CurrentStatus] = ABSENT - - $column-type-Node[CurrentStatus] = ABSENT - - joinTargetNode($dependent, $dependent-Target, $dependent-Node) - - joinTargetNode($column-type, $column-type-Target, $column-type-Node) -- name: column type is changed to public after doing validation of a transient check constraint - from: transient-check-constraint-Node - kind: SameStagePrecedence - to: column-type-Node - query: - - $transient-check-constraint[Type] = '*scpb.CheckConstraint' - - $column-type[Type] = '*scpb.ColumnType' - - joinOnDescID($transient-check-constraint, $column-type, $table-id) - - $column-type[ColumnID] = $columnID - - $transient-check-constraint[ReferencedColumnIDs] CONTAINS $columnID - - $transient-check-constraint-Target[TargetStatus] = TRANSIENT_ABSENT - - $column-type-Target[TargetStatus] = PUBLIC - - $transient-check-constraint-Node[CurrentStatus] = TRANSIENT_VALIDATED - - $column-type-Node[CurrentStatus] = PUBLIC - - joinTargetNode($transient-check-constraint, $transient-check-constraint-Target, $transient-check-constraint-Node) - - joinTargetNode($column-type, $column-type-Target, $column-type-Node) -- name: column type removed before column family - from: column-type-Node - kind: Precedence - to: column-family-Node - query: - - $column-type[Type] = '*scpb.ColumnType' - - $column-family[Type] = '*scpb.ColumnFamily' - - joinOnColumnFamilyID($column-type, $column-family, $table-id, $family-id) - - toAbsent($column-type-Target, $column-family-Target) - - $column-type-Node[CurrentStatus] = ABSENT - - $column-family-Node[CurrentStatus] = ABSENT - - joinTargetNode($column-type, $column-type-Target, $column-type-Node) - - joinTargetNode($column-family, $column-family-Target, $column-family-Node) -- name: column type removed right before column when not dropping relation - from: column-type-Node - kind: SameStagePrecedence - to: column-Node - query: - - $column-type[Type] = '*scpb.ColumnType' - - descriptorIsNotBeingDropped-25.2($column-type) - - $column[Type] = '*scpb.Column' - - joinOnColumnID($column-type, $column, $table-id, $col-id) - - toAbsent($column-type-Target, $column-Target) - - $column-type-Node[CurrentStatus] = ABSENT - - $column-Node[CurrentStatus] = ABSENT - - joinTargetNode($column-type, $column-type-Target, $column-type-Node) - - joinTargetNode($column, $column-Target, $column-Node) -- name: column type set right after column existence - from: column-Node - kind: SameStagePrecedence - to: column-type-Node - query: - - $column[Type] = '*scpb.Column' - - $column-type[Type] = '*scpb.ColumnType' - - ToPublicOrTransient($column-Target, $column-type-Target) - - $column-Node[CurrentStatus] = DELETE_ONLY - - $column-type-Node[CurrentStatus] = PUBLIC - - joinOnColumnID($column, $column-type, $table-id, $col-id) - - joinTargetNode($column, $column-Target, $column-Node) - - joinTargetNode($column-type, $column-type-Target, $column-type-Node) -- name: column type update is decomposed as a drop then add - from: old-column-type-Node - kind: Precedence - to: new-column-type-Node - query: - - $old-column-type[Type] = '*scpb.ColumnType' - - $new-column-type[Type] = '*scpb.ColumnType' - - joinOnColumnID($old-column-type, $new-column-type, $table-id, $col-id) - - $old-column-type-Target[TargetStatus] = ABSENT - - $old-column-type-Node[CurrentStatus] = PUBLIC - - $new-column-type-Target[TargetStatus] = PUBLIC - - $new-column-type-Node[CurrentStatus] = ABSENT - - joinTargetNode($old-column-type, $old-column-type-Target, $old-column-type-Node) - - joinTargetNode($new-column-type, $new-column-type-Target, $new-column-type-Node) -- name: column writable right before column constraint is enforced. - from: column-Node - kind: SameStagePrecedence - to: column-constraint-Node - query: - - $column[Type] = '*scpb.Column' - - $column-constraint[Type] = '*scpb.ColumnNotNull' - - joinOnColumnID($column, $column-constraint, $table-id, $col-id) - - ToPublicOrTransient($column-Target, $column-constraint-Target) - - $column-Node[CurrentStatus] = WRITE_ONLY - - $column-constraint-Node[CurrentStatus] = WRITE_ONLY - - joinTargetNode($column, $column-Target, $column-Node) - - joinTargetNode($column-constraint, $column-constraint-Target, $column-constraint-Node) -- name: constraint dependent public right before complex constraint - from: dependent-Node - kind: SameStagePrecedence - to: complex-constraint-Node - query: - - $dependent[Type] = '*scpb.ConstraintComment' - - $complex-constraint[Type] IN ['*scpb.CheckConstraint', '*scpb.ColumnNotNull', '*scpb.ForeignKeyConstraint', '*scpb.UniqueWithoutIndexConstraint'] - - joinOnConstraintID($dependent, $complex-constraint, $table-id, $constraint-id) - - ToPublicOrTransient($dependent-Target, $complex-constraint-Target) - - $dependent-Node[CurrentStatus] = PUBLIC - - $complex-constraint-Node[CurrentStatus] = PUBLIC - - joinTargetNode($dependent, $dependent-Target, $dependent-Node) - - joinTargetNode($complex-constraint, $complex-constraint-Target, $complex-constraint-Node) -- name: constraint no longer public before dependents - from: constraint-Node - kind: Precedence - to: dependent-Node - query: - - $constraint[Type] IN ['*scpb.CheckConstraint', '*scpb.ColumnNotNull', '*scpb.ForeignKeyConstraint', '*scpb.UniqueWithoutIndexConstraint'] - - $dependent[Type] = '*scpb.ConstraintComment' - - joinOnConstraintID($constraint, $dependent, $table-id, $constraint-id) - - toAbsent($constraint-Target, $dependent-Target) - - $constraint-Node[CurrentStatus] = VALIDATED - - $dependent-Node[CurrentStatus] = ABSENT - - joinTargetNode($constraint, $constraint-Target, $constraint-Node) - - joinTargetNode($dependent, $dependent-Target, $dependent-Node) -- name: constraint no longer public before dependents - from: constraint-Node - kind: Precedence - to: dependent-Node - query: - - $constraint[Type] IN ['*scpb.CheckConstraint', '*scpb.ColumnNotNull', '*scpb.ForeignKeyConstraint', '*scpb.UniqueWithoutIndexConstraint'] - - $dependent[Type] = '*scpb.ConstraintComment' - - joinOnConstraintID($constraint, $dependent, $table-id, $constraint-id) - - transient($constraint-Target, $dependent-Target) - - $constraint-Node[CurrentStatus] = TRANSIENT_VALIDATED - - $dependent-Node[CurrentStatus] = TRANSIENT_ABSENT - - joinTargetNode($constraint, $constraint-Target, $constraint-Node) - - joinTargetNode($dependent, $dependent-Target, $dependent-Node) -- name: constraint no longer public before dependents - from: constraint-Node - kind: Precedence - to: dependent-Node - query: - - $constraint[Type] IN ['*scpb.CheckConstraint', '*scpb.ColumnNotNull', '*scpb.ForeignKeyConstraint', '*scpb.UniqueWithoutIndexConstraint'] - - $dependent[Type] = '*scpb.ConstraintComment' - - joinOnConstraintID($constraint, $dependent, $table-id, $constraint-id) - - $constraint-Target[TargetStatus] = TRANSIENT_ABSENT - - $constraint-Node[CurrentStatus] = TRANSIENT_VALIDATED - - $dependent-Target[TargetStatus] = ABSENT - - $dependent-Node[CurrentStatus] = ABSENT - - joinTargetNode($constraint, $constraint-Target, $constraint-Node) - - joinTargetNode($dependent, $dependent-Target, $dependent-Node) -- name: constraint no longer public before dependents - from: constraint-Node - kind: Precedence - to: dependent-Node - query: - - $constraint[Type] IN ['*scpb.CheckConstraint', '*scpb.ColumnNotNull', '*scpb.ForeignKeyConstraint', '*scpb.UniqueWithoutIndexConstraint'] - - $dependent[Type] = '*scpb.ConstraintComment' - - joinOnConstraintID($constraint, $dependent, $table-id, $constraint-id) - - $constraint-Target[TargetStatus] = ABSENT - - $constraint-Node[CurrentStatus] = VALIDATED - - $dependent-Target[TargetStatus] = TRANSIENT_ABSENT - - $dependent-Node[CurrentStatus] = TRANSIENT_ABSENT - - joinTargetNode($constraint, $constraint-Target, $constraint-Node) - - joinTargetNode($dependent, $dependent-Target, $dependent-Node) -- name: cross-descriptor constraint is absent before referenced descriptor is dropped - from: cross-desc-constraint-Node - kind: Precedence - to: referenced-descriptor-Node - query: - - $cross-desc-constraint[Type] IN ['*scpb.CheckConstraint', '*scpb.ForeignKeyConstraint', '*scpb.UniqueWithoutIndexConstraint'] - - $referenced-descriptor[Type] IN ['*scpb.AliasType', '*scpb.CompositeType', '*scpb.Database', '*scpb.EnumType', '*scpb.Function', '*scpb.Schema', '*scpb.Sequence', '*scpb.Table', '*scpb.View'] - - joinReferencedDescID($cross-desc-constraint, $referenced-descriptor, $desc-id) - - toAbsent($cross-desc-constraint-Target, $referenced-descriptor-Target) - - $cross-desc-constraint-Node[CurrentStatus] = ABSENT - - $referenced-descriptor-Node[CurrentStatus] = DROPPED - - joinTargetNode($cross-desc-constraint, $cross-desc-constraint-Target, $cross-desc-constraint-Node) - - joinTargetNode($referenced-descriptor, $referenced-descriptor-Target, $referenced-descriptor-Node) -- name: cross-descriptor constraint is absent before referencing descriptor is dropped - from: cross-desc-constraint-Node - kind: Precedence - to: referencing-descriptor-Node - query: - - $cross-desc-constraint[Type] IN ['*scpb.CheckConstraint', '*scpb.ForeignKeyConstraint', '*scpb.UniqueWithoutIndexConstraint'] - - $referencing-descriptor[Type] IN ['*scpb.AliasType', '*scpb.CompositeType', '*scpb.Database', '*scpb.EnumType', '*scpb.Function', '*scpb.Schema', '*scpb.Sequence', '*scpb.Table', '*scpb.View'] - - joinOnDescID($cross-desc-constraint, $referencing-descriptor, $desc-id) - - toAbsent($cross-desc-constraint-Target, $referencing-descriptor-Target) - - $cross-desc-constraint-Node[CurrentStatus] = ABSENT - - $referencing-descriptor-Node[CurrentStatus] = DROPPED - - joinTargetNode($cross-desc-constraint, $cross-desc-constraint-Target, $cross-desc-constraint-Node) - - joinTargetNode($referencing-descriptor, $referencing-descriptor-Target, $referencing-descriptor-Node) -- name: dependent view absent before secondary index - from: view-Node - kind: Precedence - to: index-Node - query: - - $view[Type] = '*scpb.View' - - $index[Type] = '*scpb.SecondaryIndex' - - viewReferencesIndex(*scpb.View, *scpb.SecondaryIndex)($view, $index) - - toAbsent($view-Target, $index-Target) - - $view-Node[CurrentStatus] = ABSENT - - $index-Node[CurrentStatus] = ABSENT - - joinTargetNode($view, $view-Target, $view-Node) - - joinTargetNode($index, $index-Target, $index-Node) -- name: dependent view absent before secondary index - from: view-Node - kind: Precedence - to: index-Node - query: - - $view[Type] = '*scpb.View' - - $index[Type] = '*scpb.SecondaryIndex' - - viewReferencesIndex(*scpb.View, *scpb.SecondaryIndex)($view, $index) - - transient($view-Target, $index-Target) - - $view-Node[CurrentStatus] = TRANSIENT_ABSENT - - $index-Node[CurrentStatus] = TRANSIENT_ABSENT - - joinTargetNode($view, $view-Target, $view-Node) - - joinTargetNode($index, $index-Target, $index-Node) -- name: dependent view absent before secondary index - from: view-Node - kind: Precedence - to: index-Node - query: - - $view[Type] = '*scpb.View' - - $index[Type] = '*scpb.SecondaryIndex' - - viewReferencesIndex(*scpb.View, *scpb.SecondaryIndex)($view, $index) - - $view-Target[TargetStatus] = TRANSIENT_ABSENT - - $view-Node[CurrentStatus] = TRANSIENT_ABSENT - - $index-Target[TargetStatus] = ABSENT - - $index-Node[CurrentStatus] = ABSENT - - joinTargetNode($view, $view-Target, $view-Node) - - joinTargetNode($index, $index-Target, $index-Node) -- name: dependent view absent before secondary index - from: view-Node - kind: Precedence - to: index-Node - query: - - $view[Type] = '*scpb.View' - - $index[Type] = '*scpb.SecondaryIndex' - - viewReferencesIndex(*scpb.View, *scpb.SecondaryIndex)($view, $index) - - $view-Target[TargetStatus] = ABSENT - - $view-Node[CurrentStatus] = ABSENT - - $index-Target[TargetStatus] = TRANSIENT_ABSENT - - $index-Node[CurrentStatus] = TRANSIENT_ABSENT - - joinTargetNode($view, $view-Target, $view-Node) - - joinTargetNode($index, $index-Target, $index-Node) -- name: dependent view no longer public before secondary index - from: view-Node - kind: Precedence - to: index-Node - query: - - $view[Type] = '*scpb.View' - - $index[Type] = '*scpb.SecondaryIndex' - - viewReferencesIndex(*scpb.View, *scpb.SecondaryIndex)($view, $index) - - toAbsent($view-Target, $index-Target) - - $view-Node[CurrentStatus] = DROPPED - - $index-Node[CurrentStatus] = VALIDATED - - joinTargetNode($view, $view-Target, $view-Node) - - joinTargetNode($index, $index-Target, $index-Node) -- name: dependent view no longer public before secondary index - from: view-Node - kind: Precedence - to: index-Node - query: - - $view[Type] = '*scpb.View' - - $index[Type] = '*scpb.SecondaryIndex' - - viewReferencesIndex(*scpb.View, *scpb.SecondaryIndex)($view, $index) - - transient($view-Target, $index-Target) - - $view-Node[CurrentStatus] = TRANSIENT_DROPPED - - $index-Node[CurrentStatus] = TRANSIENT_VALIDATED - - joinTargetNode($view, $view-Target, $view-Node) - - joinTargetNode($index, $index-Target, $index-Node) -- name: dependent view no longer public before secondary index - from: view-Node - kind: Precedence - to: index-Node - query: - - $view[Type] = '*scpb.View' - - $index[Type] = '*scpb.SecondaryIndex' - - viewReferencesIndex(*scpb.View, *scpb.SecondaryIndex)($view, $index) - - $view-Target[TargetStatus] = TRANSIENT_ABSENT - - $view-Node[CurrentStatus] = TRANSIENT_DROPPED - - $index-Target[TargetStatus] = ABSENT - - $index-Node[CurrentStatus] = VALIDATED - - joinTargetNode($view, $view-Target, $view-Node) - - joinTargetNode($index, $index-Target, $index-Node) -- name: dependent view no longer public before secondary index - from: view-Node - kind: Precedence - to: index-Node - query: - - $view[Type] = '*scpb.View' - - $index[Type] = '*scpb.SecondaryIndex' - - viewReferencesIndex(*scpb.View, *scpb.SecondaryIndex)($view, $index) - - $view-Target[TargetStatus] = ABSENT - - $view-Node[CurrentStatus] = DROPPED - - $index-Target[TargetStatus] = TRANSIENT_ABSENT - - $index-Node[CurrentStatus] = TRANSIENT_VALIDATED - - joinTargetNode($view, $view-Target, $view-Node) - - joinTargetNode($index, $index-Target, $index-Node) -- name: dependents added after policy - from: policy-Node - kind: SameStagePrecedence - to: dependent-Node - query: - - $policy[Type] = '*scpb.Policy' - - $dependent[Type] IN ['*scpb.PolicyDeps', '*scpb.PolicyName', '*scpb.PolicyRole', '*scpb.PolicyUsingExpr', '*scpb.PolicyWithCheckExpr'] - - joinOnPolicyID($policy, $dependent, $table-id, $policy-id) - - ToPublicOrTransient($policy-Target, $dependent-Target) - - $policy-Node[CurrentStatus] = PUBLIC - - $dependent-Node[CurrentStatus] = PUBLIC - - joinTargetNode($policy, $policy-Target, $policy-Node) - - joinTargetNode($dependent, $dependent-Target, $dependent-Node) -- name: dependents exist before descriptor becomes public - from: dependent-Node - kind: Precedence - to: relation-Node - query: - - $dependent[Type] IN ['*scpb.CheckConstraint', '*scpb.CheckConstraintUnvalidated', '*scpb.Column', '*scpb.ColumnComment', '*scpb.ColumnComputeExpression', '*scpb.ColumnDefaultExpression', '*scpb.ColumnFamily', '*scpb.ColumnName', '*scpb.ColumnNotNull', '*scpb.ColumnOnUpdateExpression', '*scpb.ColumnType', '*scpb.CompositeTypeAttrName', '*scpb.CompositeTypeAttrType', '*scpb.ConstraintComment', '*scpb.ConstraintWithoutIndexName', '*scpb.DatabaseComment', '*scpb.DatabaseRegionConfig', '*scpb.DatabaseRoleSetting', '*scpb.DatabaseZoneConfig', '*scpb.EnumTypeValue', '*scpb.ForeignKeyConstraint', '*scpb.ForeignKeyConstraintUnvalidated', '*scpb.FunctionBody', '*scpb.FunctionLeakProof', '*scpb.FunctionName', '*scpb.FunctionNullInputBehavior', '*scpb.FunctionSecurity', '*scpb.FunctionVolatility', '*scpb.IndexColumn', '*scpb.IndexComment', '*scpb.IndexName', '*scpb.IndexPartitioning', '*scpb.IndexZoneConfig', '*scpb.LDRJobIDs', '*scpb.NamedRangeZoneConfig', '*scpb.Namespace', '*scpb.Owner', '*scpb.PartitionZoneConfig', '*scpb.Policy', '*scpb.PolicyDeps', '*scpb.PolicyName', '*scpb.PolicyRole', '*scpb.PolicyUsingExpr', '*scpb.PolicyWithCheckExpr', '*scpb.PrimaryIndex', '*scpb.RowLevelSecurityEnabled', '*scpb.RowLevelSecurityForced', '*scpb.RowLevelTTL', '*scpb.SchemaChild', '*scpb.SchemaComment', '*scpb.SchemaParent', '*scpb.SecondaryIndex', '*scpb.SequenceOption', '*scpb.SequenceOwner', '*scpb.TableComment', '*scpb.TableLocalityGlobal', '*scpb.TableLocalityPrimaryRegion', '*scpb.TableLocalityRegionalByRow', '*scpb.TableLocalitySecondaryRegion', '*scpb.TablePartitioning', '*scpb.TableSchemaLocked', '*scpb.TableZoneConfig', '*scpb.TemporaryIndex', '*scpb.Trigger', '*scpb.TriggerDeps', '*scpb.TriggerEnabled', '*scpb.TriggerEvents', '*scpb.TriggerFunctionCall', '*scpb.TriggerName', '*scpb.TriggerTiming', '*scpb.TriggerTransition', '*scpb.TriggerWhen', '*scpb.TypeComment', '*scpb.UniqueWithoutIndexConstraint', '*scpb.UniqueWithoutIndexConstraintUnvalidated', '*scpb.UserPrivileges'] - - $relation[Type] IN ['*scpb.AliasType', '*scpb.CompositeType', '*scpb.Database', '*scpb.EnumType', '*scpb.Function', '*scpb.Schema', '*scpb.Sequence', '*scpb.Table', '*scpb.View'] - - joinOnDescID($dependent, $relation, $relation-id) - - ToPublicOrTransient($dependent-Target, $relation-Target) - - $dependent-Node[CurrentStatus] = PUBLIC - - $relation-Node[CurrentStatus] = PUBLIC - - joinTargetNode($dependent, $dependent-Target, $dependent-Node) - - joinTargetNode($relation, $relation-Target, $relation-Node) -- name: dependents removed before column - from: dependent-Node - kind: Precedence - to: column-Node - query: - - $dependent[Type] IN ['*scpb.ColumnComment', '*scpb.ColumnComputeExpression', '*scpb.ColumnDefaultExpression', '*scpb.ColumnName', '*scpb.ColumnNotNull', '*scpb.ColumnOnUpdateExpression', '*scpb.ColumnType', '*scpb.IndexColumn', '*scpb.SequenceOwner'] - - $column[Type] = '*scpb.Column' - - joinOnColumnID($dependent, $column, $table-id, $col-id) - - toAbsent($dependent-Target, $column-Target) - - $dependent-Node[CurrentStatus] = ABSENT - - $column-Node[CurrentStatus] = ABSENT - - joinTargetNode($dependent, $dependent-Target, $dependent-Node) - - joinTargetNode($column, $column-Target, $column-Node) -- name: dependents removed before column - from: dependent-Node - kind: Precedence - to: column-Node - query: - - $dependent[Type] IN ['*scpb.ColumnComment', '*scpb.ColumnComputeExpression', '*scpb.ColumnDefaultExpression', '*scpb.ColumnName', '*scpb.ColumnNotNull', '*scpb.ColumnOnUpdateExpression', '*scpb.ColumnType', '*scpb.IndexColumn', '*scpb.SequenceOwner'] - - $column[Type] = '*scpb.Column' - - joinOnColumnID($dependent, $column, $table-id, $col-id) - - transient($dependent-Target, $column-Target) - - $dependent-Node[CurrentStatus] = TRANSIENT_ABSENT - - $column-Node[CurrentStatus] = TRANSIENT_ABSENT - - joinTargetNode($dependent, $dependent-Target, $dependent-Node) - - joinTargetNode($column, $column-Target, $column-Node) -- name: dependents removed before column - from: dependent-Node - kind: Precedence - to: column-Node - query: - - $dependent[Type] IN ['*scpb.ColumnComment', '*scpb.ColumnComputeExpression', '*scpb.ColumnDefaultExpression', '*scpb.ColumnName', '*scpb.ColumnNotNull', '*scpb.ColumnOnUpdateExpression', '*scpb.ColumnType', '*scpb.IndexColumn', '*scpb.SequenceOwner'] - - $column[Type] = '*scpb.Column' - - joinOnColumnID($dependent, $column, $table-id, $col-id) - - $dependent-Target[TargetStatus] = TRANSIENT_ABSENT - - $dependent-Node[CurrentStatus] = TRANSIENT_ABSENT - - $column-Target[TargetStatus] = ABSENT - - $column-Node[CurrentStatus] = ABSENT - - joinTargetNode($dependent, $dependent-Target, $dependent-Node) - - joinTargetNode($column, $column-Target, $column-Node) -- name: dependents removed before column - from: dependent-Node - kind: Precedence - to: column-Node - query: - - $dependent[Type] IN ['*scpb.ColumnComment', '*scpb.ColumnComputeExpression', '*scpb.ColumnDefaultExpression', '*scpb.ColumnName', '*scpb.ColumnNotNull', '*scpb.ColumnOnUpdateExpression', '*scpb.ColumnType', '*scpb.IndexColumn', '*scpb.SequenceOwner'] - - $column[Type] = '*scpb.Column' - - joinOnColumnID($dependent, $column, $table-id, $col-id) - - $dependent-Target[TargetStatus] = ABSENT - - $dependent-Node[CurrentStatus] = ABSENT - - $column-Target[TargetStatus] = TRANSIENT_ABSENT - - $column-Node[CurrentStatus] = TRANSIENT_ABSENT - - joinTargetNode($dependent, $dependent-Target, $dependent-Node) - - joinTargetNode($column, $column-Target, $column-Node) -- name: dependents removed before constraint - from: dependents-Node - kind: Precedence - to: constraint-Node - query: - - $dependents[Type] = '*scpb.ConstraintComment' - - $constraint[Type] IN ['*scpb.CheckConstraint', '*scpb.ColumnNotNull', '*scpb.ForeignKeyConstraint', '*scpb.UniqueWithoutIndexConstraint'] - - joinOnConstraintID($dependents, $constraint, $table-id, $constraint-id) - - toAbsent($dependents-Target, $constraint-Target) - - $dependents-Node[CurrentStatus] = ABSENT - - $constraint-Node[CurrentStatus] = ABSENT - - joinTargetNode($dependents, $dependents-Target, $dependents-Node) - - joinTargetNode($constraint, $constraint-Target, $constraint-Node) -- name: dependents removed before constraint - from: dependents-Node - kind: Precedence - to: constraint-Node - query: - - $dependents[Type] = '*scpb.ConstraintComment' - - $constraint[Type] IN ['*scpb.CheckConstraint', '*scpb.ColumnNotNull', '*scpb.ForeignKeyConstraint', '*scpb.UniqueWithoutIndexConstraint'] - - joinOnConstraintID($dependents, $constraint, $table-id, $constraint-id) - - transient($dependents-Target, $constraint-Target) - - $dependents-Node[CurrentStatus] = TRANSIENT_ABSENT - - $constraint-Node[CurrentStatus] = TRANSIENT_ABSENT - - joinTargetNode($dependents, $dependents-Target, $dependents-Node) - - joinTargetNode($constraint, $constraint-Target, $constraint-Node) -- name: dependents removed before constraint - from: dependents-Node - kind: Precedence - to: constraint-Node - query: - - $dependents[Type] = '*scpb.ConstraintComment' - - $constraint[Type] IN ['*scpb.CheckConstraint', '*scpb.ColumnNotNull', '*scpb.ForeignKeyConstraint', '*scpb.UniqueWithoutIndexConstraint'] - - joinOnConstraintID($dependents, $constraint, $table-id, $constraint-id) - - $dependents-Target[TargetStatus] = TRANSIENT_ABSENT - - $dependents-Node[CurrentStatus] = TRANSIENT_ABSENT - - $constraint-Target[TargetStatus] = ABSENT - - $constraint-Node[CurrentStatus] = ABSENT - - joinTargetNode($dependents, $dependents-Target, $dependents-Node) - - joinTargetNode($constraint, $constraint-Target, $constraint-Node) -- name: dependents removed before constraint - from: dependents-Node - kind: Precedence - to: constraint-Node - query: - - $dependents[Type] = '*scpb.ConstraintComment' - - $constraint[Type] IN ['*scpb.CheckConstraint', '*scpb.ColumnNotNull', '*scpb.ForeignKeyConstraint', '*scpb.UniqueWithoutIndexConstraint'] - - joinOnConstraintID($dependents, $constraint, $table-id, $constraint-id) - - $dependents-Target[TargetStatus] = ABSENT - - $dependents-Node[CurrentStatus] = ABSENT - - $constraint-Target[TargetStatus] = TRANSIENT_ABSENT - - $constraint-Node[CurrentStatus] = TRANSIENT_ABSENT - - joinTargetNode($dependents, $dependents-Target, $dependents-Node) - - joinTargetNode($constraint, $constraint-Target, $constraint-Node) -- name: dependents removed before index - from: dependent-Node - kind: Precedence - to: index-Node - query: - - $dependent[Type] IN ['*scpb.IndexColumn', '*scpb.IndexComment', '*scpb.IndexName', '*scpb.IndexPartitioning', '*scpb.IndexZoneConfig', '*scpb.PartitionZoneConfig'] - - $index[Type] IN ['*scpb.PrimaryIndex', '*scpb.SecondaryIndex', '*scpb.TemporaryIndex'] - - joinOnIndexID($dependent, $index, $table-id, $index-id) - - toAbsent($dependent-Target, $index-Target) - - $dependent-Node[CurrentStatus] = ABSENT - - $index-Node[CurrentStatus] = ABSENT - - joinTargetNode($dependent, $dependent-Target, $dependent-Node) - - joinTargetNode($index, $index-Target, $index-Node) -- name: dependents removed before index - from: dependent-Node - kind: Precedence - to: index-Node - query: - - $dependent[Type] IN ['*scpb.IndexColumn', '*scpb.IndexComment', '*scpb.IndexName', '*scpb.IndexPartitioning', '*scpb.IndexZoneConfig', '*scpb.PartitionZoneConfig'] - - $index[Type] IN ['*scpb.PrimaryIndex', '*scpb.SecondaryIndex', '*scpb.TemporaryIndex'] - - joinOnIndexID($dependent, $index, $table-id, $index-id) - - transient($dependent-Target, $index-Target) - - $dependent-Node[CurrentStatus] = TRANSIENT_ABSENT - - $index-Node[CurrentStatus] = TRANSIENT_ABSENT - - joinTargetNode($dependent, $dependent-Target, $dependent-Node) - - joinTargetNode($index, $index-Target, $index-Node) -- name: dependents removed before index - from: dependent-Node - kind: Precedence - to: index-Node - query: - - $dependent[Type] IN ['*scpb.IndexColumn', '*scpb.IndexComment', '*scpb.IndexName', '*scpb.IndexPartitioning', '*scpb.IndexZoneConfig', '*scpb.PartitionZoneConfig'] - - $index[Type] IN ['*scpb.PrimaryIndex', '*scpb.SecondaryIndex', '*scpb.TemporaryIndex'] - - joinOnIndexID($dependent, $index, $table-id, $index-id) - - $dependent-Target[TargetStatus] = TRANSIENT_ABSENT - - $dependent-Node[CurrentStatus] = TRANSIENT_ABSENT - - $index-Target[TargetStatus] = ABSENT - - $index-Node[CurrentStatus] = ABSENT - - joinTargetNode($dependent, $dependent-Target, $dependent-Node) - - joinTargetNode($index, $index-Target, $index-Node) -- name: dependents removed before index - from: dependent-Node - kind: Precedence - to: index-Node - query: - - $dependent[Type] IN ['*scpb.IndexColumn', '*scpb.IndexComment', '*scpb.IndexName', '*scpb.IndexPartitioning', '*scpb.IndexZoneConfig', '*scpb.PartitionZoneConfig'] - - $index[Type] IN ['*scpb.PrimaryIndex', '*scpb.SecondaryIndex', '*scpb.TemporaryIndex'] - - joinOnIndexID($dependent, $index, $table-id, $index-id) - - $dependent-Target[TargetStatus] = ABSENT - - $dependent-Node[CurrentStatus] = ABSENT - - $index-Target[TargetStatus] = TRANSIENT_ABSENT - - $index-Node[CurrentStatus] = TRANSIENT_ABSENT - - joinTargetNode($dependent, $dependent-Target, $dependent-Node) - - joinTargetNode($index, $index-Target, $index-Node) -- name: dependents removed before policy - from: dependent-Node - kind: SameStagePrecedence - to: policy-Node - query: - - $dependent[Type] IN ['*scpb.PolicyDeps', '*scpb.PolicyName', '*scpb.PolicyRole', '*scpb.PolicyUsingExpr', '*scpb.PolicyWithCheckExpr'] - - $policy[Type] = '*scpb.Policy' - - joinOnPolicyID($dependent, $policy, $table-id, $policy-id) - - toAbsent($dependent-Target, $policy-Target) - - $dependent-Node[CurrentStatus] = ABSENT - - $policy-Node[CurrentStatus] = ABSENT - - joinTargetNode($dependent, $dependent-Target, $dependent-Node) - - joinTargetNode($policy, $policy-Target, $policy-Node) -- name: dependents removed before policy - from: dependent-Node - kind: SameStagePrecedence - to: policy-Node - query: - - $dependent[Type] IN ['*scpb.PolicyDeps', '*scpb.PolicyName', '*scpb.PolicyRole', '*scpb.PolicyUsingExpr', '*scpb.PolicyWithCheckExpr'] - - $policy[Type] = '*scpb.Policy' - - joinOnPolicyID($dependent, $policy, $table-id, $policy-id) - - transient($dependent-Target, $policy-Target) - - $dependent-Node[CurrentStatus] = TRANSIENT_ABSENT - - $policy-Node[CurrentStatus] = TRANSIENT_ABSENT - - joinTargetNode($dependent, $dependent-Target, $dependent-Node) - - joinTargetNode($policy, $policy-Target, $policy-Node) -- name: dependents removed before policy - from: dependent-Node - kind: SameStagePrecedence - to: policy-Node - query: - - $dependent[Type] IN ['*scpb.PolicyDeps', '*scpb.PolicyName', '*scpb.PolicyRole', '*scpb.PolicyUsingExpr', '*scpb.PolicyWithCheckExpr'] - - $policy[Type] = '*scpb.Policy' - - joinOnPolicyID($dependent, $policy, $table-id, $policy-id) - - $dependent-Target[TargetStatus] = TRANSIENT_ABSENT - - $dependent-Node[CurrentStatus] = TRANSIENT_ABSENT - - $policy-Target[TargetStatus] = ABSENT - - $policy-Node[CurrentStatus] = ABSENT - - joinTargetNode($dependent, $dependent-Target, $dependent-Node) - - joinTargetNode($policy, $policy-Target, $policy-Node) -- name: dependents removed before policy - from: dependent-Node - kind: SameStagePrecedence - to: policy-Node - query: - - $dependent[Type] IN ['*scpb.PolicyDeps', '*scpb.PolicyName', '*scpb.PolicyRole', '*scpb.PolicyUsingExpr', '*scpb.PolicyWithCheckExpr'] - - $policy[Type] = '*scpb.Policy' - - joinOnPolicyID($dependent, $policy, $table-id, $policy-id) - - $dependent-Target[TargetStatus] = ABSENT - - $dependent-Node[CurrentStatus] = ABSENT - - $policy-Target[TargetStatus] = TRANSIENT_ABSENT - - $policy-Node[CurrentStatus] = TRANSIENT_ABSENT - - joinTargetNode($dependent, $dependent-Target, $dependent-Node) - - joinTargetNode($policy, $policy-Target, $policy-Node) -- name: dependents removed right before simple constraint - from: dependents-Node - kind: SameStagePrecedence - to: constraint-Node - query: - - $dependents[Type] = '*scpb.ConstraintComment' - - $constraint[Type] IN ['*scpb.CheckConstraintUnvalidated', '*scpb.ForeignKeyConstraintUnvalidated', '*scpb.UniqueWithoutIndexConstraintUnvalidated'] - - joinOnConstraintID($dependents, $constraint, $table-id, $constraint-id) - - toAbsent($dependents-Target, $constraint-Target) - - $dependents-Node[CurrentStatus] = ABSENT - - $constraint-Node[CurrentStatus] = ABSENT - - joinTargetNode($dependents, $dependents-Target, $dependents-Node) - - joinTargetNode($constraint, $constraint-Target, $constraint-Node) -- name: dependents removed right before simple constraint - from: dependents-Node - kind: SameStagePrecedence - to: constraint-Node - query: - - $dependents[Type] = '*scpb.ConstraintComment' - - $constraint[Type] IN ['*scpb.CheckConstraintUnvalidated', '*scpb.ForeignKeyConstraintUnvalidated', '*scpb.UniqueWithoutIndexConstraintUnvalidated'] - - joinOnConstraintID($dependents, $constraint, $table-id, $constraint-id) - - transient($dependents-Target, $constraint-Target) - - $dependents-Node[CurrentStatus] = TRANSIENT_ABSENT - - $constraint-Node[CurrentStatus] = TRANSIENT_ABSENT - - joinTargetNode($dependents, $dependents-Target, $dependents-Node) - - joinTargetNode($constraint, $constraint-Target, $constraint-Node) -- name: dependents removed right before simple constraint - from: dependents-Node - kind: SameStagePrecedence - to: constraint-Node - query: - - $dependents[Type] = '*scpb.ConstraintComment' - - $constraint[Type] IN ['*scpb.CheckConstraintUnvalidated', '*scpb.ForeignKeyConstraintUnvalidated', '*scpb.UniqueWithoutIndexConstraintUnvalidated'] - - joinOnConstraintID($dependents, $constraint, $table-id, $constraint-id) - - $dependents-Target[TargetStatus] = TRANSIENT_ABSENT - - $dependents-Node[CurrentStatus] = TRANSIENT_ABSENT - - $constraint-Target[TargetStatus] = ABSENT - - $constraint-Node[CurrentStatus] = ABSENT - - joinTargetNode($dependents, $dependents-Target, $dependents-Node) - - joinTargetNode($constraint, $constraint-Target, $constraint-Node) -- name: dependents removed right before simple constraint - from: dependents-Node - kind: SameStagePrecedence - to: constraint-Node - query: - - $dependents[Type] = '*scpb.ConstraintComment' - - $constraint[Type] IN ['*scpb.CheckConstraintUnvalidated', '*scpb.ForeignKeyConstraintUnvalidated', '*scpb.UniqueWithoutIndexConstraintUnvalidated'] - - joinOnConstraintID($dependents, $constraint, $table-id, $constraint-id) - - $dependents-Target[TargetStatus] = ABSENT - - $dependents-Node[CurrentStatus] = ABSENT - - $constraint-Target[TargetStatus] = TRANSIENT_ABSENT - - $constraint-Node[CurrentStatus] = TRANSIENT_ABSENT - - joinTargetNode($dependents, $dependents-Target, $dependents-Node) - - joinTargetNode($constraint, $constraint-Target, $constraint-Node) -- name: descriptor drop right before removing dependent between types - from: referenced-descriptor-Node - kind: SameStagePrecedence - to: referencing-via-type-Node - query: - - $referenced-descriptor[Type] IN ['*scpb.AliasType', '*scpb.CompositeType', '*scpb.EnumType'] - - $referenced-descriptor[DescID] = $fromDescID - - $referencing-via-type[ReferencedTypeIDs] CONTAINS $fromDescID - - $referencing-via-type[Type] = '*scpb.ColumnType' - - toAbsent($referenced-descriptor-Target, $referencing-via-type-Target) - - $referenced-descriptor-Node[CurrentStatus] = DROPPED - - $referencing-via-type-Node[CurrentStatus] = ABSENT - - joinTargetNode($referenced-descriptor, $referenced-descriptor-Target, $referenced-descriptor-Node) - - joinTargetNode($referencing-via-type, $referencing-via-type-Target, $referencing-via-type-Node) -- name: descriptor drop right before removing dependent with attr ref - from: referenced-descriptor-Node - kind: SameStagePrecedence - to: referencing-via-attr-Node - query: - - $referenced-descriptor[Type] IN ['*scpb.AliasType', '*scpb.CompositeType', '*scpb.Database', '*scpb.EnumType', '*scpb.Function', '*scpb.Schema', '*scpb.Sequence', '*scpb.Table', '*scpb.View'] - - $referencing-via-attr[Type] IN ['*scpb.CheckConstraintUnvalidated', '*scpb.ColumnComment', '*scpb.ColumnComputeExpression', '*scpb.ColumnDefaultExpression', '*scpb.ColumnFamily', '*scpb.ColumnName', '*scpb.ColumnOnUpdateExpression', '*scpb.ColumnType', '*scpb.CompositeTypeAttrName', '*scpb.CompositeTypeAttrType', '*scpb.ConstraintComment', '*scpb.ConstraintWithoutIndexName', '*scpb.DatabaseComment', '*scpb.DatabaseRegionConfig', '*scpb.DatabaseRoleSetting', '*scpb.DatabaseZoneConfig', '*scpb.EnumTypeValue', '*scpb.ForeignKeyConstraintUnvalidated', '*scpb.FunctionBody', '*scpb.FunctionLeakProof', '*scpb.FunctionName', '*scpb.FunctionNullInputBehavior', '*scpb.FunctionSecurity', '*scpb.FunctionVolatility', '*scpb.IndexColumn', '*scpb.IndexComment', '*scpb.IndexName', '*scpb.IndexPartitioning', '*scpb.IndexZoneConfig', '*scpb.LDRJobIDs', '*scpb.NamedRangeZoneConfig', '*scpb.Namespace', '*scpb.Owner', '*scpb.PartitionZoneConfig', '*scpb.Policy', '*scpb.PolicyDeps', '*scpb.PolicyName', '*scpb.PolicyRole', '*scpb.PolicyUsingExpr', '*scpb.PolicyWithCheckExpr', '*scpb.RowLevelSecurityEnabled', '*scpb.RowLevelSecurityForced', '*scpb.RowLevelTTL', '*scpb.SchemaComment', '*scpb.SequenceOption', '*scpb.SequenceOwner', '*scpb.TableComment', '*scpb.TableLocalityGlobal', '*scpb.TableLocalityPrimaryRegion', '*scpb.TableLocalityRegionalByRow', '*scpb.TableLocalitySecondaryRegion', '*scpb.TablePartitioning', '*scpb.TableZoneConfig', '*scpb.Trigger', '*scpb.TriggerDeps', '*scpb.TriggerEnabled', '*scpb.TriggerEvents', '*scpb.TriggerFunctionCall', '*scpb.TriggerName', '*scpb.TriggerTiming', '*scpb.TriggerTransition', '*scpb.TriggerWhen', '*scpb.TypeComment', '*scpb.UniqueWithoutIndexConstraintUnvalidated', '*scpb.UserPrivileges'] - - joinReferencedDescID($referencing-via-attr, $referenced-descriptor, $desc-id) - - toAbsent($referenced-descriptor-Target, $referencing-via-attr-Target) - - $referenced-descriptor-Node[CurrentStatus] = DROPPED - - $referencing-via-attr-Node[CurrentStatus] = ABSENT - - joinTargetNode($referenced-descriptor, $referenced-descriptor-Target, $referenced-descriptor-Node) - - joinTargetNode($referencing-via-attr, $referencing-via-attr-Target, $referencing-via-attr-Node) -- name: descriptor drop right before removing dependent with expr ref to sequence - from: referenced-descriptor-Node - kind: SameStagePrecedence - to: referencing-via-expr-Node - query: - - $referenced-descriptor[Type] = '*scpb.Sequence' - - $referenced-descriptor[DescID] = $seqID - - $referencing-via-expr[ReferencedSequenceIDs] CONTAINS $seqID - - $referencing-via-expr[Type] IN ['*scpb.CheckConstraintUnvalidated', '*scpb.ColumnComputeExpression', '*scpb.ColumnDefaultExpression', '*scpb.ColumnOnUpdateExpression', '*scpb.ColumnType', '*scpb.PolicyUsingExpr', '*scpb.PolicyWithCheckExpr'] - - toAbsent($referenced-descriptor-Target, $referencing-via-expr-Target) - - $referenced-descriptor-Node[CurrentStatus] = DROPPED - - $referencing-via-expr-Node[CurrentStatus] = ABSENT - - joinTargetNode($referenced-descriptor, $referenced-descriptor-Target, $referenced-descriptor-Node) - - joinTargetNode($referencing-via-expr, $referencing-via-expr-Target, $referencing-via-expr-Node) -- name: descriptor drop right before removing dependent with function refs in columns - from: referenced-descriptor-Node - kind: SameStagePrecedence - to: referencing-via-function-Node - query: - - $referenced-descriptor[Type] = '*scpb.Function' - - $referenced-descriptor[DescID] = $fromDescID - - $referencing-via-function[ReferencedFunctionIDs] CONTAINS $fromDescID - - $referencing-via-function[Type] IN ['*scpb.CheckConstraintUnvalidated', '*scpb.ColumnComputeExpression', '*scpb.ColumnDefaultExpression', '*scpb.ColumnOnUpdateExpression', '*scpb.ColumnType', '*scpb.PolicyUsingExpr', '*scpb.PolicyWithCheckExpr'] - - toAbsent($referenced-descriptor-Target, $referencing-via-function-Target) - - $referenced-descriptor-Node[CurrentStatus] = DROPPED - - $referencing-via-function-Node[CurrentStatus] = ABSENT - - joinTargetNode($referenced-descriptor, $referenced-descriptor-Target, $referenced-descriptor-Node) - - joinTargetNode($referencing-via-function, $referencing-via-function-Target, $referencing-via-function-Node) -- name: descriptor drop right before removing dependent with type refs in expressions - from: referenced-descriptor-Node - kind: SameStagePrecedence - to: referencing-via-type-Node - query: - - $referenced-descriptor[Type] IN ['*scpb.AliasType', '*scpb.CompositeType', '*scpb.EnumType'] - - $referenced-descriptor[DescID] = $fromDescID - - $referencing-via-type[ReferencedTypeIDs] CONTAINS $fromDescID - - descriptorIsNotBeingDropped-25.2($referencing-via-type) - - $referencing-via-type[Type] IN ['*scpb.CheckConstraintUnvalidated', '*scpb.ColumnComputeExpression', '*scpb.ColumnDefaultExpression', '*scpb.ColumnOnUpdateExpression', '*scpb.ColumnType', '*scpb.PolicyUsingExpr', '*scpb.PolicyWithCheckExpr'] - - toAbsent($referenced-descriptor-Target, $referencing-via-type-Target) - - $referenced-descriptor-Node[CurrentStatus] = DROPPED - - $referencing-via-type-Node[CurrentStatus] = ABSENT - - joinTargetNode($referenced-descriptor, $referenced-descriptor-Target, $referenced-descriptor-Node) - - joinTargetNode($referencing-via-type, $referencing-via-type-Target, $referencing-via-type-Node) -- name: descriptor dropped before dependent element removal - from: descriptor-Node - kind: Precedence - to: dependent-Node - query: - - $descriptor[Type] IN ['*scpb.AliasType', '*scpb.CompositeType', '*scpb.Database', '*scpb.EnumType', '*scpb.Function', '*scpb.Schema', '*scpb.Sequence', '*scpb.Table', '*scpb.View'] - - $dependent[Type] IN ['*scpb.CheckConstraintUnvalidated', '*scpb.ColumnComment', '*scpb.ColumnComputeExpression', '*scpb.ColumnDefaultExpression', '*scpb.ColumnFamily', '*scpb.ColumnName', '*scpb.ColumnOnUpdateExpression', '*scpb.ColumnType', '*scpb.CompositeTypeAttrName', '*scpb.CompositeTypeAttrType', '*scpb.DatabaseComment', '*scpb.DatabaseRegionConfig', '*scpb.DatabaseRoleSetting', '*scpb.DatabaseZoneConfig', '*scpb.EnumTypeValue', '*scpb.ForeignKeyConstraintUnvalidated', '*scpb.FunctionBody', '*scpb.FunctionLeakProof', '*scpb.FunctionName', '*scpb.FunctionNullInputBehavior', '*scpb.FunctionSecurity', '*scpb.FunctionVolatility', '*scpb.IndexColumn', '*scpb.IndexComment', '*scpb.IndexName', '*scpb.IndexPartitioning', '*scpb.IndexZoneConfig', '*scpb.LDRJobIDs', '*scpb.NamedRangeZoneConfig', '*scpb.Namespace', '*scpb.Owner', '*scpb.PartitionZoneConfig', '*scpb.Policy', '*scpb.PolicyDeps', '*scpb.PolicyName', '*scpb.PolicyRole', '*scpb.PolicyUsingExpr', '*scpb.PolicyWithCheckExpr', '*scpb.RowLevelSecurityEnabled', '*scpb.RowLevelSecurityForced', '*scpb.RowLevelTTL', '*scpb.SchemaChild', '*scpb.SchemaComment', '*scpb.SchemaParent', '*scpb.SequenceOption', '*scpb.SequenceOwner', '*scpb.TableComment', '*scpb.TableLocalityGlobal', '*scpb.TableLocalityPrimaryRegion', '*scpb.TableLocalityRegionalByRow', '*scpb.TableLocalitySecondaryRegion', '*scpb.TablePartitioning', '*scpb.TableZoneConfig', '*scpb.Trigger', '*scpb.TriggerDeps', '*scpb.TriggerEnabled', '*scpb.TriggerEvents', '*scpb.TriggerFunctionCall', '*scpb.TriggerName', '*scpb.TriggerTiming', '*scpb.TriggerTransition', '*scpb.TriggerWhen', '*scpb.TypeComment', '*scpb.UniqueWithoutIndexConstraintUnvalidated', '*scpb.UserPrivileges'] - - joinOnDescID($descriptor, $dependent, $desc-id) - - toAbsent($descriptor-Target, $dependent-Target) - - $descriptor-Node[CurrentStatus] = DROPPED - - $dependent-Node[CurrentStatus] = ABSENT - - joinTargetNode($descriptor, $descriptor-Target, $descriptor-Node) - - joinTargetNode($dependent, $dependent-Target, $dependent-Node) -- name: descriptor dropped in transaction before removal - from: dropped-Node - kind: PreviousTransactionPrecedence - to: absent-Node - query: - - $dropped[Type] IN ['*scpb.AliasType', '*scpb.CompositeType', '*scpb.Database', '*scpb.EnumType', '*scpb.Function', '*scpb.Schema', '*scpb.Sequence', '*scpb.Table', '*scpb.View'] - - $dropped[DescID] = $_ - - $dropped[Self] = $absent - - toAbsent($dropped-Target, $absent-Target) - - $dropped-Node[CurrentStatus] = DROPPED - - $absent-Node[CurrentStatus] = ABSENT - - joinTargetNode($dropped, $dropped-Target, $dropped-Node) - - joinTargetNode($absent, $absent-Target, $absent-Node) -- name: descriptor dropped right before removing back-reference in its parent descriptor - from: descriptor-Node - kind: SameStagePrecedence - to: back-reference-in-parent-descriptor-Node - query: - - $descriptor[Type] IN ['*scpb.AliasType', '*scpb.CompositeType', '*scpb.Database', '*scpb.EnumType', '*scpb.Function', '*scpb.Schema', '*scpb.Sequence', '*scpb.Table', '*scpb.View'] - - $back-reference-in-parent-descriptor[Type] IN ['*scpb.SchemaChild', '*scpb.SchemaParent'] - - joinOnDescID($descriptor, $back-reference-in-parent-descriptor, $desc-id) - - toAbsent($descriptor-Target, $back-reference-in-parent-descriptor-Target) - - $descriptor-Node[CurrentStatus] = DROPPED - - $back-reference-in-parent-descriptor-Node[CurrentStatus] = ABSENT - - joinTargetNode($descriptor, $descriptor-Target, $descriptor-Node) - - joinTargetNode($back-reference-in-parent-descriptor, $back-reference-in-parent-descriptor-Target, $back-reference-in-parent-descriptor-Node) -- name: descriptor existence precedes dependents - from: relation-Node - kind: Precedence - to: dependent-Node - query: - - $relation[Type] IN ['*scpb.AliasType', '*scpb.CompositeType', '*scpb.Database', '*scpb.EnumType', '*scpb.Function', '*scpb.Schema', '*scpb.Sequence', '*scpb.Table', '*scpb.View'] - - $dependent[Type] IN ['*scpb.CheckConstraint', '*scpb.CheckConstraintUnvalidated', '*scpb.Column', '*scpb.ColumnComment', '*scpb.ColumnComputeExpression', '*scpb.ColumnDefaultExpression', '*scpb.ColumnFamily', '*scpb.ColumnName', '*scpb.ColumnNotNull', '*scpb.ColumnOnUpdateExpression', '*scpb.ColumnType', '*scpb.CompositeTypeAttrName', '*scpb.CompositeTypeAttrType', '*scpb.ConstraintComment', '*scpb.ConstraintWithoutIndexName', '*scpb.DatabaseComment', '*scpb.DatabaseData', '*scpb.DatabaseRegionConfig', '*scpb.DatabaseRoleSetting', '*scpb.DatabaseZoneConfig', '*scpb.EnumTypeValue', '*scpb.ForeignKeyConstraint', '*scpb.ForeignKeyConstraintUnvalidated', '*scpb.FunctionBody', '*scpb.FunctionLeakProof', '*scpb.FunctionName', '*scpb.FunctionNullInputBehavior', '*scpb.FunctionSecurity', '*scpb.FunctionVolatility', '*scpb.IndexColumn', '*scpb.IndexComment', '*scpb.IndexData', '*scpb.IndexName', '*scpb.IndexPartitioning', '*scpb.IndexZoneConfig', '*scpb.LDRJobIDs', '*scpb.NamedRangeZoneConfig', '*scpb.Namespace', '*scpb.Owner', '*scpb.PartitionZoneConfig', '*scpb.Policy', '*scpb.PolicyDeps', '*scpb.PolicyName', '*scpb.PolicyRole', '*scpb.PolicyUsingExpr', '*scpb.PolicyWithCheckExpr', '*scpb.PrimaryIndex', '*scpb.RowLevelSecurityEnabled', '*scpb.RowLevelSecurityForced', '*scpb.RowLevelTTL', '*scpb.SchemaChild', '*scpb.SchemaComment', '*scpb.SchemaParent', '*scpb.SecondaryIndex', '*scpb.SequenceOption', '*scpb.SequenceOwner', '*scpb.TableComment', '*scpb.TableData', '*scpb.TableLocalityGlobal', '*scpb.TableLocalityPrimaryRegion', '*scpb.TableLocalityRegionalByRow', '*scpb.TableLocalitySecondaryRegion', '*scpb.TablePartitioning', '*scpb.TableSchemaLocked', '*scpb.TableZoneConfig', '*scpb.TemporaryIndex', '*scpb.Trigger', '*scpb.TriggerDeps', '*scpb.TriggerEnabled', '*scpb.TriggerEvents', '*scpb.TriggerFunctionCall', '*scpb.TriggerName', '*scpb.TriggerTiming', '*scpb.TriggerTransition', '*scpb.TriggerWhen', '*scpb.TypeComment', '*scpb.UniqueWithoutIndexConstraint', '*scpb.UniqueWithoutIndexConstraintUnvalidated', '*scpb.UserPrivileges'] - - joinOnDescID($relation, $dependent, $relation-id) - - ToPublicOrTransient($relation-Target, $dependent-Target) - - $relation-Node[CurrentStatus] = DESCRIPTOR_ADDED - - $dependent-Node[CurrentStatus] = PUBLIC - - joinTargetNode($relation, $relation-Target, $relation-Node) - - joinTargetNode($dependent, $dependent-Target, $dependent-Node) -- name: descriptor removed right before garbage collection - from: database-Node - kind: SameStagePrecedence - to: data-Node - query: - - $database[Type] IN ['*scpb.AliasType', '*scpb.CompositeType', '*scpb.Database', '*scpb.EnumType', '*scpb.Function', '*scpb.Schema', '*scpb.Sequence', '*scpb.Table', '*scpb.View'] - - $data[Type] = '*scpb.DatabaseData' - - joinOnDescID($database, $data, $db-id) - - toAbsent($database-Target, $data-Target) - - $database-Node[CurrentStatus] = ABSENT - - $data-Node[CurrentStatus] = DROPPED - - joinTargetNode($database, $database-Target, $database-Node) - - joinTargetNode($data, $data-Target, $data-Node) -- name: during a column type alterations, column type dependents removed before column type - from: dependent-Node - kind: Precedence - to: column-type-Node - query: - - $dependent[Type] IN ['*scpb.ColumnComputeExpression', '*scpb.ColumnDefaultExpression', '*scpb.ColumnOnUpdateExpression', '*scpb.SequenceOwner'] - - $column-type[Type] = '*scpb.ColumnType' - - joinOnColumnID($dependent, $column-type, $table-id, $col-id) - - $column[Type] = '*scpb.Column' - - $compute-expression[Type] = '*scpb.ColumnComputeExpression' - - joinOnColumnID($column, $compute-expression, $table-id, $col-id) - - $compute-expression[Usage] = ALTER_TYPE_USING - - joinTargetNode($column, $column-Target, $column-Node) - - joinTargetNode($compute-expression, $compute-expression-Target, $compute-expression-Node) - - toAbsent($dependent-Target, $column-type-Target) - - $dependent-Node[CurrentStatus] = ABSENT - - $column-type-Node[CurrentStatus] = ABSENT - - joinTargetNode($dependent, $dependent-Target, $dependent-Node) - - joinTargetNode($column-type, $column-type-Target, $column-type-Node) -- name: during alter column type, column names for old and new columns are swapped in the same stage - from: old-column-name-Node - kind: SameStagePrecedence - to: new-column-name-Node - query: - - $old-column-name[Type] = '*scpb.ColumnName' - - $new-column-name[Type] = '*scpb.ColumnName' - - $old-column-name-Target[TargetStatus] = ABSENT - - $old-column-name-Node[CurrentStatus] = ABSENT - - $new-column-name-Target[TargetStatus] = PUBLIC - - $new-column-name-Node[CurrentStatus] = PUBLIC - - joinOnDescID($old-column-name, $new-column-name, $table-id) - - $new-column-name[ColumnID] = $new-col-id - - $column[Type] = '*scpb.Column' - - $compute-expression[Type] = '*scpb.ColumnComputeExpression' - - joinOnColumnID($column, $compute-expression, $table-id, $new-col-id) - - $compute-expression[Usage] = ALTER_TYPE_USING - - joinTargetNode($column, $column-Target, $column-Node) - - joinTargetNode($compute-expression, $compute-expression-Target, $compute-expression-Node) - - joinTargetNode($old-column-name, $old-column-name-Target, $old-column-name-Node) - - joinTargetNode($new-column-name, $new-column-name-Target, $new-column-name-Node) -- name: ensure columns are in increasing order - from: later-column-Node - kind: Precedence - to: earlier-column-Node - query: - - $later-column[Type] = '*scpb.Column' - - joinTargetNode($later-column, $later-column-Target, $later-column-Node) - - $earlier-column[Type] = '*scpb.Column' - - joinOnDescID($later-column, $earlier-column, $table-id) - - ToPublicOrTransient($later-column-Target, $earlier-column-Target) - - $status IN [WRITE_ONLY, PUBLIC] - - $later-column-Node[CurrentStatus] = $status - - $earlier-column-Node[CurrentStatus] = $status - - SmallerColumnIDFirst(*scpb.Column, *scpb.Column)($later-column, $earlier-column) - - joinTargetNode($later-column, $later-column-Target, $later-column-Node) - - joinTargetNode($earlier-column, $earlier-column-Target, $earlier-column-Node) -- name: ensure database zone configs are in increasing seqNum order - from: later-seqNum-Node - kind: Precedence - to: earlier-seqNum-Node - query: - - $later-seqNum[Type] = '*scpb.DatabaseZoneConfig' - - joinTargetNode($later-seqNum, $later-seqNum-Target, $later-seqNum-Node) - - $earlier-seqNum[Type] = '*scpb.DatabaseZoneConfig' - - joinOnDescID($later-seqNum, $earlier-seqNum, $seqnum) - - ToPublicOrTransient($later-seqNum-Target, $earlier-seqNum-Target) - - $later-seqNum-Node[CurrentStatus] = $status - - $earlier-seqNum-Node[CurrentStatus] = $status - - SmallerSeqNumFirst(*scpb.DatabaseZoneConfig, *scpb.DatabaseZoneConfig)($later-seqNum, $earlier-seqNum) - - joinTargetNode($later-seqNum, $later-seqNum-Target, $later-seqNum-Node) - - joinTargetNode($earlier-seqNum, $earlier-seqNum-Target, $earlier-seqNum-Node) -- name: ensure index columns are in increasing order - from: later-column-Node - kind: Precedence - to: earlier-column-Node - query: - - $later-column[Type] = '*scpb.IndexColumn' - - joinTargetNode($later-column, $later-column-Target, $later-column-Node) - - $earlier-column[Type] = '*scpb.IndexColumn' - - joinOnIndexID($later-column, $earlier-column, $table-id, $index-id) - - ToPublicOrTransient($later-column-Target, $earlier-column-Target) - - ToPublicOrTransient($later-column-Target, $earlier-column-Target) - - $later-column-Node[CurrentStatus] = PUBLIC - - $earlier-column-Node[CurrentStatus] = PUBLIC - - SmallerColumnIDFirst(*scpb.IndexColumn, *scpb.IndexColumn)($later-column, $earlier-column) - - joinTargetNode($later-column, $later-column-Target, $later-column-Node) - - joinTargetNode($earlier-column, $earlier-column-Target, $earlier-column-Node) -- name: ensure index zone configs are in increasing seqNum order - from: later-seqNum-Node - kind: Precedence - to: earlier-seqNum-Node - query: - - $later-seqNum[Type] = '*scpb.IndexZoneConfig' - - joinTargetNode($later-seqNum, $later-seqNum-Target, $later-seqNum-Node) - - $earlier-seqNum[Type] = '*scpb.IndexZoneConfig' - - joinOnDescID($later-seqNum, $earlier-seqNum, $seqnum) - - joinOnIndexID($later-seqNum, $earlier-seqNum, $table-id, $index-id) - - ToPublicOrTransient($later-seqNum-Target, $earlier-seqNum-Target) - - $later-seqNum-Node[CurrentStatus] = $status - - $earlier-seqNum-Node[CurrentStatus] = $status - - SmallerSeqNumFirst(*scpb.IndexZoneConfig, *scpb.IndexZoneConfig)($later-seqNum, $earlier-seqNum) - - joinTargetNode($later-seqNum, $later-seqNum-Target, $later-seqNum-Node) - - joinTargetNode($earlier-seqNum, $earlier-seqNum-Target, $earlier-seqNum-Node) -- name: ensure named range zone configs are in increasing seqNum order - from: later-seqNum-Node - kind: Precedence - to: earlier-seqNum-Node - query: - - $later-seqNum[Type] = '*scpb.NamedRangeZoneConfig' - - joinTargetNode($later-seqNum, $later-seqNum-Target, $later-seqNum-Node) - - $earlier-seqNum[Type] = '*scpb.NamedRangeZoneConfig' - - joinOnDescID($later-seqNum, $earlier-seqNum, $seqnum) - - ToPublicOrTransient($later-seqNum-Target, $earlier-seqNum-Target) - - $later-seqNum-Node[CurrentStatus] = $status - - $earlier-seqNum-Node[CurrentStatus] = $status - - SmallerSeqNumFirst(*scpb.NamedRangeZoneConfig, *scpb.NamedRangeZoneConfig)($later-seqNum, $earlier-seqNum) - - joinTargetNode($later-seqNum, $later-seqNum-Target, $later-seqNum-Node) - - joinTargetNode($earlier-seqNum, $earlier-seqNum-Target, $earlier-seqNum-Node) -- name: ensure partition zone configs are in increasing seqNum order - from: later-seqNum-Node - kind: Precedence - to: earlier-seqNum-Node - query: - - $later-seqNum[Type] = '*scpb.PartitionZoneConfig' - - joinTargetNode($later-seqNum, $later-seqNum-Target, $later-seqNum-Node) - - $earlier-seqNum[Type] = '*scpb.PartitionZoneConfig' - - joinOnDescID($later-seqNum, $earlier-seqNum, $seqnum) - - joinOnIndexID($later-seqNum, $earlier-seqNum, $table-id, $index-id) - - joinOnPartitionName($later-seqNum, $earlier-seqNum, $table-id, $index-id, $partition-name) - - ToPublicOrTransient($later-seqNum-Target, $earlier-seqNum-Target) - - $later-seqNum-Node[CurrentStatus] = $status - - $earlier-seqNum-Node[CurrentStatus] = $status - - SmallerSeqNumFirst(*scpb.PartitionZoneConfig, *scpb.PartitionZoneConfig)($later-seqNum, $earlier-seqNum) - - joinTargetNode($later-seqNum, $later-seqNum-Target, $later-seqNum-Node) - - joinTargetNode($earlier-seqNum, $earlier-seqNum-Target, $earlier-seqNum-Node) -- name: ensure table zone configs are in increasing seqNum order - from: later-seqNum-Node - kind: Precedence - to: earlier-seqNum-Node - query: - - $later-seqNum[Type] = '*scpb.TableZoneConfig' - - joinTargetNode($later-seqNum, $later-seqNum-Target, $later-seqNum-Node) - - $earlier-seqNum[Type] = '*scpb.TableZoneConfig' - - joinOnDescID($later-seqNum, $earlier-seqNum, $seqnum) - - ToPublicOrTransient($later-seqNum-Target, $earlier-seqNum-Target) - - $later-seqNum-Node[CurrentStatus] = $status - - $earlier-seqNum-Node[CurrentStatus] = $status - - SmallerSeqNumFirst(*scpb.TableZoneConfig, *scpb.TableZoneConfig)($later-seqNum, $earlier-seqNum) - - joinTargetNode($later-seqNum, $later-seqNum-Target, $later-seqNum-Node) - - joinTargetNode($earlier-seqNum, $earlier-seqNum-Target, $earlier-seqNum-Node) -- name: function name should be set before parent ids - from: function-name-Node - kind: Precedence - to: function-parent-Node - query: - - $function-name[Type] = '*scpb.FunctionName' - - $function-parent[Type] = '*scpb.SchemaChild' - - joinOnDescID($function-name, $function-parent, $function-id) - - ToPublicOrTransient($function-name-Target, $function-parent-Target) - - $function-name-Node[CurrentStatus] = PUBLIC - - $function-parent-Node[CurrentStatus] = PUBLIC - - joinTargetNode($function-name, $function-name-Target, $function-name-Node) - - joinTargetNode($function-parent, $function-parent-Target, $function-parent-Node) -- name: handle default column expression swaps - from: old-column-expression-Node - kind: Precedence - to: new-column-expression-Node - query: - - $old-column-expression[Type] IN ['*scpb.ColumnDefaultExpression', '*scpb.ColumnOnUpdateExpression'] - - $new-column-expression[Type] IN ['*scpb.ColumnDefaultExpression', '*scpb.ColumnOnUpdateExpression'] - - $old-column-expression[Type] = $same-type - - $new-column-expression[Type] = $same-type - - joinOnColumnID($old-column-expression, $new-column-expression, $table-id, $col-id) - - $old-column-expression-Target[TargetStatus] = ABSENT - - $old-column-expression-Node[CurrentStatus] = ABSENT - - $new-column-expression-Target[TargetStatus] = PUBLIC - - $new-column-expression-Node[CurrentStatus] = PUBLIC - - joinTargetNode($old-column-expression, $old-column-expression-Target, $old-column-expression-Node) - - joinTargetNode($new-column-expression, $new-column-expression-Target, $new-column-expression-Node) -- name: index data exists as soon as index accepts backfills - from: index-name-Node - kind: SameStagePrecedence - to: index-Node - query: - - $index-name[Type] IN ['*scpb.PrimaryIndex', '*scpb.SecondaryIndex'] - - $index[Type] = '*scpb.IndexData' - - joinOnIndexID($index-name, $index, $table-id, $index-id) - - ToPublicOrTransient($index-name-Target, $index-Target) - - $index-name-Node[CurrentStatus] = BACKFILL_ONLY - - $index-Node[CurrentStatus] = PUBLIC - - joinTargetNode($index-name, $index-name-Target, $index-name-Node) - - joinTargetNode($index, $index-Target, $index-Node) -- name: index dependents exist before index becomes public - from: dependent-Node - kind: Precedence - to: index-Node - query: - - $dependent[Type] IN ['*scpb.IndexColumn', '*scpb.IndexComment', '*scpb.IndexName', '*scpb.IndexPartitioning', '*scpb.IndexZoneConfig', '*scpb.PartitionZoneConfig'] - - $index[Type] IN ['*scpb.PrimaryIndex', '*scpb.SecondaryIndex', '*scpb.TemporaryIndex'] - - joinOnIndexID($dependent, $index, $table-id, $index-id) - - ToPublicOrTransient($dependent-Target, $index-Target) - - $dependent-Node[CurrentStatus] = PUBLIC - - $index-Node[CurrentStatus] = PUBLIC - - joinTargetNode($dependent, $dependent-Target, $dependent-Node) - - joinTargetNode($index, $index-Target, $index-Node) -- name: index drop mutation visible before cleaning up index columns - from: index-Node - kind: Precedence - to: dependent-Node - query: - - $index[Type] IN ['*scpb.PrimaryIndex', '*scpb.SecondaryIndex', '*scpb.TemporaryIndex'] - - $dependent[Type] = '*scpb.IndexColumn' - - joinOnIndexID($index, $dependent, $table-id, $index-id) - - toAbsent($index-Target, $dependent-Target) - - $index-Node[CurrentStatus] = DELETE_ONLY - - $dependent-Node[CurrentStatus] = ABSENT - - joinTargetNode($index, $index-Target, $index-Node) - - joinTargetNode($dependent, $dependent-Target, $dependent-Node) -- name: index drop mutation visible before cleaning up index columns - from: index-Node - kind: Precedence - to: dependent-Node - query: - - $index[Type] IN ['*scpb.PrimaryIndex', '*scpb.SecondaryIndex', '*scpb.TemporaryIndex'] - - $dependent[Type] = '*scpb.IndexColumn' - - joinOnIndexID($index, $dependent, $table-id, $index-id) - - transient($index-Target, $dependent-Target) - - $index-Node[CurrentStatus] = TRANSIENT_DELETE_ONLY - - $dependent-Node[CurrentStatus] = TRANSIENT_ABSENT - - joinTargetNode($index, $index-Target, $index-Node) - - joinTargetNode($dependent, $dependent-Target, $dependent-Node) -- name: index drop mutation visible before cleaning up index columns - from: index-Node - kind: Precedence - to: dependent-Node - query: - - $index[Type] IN ['*scpb.PrimaryIndex', '*scpb.SecondaryIndex', '*scpb.TemporaryIndex'] - - $dependent[Type] = '*scpb.IndexColumn' - - joinOnIndexID($index, $dependent, $table-id, $index-id) - - $index-Target[TargetStatus] = TRANSIENT_ABSENT - - $index-Node[CurrentStatus] = TRANSIENT_DELETE_ONLY - - $dependent-Target[TargetStatus] = ABSENT - - $dependent-Node[CurrentStatus] = ABSENT - - joinTargetNode($index, $index-Target, $index-Node) - - joinTargetNode($dependent, $dependent-Target, $dependent-Node) -- name: index drop mutation visible before cleaning up index columns - from: index-Node - kind: Precedence - to: dependent-Node - query: - - $index[Type] IN ['*scpb.PrimaryIndex', '*scpb.SecondaryIndex', '*scpb.TemporaryIndex'] - - $dependent[Type] = '*scpb.IndexColumn' - - joinOnIndexID($index, $dependent, $table-id, $index-id) - - $index-Target[TargetStatus] = ABSENT - - $index-Node[CurrentStatus] = DELETE_ONLY - - $dependent-Target[TargetStatus] = TRANSIENT_ABSENT - - $dependent-Node[CurrentStatus] = TRANSIENT_ABSENT - - joinTargetNode($index, $index-Target, $index-Node) - - joinTargetNode($dependent, $dependent-Target, $dependent-Node) -- name: index existence precedes index dependents - from: index-Node - kind: Precedence - to: dependent-Node - query: - - $index[Type] IN ['*scpb.PrimaryIndex', '*scpb.SecondaryIndex'] - - $dependent[Type] IN ['*scpb.IndexColumn', '*scpb.IndexComment', '*scpb.IndexName', '*scpb.IndexPartitioning', '*scpb.IndexZoneConfig', '*scpb.PartitionZoneConfig'] - - joinOnIndexID($index, $dependent, $table-id, $index-id) - - ToPublicOrTransient($index-Target, $dependent-Target) - - $index-Node[CurrentStatus] = BACKFILL_ONLY - - $dependent-Node[CurrentStatus] = PUBLIC - - joinTargetNode($index, $index-Target, $index-Node) - - joinTargetNode($dependent, $dependent-Target, $dependent-Node) -- name: index is MERGED before its temp index starts to disappear - from: index-Node - kind: Precedence - to: temp-Node - query: - - $index[Type] IN ['*scpb.PrimaryIndex', '*scpb.SecondaryIndex'] - - $temp[Type] = '*scpb.TemporaryIndex' - - joinOnDescID($index, $temp, $table-id) - - $index[TemporaryIndexID] = $temp-index-id - - $temp[IndexID] = $temp-index-id - - $index-Target[TargetStatus] IN [PUBLIC, TRANSIENT_ABSENT] - - $index-Node[CurrentStatus] = MERGED - - $temp-Target[TargetStatus] = TRANSIENT_ABSENT - - $temp-Node[CurrentStatus] = TRANSIENT_DELETE_ONLY - - joinTargetNode($index, $index-Target, $index-Node) - - joinTargetNode($temp, $temp-Target, $temp-Node) -- name: index is ready to be validated before we validate constraint on it - from: index-Node - kind: Precedence - to: constraint-Node - query: - - $index[Type] = '*scpb.PrimaryIndex' - - $constraint[Type] IN ['*scpb.CheckConstraint', '*scpb.ColumnNotNull', '*scpb.ForeignKeyConstraint', '*scpb.UniqueWithoutIndexConstraint'] - - joinOnDescID($index, $constraint, $table-id) - - $index[IndexID] = $index-id-for-validation - - $constraint[IndexID] = $index-id-for-validation - - ToPublicOrTransient($index-Target, $constraint-Target) - - $index-Node[CurrentStatus] = VALIDATED - - $constraint-Node[CurrentStatus] = VALIDATED - - joinTargetNode($index, $index-Target, $index-Node) - - joinTargetNode($constraint, $constraint-Target, $constraint-Node) -- name: index no longer public before dependents, excluding columns - from: index-Node - kind: Precedence - to: dependent-Node - query: - - $index[Type] IN ['*scpb.PrimaryIndex', '*scpb.SecondaryIndex', '*scpb.TemporaryIndex'] - - $dependent[Type] IN ['*scpb.IndexComment', '*scpb.IndexName', '*scpb.IndexPartitioning', '*scpb.IndexZoneConfig', '*scpb.PartitionZoneConfig'] - - joinOnIndexID($index, $dependent, $table-id, $index-id) - - toAbsent($index-Target, $dependent-Target) - - $index-Node[CurrentStatus] = VALIDATED - - $dependent-Node[CurrentStatus] = ABSENT - - joinTargetNode($index, $index-Target, $index-Node) - - joinTargetNode($dependent, $dependent-Target, $dependent-Node) -- name: index no longer public before dependents, excluding columns - from: index-Node - kind: Precedence - to: dependent-Node - query: - - $index[Type] IN ['*scpb.PrimaryIndex', '*scpb.SecondaryIndex', '*scpb.TemporaryIndex'] - - $dependent[Type] IN ['*scpb.IndexComment', '*scpb.IndexName', '*scpb.IndexPartitioning', '*scpb.IndexZoneConfig', '*scpb.PartitionZoneConfig'] - - joinOnIndexID($index, $dependent, $table-id, $index-id) - - transient($index-Target, $dependent-Target) - - $index-Node[CurrentStatus] = TRANSIENT_VALIDATED - - $dependent-Node[CurrentStatus] = TRANSIENT_ABSENT - - joinTargetNode($index, $index-Target, $index-Node) - - joinTargetNode($dependent, $dependent-Target, $dependent-Node) -- name: index no longer public before dependents, excluding columns - from: index-Node - kind: Precedence - to: dependent-Node - query: - - $index[Type] IN ['*scpb.PrimaryIndex', '*scpb.SecondaryIndex', '*scpb.TemporaryIndex'] - - $dependent[Type] IN ['*scpb.IndexComment', '*scpb.IndexName', '*scpb.IndexPartitioning', '*scpb.IndexZoneConfig', '*scpb.PartitionZoneConfig'] - - joinOnIndexID($index, $dependent, $table-id, $index-id) - - $index-Target[TargetStatus] = TRANSIENT_ABSENT - - $index-Node[CurrentStatus] = TRANSIENT_VALIDATED - - $dependent-Target[TargetStatus] = ABSENT - - $dependent-Node[CurrentStatus] = ABSENT - - joinTargetNode($index, $index-Target, $index-Node) - - joinTargetNode($dependent, $dependent-Target, $dependent-Node) -- name: index no longer public before dependents, excluding columns - from: index-Node - kind: Precedence - to: dependent-Node - query: - - $index[Type] IN ['*scpb.PrimaryIndex', '*scpb.SecondaryIndex', '*scpb.TemporaryIndex'] - - $dependent[Type] IN ['*scpb.IndexComment', '*scpb.IndexName', '*scpb.IndexPartitioning', '*scpb.IndexZoneConfig', '*scpb.PartitionZoneConfig'] - - joinOnIndexID($index, $dependent, $table-id, $index-id) - - $index-Target[TargetStatus] = ABSENT - - $index-Node[CurrentStatus] = VALIDATED - - $dependent-Target[TargetStatus] = TRANSIENT_ABSENT - - $dependent-Node[CurrentStatus] = TRANSIENT_ABSENT - - joinTargetNode($index, $index-Target, $index-Node) - - joinTargetNode($dependent, $dependent-Target, $dependent-Node) -- name: index no longer public before index name - from: index-Node - kind: Precedence - to: name-Node - query: - - $index[Type] = '*scpb.SecondaryIndex' - - $name[Type] = '*scpb.IndexName' - - joinOnIndexID($index, $name, $table-id, $index-id) - - toAbsent($index-Target, $name-Target) - - $index-Node[CurrentStatus] = DELETE_ONLY - - $name-Node[CurrentStatus] = ABSENT - - joinTargetNode($index, $index-Target, $index-Node) - - joinTargetNode($name, $name-Target, $name-Node) -- name: index no longer public before index name - from: index-Node - kind: Precedence - to: name-Node - query: - - $index[Type] = '*scpb.SecondaryIndex' - - $name[Type] = '*scpb.IndexName' - - joinOnIndexID($index, $name, $table-id, $index-id) - - transient($index-Target, $name-Target) - - $index-Node[CurrentStatus] = TRANSIENT_DELETE_ONLY - - $name-Node[CurrentStatus] = TRANSIENT_ABSENT - - joinTargetNode($index, $index-Target, $index-Node) - - joinTargetNode($name, $name-Target, $name-Node) -- name: index no longer public before index name - from: index-Node - kind: Precedence - to: name-Node - query: - - $index[Type] = '*scpb.SecondaryIndex' - - $name[Type] = '*scpb.IndexName' - - joinOnIndexID($index, $name, $table-id, $index-id) - - $index-Target[TargetStatus] = TRANSIENT_ABSENT - - $index-Node[CurrentStatus] = TRANSIENT_DELETE_ONLY - - $name-Target[TargetStatus] = ABSENT - - $name-Node[CurrentStatus] = ABSENT - - joinTargetNode($index, $index-Target, $index-Node) - - joinTargetNode($name, $name-Target, $name-Node) -- name: index no longer public before index name - from: index-Node - kind: Precedence - to: name-Node - query: - - $index[Type] = '*scpb.SecondaryIndex' - - $name[Type] = '*scpb.IndexName' - - joinOnIndexID($index, $name, $table-id, $index-id) - - $index-Target[TargetStatus] = ABSENT - - $index-Node[CurrentStatus] = DELETE_ONLY - - $name-Target[TargetStatus] = TRANSIENT_ABSENT - - $name-Node[CurrentStatus] = TRANSIENT_ABSENT - - joinTargetNode($index, $index-Target, $index-Node) - - joinTargetNode($name, $name-Target, $name-Node) -- name: index removed before garbage collection - from: index-Node - kind: Precedence - to: index-data-Node - query: - - $index[Type] IN ['*scpb.PrimaryIndex', '*scpb.SecondaryIndex', '*scpb.TemporaryIndex'] - - $index-data[Type] = '*scpb.IndexData' - - joinOnIndexID($index, $index-data, $table-id, $index-id) - - toAbsent($index-Target, $index-data-Target) - - $index-Node[CurrentStatus] = ABSENT - - $index-data-Node[CurrentStatus] = DROPPED - - joinTargetNode($index, $index-Target, $index-Node) - - joinTargetNode($index-data, $index-data-Target, $index-data-Node) -- name: index removed before garbage collection - from: index-Node - kind: Precedence - to: index-data-Node - query: - - $index[Type] IN ['*scpb.PrimaryIndex', '*scpb.SecondaryIndex', '*scpb.TemporaryIndex'] - - $index-data[Type] = '*scpb.IndexData' - - joinOnIndexID($index, $index-data, $table-id, $index-id) - - transient($index-Target, $index-data-Target) - - $index-Node[CurrentStatus] = TRANSIENT_ABSENT - - $index-data-Node[CurrentStatus] = TRANSIENT_DROPPED - - joinTargetNode($index, $index-Target, $index-Node) - - joinTargetNode($index-data, $index-data-Target, $index-data-Node) -- name: index removed before garbage collection - from: index-Node - kind: Precedence - to: index-data-Node - query: - - $index[Type] IN ['*scpb.PrimaryIndex', '*scpb.SecondaryIndex', '*scpb.TemporaryIndex'] - - $index-data[Type] = '*scpb.IndexData' - - joinOnIndexID($index, $index-data, $table-id, $index-id) - - $index-Target[TargetStatus] = TRANSIENT_ABSENT - - $index-Node[CurrentStatus] = TRANSIENT_ABSENT - - $index-data-Target[TargetStatus] = ABSENT - - $index-data-Node[CurrentStatus] = DROPPED - - joinTargetNode($index, $index-Target, $index-Node) - - joinTargetNode($index-data, $index-data-Target, $index-data-Node) -- name: index removed before garbage collection - from: index-Node - kind: Precedence - to: index-data-Node - query: - - $index[Type] IN ['*scpb.PrimaryIndex', '*scpb.SecondaryIndex', '*scpb.TemporaryIndex'] - - $index-data[Type] = '*scpb.IndexData' - - joinOnIndexID($index, $index-data, $table-id, $index-id) - - $index-Target[TargetStatus] = ABSENT - - $index-Node[CurrentStatus] = ABSENT - - $index-data-Target[TargetStatus] = TRANSIENT_ABSENT - - $index-data-Node[CurrentStatus] = TRANSIENT_DROPPED - - joinTargetNode($index, $index-Target, $index-Node) - - joinTargetNode($index-data, $index-data-Target, $index-data-Node) -- name: index-column added to index before index is backfilled - from: index-column-Node - kind: Precedence - to: index-Node - query: - - $index-column[Type] = '*scpb.IndexColumn' - - $index[Type] IN ['*scpb.PrimaryIndex', '*scpb.SecondaryIndex'] - - joinOnIndexID($index-column, $index, $table-id, $index-id) - - ToPublicOrTransient($index-column-Target, $index-Target) - - $index-column-Node[CurrentStatus] = PUBLIC - - $index-Node[CurrentStatus] = BACKFILLED - - joinTargetNode($index-column, $index-column-Target, $index-column-Node) - - joinTargetNode($index, $index-Target, $index-Node) -- name: index-column added to index before temp index receives writes - from: index-column-Node - kind: Precedence - to: index-Node - query: - - $index-column[Type] = '*scpb.IndexColumn' - - $index[Type] = '*scpb.TemporaryIndex' - - joinOnIndexID($index-column, $index, $table-id, $index-id) - - transient($index-column-Target, $index-Target) - - $index-column-Node[CurrentStatus] = PUBLIC - - $index-Node[CurrentStatus] = WRITE_ONLY - - joinTargetNode($index-column, $index-column-Target, $index-column-Node) - - joinTargetNode($index, $index-Target, $index-Node) -- name: indexes containing column reach absent before column - from: index-Node - kind: Precedence - to: column-Node - query: - - $index[Type] IN ['*scpb.PrimaryIndex', '*scpb.SecondaryIndex'] - - $column[Type] = '*scpb.Column' - - ColumnInIndex($index-column, $index, $table-id, $column-id, $index-id) - - joinOnColumnID($index-column, $column, $table-id, $column-id) - - descriptorIsNotBeingDropped-25.2($index-column) - - toAbsent($index-Target, $column-Target) - - $index-Node[CurrentStatus] = ABSENT - - $column-Node[CurrentStatus] = ABSENT - - joinTargetNode($index, $index-Target, $index-Node) - - joinTargetNode($column, $column-Target, $column-Node) -- name: indexes containing column reach absent before column - from: index-Node - kind: Precedence - to: column-Node - query: - - $index[Type] IN ['*scpb.PrimaryIndex', '*scpb.SecondaryIndex'] - - $column[Type] = '*scpb.Column' - - ColumnInIndex($index-column, $index, $table-id, $column-id, $index-id) - - joinOnColumnID($index-column, $column, $table-id, $column-id) - - descriptorIsNotBeingDropped-25.2($index-column) - - transient($index-Target, $column-Target) - - $index-Node[CurrentStatus] = TRANSIENT_ABSENT - - $column-Node[CurrentStatus] = TRANSIENT_ABSENT - - joinTargetNode($index, $index-Target, $index-Node) - - joinTargetNode($column, $column-Target, $column-Node) -- name: indexes containing column reach absent before column - from: index-Node - kind: Precedence - to: column-Node - query: - - $index[Type] IN ['*scpb.PrimaryIndex', '*scpb.SecondaryIndex'] - - $column[Type] = '*scpb.Column' - - ColumnInIndex($index-column, $index, $table-id, $column-id, $index-id) - - joinOnColumnID($index-column, $column, $table-id, $column-id) - - descriptorIsNotBeingDropped-25.2($index-column) - - $index-Target[TargetStatus] = TRANSIENT_ABSENT - - $index-Node[CurrentStatus] = TRANSIENT_ABSENT - - $column-Target[TargetStatus] = ABSENT - - $column-Node[CurrentStatus] = ABSENT - - joinTargetNode($index, $index-Target, $index-Node) - - joinTargetNode($column, $column-Target, $column-Node) -- name: indexes containing column reach absent before column - from: index-Node - kind: Precedence - to: column-Node - query: - - $index[Type] IN ['*scpb.PrimaryIndex', '*scpb.SecondaryIndex'] - - $column[Type] = '*scpb.Column' - - ColumnInIndex($index-column, $index, $table-id, $column-id, $index-id) - - joinOnColumnID($index-column, $column, $table-id, $column-id) - - descriptorIsNotBeingDropped-25.2($index-column) - - $index-Target[TargetStatus] = ABSENT - - $index-Node[CurrentStatus] = ABSENT - - $column-Target[TargetStatus] = TRANSIENT_ABSENT - - $column-Node[CurrentStatus] = TRANSIENT_ABSENT - - joinTargetNode($index, $index-Target, $index-Node) - - joinTargetNode($column, $column-Target, $column-Node) -- name: namespace exist before schema parent - from: dependent-Node - kind: Precedence - to: relation-Node - query: - - $dependent[Type] = '*scpb.Namespace' - - $relation[Type] = '*scpb.SchemaParent' - - joinOnDescID($dependent, $relation, $schema-id) - - ToPublicOrTransient($dependent-Target, $relation-Target) - - $dependent-Node[CurrentStatus] = PUBLIC - - $relation-Node[CurrentStatus] = PUBLIC - - joinTargetNode($dependent, $dependent-Target, $dependent-Node) - - joinTargetNode($relation, $relation-Target, $relation-Node) -- name: non-data dependents removed before descriptor - from: dependent-Node - kind: Precedence - to: descriptor-Node - query: - - $dependent[Type] IN ['*scpb.CheckConstraint', '*scpb.CheckConstraintUnvalidated', '*scpb.Column', '*scpb.ColumnComment', '*scpb.ColumnComputeExpression', '*scpb.ColumnDefaultExpression', '*scpb.ColumnFamily', '*scpb.ColumnName', '*scpb.ColumnNotNull', '*scpb.ColumnOnUpdateExpression', '*scpb.ColumnType', '*scpb.CompositeTypeAttrName', '*scpb.CompositeTypeAttrType', '*scpb.ConstraintComment', '*scpb.ConstraintWithoutIndexName', '*scpb.DatabaseComment', '*scpb.DatabaseRegionConfig', '*scpb.DatabaseRoleSetting', '*scpb.DatabaseZoneConfig', '*scpb.EnumTypeValue', '*scpb.ForeignKeyConstraint', '*scpb.ForeignKeyConstraintUnvalidated', '*scpb.FunctionBody', '*scpb.FunctionLeakProof', '*scpb.FunctionName', '*scpb.FunctionNullInputBehavior', '*scpb.FunctionSecurity', '*scpb.FunctionVolatility', '*scpb.IndexColumn', '*scpb.IndexComment', '*scpb.IndexName', '*scpb.IndexPartitioning', '*scpb.IndexZoneConfig', '*scpb.LDRJobIDs', '*scpb.NamedRangeZoneConfig', '*scpb.Namespace', '*scpb.Owner', '*scpb.PartitionZoneConfig', '*scpb.Policy', '*scpb.PolicyDeps', '*scpb.PolicyName', '*scpb.PolicyRole', '*scpb.PolicyUsingExpr', '*scpb.PolicyWithCheckExpr', '*scpb.PrimaryIndex', '*scpb.RowLevelSecurityEnabled', '*scpb.RowLevelSecurityForced', '*scpb.RowLevelTTL', '*scpb.SchemaChild', '*scpb.SchemaComment', '*scpb.SchemaParent', '*scpb.SecondaryIndex', '*scpb.SequenceOption', '*scpb.SequenceOwner', '*scpb.TableComment', '*scpb.TableLocalityGlobal', '*scpb.TableLocalityPrimaryRegion', '*scpb.TableLocalityRegionalByRow', '*scpb.TableLocalitySecondaryRegion', '*scpb.TablePartitioning', '*scpb.TableSchemaLocked', '*scpb.TableZoneConfig', '*scpb.TemporaryIndex', '*scpb.Trigger', '*scpb.TriggerDeps', '*scpb.TriggerEnabled', '*scpb.TriggerEvents', '*scpb.TriggerFunctionCall', '*scpb.TriggerName', '*scpb.TriggerTiming', '*scpb.TriggerTransition', '*scpb.TriggerWhen', '*scpb.TypeComment', '*scpb.UniqueWithoutIndexConstraint', '*scpb.UniqueWithoutIndexConstraintUnvalidated', '*scpb.UserPrivileges'] - - $descriptor[Type] IN ['*scpb.AliasType', '*scpb.CompositeType', '*scpb.Database', '*scpb.EnumType', '*scpb.Function', '*scpb.Schema', '*scpb.Sequence', '*scpb.Table', '*scpb.View'] - - joinOnDescID($dependent, $descriptor, $desc-id) - - toAbsent($dependent-Target, $descriptor-Target) - - $dependent-Node[CurrentStatus] = ABSENT - - $descriptor-Node[CurrentStatus] = ABSENT - - joinTargetNode($dependent, $dependent-Target, $dependent-Node) - - joinTargetNode($descriptor, $descriptor-Target, $descriptor-Node) -- name: old index absent before new index public when swapping with transient - from: old-primary-index-Node - kind: Precedence - to: new-primary-index-Node - query: - - $old-primary-index[Type] = '*scpb.PrimaryIndex' - - $transient-primary-index[Type] = '*scpb.PrimaryIndex' - - $new-primary-index[Type] = '*scpb.PrimaryIndex' - - joinOnDescID($old-primary-index, $transient-primary-index, $table-id) - - $old-primary-index[IndexID] = $old-index-id - - $transient-primary-index[SourceIndexID] = $old-index-id - - joinOnDescID($transient-primary-index, $new-primary-index, $table-id) - - $transient-primary-index[IndexID] = $transient-index-id - - $new-primary-index[SourceIndexID] = $transient-index-id - - $old-primary-index-Target[TargetStatus] = ABSENT - - $old-primary-index-Node[CurrentStatus] = ABSENT - - $new-primary-index-Target[TargetStatus] = PUBLIC - - $new-primary-index-Node[CurrentStatus] = PUBLIC - - joinTargetNode($old-primary-index, $old-primary-index-Target, $old-primary-index-Node) - - joinTargetNode($new-primary-index, $new-primary-index-Target, $new-primary-index-Node) -- name: primary index named right before index becomes public - from: index-name-Node - kind: SameStagePrecedence - to: index-Node - query: - - $index-name[Type] = '*scpb.IndexName' - - $index[Type] = '*scpb.PrimaryIndex' - - joinOnIndexID($index-name, $index, $table-id, $index-id) - - ToPublicOrTransient($index-name-Target, $index-Target) - - $index-name-Node[CurrentStatus] = PUBLIC - - $index-Node[CurrentStatus] = PUBLIC - - joinTargetNode($index-name, $index-name-Target, $index-name-Node) - - joinTargetNode($index, $index-Target, $index-Node) -- name: primary index swap - from: old-index-Node - kind: SameStagePrecedence - to: new-index-Node - query: - - $old-index[Type] = '*scpb.PrimaryIndex' - - $new-index[Type] = '*scpb.PrimaryIndex' - - joinOnDescID($old-index, $new-index, $table-id) - - $old-index[IndexID] = $old-index-id - - $new-index[SourceIndexID] = $old-index-id - - $old-index-Target[TargetStatus] = ABSENT - - $old-index-Node[CurrentStatus] = VALIDATED - - $new-index-Target[TargetStatus] IN [PUBLIC, TRANSIENT_ABSENT] - - $new-index-Node[CurrentStatus] = PUBLIC - - joinTargetNode($old-index, $old-index-Target, $old-index-Node) - - joinTargetNode($new-index, $new-index-Target, $new-index-Node) -- name: primary index swap - from: old-index-Node - kind: SameStagePrecedence - to: new-index-Node - query: - - $old-index[Type] = '*scpb.PrimaryIndex' - - $new-index[Type] = '*scpb.PrimaryIndex' - - joinOnDescID($old-index, $new-index, $table-id) - - $old-index[IndexID] = $old-index-id - - $new-index[SourceIndexID] = $old-index-id - - $old-index-Target[TargetStatus] = TRANSIENT_ABSENT - - $old-index-Node[CurrentStatus] = TRANSIENT_VALIDATED - - $new-index-Target[TargetStatus] IN [PUBLIC, TRANSIENT_ABSENT] - - $new-index-Node[CurrentStatus] = PUBLIC - - joinTargetNode($old-index, $old-index-Target, $old-index-Node) - - joinTargetNode($new-index, $new-index-Target, $new-index-Node) -- name: primary index swap - from: new-index-Node - kind: SameStagePrecedence - to: old-index-Node - query: - - $new-index[Type] = '*scpb.PrimaryIndex' - - $old-index[Type] = '*scpb.PrimaryIndex' - - joinOnDescID($new-index, $old-index, $table-id) - - $new-index[SourceIndexID] = $old-index-id - - $old-index[IndexID] = $old-index-id - - $new-index-Target[TargetStatus] = ABSENT - - $new-index-Node[CurrentStatus] = VALIDATED - - $old-index-Target[TargetStatus] = PUBLIC - - $old-index-Node[CurrentStatus] = PUBLIC - - joinTargetNode($new-index, $new-index-Target, $new-index-Node) - - joinTargetNode($old-index, $old-index-Target, $old-index-Node) -- name: primary index with new columns should exist before temp indexes - from: primary-index-Node - kind: Precedence - to: temp-index-Node - query: - - $primary-index[Type] = '*scpb.PrimaryIndex' - - $temp-index[Type] = '*scpb.TemporaryIndex' - - joinOnDescID($primary-index, $temp-index, $table-id) - - $primary-index[IndexID] = $primary-index-id - - $temp-index[SourceIndexID] = $primary-index-id - - ToPublicOrTransient($primary-index-Target, $temp-index-Target) - - $primary-index-Node[CurrentStatus] = VALIDATED - - $temp-index-Node[CurrentStatus] = DELETE_ONLY - - joinTargetNode($primary-index, $primary-index-Target, $primary-index-Node) - - joinTargetNode($temp-index, $temp-index-Target, $temp-index-Node) -- name: primary index with new columns should validated before secondary indexes - from: primary-index-Node - kind: Precedence - to: secondary-index-Node - query: - - $primary-index[Type] = '*scpb.PrimaryIndex' - - $secondary-index[Type] = '*scpb.SecondaryIndex' - - joinOnDescID($primary-index, $secondary-index, $table-id) - - $primary-index[IndexID] = $primary-index-id - - $secondary-index[SourceIndexID] = $primary-index-id - - ToPublicOrTransient($primary-index-Target, $secondary-index-Target) - - $primary-index-Node[CurrentStatus] = VALIDATED - - $secondary-index-Node[CurrentStatus] = BACKFILL_ONLY - - joinTargetNode($primary-index, $primary-index-Target, $primary-index-Node) - - joinTargetNode($secondary-index, $secondary-index-Target, $secondary-index-Node) -- name: relation dropped before dependent column - from: descriptor-Node - kind: Precedence - to: column-Node - query: - - $descriptor[Type] IN ['*scpb.Table', '*scpb.View', '*scpb.Sequence'] - - $column[Type] = '*scpb.Column' - - joinOnDescID($descriptor, $column, $desc-id) - - toAbsent($descriptor-Target, $column-Target) - - $descriptor-Node[CurrentStatus] = DROPPED - - $column-Node[CurrentStatus] = WRITE_ONLY - - joinTargetNode($descriptor, $descriptor-Target, $descriptor-Node) - - joinTargetNode($column, $column-Target, $column-Node) -- name: relation dropped before dependent constraint - from: descriptor-Node - kind: Precedence - to: constraint-Node - query: - - $descriptor[Type] = '*scpb.Table' - - $constraint[Type] = '*scpb.ColumnNotNull' - - joinOnDescID($descriptor, $constraint, $desc-id) - - toAbsent($descriptor-Target, $constraint-Target) - - $descriptor-Node[CurrentStatus] = DROPPED - - $constraint-Node[CurrentStatus] = VALIDATED - - joinTargetNode($descriptor, $descriptor-Target, $descriptor-Node) - - joinTargetNode($constraint, $constraint-Target, $constraint-Node) -- name: relation dropped before dependent index - from: descriptor-Node - kind: Precedence - to: index-Node - query: - - $descriptor[Type] IN ['*scpb.Table', '*scpb.View'] - - $index[Type] IN ['*scpb.PrimaryIndex', '*scpb.SecondaryIndex', '*scpb.TemporaryIndex'] - - joinOnDescID($descriptor, $index, $desc-id) - - toAbsent($descriptor-Target, $index-Target) - - $descriptor-Node[CurrentStatus] = DROPPED - - $index-Node[CurrentStatus] = VALIDATED - - joinTargetNode($descriptor, $descriptor-Target, $descriptor-Node) - - joinTargetNode($index, $index-Target, $index-Node) -- name: remove columns from index right before removing index - from: index-column-Node - kind: Precedence - to: index-Node - query: - - $index-column[Type] = '*scpb.IndexColumn' - - $index[Type] IN ['*scpb.PrimaryIndex', '*scpb.SecondaryIndex', '*scpb.TemporaryIndex'] - - joinOnIndexID($index-column, $index, $table-id, $index-id) - - toAbsent($index-column-Target, $index-Target) - - $index-column-Node[CurrentStatus] = DELETE_ONLY - - $index-Node[CurrentStatus] = ABSENT - - joinTargetNode($index-column, $index-column-Target, $index-column-Node) - - joinTargetNode($index, $index-Target, $index-Node) -- name: remove columns from index right before removing index - from: index-column-Node - kind: Precedence - to: index-Node - query: - - $index-column[Type] = '*scpb.IndexColumn' - - $index[Type] IN ['*scpb.PrimaryIndex', '*scpb.SecondaryIndex', '*scpb.TemporaryIndex'] - - joinOnIndexID($index-column, $index, $table-id, $index-id) - - transient($index-column-Target, $index-Target) - - $index-column-Node[CurrentStatus] = TRANSIENT_DELETE_ONLY - - $index-Node[CurrentStatus] = TRANSIENT_ABSENT - - joinTargetNode($index-column, $index-column-Target, $index-column-Node) - - joinTargetNode($index, $index-Target, $index-Node) -- name: remove columns from index right before removing index - from: index-column-Node - kind: Precedence - to: index-Node - query: - - $index-column[Type] = '*scpb.IndexColumn' - - $index[Type] IN ['*scpb.PrimaryIndex', '*scpb.SecondaryIndex', '*scpb.TemporaryIndex'] - - joinOnIndexID($index-column, $index, $table-id, $index-id) - - $index-column-Target[TargetStatus] = TRANSIENT_ABSENT - - $index-column-Node[CurrentStatus] = TRANSIENT_DELETE_ONLY - - $index-Target[TargetStatus] = ABSENT - - $index-Node[CurrentStatus] = ABSENT - - joinTargetNode($index-column, $index-column-Target, $index-column-Node) - - joinTargetNode($index, $index-Target, $index-Node) -- name: remove columns from index right before removing index - from: index-column-Node - kind: Precedence - to: index-Node - query: - - $index-column[Type] = '*scpb.IndexColumn' - - $index[Type] IN ['*scpb.PrimaryIndex', '*scpb.SecondaryIndex', '*scpb.TemporaryIndex'] - - joinOnIndexID($index-column, $index, $table-id, $index-id) - - $index-column-Target[TargetStatus] = ABSENT - - $index-column-Node[CurrentStatus] = DELETE_ONLY - - $index-Target[TargetStatus] = TRANSIENT_ABSENT - - $index-Node[CurrentStatus] = TRANSIENT_ABSENT - - joinTargetNode($index-column, $index-column-Target, $index-column-Node) - - joinTargetNode($index, $index-Target, $index-Node) -- name: replacement secondary index should be validated before the old one becomes invisible - from: new-index-Node - kind: Precedence - to: old-index-Node - query: - - $old-index[Type] = '*scpb.SecondaryIndex' - - $new-index[Type] = '*scpb.SecondaryIndex' - - $old-index-Target[TargetStatus] = ABSENT - - $new-index-Target[TargetStatus] IN [PUBLIC, TRANSIENT_ABSENT] - - joinOnDescID($old-index, $new-index, $table-id) - - $new-index[IndexID] = $index-id - - $old-index[IndexID] = $old-index-id - - $new-index[RecreateSourceIndexID] = $old-index-id - - joinTargetNode($old-index, $old-index-Target, $old-index-Node) - - joinTargetNode($new-index, $new-index-Target, $new-index-Node) - - $new-index-Node[CurrentStatus] = PUBLIC - - $old-index-Node[CurrentStatus] = VALIDATED - - joinTargetNode($new-index, $new-index-Target, $new-index-Node) - - joinTargetNode($old-index, $old-index-Target, $old-index-Node) -- name: schedule all GC jobs for a descriptor in the same stage - from: data-a-Node - kind: SameStagePrecedence - to: data-b-Node - query: - - $data-a[Type] IN ['*scpb.DatabaseData', '*scpb.IndexData', '*scpb.TableData'] - - $data-b[Type] IN ['*scpb.DatabaseData', '*scpb.IndexData', '*scpb.TableData'] - - joinOnDescID($data-a, $data-b, $desc-id) - - SmallerIDsFirst(scpb.Element, scpb.Element)($data-a, $data-b) - - toAbsent($data-a-Target, $data-b-Target) - - $data-a-Node[CurrentStatus] = DROPPED - - $data-b-Node[CurrentStatus] = DROPPED - - joinTargetNode($data-a, $data-a-Target, $data-a-Node) - - joinTargetNode($data-b, $data-b-Target, $data-b-Node) -- name: schedule all GC jobs for a descriptor in the same stage - from: data-a-Node - kind: SameStagePrecedence - to: data-b-Node - query: - - $data-a[Type] IN ['*scpb.DatabaseData', '*scpb.IndexData', '*scpb.TableData'] - - $data-b[Type] IN ['*scpb.DatabaseData', '*scpb.IndexData', '*scpb.TableData'] - - joinOnDescID($data-a, $data-b, $desc-id) - - SmallerIDsFirst(scpb.Element, scpb.Element)($data-a, $data-b) - - transient($data-a-Target, $data-b-Target) - - $data-a-Node[CurrentStatus] = TRANSIENT_DROPPED - - $data-b-Node[CurrentStatus] = TRANSIENT_DROPPED - - joinTargetNode($data-a, $data-a-Target, $data-a-Node) - - joinTargetNode($data-b, $data-b-Target, $data-b-Node) -- name: schedule all GC jobs for a descriptor in the same stage - from: data-a-Node - kind: SameStagePrecedence - to: data-b-Node - query: - - $data-a[Type] IN ['*scpb.DatabaseData', '*scpb.IndexData', '*scpb.TableData'] - - $data-b[Type] IN ['*scpb.DatabaseData', '*scpb.IndexData', '*scpb.TableData'] - - joinOnDescID($data-a, $data-b, $desc-id) - - SmallerIDsFirst(scpb.Element, scpb.Element)($data-a, $data-b) - - $data-a-Target[TargetStatus] = TRANSIENT_ABSENT - - $data-a-Node[CurrentStatus] = TRANSIENT_DROPPED - - $data-b-Target[TargetStatus] = ABSENT - - $data-b-Node[CurrentStatus] = DROPPED - - joinTargetNode($data-a, $data-a-Target, $data-a-Node) - - joinTargetNode($data-b, $data-b-Target, $data-b-Node) -- name: schedule all GC jobs for a descriptor in the same stage - from: data-a-Node - kind: SameStagePrecedence - to: data-b-Node - query: - - $data-a[Type] IN ['*scpb.DatabaseData', '*scpb.IndexData', '*scpb.TableData'] - - $data-b[Type] IN ['*scpb.DatabaseData', '*scpb.IndexData', '*scpb.TableData'] - - joinOnDescID($data-a, $data-b, $desc-id) - - SmallerIDsFirst(scpb.Element, scpb.Element)($data-a, $data-b) - - $data-a-Target[TargetStatus] = ABSENT - - $data-a-Node[CurrentStatus] = DROPPED - - $data-b-Target[TargetStatus] = TRANSIENT_ABSENT - - $data-b-Node[CurrentStatus] = TRANSIENT_DROPPED - - joinTargetNode($data-a, $data-a-Target, $data-a-Node) - - joinTargetNode($data-b, $data-b-Target, $data-b-Node) -- name: schema locked is set after all other operations (add) - from: descriptor-element-Node - kind: PreviousTransactionPrecedence - to: schema-locked-Node - query: - - $descriptor-element[Type] IN ['*scpb.AliasType', '*scpb.CheckConstraint', '*scpb.CheckConstraintUnvalidated', '*scpb.Column', '*scpb.ColumnComment', '*scpb.ColumnComputeExpression', '*scpb.ColumnDefaultExpression', '*scpb.ColumnFamily', '*scpb.ColumnName', '*scpb.ColumnNotNull', '*scpb.ColumnOnUpdateExpression', '*scpb.ColumnType', '*scpb.CompositeType', '*scpb.CompositeTypeAttrName', '*scpb.CompositeTypeAttrType', '*scpb.ConstraintComment', '*scpb.ConstraintWithoutIndexName', '*scpb.Database', '*scpb.DatabaseComment', '*scpb.DatabaseData', '*scpb.DatabaseRegionConfig', '*scpb.DatabaseRoleSetting', '*scpb.DatabaseZoneConfig', '*scpb.EnumType', '*scpb.EnumTypeValue', '*scpb.ForeignKeyConstraint', '*scpb.ForeignKeyConstraintUnvalidated', '*scpb.Function', '*scpb.FunctionBody', '*scpb.FunctionLeakProof', '*scpb.FunctionName', '*scpb.FunctionNullInputBehavior', '*scpb.FunctionSecurity', '*scpb.FunctionVolatility', '*scpb.IndexColumn', '*scpb.IndexComment', '*scpb.IndexData', '*scpb.IndexName', '*scpb.IndexPartitioning', '*scpb.IndexZoneConfig', '*scpb.LDRJobIDs', '*scpb.NamedRangeZoneConfig', '*scpb.Namespace', '*scpb.Owner', '*scpb.PartitionZoneConfig', '*scpb.Policy', '*scpb.PolicyDeps', '*scpb.PolicyName', '*scpb.PolicyRole', '*scpb.PolicyUsingExpr', '*scpb.PolicyWithCheckExpr', '*scpb.PrimaryIndex', '*scpb.RowLevelSecurityEnabled', '*scpb.RowLevelSecurityForced', '*scpb.RowLevelTTL', '*scpb.Schema', '*scpb.SchemaChild', '*scpb.SchemaComment', '*scpb.SchemaParent', '*scpb.SecondaryIndex', '*scpb.Sequence', '*scpb.SequenceOption', '*scpb.SequenceOwner', '*scpb.Table', '*scpb.TableComment', '*scpb.TableData', '*scpb.TableLocalityGlobal', '*scpb.TableLocalityPrimaryRegion', '*scpb.TableLocalityRegionalByRow', '*scpb.TableLocalitySecondaryRegion', '*scpb.TablePartitioning', '*scpb.TableZoneConfig', '*scpb.TemporaryIndex', '*scpb.Trigger', '*scpb.TriggerDeps', '*scpb.TriggerEnabled', '*scpb.TriggerEvents', '*scpb.TriggerFunctionCall', '*scpb.TriggerName', '*scpb.TriggerTiming', '*scpb.TriggerTransition', '*scpb.TriggerWhen', '*scpb.TypeComment', '*scpb.UniqueWithoutIndexConstraint', '*scpb.UniqueWithoutIndexConstraintUnvalidated', '*scpb.UserPrivileges', '*scpb.View'] - - $schema-locked[Type] = '*scpb.TableSchemaLocked' - - joinOnDescID($descriptor-element, $schema-locked, $descID) - - toPublicToTransientPublicUntyped($descriptor-element-Target, $schema-locked-Target) - - $schema-locked-Node[CurrentStatus] = TRANSIENT_PUBLIC - - $descriptor-element-Node[CurrentStatus] = PUBLIC - - joinTargetNode($descriptor-element, $descriptor-element-Target, $descriptor-element-Node) - - joinTargetNode($schema-locked, $schema-locked-Target, $schema-locked-Node) -- name: schema locked is set after all other operations (drop) - from: descriptor-element-Node - kind: PreviousTransactionPrecedence - to: schema-locked-Node - query: - - $descriptor-element[Type] IN ['*scpb.AliasType', '*scpb.CheckConstraint', '*scpb.CheckConstraintUnvalidated', '*scpb.Column', '*scpb.ColumnComment', '*scpb.ColumnComputeExpression', '*scpb.ColumnDefaultExpression', '*scpb.ColumnFamily', '*scpb.ColumnName', '*scpb.ColumnNotNull', '*scpb.ColumnOnUpdateExpression', '*scpb.ColumnType', '*scpb.CompositeType', '*scpb.CompositeTypeAttrName', '*scpb.CompositeTypeAttrType', '*scpb.ConstraintComment', '*scpb.ConstraintWithoutIndexName', '*scpb.Database', '*scpb.DatabaseComment', '*scpb.DatabaseData', '*scpb.DatabaseRegionConfig', '*scpb.DatabaseRoleSetting', '*scpb.DatabaseZoneConfig', '*scpb.EnumType', '*scpb.EnumTypeValue', '*scpb.ForeignKeyConstraint', '*scpb.ForeignKeyConstraintUnvalidated', '*scpb.Function', '*scpb.FunctionBody', '*scpb.FunctionLeakProof', '*scpb.FunctionName', '*scpb.FunctionNullInputBehavior', '*scpb.FunctionSecurity', '*scpb.FunctionVolatility', '*scpb.IndexColumn', '*scpb.IndexComment', '*scpb.IndexData', '*scpb.IndexName', '*scpb.IndexPartitioning', '*scpb.IndexZoneConfig', '*scpb.LDRJobIDs', '*scpb.NamedRangeZoneConfig', '*scpb.Namespace', '*scpb.Owner', '*scpb.PartitionZoneConfig', '*scpb.Policy', '*scpb.PolicyDeps', '*scpb.PolicyName', '*scpb.PolicyRole', '*scpb.PolicyUsingExpr', '*scpb.PolicyWithCheckExpr', '*scpb.PrimaryIndex', '*scpb.RowLevelSecurityEnabled', '*scpb.RowLevelSecurityForced', '*scpb.RowLevelTTL', '*scpb.Schema', '*scpb.SchemaChild', '*scpb.SchemaComment', '*scpb.SchemaParent', '*scpb.SecondaryIndex', '*scpb.Sequence', '*scpb.SequenceOption', '*scpb.SequenceOwner', '*scpb.Table', '*scpb.TableComment', '*scpb.TableData', '*scpb.TableLocalityGlobal', '*scpb.TableLocalityPrimaryRegion', '*scpb.TableLocalityRegionalByRow', '*scpb.TableLocalitySecondaryRegion', '*scpb.TablePartitioning', '*scpb.TableZoneConfig', '*scpb.TemporaryIndex', '*scpb.Trigger', '*scpb.TriggerDeps', '*scpb.TriggerEnabled', '*scpb.TriggerEvents', '*scpb.TriggerFunctionCall', '*scpb.TriggerName', '*scpb.TriggerTiming', '*scpb.TriggerTransition', '*scpb.TriggerWhen', '*scpb.TypeComment', '*scpb.UniqueWithoutIndexConstraint', '*scpb.UniqueWithoutIndexConstraintUnvalidated', '*scpb.UserPrivileges', '*scpb.View'] - - $schema-locked[Type] = '*scpb.TableSchemaLocked' - - joinOnDescID($descriptor-element, $schema-locked, $descID) - - toDropToTransientPublicUntyped($descriptor-element-Target, $schema-locked-Target) - - $schema-locked-Node[CurrentStatus] = TRANSIENT_PUBLIC - - $descriptor-element-Node[CurrentStatus] = ABSENT - - joinTargetNode($descriptor-element, $descriptor-element-Target, $descriptor-element-Node) - - joinTargetNode($schema-locked, $schema-locked-Target, $schema-locked-Node) -- name: schema locked is unset before any operation (add) - from: schema-locked-Node - kind: Precedence - to: descriptor-element-Node - query: - - $schema-locked[Type] = '*scpb.TableSchemaLocked' - - $descriptor-element[Type] IN ['*scpb.AliasType', '*scpb.CheckConstraint', '*scpb.CheckConstraintUnvalidated', '*scpb.Column', '*scpb.ColumnComment', '*scpb.ColumnComputeExpression', '*scpb.ColumnDefaultExpression', '*scpb.ColumnFamily', '*scpb.ColumnName', '*scpb.ColumnNotNull', '*scpb.ColumnOnUpdateExpression', '*scpb.ColumnType', '*scpb.CompositeType', '*scpb.CompositeTypeAttrName', '*scpb.CompositeTypeAttrType', '*scpb.ConstraintComment', '*scpb.ConstraintWithoutIndexName', '*scpb.Database', '*scpb.DatabaseComment', '*scpb.DatabaseData', '*scpb.DatabaseRegionConfig', '*scpb.DatabaseRoleSetting', '*scpb.DatabaseZoneConfig', '*scpb.EnumType', '*scpb.EnumTypeValue', '*scpb.ForeignKeyConstraint', '*scpb.ForeignKeyConstraintUnvalidated', '*scpb.Function', '*scpb.FunctionBody', '*scpb.FunctionLeakProof', '*scpb.FunctionName', '*scpb.FunctionNullInputBehavior', '*scpb.FunctionSecurity', '*scpb.FunctionVolatility', '*scpb.IndexColumn', '*scpb.IndexComment', '*scpb.IndexData', '*scpb.IndexName', '*scpb.IndexPartitioning', '*scpb.IndexZoneConfig', '*scpb.LDRJobIDs', '*scpb.NamedRangeZoneConfig', '*scpb.Namespace', '*scpb.Owner', '*scpb.PartitionZoneConfig', '*scpb.Policy', '*scpb.PolicyDeps', '*scpb.PolicyName', '*scpb.PolicyRole', '*scpb.PolicyUsingExpr', '*scpb.PolicyWithCheckExpr', '*scpb.PrimaryIndex', '*scpb.RowLevelSecurityEnabled', '*scpb.RowLevelSecurityForced', '*scpb.RowLevelTTL', '*scpb.Schema', '*scpb.SchemaChild', '*scpb.SchemaComment', '*scpb.SchemaParent', '*scpb.SecondaryIndex', '*scpb.Sequence', '*scpb.SequenceOption', '*scpb.SequenceOwner', '*scpb.Table', '*scpb.TableComment', '*scpb.TableData', '*scpb.TableLocalityGlobal', '*scpb.TableLocalityPrimaryRegion', '*scpb.TableLocalityRegionalByRow', '*scpb.TableLocalitySecondaryRegion', '*scpb.TablePartitioning', '*scpb.TableZoneConfig', '*scpb.TemporaryIndex', '*scpb.Trigger', '*scpb.TriggerDeps', '*scpb.TriggerEnabled', '*scpb.TriggerEvents', '*scpb.TriggerFunctionCall', '*scpb.TriggerName', '*scpb.TriggerTiming', '*scpb.TriggerTransition', '*scpb.TriggerWhen', '*scpb.TypeComment', '*scpb.UniqueWithoutIndexConstraint', '*scpb.UniqueWithoutIndexConstraintUnvalidated', '*scpb.UserPrivileges', '*scpb.View'] - - joinOnDescID($schema-locked, $descriptor-element, $descID) - - toPublicToTransientPublicUntyped($descriptor-element-Target, $schema-locked-Target) - - $schema-locked-Node[CurrentStatus] = ABSENT - - joinTargetNode($schema-locked, $schema-locked-Target, $schema-locked-Node) - - joinTargetNode($descriptor-element, $descriptor-element-Target, $descriptor-element-Node) -- name: schema locked is unset before any operation (drop) - from: schema-locked-Node - kind: Precedence - to: descriptor-element-Node - query: - - $schema-locked[Type] = '*scpb.TableSchemaLocked' - - $descriptor-element[Type] IN ['*scpb.AliasType', '*scpb.CheckConstraint', '*scpb.CheckConstraintUnvalidated', '*scpb.Column', '*scpb.ColumnComment', '*scpb.ColumnComputeExpression', '*scpb.ColumnDefaultExpression', '*scpb.ColumnFamily', '*scpb.ColumnName', '*scpb.ColumnNotNull', '*scpb.ColumnOnUpdateExpression', '*scpb.ColumnType', '*scpb.CompositeType', '*scpb.CompositeTypeAttrName', '*scpb.CompositeTypeAttrType', '*scpb.ConstraintComment', '*scpb.ConstraintWithoutIndexName', '*scpb.Database', '*scpb.DatabaseComment', '*scpb.DatabaseData', '*scpb.DatabaseRegionConfig', '*scpb.DatabaseRoleSetting', '*scpb.DatabaseZoneConfig', '*scpb.EnumType', '*scpb.EnumTypeValue', '*scpb.ForeignKeyConstraint', '*scpb.ForeignKeyConstraintUnvalidated', '*scpb.Function', '*scpb.FunctionBody', '*scpb.FunctionLeakProof', '*scpb.FunctionName', '*scpb.FunctionNullInputBehavior', '*scpb.FunctionSecurity', '*scpb.FunctionVolatility', '*scpb.IndexColumn', '*scpb.IndexComment', '*scpb.IndexData', '*scpb.IndexName', '*scpb.IndexPartitioning', '*scpb.IndexZoneConfig', '*scpb.LDRJobIDs', '*scpb.NamedRangeZoneConfig', '*scpb.Namespace', '*scpb.Owner', '*scpb.PartitionZoneConfig', '*scpb.Policy', '*scpb.PolicyDeps', '*scpb.PolicyName', '*scpb.PolicyRole', '*scpb.PolicyUsingExpr', '*scpb.PolicyWithCheckExpr', '*scpb.PrimaryIndex', '*scpb.RowLevelSecurityEnabled', '*scpb.RowLevelSecurityForced', '*scpb.RowLevelTTL', '*scpb.Schema', '*scpb.SchemaChild', '*scpb.SchemaComment', '*scpb.SchemaParent', '*scpb.SecondaryIndex', '*scpb.Sequence', '*scpb.SequenceOption', '*scpb.SequenceOwner', '*scpb.Table', '*scpb.TableComment', '*scpb.TableData', '*scpb.TableLocalityGlobal', '*scpb.TableLocalityPrimaryRegion', '*scpb.TableLocalityRegionalByRow', '*scpb.TableLocalitySecondaryRegion', '*scpb.TablePartitioning', '*scpb.TableZoneConfig', '*scpb.TemporaryIndex', '*scpb.Trigger', '*scpb.TriggerDeps', '*scpb.TriggerEnabled', '*scpb.TriggerEvents', '*scpb.TriggerFunctionCall', '*scpb.TriggerName', '*scpb.TriggerTiming', '*scpb.TriggerTransition', '*scpb.TriggerWhen', '*scpb.TypeComment', '*scpb.UniqueWithoutIndexConstraint', '*scpb.UniqueWithoutIndexConstraintUnvalidated', '*scpb.UserPrivileges', '*scpb.View'] - - joinOnDescID($schema-locked, $descriptor-element, $descID) - - toDropToTransientPublicUntyped($descriptor-element-Target, $schema-locked-Target) - - $schema-locked-Node[CurrentStatus] = ABSENT - - joinTargetNode($schema-locked, $schema-locked-Target, $schema-locked-Node) - - joinTargetNode($descriptor-element, $descriptor-element-Target, $descriptor-element-Node) -- name: secondary index named before public (with index swap) - from: index-Node - kind: Precedence - to: index-name-Node - query: - - $index-name[Type] = '*scpb.IndexName' - - $index[Type] = '*scpb.SecondaryIndex' - - joinOnIndexID($index, $index-name, $table-id, $index-id) - - ToPublicOrTransient($index-Target, $index-name-Target) - - $index-Node[CurrentStatus] = VALIDATED - - $index-name-Node[CurrentStatus] = PUBLIC - - $old-index[Type] = '*scpb.SecondaryIndex' - - $new-index[Type] = '*scpb.SecondaryIndex' - - $old-index-Target[TargetStatus] = ABSENT - - $new-index-Target[TargetStatus] IN [PUBLIC, TRANSIENT_ABSENT] - - joinOnDescID($old-index, $new-index, $table-id) - - $new-index[IndexID] = $index-id - - $old-index[IndexID] = $old-index-id - - $new-index[RecreateSourceIndexID] = $old-index-id - - joinTargetNode($old-index, $old-index-Target, $old-index-Node) - - joinTargetNode($new-index, $new-index-Target, $new-index-Node) - - joinTargetNode($index, $index-Target, $index-Node) - - joinTargetNode($index-name, $index-name-Target, $index-name-Node) -- name: secondary index named before validation (without index swap) - from: index-name-Node - kind: Precedence - to: index-Node - query: - - $index-name[Type] = '*scpb.IndexName' - - $index[Type] = '*scpb.SecondaryIndex' - - joinOnIndexID($index-name, $index, $table-id, $index-id) - - no secondary index swap is on going($table-id, $index-id) - - ToPublicOrTransient($index-name-Target, $index-Target) - - $index-name-Node[CurrentStatus] = PUBLIC - - $index-Node[CurrentStatus] = VALIDATED - - joinTargetNode($index-name, $index-name-Target, $index-name-Node) - - joinTargetNode($index, $index-Target, $index-Node) -- name: secondary index partial no longer public before referenced column - from: secondary-partial-index-Node - kind: Precedence - to: column-Node - query: - - $secondary-partial-index[Type] = '*scpb.SecondaryIndex' - - $column[Type] = '*scpb.Column' - - joinOnDescID($secondary-partial-index, $column, $table-id) - - descriptorIsNotBeingDropped-25.2($secondary-partial-index) - - secondaryIndexReferencesColumn(*scpb.SecondaryIndex, *scpb.Column)($secondary-partial-index, $column) - - toAbsent($secondary-partial-index-Target, $column-Target) - - $secondary-partial-index-Node[CurrentStatus] = DELETE_ONLY - - $column-Node[CurrentStatus] = WRITE_ONLY - - joinTargetNode($secondary-partial-index, $secondary-partial-index-Target, $secondary-partial-index-Node) - - joinTargetNode($column, $column-Target, $column-Node) -- name: secondary index partial no longer public before referenced column - from: secondary-partial-index-Node - kind: Precedence - to: column-Node - query: - - $secondary-partial-index[Type] = '*scpb.SecondaryIndex' - - $column[Type] = '*scpb.Column' - - joinOnDescID($secondary-partial-index, $column, $table-id) - - descriptorIsNotBeingDropped-25.2($secondary-partial-index) - - secondaryIndexReferencesColumn(*scpb.SecondaryIndex, *scpb.Column)($secondary-partial-index, $column) - - transient($secondary-partial-index-Target, $column-Target) - - $secondary-partial-index-Node[CurrentStatus] = TRANSIENT_DELETE_ONLY - - $column-Node[CurrentStatus] = TRANSIENT_WRITE_ONLY - - joinTargetNode($secondary-partial-index, $secondary-partial-index-Target, $secondary-partial-index-Node) - - joinTargetNode($column, $column-Target, $column-Node) -- name: secondary index partial no longer public before referenced column - from: secondary-partial-index-Node - kind: Precedence - to: column-Node - query: - - $secondary-partial-index[Type] = '*scpb.SecondaryIndex' - - $column[Type] = '*scpb.Column' - - joinOnDescID($secondary-partial-index, $column, $table-id) - - descriptorIsNotBeingDropped-25.2($secondary-partial-index) - - secondaryIndexReferencesColumn(*scpb.SecondaryIndex, *scpb.Column)($secondary-partial-index, $column) - - $secondary-partial-index-Target[TargetStatus] = TRANSIENT_ABSENT - - $secondary-partial-index-Node[CurrentStatus] = TRANSIENT_DELETE_ONLY - - $column-Target[TargetStatus] = ABSENT - - $column-Node[CurrentStatus] = WRITE_ONLY - - joinTargetNode($secondary-partial-index, $secondary-partial-index-Target, $secondary-partial-index-Node) - - joinTargetNode($column, $column-Target, $column-Node) -- name: secondary index partial no longer public before referenced column - from: secondary-partial-index-Node - kind: Precedence - to: column-Node - query: - - $secondary-partial-index[Type] = '*scpb.SecondaryIndex' - - $column[Type] = '*scpb.Column' - - joinOnDescID($secondary-partial-index, $column, $table-id) - - descriptorIsNotBeingDropped-25.2($secondary-partial-index) - - secondaryIndexReferencesColumn(*scpb.SecondaryIndex, *scpb.Column)($secondary-partial-index, $column) - - $secondary-partial-index-Target[TargetStatus] = ABSENT - - $secondary-partial-index-Node[CurrentStatus] = DELETE_ONLY - - $column-Target[TargetStatus] = TRANSIENT_ABSENT - - $column-Node[CurrentStatus] = TRANSIENT_WRITE_ONLY - - joinTargetNode($secondary-partial-index, $secondary-partial-index-Target, $secondary-partial-index-Node) - - joinTargetNode($column, $column-Target, $column-Node) -- name: secondary index should be validated before dependent view can be absent - from: index-Node - kind: Precedence - to: view-Node - query: - - $index[Type] = '*scpb.SecondaryIndex' - - $view[Type] = '*scpb.View' - - viewReferencesIndex(*scpb.SecondaryIndex, *scpb.View)($index, $view) - - toAbsent($index-Target, $view-Target) - - $index-Node[CurrentStatus] = VALIDATED - - $view-Node[CurrentStatus] = ABSENT - - joinTargetNode($index, $index-Target, $index-Node) - - joinTargetNode($view, $view-Target, $view-Node) -- name: secondary index should be validated before dependent view can be absent - from: index-Node - kind: Precedence - to: view-Node - query: - - $index[Type] = '*scpb.SecondaryIndex' - - $view[Type] = '*scpb.View' - - viewReferencesIndex(*scpb.SecondaryIndex, *scpb.View)($index, $view) - - transient($index-Target, $view-Target) - - $index-Node[CurrentStatus] = TRANSIENT_VALIDATED - - $view-Node[CurrentStatus] = TRANSIENT_ABSENT - - joinTargetNode($index, $index-Target, $index-Node) - - joinTargetNode($view, $view-Target, $view-Node) -- name: secondary index should be validated before dependent view can be absent - from: index-Node - kind: Precedence - to: view-Node - query: - - $index[Type] = '*scpb.SecondaryIndex' - - $view[Type] = '*scpb.View' - - viewReferencesIndex(*scpb.SecondaryIndex, *scpb.View)($index, $view) - - $index-Target[TargetStatus] = TRANSIENT_ABSENT - - $index-Node[CurrentStatus] = TRANSIENT_VALIDATED - - $view-Target[TargetStatus] = ABSENT - - $view-Node[CurrentStatus] = ABSENT - - joinTargetNode($index, $index-Target, $index-Node) - - joinTargetNode($view, $view-Target, $view-Node) -- name: secondary index should be validated before dependent view can be absent - from: index-Node - kind: Precedence - to: view-Node - query: - - $index[Type] = '*scpb.SecondaryIndex' - - $view[Type] = '*scpb.View' - - viewReferencesIndex(*scpb.SecondaryIndex, *scpb.View)($index, $view) - - $index-Target[TargetStatus] = ABSENT - - $index-Node[CurrentStatus] = VALIDATED - - $view-Target[TargetStatus] = TRANSIENT_ABSENT - - $view-Node[CurrentStatus] = TRANSIENT_ABSENT - - joinTargetNode($index, $index-Target, $index-Node) - - joinTargetNode($view, $view-Target, $view-Node) -- name: secondary indexes containing column as key reach write-only before column - from: index-Node - kind: Precedence - to: column-Node - query: - - $index[Type] = '*scpb.SecondaryIndex' - - $column[Type] = '*scpb.Column' - - ColumnInIndex($index-column, $index, $table-id, $column-id, $index-id) - - joinOnColumnID($index-column, $column, $table-id, $column-id) - - toAbsent($index-Target, $column-Target) - - $index-Node[CurrentStatus] = VALIDATED - - $column-Node[CurrentStatus] = WRITE_ONLY - - descriptorIsNotBeingDropped-25.2($index-column) - - isIndexKeyColumnKey(*scpb.IndexColumn)($index-column) - - joinTargetNode($index, $index-Target, $index-Node) - - joinTargetNode($column, $column-Target, $column-Node) -- name: secondary indexes should be in a validated state before primary indexes can go public - from: secondary-index-Node - kind: Precedence - to: primary-index-Node - query: - - $secondary-index[Type] = '*scpb.SecondaryIndex' - - $primary-index[Type] = '*scpb.PrimaryIndex' - - joinOnDescID($secondary-index, $primary-index, $table-id) - - $secondary-index[SourceIndexID] = $primary-index-id - - $primary-index[IndexID] = $primary-index-id - - ToPublicOrTransient($secondary-index-Target, $primary-index-Target) - - $secondary-index-Node[CurrentStatus] = VALIDATED - - $primary-index-Node[CurrentStatus] = PUBLIC - - joinTargetNode($secondary-index, $secondary-index-Target, $secondary-index-Node) - - joinTargetNode($primary-index, $primary-index-Target, $primary-index-Node) -- name: simple constraint public right before its dependents - from: simple-constraint-Node - kind: SameStagePrecedence - to: dependent-Node - query: - - $simple-constraint[Type] = '*scpb.ColumnNotNull' - - $dependent[Type] IN ['*scpb.ConstraintComment', '*scpb.ConstraintWithoutIndexName'] - - joinOnConstraintID($simple-constraint, $dependent, $table-id, $constraint-id) - - ToPublicOrTransient($simple-constraint-Target, $dependent-Target) - - $simple-constraint-Node[CurrentStatus] = PUBLIC - - $dependent-Node[CurrentStatus] = PUBLIC - - joinTargetNode($simple-constraint, $simple-constraint-Target, $simple-constraint-Node) - - joinTargetNode($dependent, $dependent-Target, $dependent-Node) -- name: simple constraint visible before name - from: simple-constraint-Node - kind: Precedence - to: constraint-name-Node - query: - - $simple-constraint[Type] IN ['*scpb.CheckConstraint', '*scpb.CheckConstraintUnvalidated', '*scpb.ColumnNotNull', '*scpb.ForeignKeyConstraint', '*scpb.ForeignKeyConstraintUnvalidated', '*scpb.UniqueWithoutIndexConstraint', '*scpb.UniqueWithoutIndexConstraintUnvalidated'] - - $constraint-name[Type] = '*scpb.ConstraintWithoutIndexName' - - joinOnConstraintID($simple-constraint, $constraint-name, $table-id, $constraint-id) - - ToPublicOrTransient($simple-constraint-Target, $constraint-name-Target) - - $simple-constraint-Node[CurrentStatus] = WRITE_ONLY - - $constraint-name-Node[CurrentStatus] = PUBLIC - - joinTargetNode($simple-constraint, $simple-constraint-Target, $simple-constraint-Node) - - joinTargetNode($constraint-name, $constraint-name-Target, $constraint-name-Node) -- name: swapped primary index public before column - from: index-Node - kind: Precedence - to: column-Node - query: - - $index[Type] = '*scpb.PrimaryIndex' - - $column[Type] = '*scpb.Column' - - ColumnInSwappedInPrimaryIndex($index-column, $index, $table-id, $column-id, $index-id) - - joinOnColumnID($index-column, $column, $table-id, $column-id) - - ToPublicOrTransient($index-Target, $column-Target) - - $index-Node[CurrentStatus] = PUBLIC - - $column-Node[CurrentStatus] = PUBLIC - - joinTargetNode($index, $index-Target, $index-Node) - - joinTargetNode($column, $column-Target, $column-Node) -- name: table added right before data element - from: table-Node - kind: Precedence - to: data-Node - query: - - $table[Type] IN ['*scpb.AliasType', '*scpb.CompositeType', '*scpb.Database', '*scpb.EnumType', '*scpb.Function', '*scpb.Schema', '*scpb.Sequence', '*scpb.Table', '*scpb.View'] - - $data[Type] IN ['*scpb.DatabaseData', '*scpb.IndexData', '*scpb.TableData'] - - joinOnDescID($table, $data, $table-id) - - ToPublicOrTransient($table-Target, $data-Target) - - $table-Node[CurrentStatus] = PUBLIC - - $data-Node[CurrentStatus] = PUBLIC - - joinTargetNode($table, $table-Target, $table-Node) - - joinTargetNode($data, $data-Target, $data-Node) -- name: table removed right before garbage collection - from: table-Node - kind: SameStagePrecedence - to: data-Node - query: - - $table[Type] IN ['*scpb.AliasType', '*scpb.CompositeType', '*scpb.Database', '*scpb.EnumType', '*scpb.Function', '*scpb.Schema', '*scpb.Sequence', '*scpb.Table', '*scpb.View'] - - $data[Type] = '*scpb.TableData' - - joinOnDescID($table, $data, $table-id) - - toAbsent($table-Target, $data-Target) - - $table-Node[CurrentStatus] = ABSENT - - $data-Node[CurrentStatus] = DROPPED - - joinTargetNode($table, $table-Target, $table-Node) - - joinTargetNode($data, $data-Target, $data-Node) -- name: temp index data exists as soon as temp index accepts writes - from: temp-index-Node - kind: SameStagePrecedence - to: temp-index-data-Node - query: - - $temp-index[Type] = '*scpb.TemporaryIndex' - - $temp-index-data[Type] = '*scpb.IndexData' - - joinOnIndexID($temp-index, $temp-index-data, $table-id, $index-id) - - ToPublicOrTransient($temp-index-Target, $temp-index-data-Target) - - $temp-index-Node[CurrentStatus] = WRITE_ONLY - - $temp-index-data-Node[CurrentStatus] = PUBLIC - - joinTargetNode($temp-index, $temp-index-Target, $temp-index-Node) - - joinTargetNode($temp-index-data, $temp-index-data-Target, $temp-index-data-Node) -- name: temp index disappeared before its master index reaches WRITE_ONLY - from: temp-Node - kind: Precedence - to: index-Node - query: - - $temp[Type] = '*scpb.TemporaryIndex' - - $index[Type] IN ['*scpb.PrimaryIndex', '*scpb.SecondaryIndex'] - - joinOnDescID($temp, $index, $table-id) - - $temp[IndexID] = $temp-index-id - - $index[TemporaryIndexID] = $temp-index-id - - $temp-Target[TargetStatus] = TRANSIENT_ABSENT - - $temp-Node[CurrentStatus] = TRANSIENT_DELETE_ONLY - - $index-Target[TargetStatus] IN [PUBLIC, TRANSIENT_ABSENT] - - $index-Node[CurrentStatus] = WRITE_ONLY - - joinTargetNode($temp, $temp-Target, $temp-Node) - - joinTargetNode($index, $index-Target, $index-Node) -- name: temp index existence precedes index dependents - from: index-Node - kind: Precedence - to: dependent-Node - query: - - $index[Type] = '*scpb.TemporaryIndex' - - $dependent[Type] IN ['*scpb.IndexColumn', '*scpb.IndexComment', '*scpb.IndexName', '*scpb.IndexPartitioning', '*scpb.IndexZoneConfig', '*scpb.PartitionZoneConfig'] - - joinOnIndexID($index, $dependent, $table-id, $index-id) - - ToPublicOrTransient($index-Target, $dependent-Target) - - $index-Node[CurrentStatus] = DELETE_ONLY - - $dependent-Node[CurrentStatus] = PUBLIC - - joinTargetNode($index, $index-Target, $index-Node) - - joinTargetNode($dependent, $dependent-Target, $dependent-Node) -- name: temp index is WRITE_ONLY before backfill - from: temp-Node - kind: Precedence - to: index-Node - query: - - $temp[Type] = '*scpb.TemporaryIndex' - - $index[Type] IN ['*scpb.PrimaryIndex', '*scpb.SecondaryIndex'] - - joinOnDescID($temp, $index, $table-id) - - $temp[IndexID] = $temp-index-id - - $index[TemporaryIndexID] = $temp-index-id - - $temp-Target[TargetStatus] = TRANSIENT_ABSENT - - $index-Target[TargetStatus] IN [PUBLIC, TRANSIENT_ABSENT] - - $temp-Node[CurrentStatus] = WRITE_ONLY - - $index-Node[CurrentStatus] = BACKFILLED - - joinTargetNode($temp, $temp-Target, $temp-Node) - - joinTargetNode($index, $index-Target, $index-Node) -- name: trigger public before its dependents - from: trigger-Node - kind: Precedence - to: dependent-Node - query: - - $trigger[Type] = '*scpb.Trigger' - - $dependent[Type] IN ['*scpb.TriggerDeps', '*scpb.TriggerEnabled', '*scpb.TriggerEvents', '*scpb.TriggerFunctionCall', '*scpb.TriggerName', '*scpb.TriggerTiming', '*scpb.TriggerTransition', '*scpb.TriggerWhen'] - - joinOnTriggerID($trigger, $dependent, $table-id, $trigger-id) - - ToPublicOrTransient($trigger-Target, $dependent-Target) - - $trigger-Node[CurrentStatus] = PUBLIC - - $dependent-Node[CurrentStatus] = PUBLIC - - joinTargetNode($trigger, $trigger-Target, $trigger-Node) - - joinTargetNode($dependent, $dependent-Target, $dependent-Node) -- name: trigger removed before dependents - from: trigger-Node - kind: Precedence - to: dependents-Node - query: - - $dependents[Type] = '*scpb.Trigger' - - $trigger[Type] IN ['*scpb.TriggerDeps', '*scpb.TriggerEnabled', '*scpb.TriggerEvents', '*scpb.TriggerFunctionCall', '*scpb.TriggerName', '*scpb.TriggerTiming', '*scpb.TriggerTransition', '*scpb.TriggerWhen'] - - joinOnTriggerID($trigger, $dependents, $table-id, $trigger-id) - - toAbsent($trigger-Target, $dependents-Target) - - $trigger-Node[CurrentStatus] = ABSENT - - $dependents-Node[CurrentStatus] = PUBLIC - - joinTargetNode($trigger, $trigger-Target, $trigger-Node) - - joinTargetNode($dependents, $dependents-Target, $dependents-Node) -- name: trigger removed before dependents - from: trigger-Node - kind: Precedence - to: dependents-Node - query: - - $dependents[Type] = '*scpb.Trigger' - - $trigger[Type] IN ['*scpb.TriggerDeps', '*scpb.TriggerEnabled', '*scpb.TriggerEvents', '*scpb.TriggerFunctionCall', '*scpb.TriggerName', '*scpb.TriggerTiming', '*scpb.TriggerTransition', '*scpb.TriggerWhen'] - - joinOnTriggerID($trigger, $dependents, $table-id, $trigger-id) - - transient($trigger-Target, $dependents-Target) - - $trigger-Node[CurrentStatus] = TRANSIENT_ABSENT - - $dependents-Node[CurrentStatus] = TRANSIENT_PUBLIC - - joinTargetNode($trigger, $trigger-Target, $trigger-Node) - - joinTargetNode($dependents, $dependents-Target, $dependents-Node) -- name: trigger removed before dependents - from: trigger-Node - kind: Precedence - to: dependents-Node - query: - - $dependents[Type] = '*scpb.Trigger' - - $trigger[Type] IN ['*scpb.TriggerDeps', '*scpb.TriggerEnabled', '*scpb.TriggerEvents', '*scpb.TriggerFunctionCall', '*scpb.TriggerName', '*scpb.TriggerTiming', '*scpb.TriggerTransition', '*scpb.TriggerWhen'] - - joinOnTriggerID($trigger, $dependents, $table-id, $trigger-id) - - $trigger-Target[TargetStatus] = TRANSIENT_ABSENT - - $trigger-Node[CurrentStatus] = TRANSIENT_ABSENT - - $dependents-Target[TargetStatus] = ABSENT - - $dependents-Node[CurrentStatus] = PUBLIC - - joinTargetNode($trigger, $trigger-Target, $trigger-Node) - - joinTargetNode($dependents, $dependents-Target, $dependents-Node) -- name: trigger removed before dependents - from: trigger-Node - kind: Precedence - to: dependents-Node - query: - - $dependents[Type] = '*scpb.Trigger' - - $trigger[Type] IN ['*scpb.TriggerDeps', '*scpb.TriggerEnabled', '*scpb.TriggerEvents', '*scpb.TriggerFunctionCall', '*scpb.TriggerName', '*scpb.TriggerTiming', '*scpb.TriggerTransition', '*scpb.TriggerWhen'] - - joinOnTriggerID($trigger, $dependents, $table-id, $trigger-id) - - $trigger-Target[TargetStatus] = ABSENT - - $trigger-Node[CurrentStatus] = ABSENT - - $dependents-Target[TargetStatus] = TRANSIENT_ABSENT - - $dependents-Node[CurrentStatus] = TRANSIENT_PUBLIC - - joinTargetNode($trigger, $trigger-Target, $trigger-Node) - - joinTargetNode($dependents, $dependents-Target, $dependents-Node) diff --git a/pkg/sql/schemachanger/scplan/plan.go b/pkg/sql/schemachanger/scplan/plan.go index cabd247a839a..8bd9bc13ecd8 100644 --- a/pkg/sql/schemachanger/scplan/plan.go +++ b/pkg/sql/schemachanger/scplan/plan.go @@ -16,7 +16,6 @@ import ( "github.com/cockroachdb/cockroach/pkg/sql/schemachanger/scplan/internal/opgen" "github.com/cockroachdb/cockroach/pkg/sql/schemachanger/scplan/internal/rules" "github.com/cockroachdb/cockroach/pkg/sql/schemachanger/scplan/internal/rules/current" - "github.com/cockroachdb/cockroach/pkg/sql/schemachanger/scplan/internal/rules/release_25_2" "github.com/cockroachdb/cockroach/pkg/sql/schemachanger/scplan/internal/rules/release_25_3" "github.com/cockroachdb/cockroach/pkg/sql/schemachanger/scplan/internal/rules/release_25_4" "github.com/cockroachdb/cockroach/pkg/sql/schemachanger/scplan/internal/scgraph" @@ -160,7 +159,6 @@ var rulesForReleases = []rulesForRelease{ {activeVersion: clusterversion.Latest, rulesRegistry: current.GetRegistry()}, {activeVersion: clusterversion.V25_4, rulesRegistry: release_25_4.GetRegistry()}, {activeVersion: clusterversion.V25_3, rulesRegistry: release_25_3.GetRegistry()}, - {activeVersion: clusterversion.V25_2, rulesRegistry: release_25_2.GetRegistry()}, } func init() { diff --git a/pkg/sql/sqlitelogictest/tests/local-mixed-25.2/BUILD.bazel b/pkg/sql/sqlitelogictest/tests/local-mixed-25.2/BUILD.bazel deleted file mode 100644 index 8c0d8627a6f2..000000000000 --- a/pkg/sql/sqlitelogictest/tests/local-mixed-25.2/BUILD.bazel +++ /dev/null @@ -1,28 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_test") - -go_test( - name = "local-mixed-25_2_test", - size = "enormous", - srcs = ["generated_test.go"], - data = [ - "//c-deps:libgeos", # keep - "@com_github_cockroachdb_sqllogictest//:testfiles", # keep - ], - exec_properties = {"test.Pool": "default"}, - shard_count = 48, - tags = ["cpu:1"], - deps = [ - "//pkg/base", - "//pkg/build/bazel", - "//pkg/security/securityassets", - "//pkg/security/securitytest", - "//pkg/server", - "//pkg/sql/logictest", - "//pkg/sql/sqlitelogictest", - "//pkg/testutils/serverutils", - "//pkg/testutils/skip", - "//pkg/testutils/testcluster", - "//pkg/util/leaktest", - "//pkg/util/randutil", - ], -) diff --git a/pkg/sql/sqlitelogictest/tests/local-mixed-25.2/generated_test.go b/pkg/sql/sqlitelogictest/tests/local-mixed-25.2/generated_test.go deleted file mode 100644 index 4a96908e2052..000000000000 --- a/pkg/sql/sqlitelogictest/tests/local-mixed-25.2/generated_test.go +++ /dev/null @@ -1,1434 +0,0 @@ -// Copyright 2022 The Cockroach Authors. -// -// Use of this software is governed by the CockroachDB Software License -// included in the /LICENSE file. - -// Code generated by generate-logictest, DO NOT EDIT. - -package testlocal_mixed_252 - -import ( - "flag" - "os" - "path/filepath" - "testing" - - "github.com/cockroachdb/cockroach/pkg/base" - "github.com/cockroachdb/cockroach/pkg/build/bazel" - "github.com/cockroachdb/cockroach/pkg/security/securityassets" - "github.com/cockroachdb/cockroach/pkg/security/securitytest" - "github.com/cockroachdb/cockroach/pkg/server" - "github.com/cockroachdb/cockroach/pkg/sql/logictest" - "github.com/cockroachdb/cockroach/pkg/sql/sqlitelogictest" - "github.com/cockroachdb/cockroach/pkg/testutils/serverutils" - "github.com/cockroachdb/cockroach/pkg/testutils/skip" - "github.com/cockroachdb/cockroach/pkg/testutils/testcluster" - "github.com/cockroachdb/cockroach/pkg/util/leaktest" - "github.com/cockroachdb/cockroach/pkg/util/randutil" -) - -const configIdx = 20 - -var sqliteLogicTestDir string - -func init() { -} - -func TestMain(m *testing.M) { - flag.Parse() - if *logictest.Bigtest { - if bazel.BuiltWithBazel() { - var err error - sqliteLogicTestDir, err = bazel.Runfile("external/com_github_cockroachdb_sqllogictest") - if err != nil { - panic(err) - } - } else { - var err error - sqliteLogicTestDir, err = sqlitelogictest.FindLocalLogicTestClone() - if err != nil { - panic(err) - } - } - } - securityassets.SetLoader(securitytest.EmbeddedAssets) - randutil.SeedForTests() - serverutils.InitTestServerFactory(server.TestServerFactory) - serverutils.InitTestClusterFactory(testcluster.TestClusterFactory) - - defer serverutils.TestingSetDefaultTenantSelectionOverride( - base.TestIsForStuffThatShouldWorkWithSecondaryTenantsButDoesntYet(156124), - )() - - os.Exit(m.Run()) -} - -func runSqliteLogicTest(t *testing.T, file string) { - skip.UnderDeadlock(t, "times out and/or hangs") - if !*logictest.Bigtest { - skip.IgnoreLint(t, "-bigtest flag must be specified to run this test") - } - // SQLLite logic tests can be very memory intensive, so we give them larger - // limit than other logic tests get. Also some of the 'delete' files become - // extremely slow when MVCC range tombstones are enabled for point deletes, - // so we disable that. - serverArgs := logictest.TestServerArgs{ - MaxSQLMemoryLimit: 512 << 20, // 512 MiB - DisableUseMVCCRangeTombstonesForPointDeletes: true, - // Some sqlite tests with very low bytes limit value are too slow, so - // ensure 3 KiB lower bound. - BatchBytesLimitLowerBound: 3 << 10, // 3 KiB - } - logictest.RunLogicTest(t, serverArgs, configIdx, filepath.Join(sqliteLogicTestDir, file)) -} - -func TestSqlLiteLogic_testindexbetween1slt_good_0_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/between/1/slt_good_0.test") -} - -func TestSqlLiteLogic_testindexbetween10slt_good_0_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/between/10/slt_good_0.test") -} - -func TestSqlLiteLogic_testindexbetween10slt_good_1_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/between/10/slt_good_1.test") -} - -func TestSqlLiteLogic_testindexbetween10slt_good_2_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/between/10/slt_good_2.test") -} - -func TestSqlLiteLogic_testindexbetween10slt_good_3_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/between/10/slt_good_3.test") -} - -func TestSqlLiteLogic_testindexbetween10slt_good_4_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/between/10/slt_good_4.test") -} - -func TestSqlLiteLogic_testindexbetween10slt_good_5_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/between/10/slt_good_5.test") -} - -func TestSqlLiteLogic_testindexbetween100slt_good_0_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/between/100/slt_good_0.test") -} - -func TestSqlLiteLogic_testindexbetween100slt_good_1_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/between/100/slt_good_1.test") -} - -func TestSqlLiteLogic_testindexbetween100slt_good_2_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/between/100/slt_good_2.test") -} - -func TestSqlLiteLogic_testindexbetween100slt_good_3_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/between/100/slt_good_3.test") -} - -func TestSqlLiteLogic_testindexbetween100slt_good_4_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/between/100/slt_good_4.test") -} - -func TestSqlLiteLogic_testindexbetween1000slt_good_0_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/between/1000/slt_good_0.test") -} - -func TestSqlLiteLogic_testindexcommute10slt_good_0_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/commute/10/slt_good_0.test") -} - -func TestSqlLiteLogic_testindexcommute10slt_good_1_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/commute/10/slt_good_1.test") -} - -func TestSqlLiteLogic_testindexcommute10slt_good_10_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/commute/10/slt_good_10.test") -} - -func TestSqlLiteLogic_testindexcommute10slt_good_11_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/commute/10/slt_good_11.test") -} - -func TestSqlLiteLogic_testindexcommute10slt_good_12_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/commute/10/slt_good_12.test") -} - -func TestSqlLiteLogic_testindexcommute10slt_good_13_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/commute/10/slt_good_13.test") -} - -func TestSqlLiteLogic_testindexcommute10slt_good_14_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/commute/10/slt_good_14.test") -} - -func TestSqlLiteLogic_testindexcommute10slt_good_15_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/commute/10/slt_good_15.test") -} - -func TestSqlLiteLogic_testindexcommute10slt_good_16_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/commute/10/slt_good_16.test") -} - -func TestSqlLiteLogic_testindexcommute10slt_good_17_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/commute/10/slt_good_17.test") -} - -func TestSqlLiteLogic_testindexcommute10slt_good_18_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/commute/10/slt_good_18.test") -} - -func TestSqlLiteLogic_testindexcommute10slt_good_19_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/commute/10/slt_good_19.test") -} - -func TestSqlLiteLogic_testindexcommute10slt_good_2_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/commute/10/slt_good_2.test") -} - -func TestSqlLiteLogic_testindexcommute10slt_good_20_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/commute/10/slt_good_20.test") -} - -func TestSqlLiteLogic_testindexcommute10slt_good_21_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/commute/10/slt_good_21.test") -} - -func TestSqlLiteLogic_testindexcommute10slt_good_22_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/commute/10/slt_good_22.test") -} - -func TestSqlLiteLogic_testindexcommute10slt_good_23_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/commute/10/slt_good_23.test") -} - -func TestSqlLiteLogic_testindexcommute10slt_good_24_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/commute/10/slt_good_24.test") -} - -func TestSqlLiteLogic_testindexcommute10slt_good_25_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/commute/10/slt_good_25.test") -} - -func TestSqlLiteLogic_testindexcommute10slt_good_26_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/commute/10/slt_good_26.test") -} - -func TestSqlLiteLogic_testindexcommute10slt_good_27_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/commute/10/slt_good_27.test") -} - -func TestSqlLiteLogic_testindexcommute10slt_good_28_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/commute/10/slt_good_28.test") -} - -func TestSqlLiteLogic_testindexcommute10slt_good_29_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/commute/10/slt_good_29.test") -} - -func TestSqlLiteLogic_testindexcommute10slt_good_3_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/commute/10/slt_good_3.test") -} - -func TestSqlLiteLogic_testindexcommute10slt_good_30_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/commute/10/slt_good_30.test") -} - -func TestSqlLiteLogic_testindexcommute10slt_good_31_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/commute/10/slt_good_31.test") -} - -func TestSqlLiteLogic_testindexcommute10slt_good_32_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/commute/10/slt_good_32.test") -} - -func TestSqlLiteLogic_testindexcommute10slt_good_33_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/commute/10/slt_good_33.test") -} - -func TestSqlLiteLogic_testindexcommute10slt_good_34_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/commute/10/slt_good_34.test") -} - -func TestSqlLiteLogic_testindexcommute10slt_good_4_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/commute/10/slt_good_4.test") -} - -func TestSqlLiteLogic_testindexcommute10slt_good_5_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/commute/10/slt_good_5.test") -} - -func TestSqlLiteLogic_testindexcommute10slt_good_6_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/commute/10/slt_good_6.test") -} - -func TestSqlLiteLogic_testindexcommute10slt_good_7_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/commute/10/slt_good_7.test") -} - -func TestSqlLiteLogic_testindexcommute10slt_good_8_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/commute/10/slt_good_8.test") -} - -func TestSqlLiteLogic_testindexcommute10slt_good_9_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/commute/10/slt_good_9.test") -} - -func TestSqlLiteLogic_testindexcommute100slt_good_0_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/commute/100/slt_good_0.test") -} - -func TestSqlLiteLogic_testindexcommute100slt_good_1_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/commute/100/slt_good_1.test") -} - -func TestSqlLiteLogic_testindexcommute100slt_good_10_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/commute/100/slt_good_10.test") -} - -func TestSqlLiteLogic_testindexcommute100slt_good_11_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/commute/100/slt_good_11.test") -} - -func TestSqlLiteLogic_testindexcommute100slt_good_12_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/commute/100/slt_good_12.test") -} - -func TestSqlLiteLogic_testindexcommute100slt_good_2_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/commute/100/slt_good_2.test") -} - -func TestSqlLiteLogic_testindexcommute100slt_good_3_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/commute/100/slt_good_3.test") -} - -func TestSqlLiteLogic_testindexcommute100slt_good_4_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/commute/100/slt_good_4.test") -} - -func TestSqlLiteLogic_testindexcommute100slt_good_5_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/commute/100/slt_good_5.test") -} - -func TestSqlLiteLogic_testindexcommute100slt_good_6_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/commute/100/slt_good_6.test") -} - -func TestSqlLiteLogic_testindexcommute100slt_good_7_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/commute/100/slt_good_7.test") -} - -func TestSqlLiteLogic_testindexcommute100slt_good_8_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/commute/100/slt_good_8.test") -} - -func TestSqlLiteLogic_testindexcommute100slt_good_9_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/commute/100/slt_good_9.test") -} - -func TestSqlLiteLogic_testindexcommute1000slt_good_0_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/commute/1000/slt_good_0.test") -} - -func TestSqlLiteLogic_testindexcommute1000slt_good_1_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/commute/1000/slt_good_1.test") -} - -func TestSqlLiteLogic_testindexcommute1000slt_good_2_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/commute/1000/slt_good_2.test") -} - -func TestSqlLiteLogic_testindexcommute1000slt_good_3_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/commute/1000/slt_good_3.test") -} - -func TestSqlLiteLogic_testindexdelete1slt_good_0_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/delete/1/slt_good_0.test") -} - -func TestSqlLiteLogic_testindexdelete10slt_good_0_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/delete/10/slt_good_0.test") -} - -func TestSqlLiteLogic_testindexdelete10slt_good_1_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/delete/10/slt_good_1.test") -} - -func TestSqlLiteLogic_testindexdelete10slt_good_2_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/delete/10/slt_good_2.test") -} - -func TestSqlLiteLogic_testindexdelete10slt_good_3_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/delete/10/slt_good_3.test") -} - -func TestSqlLiteLogic_testindexdelete10slt_good_4_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/delete/10/slt_good_4.test") -} - -func TestSqlLiteLogic_testindexdelete10slt_good_5_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/delete/10/slt_good_5.test") -} - -func TestSqlLiteLogic_testindexdelete100slt_good_0_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/delete/100/slt_good_0.test") -} - -func TestSqlLiteLogic_testindexdelete100slt_good_1_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/delete/100/slt_good_1.test") -} - -func TestSqlLiteLogic_testindexdelete100slt_good_2_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/delete/100/slt_good_2.test") -} - -func TestSqlLiteLogic_testindexdelete100slt_good_3_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/delete/100/slt_good_3.test") -} - -func TestSqlLiteLogic_testindexdelete1000slt_good_0_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/delete/1000/slt_good_0.test") -} - -func TestSqlLiteLogic_testindexdelete1000slt_good_1_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/delete/1000/slt_good_1.test") -} - -func TestSqlLiteLogic_testindexdelete10000slt_good_0_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/delete/10000/slt_good_0.test") -} - -func TestSqlLiteLogic_testindexin10slt_good_0_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/in/10/slt_good_0.test") -} - -func TestSqlLiteLogic_testindexin10slt_good_1_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/in/10/slt_good_1.test") -} - -func TestSqlLiteLogic_testindexin10slt_good_2_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/in/10/slt_good_2.test") -} - -func TestSqlLiteLogic_testindexin10slt_good_3_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/in/10/slt_good_3.test") -} - -func TestSqlLiteLogic_testindexin10slt_good_4_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/in/10/slt_good_4.test") -} - -func TestSqlLiteLogic_testindexin10slt_good_5_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/in/10/slt_good_5.test") -} - -func TestSqlLiteLogic_testindexin100slt_good_0_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/in/100/slt_good_0.test") -} - -func TestSqlLiteLogic_testindexin100slt_good_1_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/in/100/slt_good_1.test") -} - -func TestSqlLiteLogic_testindexin100slt_good_2_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/in/100/slt_good_2.test") -} - -func TestSqlLiteLogic_testindexin100slt_good_3_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/in/100/slt_good_3.test") -} - -func TestSqlLiteLogic_testindexin100slt_good_4_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/in/100/slt_good_4.test") -} - -func TestSqlLiteLogic_testindexin1000slt_good_0_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/in/1000/slt_good_0.test") -} - -func TestSqlLiteLogic_testindexin1000slt_good_1_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/in/1000/slt_good_1.test") -} - -func TestSqlLiteLogic_testindexorderby10slt_good_0_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/orderby/10/slt_good_0.test") -} - -func TestSqlLiteLogic_testindexorderby10slt_good_1_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/orderby/10/slt_good_1.test") -} - -func TestSqlLiteLogic_testindexorderby10slt_good_10_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/orderby/10/slt_good_10.test") -} - -func TestSqlLiteLogic_testindexorderby10slt_good_11_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/orderby/10/slt_good_11.test") -} - -func TestSqlLiteLogic_testindexorderby10slt_good_12_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/orderby/10/slt_good_12.test") -} - -func TestSqlLiteLogic_testindexorderby10slt_good_13_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/orderby/10/slt_good_13.test") -} - -func TestSqlLiteLogic_testindexorderby10slt_good_14_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/orderby/10/slt_good_14.test") -} - -func TestSqlLiteLogic_testindexorderby10slt_good_15_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/orderby/10/slt_good_15.test") -} - -func TestSqlLiteLogic_testindexorderby10slt_good_16_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/orderby/10/slt_good_16.test") -} - -func TestSqlLiteLogic_testindexorderby10slt_good_17_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/orderby/10/slt_good_17.test") -} - -func TestSqlLiteLogic_testindexorderby10slt_good_18_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/orderby/10/slt_good_18.test") -} - -func TestSqlLiteLogic_testindexorderby10slt_good_19_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/orderby/10/slt_good_19.test") -} - -func TestSqlLiteLogic_testindexorderby10slt_good_2_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/orderby/10/slt_good_2.test") -} - -func TestSqlLiteLogic_testindexorderby10slt_good_20_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/orderby/10/slt_good_20.test") -} - -func TestSqlLiteLogic_testindexorderby10slt_good_21_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/orderby/10/slt_good_21.test") -} - -func TestSqlLiteLogic_testindexorderby10slt_good_22_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/orderby/10/slt_good_22.test") -} - -func TestSqlLiteLogic_testindexorderby10slt_good_23_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/orderby/10/slt_good_23.test") -} - -func TestSqlLiteLogic_testindexorderby10slt_good_24_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/orderby/10/slt_good_24.test") -} - -func TestSqlLiteLogic_testindexorderby10slt_good_25_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/orderby/10/slt_good_25.test") -} - -func TestSqlLiteLogic_testindexorderby10slt_good_3_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/orderby/10/slt_good_3.test") -} - -func TestSqlLiteLogic_testindexorderby10slt_good_4_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/orderby/10/slt_good_4.test") -} - -func TestSqlLiteLogic_testindexorderby10slt_good_5_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/orderby/10/slt_good_5.test") -} - -func TestSqlLiteLogic_testindexorderby10slt_good_6_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/orderby/10/slt_good_6.test") -} - -func TestSqlLiteLogic_testindexorderby10slt_good_7_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/orderby/10/slt_good_7.test") -} - -func TestSqlLiteLogic_testindexorderby10slt_good_8_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/orderby/10/slt_good_8.test") -} - -func TestSqlLiteLogic_testindexorderby10slt_good_9_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/orderby/10/slt_good_9.test") -} - -func TestSqlLiteLogic_testindexorderby100slt_good_0_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/orderby/100/slt_good_0.test") -} - -func TestSqlLiteLogic_testindexorderby100slt_good_1_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/orderby/100/slt_good_1.test") -} - -func TestSqlLiteLogic_testindexorderby100slt_good_2_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/orderby/100/slt_good_2.test") -} - -func TestSqlLiteLogic_testindexorderby100slt_good_3_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/orderby/100/slt_good_3.test") -} - -func TestSqlLiteLogic_testindexorderby1000slt_good_0_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/orderby/1000/slt_good_0.test") -} - -func TestSqlLiteLogic_testindexorderby_nosort10slt_good_0_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/orderby_nosort/10/slt_good_0.test") -} - -func TestSqlLiteLogic_testindexorderby_nosort10slt_good_1_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/orderby_nosort/10/slt_good_1.test") -} - -func TestSqlLiteLogic_testindexorderby_nosort10slt_good_10_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/orderby_nosort/10/slt_good_10.test") -} - -func TestSqlLiteLogic_testindexorderby_nosort10slt_good_11_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/orderby_nosort/10/slt_good_11.test") -} - -func TestSqlLiteLogic_testindexorderby_nosort10slt_good_12_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/orderby_nosort/10/slt_good_12.test") -} - -func TestSqlLiteLogic_testindexorderby_nosort10slt_good_13_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/orderby_nosort/10/slt_good_13.test") -} - -func TestSqlLiteLogic_testindexorderby_nosort10slt_good_14_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/orderby_nosort/10/slt_good_14.test") -} - -func TestSqlLiteLogic_testindexorderby_nosort10slt_good_15_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/orderby_nosort/10/slt_good_15.test") -} - -func TestSqlLiteLogic_testindexorderby_nosort10slt_good_16_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/orderby_nosort/10/slt_good_16.test") -} - -func TestSqlLiteLogic_testindexorderby_nosort10slt_good_17_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/orderby_nosort/10/slt_good_17.test") -} - -func TestSqlLiteLogic_testindexorderby_nosort10slt_good_18_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/orderby_nosort/10/slt_good_18.test") -} - -func TestSqlLiteLogic_testindexorderby_nosort10slt_good_19_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/orderby_nosort/10/slt_good_19.test") -} - -func TestSqlLiteLogic_testindexorderby_nosort10slt_good_2_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/orderby_nosort/10/slt_good_2.test") -} - -func TestSqlLiteLogic_testindexorderby_nosort10slt_good_20_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/orderby_nosort/10/slt_good_20.test") -} - -func TestSqlLiteLogic_testindexorderby_nosort10slt_good_21_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/orderby_nosort/10/slt_good_21.test") -} - -func TestSqlLiteLogic_testindexorderby_nosort10slt_good_22_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/orderby_nosort/10/slt_good_22.test") -} - -func TestSqlLiteLogic_testindexorderby_nosort10slt_good_23_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/orderby_nosort/10/slt_good_23.test") -} - -func TestSqlLiteLogic_testindexorderby_nosort10slt_good_24_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/orderby_nosort/10/slt_good_24.test") -} - -func TestSqlLiteLogic_testindexorderby_nosort10slt_good_25_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/orderby_nosort/10/slt_good_25.test") -} - -func TestSqlLiteLogic_testindexorderby_nosort10slt_good_26_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/orderby_nosort/10/slt_good_26.test") -} - -func TestSqlLiteLogic_testindexorderby_nosort10slt_good_27_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/orderby_nosort/10/slt_good_27.test") -} - -func TestSqlLiteLogic_testindexorderby_nosort10slt_good_28_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/orderby_nosort/10/slt_good_28.test") -} - -func TestSqlLiteLogic_testindexorderby_nosort10slt_good_29_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/orderby_nosort/10/slt_good_29.test") -} - -func TestSqlLiteLogic_testindexorderby_nosort10slt_good_3_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/orderby_nosort/10/slt_good_3.test") -} - -func TestSqlLiteLogic_testindexorderby_nosort10slt_good_30_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/orderby_nosort/10/slt_good_30.test") -} - -func TestSqlLiteLogic_testindexorderby_nosort10slt_good_31_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/orderby_nosort/10/slt_good_31.test") -} - -func TestSqlLiteLogic_testindexorderby_nosort10slt_good_32_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/orderby_nosort/10/slt_good_32.test") -} - -func TestSqlLiteLogic_testindexorderby_nosort10slt_good_33_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/orderby_nosort/10/slt_good_33.test") -} - -func TestSqlLiteLogic_testindexorderby_nosort10slt_good_34_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/orderby_nosort/10/slt_good_34.test") -} - -func TestSqlLiteLogic_testindexorderby_nosort10slt_good_35_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/orderby_nosort/10/slt_good_35.test") -} - -func TestSqlLiteLogic_testindexorderby_nosort10slt_good_36_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/orderby_nosort/10/slt_good_36.test") -} - -func TestSqlLiteLogic_testindexorderby_nosort10slt_good_37_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/orderby_nosort/10/slt_good_37.test") -} - -func TestSqlLiteLogic_testindexorderby_nosort10slt_good_38_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/orderby_nosort/10/slt_good_38.test") -} - -func TestSqlLiteLogic_testindexorderby_nosort10slt_good_39_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/orderby_nosort/10/slt_good_39.test") -} - -func TestSqlLiteLogic_testindexorderby_nosort10slt_good_4_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/orderby_nosort/10/slt_good_4.test") -} - -func TestSqlLiteLogic_testindexorderby_nosort10slt_good_5_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/orderby_nosort/10/slt_good_5.test") -} - -func TestSqlLiteLogic_testindexorderby_nosort10slt_good_6_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/orderby_nosort/10/slt_good_6.test") -} - -func TestSqlLiteLogic_testindexorderby_nosort10slt_good_7_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/orderby_nosort/10/slt_good_7.test") -} - -func TestSqlLiteLogic_testindexorderby_nosort10slt_good_8_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/orderby_nosort/10/slt_good_8.test") -} - -func TestSqlLiteLogic_testindexorderby_nosort10slt_good_9_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/orderby_nosort/10/slt_good_9.test") -} - -func TestSqlLiteLogic_testindexorderby_nosort100slt_good_0_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/orderby_nosort/100/slt_good_0.test") -} - -func TestSqlLiteLogic_testindexorderby_nosort100slt_good_1_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/orderby_nosort/100/slt_good_1.test") -} - -func TestSqlLiteLogic_testindexorderby_nosort100slt_good_2_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/orderby_nosort/100/slt_good_2.test") -} - -func TestSqlLiteLogic_testindexorderby_nosort100slt_good_3_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/orderby_nosort/100/slt_good_3.test") -} - -func TestSqlLiteLogic_testindexorderby_nosort100slt_good_4_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/orderby_nosort/100/slt_good_4.test") -} - -func TestSqlLiteLogic_testindexorderby_nosort100slt_good_5_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/orderby_nosort/100/slt_good_5.test") -} - -func TestSqlLiteLogic_testindexorderby_nosort100slt_good_6_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/orderby_nosort/100/slt_good_6.test") -} - -func TestSqlLiteLogic_testindexorderby_nosort1000slt_good_0_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/orderby_nosort/1000/slt_good_0.test") -} - -func TestSqlLiteLogic_testindexorderby_nosort1000slt_good_1_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/orderby_nosort/1000/slt_good_1.test") -} - -func TestSqlLiteLogic_testindexview10slt_good_0_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/view/10/slt_good_0.test") -} - -func TestSqlLiteLogic_testindexview10slt_good_1_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/view/10/slt_good_1.test") -} - -func TestSqlLiteLogic_testindexview10slt_good_2_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/view/10/slt_good_2.test") -} - -func TestSqlLiteLogic_testindexview10slt_good_3_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/view/10/slt_good_3.test") -} - -func TestSqlLiteLogic_testindexview10slt_good_4_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/view/10/slt_good_4.test") -} - -func TestSqlLiteLogic_testindexview10slt_good_5_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/view/10/slt_good_5.test") -} - -func TestSqlLiteLogic_testindexview10slt_good_6_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/view/10/slt_good_6.test") -} - -func TestSqlLiteLogic_testindexview10slt_good_7_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/view/10/slt_good_7.test") -} - -func TestSqlLiteLogic_testindexview100slt_good_0_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/view/100/slt_good_0.test") -} - -func TestSqlLiteLogic_testindexview100slt_good_1_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/view/100/slt_good_1.test") -} - -func TestSqlLiteLogic_testindexview100slt_good_2_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/view/100/slt_good_2.test") -} - -func TestSqlLiteLogic_testindexview100slt_good_3_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/view/100/slt_good_3.test") -} - -func TestSqlLiteLogic_testindexview100slt_good_4_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/view/100/slt_good_4.test") -} - -func TestSqlLiteLogic_testindexview100slt_good_5_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/view/100/slt_good_5.test") -} - -func TestSqlLiteLogic_testindexview1000slt_good_0_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/view/1000/slt_good_0.test") -} - -func TestSqlLiteLogic_testindexview10000slt_good_0_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/index/view/10000/slt_good_0.test") -} - -func TestSqlLiteLogic_testselect1_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/select1.test") -} - -func TestSqlLiteLogic_testselect2_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/select2.test") -} - -func TestSqlLiteLogic_testselect3_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/select3.test") -} - -func TestSqlLiteLogic_testselect4_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/select4.test") -} - -func TestSqlLiteLogic_testselect5_test( - t *testing.T, -) { - defer leaktest.AfterTest(t)() - runSqliteLogicTest(t, "/test/select5.test") -} diff --git a/pkg/sql/sqlitelogictest/tests/local-mixed-25.3/generated_test.go b/pkg/sql/sqlitelogictest/tests/local-mixed-25.3/generated_test.go index 56a6f8ff3571..1dc667ee87b0 100644 --- a/pkg/sql/sqlitelogictest/tests/local-mixed-25.3/generated_test.go +++ b/pkg/sql/sqlitelogictest/tests/local-mixed-25.3/generated_test.go @@ -27,7 +27,7 @@ import ( "github.com/cockroachdb/cockroach/pkg/util/randutil" ) -const configIdx = 21 +const configIdx = 20 var sqliteLogicTestDir string diff --git a/pkg/sql/sqlitelogictest/tests/local-mixed-25.4/generated_test.go b/pkg/sql/sqlitelogictest/tests/local-mixed-25.4/generated_test.go index cb5ce85ddab2..4766f11faddb 100644 --- a/pkg/sql/sqlitelogictest/tests/local-mixed-25.4/generated_test.go +++ b/pkg/sql/sqlitelogictest/tests/local-mixed-25.4/generated_test.go @@ -27,7 +27,7 @@ import ( "github.com/cockroachdb/cockroach/pkg/util/randutil" ) -const configIdx = 22 +const configIdx = 21 var sqliteLogicTestDir string diff --git a/pkg/storage/pebble.go b/pkg/storage/pebble.go index fb5d219023e9..797167dcdf44 100644 --- a/pkg/storage/pebble.go +++ b/pkg/storage/pebble.go @@ -2437,14 +2437,13 @@ func (p *Pebble) CreateCheckpoint(dir string, spans []roachpb.Span) error { var pebbleFormatVersionMap = map[clusterversion.Key]pebble.FormatMajorVersion{ clusterversion.V25_4_PebbleFormatV2BlobFiles: pebble.FormatV2BlobFiles, clusterversion.V25_3: pebble.FormatValueSeparation, - clusterversion.V25_2: pebble.FormatTableFormatV6, } // MinimumSupportedFormatVersion is the version that provides features that the // Cockroach code relies on unconditionally (like range keys). New stores are by // default created with this version. It should correspond to the minimum // supported binary version. -const MinimumSupportedFormatVersion = pebble.FormatTableFormatV6 +const MinimumSupportedFormatVersion = pebble.FormatValueSeparation // pebbleFormatVersionKeys contains the keys in the map above, in descending order. var pebbleFormatVersionKeys = slices.SortedFunc(maps.Keys(pebbleFormatVersionMap), func(a, b clusterversion.Key) int { diff --git a/pkg/upgrade/upgrades/upgrades.go b/pkg/upgrade/upgrades/upgrades.go index 88f2774670d3..b5202361dcbd 100644 --- a/pkg/upgrade/upgrades/upgrades.go +++ b/pkg/upgrade/upgrades/upgrades.go @@ -59,11 +59,11 @@ var upgrades = []upgradebase.Upgrade{ bootstrapCluster, upgrade.RestoreActionNotRequired("initialization runs before restore")), - newFirstUpgrade(clusterversion.V25_3_Start.Version()), + newFirstUpgrade(clusterversion.TODO_Delete_V25_3_Start.Version()), upgrade.NewTenantUpgrade( "add 'payload' column to system.eventlog table and add new index on eventType column", - clusterversion.V25_3_AddEventLogColumnAndIndex.Version(), + clusterversion.TODO_Delete_V25_3_AddEventLogColumnAndIndex.Version(), upgrade.NoPrecondition, eventLogTableMigration, upgrade.RestoreActionNotRequired("cluster restore does not restore the new column or index"), @@ -71,7 +71,7 @@ var upgrades = []upgradebase.Upgrade{ upgrade.NewTenantUpgrade( "add 'estimated_last_login_time' column to system.users table", - clusterversion.V25_3_AddEstimatedLastLoginTime.Version(), + clusterversion.TODO_Delete_V25_3_AddEstimatedLastLoginTime.Version(), upgrade.NoPrecondition, usersLastLoginTimeTableMigration, upgrade.RestoreActionNotRequired("cluster restore does not restore the new column"), @@ -79,7 +79,7 @@ var upgrades = []upgradebase.Upgrade{ upgrade.NewTenantUpgrade( "add new hot range logger job", - clusterversion.V25_3_AddHotRangeLoggerJob.Version(), + clusterversion.TODO_Delete_V25_3_AddHotRangeLoggerJob.Version(), upgrade.NoPrecondition, addHotRangeLoggerJob, upgrade.RestoreActionNotRequired("cluster restore does not restore this job"), diff --git a/pkg/upgrade/upgrades/v25_3_add_event_log_column_and_index_test.go b/pkg/upgrade/upgrades/v25_3_add_event_log_column_and_index_test.go index a90a7927bc1e..c44fb03d6c32 100644 --- a/pkg/upgrade/upgrades/v25_3_add_event_log_column_and_index_test.go +++ b/pkg/upgrade/upgrades/v25_3_add_event_log_column_and_index_test.go @@ -88,7 +88,7 @@ func TestEventLogTableMigration(t *testing.T) { upgrades.Upgrade( t, sqlDB, - clusterversion.V25_3_AddEventLogColumnAndIndex, + clusterversion.TODO_Delete_V25_3_AddEventLogColumnAndIndex, nil, /* done */ false, /* expectError */ ) diff --git a/pkg/upgrade/upgrades/v25_3_add_users_last_login_time_column_test.go b/pkg/upgrade/upgrades/v25_3_add_users_last_login_time_column_test.go index 4587ad960176..4cc24fbc9fb8 100644 --- a/pkg/upgrade/upgrades/v25_3_add_users_last_login_time_column_test.go +++ b/pkg/upgrade/upgrades/v25_3_add_users_last_login_time_column_test.go @@ -85,7 +85,7 @@ func TestUsersLastLoginTimeTableMigration(t *testing.T) { upgrades.Upgrade( t, sqlDB, - clusterversion.V25_3_AddEstimatedLastLoginTime, + clusterversion.TODO_Delete_V25_3_AddEstimatedLastLoginTime, nil, /* done */ false, /* expectError */ ) From 85c0bcf59c2e656195e2da4b01a6246017bdacde Mon Sep 17 00:00:00 2001 From: Celia La Date: Fri, 7 Nov 2025 17:57:01 -0800 Subject: [PATCH 2/3] logictests: remove obsolete 25.2 mixed-version test cases MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit After bumping MinSupported from V25.2 to V25.3, several logic test cases that were conditionally executed only for local-mixed-25.2 configurations are no longer valid. These tests checked for version- gated behavior that is now always available in 25.3+. Changes: - role: Remove tests expecting PROVISIONSRC errors (feature now available) - user: Remove user_provisioning_gating_mixed_version subtest - udf_in_table: Remove duplicate CREATE TABLE statement for 25.2 compat - udf_unsupported: Remove tests for UDF restrictions lifted in 25.3 These changes fix test failures in 3node-tenant configuration where the removed guards caused tests to run with incorrect expectations. Release note: None 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- pkg/sql/logictest/testdata/logic_test/role | 6 ------ .../testdata/logic_test/udf_in_table | 10 --------- .../testdata/logic_test/udf_unsupported | 21 ------------------- pkg/sql/logictest/testdata/logic_test/user | 17 --------------- 4 files changed, 54 deletions(-) diff --git a/pkg/sql/logictest/testdata/logic_test/role b/pkg/sql/logictest/testdata/logic_test/role index 42b5f45ec866..ef496845e630 100644 --- a/pkg/sql/logictest/testdata/logic_test/role +++ b/pkg/sql/logictest/testdata/logic_test/role @@ -1951,12 +1951,6 @@ skipif config 3node-tenant statement ok ALTER ROLE testuser PROVISIONSRC 'ldap:ldap.example.com' -statement error PROVISIONSRC role option is only supported after v25.3 upgrade is finalized -CREATE ROLE role_with_provisioning PROVISIONSRC 'ldap:ldap.example.com' - -statement error PROVISIONSRC role option is only supported after v25.3 upgrade is finalized -ALTER ROLE testuser PROVISIONSRC 'ldap:ldap.example.com' - subtest end # Validates that drop role will be prevented if the role is in use by diff --git a/pkg/sql/logictest/testdata/logic_test/udf_in_table b/pkg/sql/logictest/testdata/logic_test/udf_in_table index 980ef8885f21..2e1ff601bec9 100644 --- a/pkg/sql/logictest/testdata/logic_test/udf_in_table +++ b/pkg/sql/logictest/testdata/logic_test/udf_in_table @@ -85,16 +85,6 @@ CREATE TABLE t1( FAMILY fam_0 (a, b, c, d, e) ); -statement ok -CREATE TABLE t1( - a INT PRIMARY KEY, - b INT DEFAULT f1(), - c INT, - d INT NULL, - e INT, - FAMILY fam_0 (a, b, c, d, e) -); - let $tbl_id SELECT id FROM system.namespace WHERE name = 't1'; diff --git a/pkg/sql/logictest/testdata/logic_test/udf_unsupported b/pkg/sql/logictest/testdata/logic_test/udf_unsupported index f62dfd68128d..4973c602a1e8 100644 --- a/pkg/sql/logictest/testdata/logic_test/udf_unsupported +++ b/pkg/sql/logictest/testdata/logic_test/udf_unsupported @@ -3,30 +3,9 @@ subtest disallow_udf_in_table statement ok CREATE FUNCTION test_tbl_f() RETURNS INT IMMUTABLE LANGUAGE SQL AS $$ SELECT 1 $$; -statement error pgcode 0A000 pq: unimplemented: usage of user-defined function from relations not supported -CREATE TABLE test_tbl_t (a INT PRIMARY KEY, b INT ON UPDATE (test_tbl_f() + 1)); - -statement error pgcode 0A000 pq: unimplemented: usage of user-defined function from relations not supported -CREATE TABLE test_tbl_t (a INT PRIMARY KEY, b INT AS (test_tbl_f() + 1) STORED); - -statement error pgcode 0A000 pq: unimplemented: usage of user-defined function from relations not supported -CREATE TABLE test_tbl_t (a INT PRIMARY KEY, b INT, INDEX idx_b(test_tbl_f())); - statement ok CREATE TABLE test_tbl_t (a INT PRIMARY KEY, b INT); -statement error pgcode 0A000 pq: unimplemented: usage of user-defined function from relations not supported -CREATE INDEX t_idx ON test_tbl_t(test_tbl_f()); - -statement error pgcode 0A000 pq: unimplemented: usage of user-defined function from relations not supported -CREATE INDEX t_idx ON test_tbl_t(b) WHERE test_tbl_f() > 0; - -statement error pgcode 0A000 pq: unimplemented: usage of user-defined function from relations not supported -ALTER TABLE test_tbl_t ADD COLUMN c int ON UPDATE (test_tbl_f()); - -statement error pgcode 0A000 pq: unimplemented: usage of user-defined function from relations not supported -ALTER TABLE test_tbl_t ALTER COLUMN b SET ON UPDATE (test_tbl_f()); - # Insert a row to verify that backfills that use UDFs are blocked without internal errors. statement ok INSERT INTO test_tbl_t VALUES (1, 1); diff --git a/pkg/sql/logictest/testdata/logic_test/user b/pkg/sql/logictest/testdata/logic_test/user index 319c424e83aa..c520556b1c20 100644 --- a/pkg/sql/logictest/testdata/logic_test/user +++ b/pkg/sql/logictest/testdata/logic_test/user @@ -226,23 +226,6 @@ DROP USER userlongpassword subtest end -subtest user_provisioning_gating_mixed_version - -user root - -statement ok -set cluster setting security.provisioning.ldap.enabled = true; - -statement ok -DROP user testuser - -user testuser nodeidx=0 newsession - -statement error pq: password authentication failed for user testuser -SHOW session_user - -subtest end - subtest user_provisioning_gating_latest_version user root From 4bcd7b6f8f52f2ec8e56e0672e784c2652be05a0 Mon Sep 17 00:00:00 2001 From: Celia La Date: Fri, 7 Nov 2025 21:56:09 -0800 Subject: [PATCH 3/3] logictests: remove additional 25.2-specific test cases MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit After the initial cleanup, additional test failures revealed more cases that were conditionally guarded for local-mixed-25.2: - udf_unsupported: Remove duplicate error checks for "usage of user- defined function from relations not supported" (lines 25-32). The error message changed to "cannot evaluate function in this context" in 25.3+. - user: Remove check expecting estimated_last_login_time column to not exist in SHOW USERS (lines 278-279). This column now exists in 25.3+. - udf_in_table: Remove second duplicate CREATE TABLE t1 statement (lines 539-545) that was for 25.2 compatibility. These fixes resolve: - TestTenantLogic_udf_unsupported/disallow_udf_in_table - TestTenantLogic_user/validate_estimated_last_login_time - TestTenantLogic_udf_in_table relation already exists error Release note: None 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- pkg/sql/logictest/testdata/logic_test/udf_in_table | 8 -------- pkg/sql/logictest/testdata/logic_test/udf_unsupported | 9 --------- pkg/sql/logictest/testdata/logic_test/user | 3 --- 3 files changed, 20 deletions(-) diff --git a/pkg/sql/logictest/testdata/logic_test/udf_in_table b/pkg/sql/logictest/testdata/logic_test/udf_in_table index 2e1ff601bec9..935c544756ba 100644 --- a/pkg/sql/logictest/testdata/logic_test/udf_in_table +++ b/pkg/sql/logictest/testdata/logic_test/udf_in_table @@ -536,14 +536,6 @@ CREATE TABLE t1( FAMILY fam_0 (a, b, c) ); -statement ok -CREATE TABLE t1( - a INT PRIMARY KEY, - b INT DEFAULT f1(), - c INT, - FAMILY fam_0 (a, b, c) -); - query T SELECT get_fn_depended_on_by($fn_id) ---- diff --git a/pkg/sql/logictest/testdata/logic_test/udf_unsupported b/pkg/sql/logictest/testdata/logic_test/udf_unsupported index 4973c602a1e8..114a1e37d26b 100644 --- a/pkg/sql/logictest/testdata/logic_test/udf_unsupported +++ b/pkg/sql/logictest/testdata/logic_test/udf_unsupported @@ -22,15 +22,6 @@ CREATE INDEX t_idx_partial ON test_tbl_t(b) WHERE test_tbl_f() > 0; statement error pgcode 0A000 unimplemented: cannot evaluate function in this context CREATE INDEX idx_b ON test_tbl_t (test_tbl_f()); -statement error pgcode 0A000 unimplemented: usage of user-defined function from relations not supported -ALTER TABLE test_tbl_t ADD COLUMN c int AS (test_tbl_f()) stored; - -statement error pgcode 0A000 unimplemented: usage of user-defined function from relations not supported -ALTER TABLE test_tbl_t ADD COLUMN c int DEFAULT (test_tbl_f()); - -statement error pgcode 0A000 unimplemented: usage of user-defined function from relations not supported -CREATE INDEX idx_b ON test_tbl_t (test_tbl_f()); - subtest end diff --git a/pkg/sql/logictest/testdata/logic_test/user b/pkg/sql/logictest/testdata/logic_test/user index c520556b1c20..7ef8ab26adcc 100644 --- a/pkg/sql/logictest/testdata/logic_test/user +++ b/pkg/sql/logictest/testdata/logic_test/user @@ -275,7 +275,4 @@ SELECT count(*) FROM system.users WHERE estimated_last_login_time IS NOT NULL AN user root -statement error pq: column "estimated_last_login_time" does not exist -select estimated_last_login_time from [SHOW USERS] where username = 'testuser2'; - subtest end