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  }