github.com/cockroachdb/cockroach@v20.2.0-alpha.1+incompatible/pkg/sql/show_fingerprints_test.go (about) 1 // Copyright 2017 The Cockroach Authors. 2 // 3 // Use of this software is governed by the Business Source License 4 // included in the file licenses/BSL.txt. 5 // 6 // As of the Change Date specified in that file, in accordance with 7 // the Business Source License, use of this software will be governed 8 // by the Apache License, Version 2.0, included in the file 9 // licenses/APL.txt. 10 11 package sql 12 13 import ( 14 "context" 15 "fmt" 16 "reflect" 17 "testing" 18 19 "github.com/cockroachdb/cockroach/pkg/base" 20 "github.com/cockroachdb/cockroach/pkg/testutils/serverutils" 21 "github.com/cockroachdb/cockroach/pkg/testutils/sqlutils" 22 "github.com/cockroachdb/cockroach/pkg/util/leaktest" 23 ) 24 25 // NB: Most of the SHOW EXPERIMENTAL_FINGERPRINTS tests are in the 26 // show_fingerprints logic test. This is just to test the AS OF SYSTEM TIME 27 // functionality. 28 func TestShowFingerprintsAsOfSystemTime(t *testing.T) { 29 defer leaktest.AfterTest(t)() 30 31 ctx := context.Background() 32 tc := serverutils.StartTestCluster(t, 1, base.TestClusterArgs{}) 33 defer tc.Stopper().Stop(ctx) 34 35 sqlDB := sqlutils.MakeSQLRunner(tc.ServerConn(0)) 36 sqlDB.Exec(t, `CREATE DATABASE d`) 37 sqlDB.Exec(t, `CREATE TABLE d.t (a INT PRIMARY KEY, b INT, INDEX b_idx (b))`) 38 sqlDB.Exec(t, `INSERT INTO d.t VALUES (1, 2)`) 39 40 const fprintQuery = `SHOW EXPERIMENTAL_FINGERPRINTS FROM TABLE d.t` 41 fprint1 := sqlDB.QueryStr(t, fprintQuery) 42 43 var ts string 44 sqlDB.QueryRow(t, `SELECT now()`).Scan(&ts) 45 46 sqlDB.Exec(t, `INSERT INTO d.t VALUES (3, 4)`) 47 sqlDB.Exec(t, `DROP INDEX d.t@b_idx`) 48 49 fprint2 := sqlDB.QueryStr(t, fprintQuery) 50 if reflect.DeepEqual(fprint1, fprint2) { 51 t.Errorf("expected different fingerprints: %v vs %v", fprint1, fprint2) 52 } 53 54 fprint3Query := fmt.Sprintf(`SELECT * FROM [%s] AS OF SYSTEM TIME '%s'`, fprintQuery, ts) 55 sqlDB.CheckQueryResults(t, fprint3Query, fprint1) 56 } 57 58 func TestShowFingerprintsColumnNames(t *testing.T) { 59 defer leaktest.AfterTest(t)() 60 61 ctx := context.Background() 62 tc := serverutils.StartTestCluster(t, 1, base.TestClusterArgs{}) 63 defer tc.Stopper().Stop(ctx) 64 65 sqlDB := sqlutils.MakeSQLRunner(tc.ServerConn(0)) 66 sqlDB.Exec(t, `CREATE DATABASE d`) 67 sqlDB.Exec(t, `CREATE TABLE d.t ( 68 lowercase INT PRIMARY KEY, 69 "cApiTaLInT" INT, 70 "cApiTaLByTEs" BYTES, 71 INDEX capital_int_idx ("cApiTaLInT"), 72 INDEX capital_bytes_idx ("cApiTaLByTEs") 73 )`) 74 75 sqlDB.Exec(t, `INSERT INTO d.t VALUES (1, 2, 'a')`) 76 fprint1 := sqlDB.QueryStr(t, `SHOW EXPERIMENTAL_FINGERPRINTS FROM TABLE d.t`) 77 78 sqlDB.Exec(t, `TRUNCATE TABLE d.t`) 79 sqlDB.Exec(t, `INSERT INTO d.t VALUES (3, 4, 'b')`) 80 fprint2 := sqlDB.QueryStr(t, `SHOW EXPERIMENTAL_FINGERPRINTS FROM TABLE d.t`) 81 82 if reflect.DeepEqual(fprint1, fprint2) { 83 t.Errorf("expected different fingerprints: %v vs %v", fprint1, fprint2) 84 } 85 }