@@ -10,21 +10,29 @@ import (
10
10
"strings"
11
11
"testing"
12
12
13
+ "github.com/cockroachdb/cockroach/pkg/keys"
13
14
"github.com/cockroachdb/cockroach/pkg/sql/catalog/catenumpb"
15
+ "github.com/cockroachdb/cockroach/pkg/sql/catalog/descpb"
14
16
"github.com/cockroachdb/cockroach/pkg/sql/catalog/fetchpb"
15
17
"github.com/cockroachdb/cockroach/pkg/sql/opt/constraint"
18
+ "github.com/cockroachdb/cockroach/pkg/sql/rowenc"
16
19
"github.com/cockroachdb/cockroach/pkg/sql/sem/tree"
17
20
"github.com/cockroachdb/cockroach/pkg/util/encoding"
18
21
"github.com/stretchr/testify/require"
19
22
)
20
23
21
24
func TestBuilder_EncodeConstraintKey (t * testing.T ) {
25
+ const (
26
+ tableID descpb.ID = 100
27
+ indexID descpb.IndexID = 2
28
+ )
22
29
var (
23
- colDirs1 = []string {"asc" , "asc" , "asc" }
24
- colDirs2 = []string {"desc" , "asc" , "desc" }
25
- intDatum1 = tree .NewDInt (1 )
26
- intDatum2 = tree .NewDInt (2 )
27
- textDatum = tree .NewDString ("foo" )
30
+ tableIndexBytes = rowenc .MakeIndexKeyPrefix (keys .SystemSQLCodec , tableID , indexID )
31
+ colDirs1 = []string {"asc" , "asc" , "asc" }
32
+ colDirs2 = []string {"desc" , "asc" , "desc" }
33
+ intDatum1 = tree .NewDInt (1 )
34
+ intDatum2 = tree .NewDInt (2 )
35
+ textDatum = tree .NewDString ("foo" )
28
36
)
29
37
for tcIdx , tc := range []struct {
30
38
dirs []string
@@ -63,22 +71,36 @@ func TestBuilder_EncodeConstraintKey(t *testing.T) {
63
71
},
64
72
} {
65
73
t .Run (fmt .Sprintf ("case %d" , tcIdx + 1 ), func (t * testing.T ) {
66
- b := Builder {}
67
- b .keyAndPrefixCols = make ([]fetchpb.IndexFetchSpec_KeyColumn , len (tc .dirs ))
68
- valDirs := make ([]encoding.Direction , len (tc .dirs ))
69
- for i , dir := range tc .dirs {
70
- if dir == "asc" {
71
- b .keyAndPrefixCols [i ].Direction = catenumpb .IndexColumn_ASC
72
- valDirs [i ] = encoding .Ascending
73
- } else {
74
- b .keyAndPrefixCols [i ].Direction = catenumpb .IndexColumn_DESC
75
- valDirs [i ] = encoding .Descending
76
- }
74
+ for _ , usePrefix := range []bool {true , false } {
75
+ t .Run (fmt .Sprintf ("usePrefix=%t" , usePrefix ), func (t * testing.T ) {
76
+ b := Builder {
77
+ KeyPrefix : tableIndexBytes ,
78
+ keyAndPrefixCols : make ([]fetchpb.IndexFetchSpec_KeyColumn , len (tc .dirs )),
79
+ }
80
+ valDirs := make ([]encoding.Direction , len (tc .dirs ))
81
+ for i , dir := range tc .dirs {
82
+ if dir == "asc" {
83
+ b .keyAndPrefixCols [i ].Direction = catenumpb .IndexColumn_ASC
84
+ valDirs [i ] = encoding .Ascending
85
+ } else {
86
+ b .keyAndPrefixCols [i ].Direction = catenumpb .IndexColumn_DESC
87
+ valDirs [i ] = encoding .Descending
88
+ }
89
+ }
90
+ if usePrefix {
91
+ prefixDirs := []encoding.Direction {encoding .Ascending , encoding .Ascending }
92
+ valDirs = append (prefixDirs , valDirs ... )
93
+ }
94
+ outKey , _ , err := b .encodeConstraintKey (tc .in , usePrefix )
95
+ require .NoError (t , err )
96
+ vals , _ := encoding .PrettyPrintValuesWithTypes (valDirs , outKey )
97
+ expected := tc .out
98
+ if usePrefix && ! tc .in .IsEmpty () {
99
+ expected = fmt .Sprintf ("/%d/%d%s" , tableID , indexID , expected )
100
+ }
101
+ require .Equal (t , expected , "/" + strings .Join (vals , "/" ))
102
+ })
77
103
}
78
- outKey , _ , err := b .encodeConstraintKey (tc .in )
79
- require .NoError (t , err )
80
- vals , _ := encoding .PrettyPrintValuesWithTypes (valDirs , outKey )
81
- require .Equal (t , tc .out , "/" + strings .Join (vals , "/" ))
82
104
})
83
105
}
84
106
}
0 commit comments