github.com/cockroachdb/cockroach@v20.2.0-alpha.1+incompatible/pkg/sql/opt/props/multiplicity_test.go (about) 1 // Copyright 2020 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 props 12 13 import ( 14 "testing" 15 16 "github.com/cockroachdb/cockroach/pkg/sql/opt" 17 "github.com/stretchr/testify/require" 18 ) 19 20 var bothIndeterminate = JoinMultiplicity{ 21 UnfilteredCols: opt.ColSet{}, 22 LeftMultiplicity: MultiplicityIndeterminateVal, 23 RightMultiplicity: MultiplicityIndeterminateVal, 24 } 25 26 var bothNoDup = JoinMultiplicity{ 27 UnfilteredCols: opt.ColSet{}, 28 LeftMultiplicity: MultiplicityNotDuplicatedVal, 29 RightMultiplicity: MultiplicityNotDuplicatedVal, 30 } 31 32 var bothPreserved = JoinMultiplicity{ 33 UnfilteredCols: opt.ColSet{}, 34 LeftMultiplicity: MultiplicityPreservedVal, 35 RightMultiplicity: MultiplicityPreservedVal, 36 } 37 38 var bothNoDupBothPreserved = JoinMultiplicity{ 39 UnfilteredCols: opt.ColSet{}, 40 LeftMultiplicity: MultiplicityNotDuplicatedVal | MultiplicityPreservedVal, 41 RightMultiplicity: MultiplicityNotDuplicatedVal | MultiplicityPreservedVal, 42 } 43 44 var leftIndeterminateRightPreserved = JoinMultiplicity{ 45 UnfilteredCols: opt.ColSet{}, 46 LeftMultiplicity: MultiplicityIndeterminateVal, 47 RightMultiplicity: MultiplicityPreservedVal, 48 } 49 50 var leftIndeterminateRightNoDup = JoinMultiplicity{ 51 UnfilteredCols: opt.ColSet{}, 52 LeftMultiplicity: MultiplicityIndeterminateVal, 53 RightMultiplicity: MultiplicityNotDuplicatedVal, 54 } 55 56 var rightIndeterminateLeftPreserved = JoinMultiplicity{ 57 UnfilteredCols: opt.ColSet{}, 58 LeftMultiplicity: MultiplicityPreservedVal, 59 RightMultiplicity: MultiplicityIndeterminateVal, 60 } 61 62 var rightIndeterminateLeftNoDup = JoinMultiplicity{ 63 UnfilteredCols: opt.ColSet{}, 64 LeftMultiplicity: MultiplicityNotDuplicatedVal, 65 RightMultiplicity: MultiplicityIndeterminateVal, 66 } 67 68 var bothNoDupLeftPreserved = JoinMultiplicity{ 69 UnfilteredCols: opt.ColSet{}, 70 LeftMultiplicity: MultiplicityNotDuplicatedVal | MultiplicityPreservedVal, 71 RightMultiplicity: MultiplicityNotDuplicatedVal, 72 } 73 74 var bothPreservedLeftNoDup = JoinMultiplicity{ 75 UnfilteredCols: opt.ColSet{}, 76 LeftMultiplicity: MultiplicityPreservedVal | MultiplicityNotDuplicatedVal, 77 RightMultiplicity: MultiplicityPreservedVal, 78 } 79 80 var bothNoDupRightPreserved = JoinMultiplicity{ 81 UnfilteredCols: opt.ColSet{}, 82 LeftMultiplicity: MultiplicityNotDuplicatedVal, 83 RightMultiplicity: MultiplicityNotDuplicatedVal | MultiplicityPreservedVal, 84 } 85 86 var bothPreservedRightNoDup = JoinMultiplicity{ 87 UnfilteredCols: opt.ColSet{}, 88 LeftMultiplicity: MultiplicityPreservedVal, 89 RightMultiplicity: MultiplicityPreservedVal | MultiplicityNotDuplicatedVal, 90 } 91 92 func TestJoinMultiplicity_JoinDoesNotDuplicateLeftRows(t *testing.T) { 93 require.Equal(t, false, bothIndeterminate.JoinDoesNotDuplicateLeftRows()) 94 require.Equal(t, true, bothNoDup.JoinDoesNotDuplicateLeftRows()) 95 require.Equal(t, false, bothPreserved.JoinDoesNotDuplicateLeftRows()) 96 require.Equal(t, true, bothNoDupBothPreserved.JoinDoesNotDuplicateLeftRows()) 97 require.Equal(t, false, leftIndeterminateRightPreserved.JoinDoesNotDuplicateLeftRows()) 98 require.Equal(t, false, leftIndeterminateRightNoDup.JoinDoesNotDuplicateLeftRows()) 99 require.Equal(t, false, rightIndeterminateLeftPreserved.JoinDoesNotDuplicateLeftRows()) 100 require.Equal(t, true, rightIndeterminateLeftNoDup.JoinDoesNotDuplicateLeftRows()) 101 require.Equal(t, true, bothNoDupLeftPreserved.JoinDoesNotDuplicateLeftRows()) 102 require.Equal(t, true, bothPreservedLeftNoDup.JoinDoesNotDuplicateLeftRows()) 103 require.Equal(t, true, bothNoDupRightPreserved.JoinDoesNotDuplicateLeftRows()) 104 require.Equal(t, false, bothPreservedRightNoDup.JoinDoesNotDuplicateLeftRows()) 105 } 106 107 func TestJoinMultiplicity_JoinDoesNotDuplicateRightRows(t *testing.T) { 108 require.Equal(t, false, bothIndeterminate.JoinDoesNotDuplicateRightRows()) 109 require.Equal(t, true, bothNoDup.JoinDoesNotDuplicateRightRows()) 110 require.Equal(t, false, bothPreserved.JoinDoesNotDuplicateRightRows()) 111 require.Equal(t, true, bothNoDupBothPreserved.JoinDoesNotDuplicateRightRows()) 112 require.Equal(t, false, leftIndeterminateRightPreserved.JoinDoesNotDuplicateRightRows()) 113 require.Equal(t, true, leftIndeterminateRightNoDup.JoinDoesNotDuplicateRightRows()) 114 require.Equal(t, false, rightIndeterminateLeftPreserved.JoinDoesNotDuplicateRightRows()) 115 require.Equal(t, false, rightIndeterminateLeftNoDup.JoinDoesNotDuplicateRightRows()) 116 require.Equal(t, true, bothNoDupLeftPreserved.JoinDoesNotDuplicateRightRows()) 117 require.Equal(t, false, bothPreservedLeftNoDup.JoinDoesNotDuplicateRightRows()) 118 require.Equal(t, true, bothNoDupRightPreserved.JoinDoesNotDuplicateRightRows()) 119 require.Equal(t, true, bothPreservedRightNoDup.JoinDoesNotDuplicateRightRows()) 120 } 121 122 func TestJoinMultiplicity_JoinPreservesLeftRows(t *testing.T) { 123 require.Equal(t, false, bothIndeterminate.JoinPreservesLeftRows()) 124 require.Equal(t, false, bothNoDup.JoinPreservesLeftRows()) 125 require.Equal(t, true, bothPreserved.JoinPreservesLeftRows()) 126 require.Equal(t, true, bothNoDupBothPreserved.JoinPreservesLeftRows()) 127 require.Equal(t, false, leftIndeterminateRightPreserved.JoinPreservesLeftRows()) 128 require.Equal(t, false, leftIndeterminateRightNoDup.JoinPreservesLeftRows()) 129 require.Equal(t, true, rightIndeterminateLeftPreserved.JoinPreservesLeftRows()) 130 require.Equal(t, false, rightIndeterminateLeftNoDup.JoinPreservesLeftRows()) 131 require.Equal(t, true, bothNoDupLeftPreserved.JoinPreservesLeftRows()) 132 require.Equal(t, true, bothPreservedLeftNoDup.JoinPreservesLeftRows()) 133 require.Equal(t, false, bothNoDupRightPreserved.JoinPreservesLeftRows()) 134 require.Equal(t, true, bothPreservedRightNoDup.JoinPreservesLeftRows()) 135 } 136 137 func TestJoinMultiplicity_JoinPreservesRightRows(t *testing.T) { 138 require.Equal(t, false, bothIndeterminate.JoinPreservesRightRows()) 139 require.Equal(t, false, bothNoDup.JoinPreservesRightRows()) 140 require.Equal(t, true, bothPreserved.JoinPreservesRightRows()) 141 require.Equal(t, true, bothNoDupBothPreserved.JoinPreservesRightRows()) 142 require.Equal(t, true, leftIndeterminateRightPreserved.JoinPreservesRightRows()) 143 require.Equal(t, false, leftIndeterminateRightNoDup.JoinPreservesRightRows()) 144 require.Equal(t, false, rightIndeterminateLeftPreserved.JoinPreservesRightRows()) 145 require.Equal(t, false, rightIndeterminateLeftNoDup.JoinPreservesRightRows()) 146 require.Equal(t, false, bothNoDupLeftPreserved.JoinPreservesRightRows()) 147 require.Equal(t, true, bothPreservedLeftNoDup.JoinPreservesRightRows()) 148 require.Equal(t, true, bothNoDupRightPreserved.JoinPreservesRightRows()) 149 require.Equal(t, true, bothPreservedRightNoDup.JoinPreservesRightRows()) 150 }