!= operator now uses indexes

This commit is contained in:
Daylon Wilkins
2020-11-12 03:42:12 -08:00
committed by Daylon Wilkins
parent 1f8d3f08b9
commit 56280ef5ea
5 changed files with 398 additions and 18 deletions

View File

@@ -141,7 +141,7 @@ test_mutation() {
}
@test "delete all one_pk, <>, pk" {
test_mutation "delete from one_pk where pk1 <> 1024" "one_pk" "$one_pk_header"
test_mutation "delete from one_pk where pk1 <> 1024" "one_pk" "$one_pk_header" "yes"
}
@test "delete all two_pk, >, pk" {
@@ -221,7 +221,7 @@ test_mutation() {
}
@test "delete all one_pk, <>, pk + non-pk" {
test_mutation "delete from one_pk where pk1 <> 1024 and c1 <> 1024" "one_pk" "$one_pk_header"
test_mutation "delete from one_pk where pk1 <> 1024 and c1 <> 1024" "one_pk" "$one_pk_header" "yes"
}
@test "delete all two_pk, >, pk + non-pk" {
@@ -269,7 +269,7 @@ test_mutation() {
}
@test "update all one_pk, <>, pk" {
test_mutation "update one_pk set c2 = 256 where pk1 <> 1024" "one_pk" "$one_pk_all_updated"
test_mutation "update one_pk set c2 = 256 where pk1 <> 1024" "one_pk" "$one_pk_all_updated" "yes"
}
@test "update all two_pk, >, pk" {
@@ -349,7 +349,7 @@ test_mutation() {
}
@test "update all one_pk, <>, pk + non-pk" {
test_mutation "update one_pk set c2 = 256 where pk1 <> 1024 and c1 <> 1024" "one_pk" "$one_pk_all_updated"
test_mutation "update one_pk set c2 = 256 where pk1 <> 1024 and c1 <> 1024" "one_pk" "$one_pk_all_updated" "yes"
}
@test "update all two_pk, >, pk + non-pk" {

View File

@@ -134,18 +134,6 @@ github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZm
github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no=
github.com/dolthub/fslock v0.0.2 h1:8vUh47iKovgrtXNrXVIzsIoWLlspoXg+3nslhUzgKSw=
github.com/dolthub/fslock v0.0.2/go.mod h1:0i7bsNkK+XHwFL3dIsSWeXSV7sykVzzVr6+jq8oeEo0=
github.com/dolthub/go-mysql-server v0.6.1-0.20201106005010-6faca804df09 h1:g5O/JQc4N5qQAxENlra7W2VbjdHqiltkvZoddiW+jfM=
github.com/dolthub/go-mysql-server v0.6.1-0.20201106005010-6faca804df09/go.mod h1:69ws/iwxL664UM+Rrdh69f0Bnix3pUHkHCS8uPc/cSI=
github.com/dolthub/go-mysql-server v0.6.1-0.20201110022037-011cc27c6296 h1:VmD/IO7FAg3g8q8BoZ2MQIljyApRpkpv3TB3Tp6k47Y=
github.com/dolthub/go-mysql-server v0.6.1-0.20201110022037-011cc27c6296/go.mod h1:mt/X2Nhcup61HdX72jdBwVKkWSA+2qrJYdq4fLvqkB0=
github.com/dolthub/go-mysql-server v0.6.1-0.20201111024628-117786c2389a h1:F/3HM5q1FN3x8MaF4blQ7LeU2MwXyrxLADfkH7kVFiA=
github.com/dolthub/go-mysql-server v0.6.1-0.20201111024628-117786c2389a/go.mod h1:mt/X2Nhcup61HdX72jdBwVKkWSA+2qrJYdq4fLvqkB0=
github.com/dolthub/go-mysql-server v0.6.1-0.20201111071229-4fc31132e166 h1:EB9BGLZJDn2yCt4FXUlA2C6M3002bTQ7rLMg4c8c55g=
github.com/dolthub/go-mysql-server v0.6.1-0.20201111071229-4fc31132e166/go.mod h1:mt/X2Nhcup61HdX72jdBwVKkWSA+2qrJYdq4fLvqkB0=
github.com/dolthub/go-mysql-server v0.6.1-0.20201111173919-d00e2941f3f6 h1:kYZiRovVt4rrdKugw53d7WqHwLls5HOXnXpjrTlfRUw=
github.com/dolthub/go-mysql-server v0.6.1-0.20201111173919-d00e2941f3f6/go.mod h1:mt/X2Nhcup61HdX72jdBwVKkWSA+2qrJYdq4fLvqkB0=
github.com/dolthub/go-mysql-server v0.6.1-0.20201111174437-8e114c906f31 h1:TP6HcGdMUCVd0KEGH8k1HxJ3Qx8mRZVR7kyrXNEsC+I=
github.com/dolthub/go-mysql-server v0.6.1-0.20201111174437-8e114c906f31/go.mod h1:mt/X2Nhcup61HdX72jdBwVKkWSA+2qrJYdq4fLvqkB0=
github.com/dolthub/go-mysql-server v0.6.1-0.20201111233201-058dc85fd7d7 h1:ZtnTk8uvzBZG54seiHFVo94gFo2akmxuuOYQn5Wpyc0=
github.com/dolthub/go-mysql-server v0.6.1-0.20201111233201-058dc85fd7d7/go.mod h1:K/xTlom+iL7IdXdA7OOgZRzm4D8ivqE68OqOlKH9ahg=
github.com/dolthub/ishell v0.0.0-20201107004254-1592c0036c8d h1:i0u1Ze9wZF/zLgyOB/aLkG01gDDNQ48PR0/a80mxEyQ=
@@ -154,8 +142,6 @@ github.com/dolthub/mmap-go v1.0.4-0.20201107010347-f9f2a9588a66 h1:WRPDbpJWEnPxP
github.com/dolthub/mmap-go v1.0.4-0.20201107010347-f9f2a9588a66/go.mod h1:N5ZIbMGuDUpTpOFQ7HcsN6WSIpTGQjHP+Mz27AfmAgk=
github.com/dolthub/sqllogictest/go v0.0.0-20201105013724-5123fc66e12c h1:ZIo6IOXU3/rJK4lp83QRq1zGhQrjQQtlmE2b7H1Vv/k=
github.com/dolthub/sqllogictest/go v0.0.0-20201105013724-5123fc66e12c/go.mod h1:siLfyv2c92W1eN/R4QqG/+RjjX5W2+gCTRjZxBjI3TY=
github.com/dolthub/vitess v0.0.0-20201105231317-8886950f2053 h1:d1IcMtRAas14KQWTLG3vh6hWhYTwZYvdtp1bUwVfdIU=
github.com/dolthub/vitess v0.0.0-20201105231317-8886950f2053/go.mod h1:hUE8oSk2H5JZnvtlLBhJPYC8WZCA5AoSntdLTcBvdBM=
github.com/dolthub/vitess v0.0.0-20201111232835-de121b254639 h1:zCse34nACeJiO+JUPwp4tbGY0ci4V1iPO3CrdYwKS3A=
github.com/dolthub/vitess v0.0.0-20201111232835-de121b254639/go.mod h1:hUE8oSk2H5JZnvtlLBhJPYC8WZCA5AoSntdLTcBvdBM=
github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=

View File

@@ -29,6 +29,7 @@ type DoltIndex interface {
sql.Index
sql.AscendIndex
sql.DescendIndex
sql.NegateIndex
Schema() schema.Schema
IndexSchema() schema.Schema
TableData() types.Map
@@ -177,6 +178,26 @@ func (di *doltIndex) Get(keys ...interface{}) (sql.IndexLookup, error) {
}, nil
}
// Not implements sql.NegateIndex
func (di *doltIndex) Not(keys ...interface{}) (sql.IndexLookup, error) {
tpl, err := di.keysToTuple(keys)
if err != nil {
return nil, err
}
r1 := lookup.LessThanRange(tpl)
r2, err := lookup.GreaterThanRange(tpl)
if err != nil {
return nil, err
}
return &doltIndexLookup{
idx: di,
ranges: []lookup.Range{
r1,
r2,
},
}, nil
}
// Has implements sql.Index
func (*doltIndex) Has(partition sql.Partition, key ...interface{}) (bool, error) {
return false, errors.New("unimplemented")

View File

@@ -183,6 +183,14 @@ func (di *testMergeableDoltIndex) Get(keys ...interface{}) (sql.IndexLookup, err
finalRanges: di.finalRanges,
}, err
}
func (di *testMergeableDoltIndex) Not(keys ...interface{}) (sql.IndexLookup, error) {
indexLookup, err := di.doltIndex.Not(keys...)
return &testMergeableIndexLookup{
doltIndexLookup: indexLookup.(*doltIndexLookup),
t: di.t,
finalRanges: di.finalRanges,
}, err
}
func (di *testMergeableDoltIndex) AscendGreaterOrEqual(keys ...interface{}) (sql.IndexLookup, error) {
indexLookup, err := di.doltIndex.AscendGreaterOrEqual(keys...)
return &testMergeableIndexLookup{

View File

@@ -83,6 +83,59 @@ func TestMergeableIndexes(t *testing.T) {
},
[]int64{},
},
{
"v1 = 11 OR v1 != 11",
[]lookup.Range{
lookup.AllRange(),
},
[]int64{0, 1, 2, 3, 4, 5, 6, 7, 8, 9},
},
{
"v1 = 11 OR v1 != 15",
[]lookup.Range{
lookup.LessThanRange(idxv1.tuple(15)),
lookup.MustGreaterThanRange(idxv1.tuple(15)),
},
[]int64{0, 1, 2, 3, 4, 6, 7, 8, 9},
},
{
"v1 = 11 AND v1 != 15",
[]lookup.Range{
lookup.MustClosedRange(idxv1.tuple(11), idxv1.tuple(11)),
},
[]int64{1},
},
{
"v1 = 11 OR v1 = 15 OR v1 != 19",
[]lookup.Range{
lookup.LessThanRange(idxv1.tuple(19)),
lookup.MustGreaterThanRange(idxv1.tuple(19)),
},
[]int64{0, 1, 2, 3, 4, 5, 6, 7, 8},
},
{
"v1 = 11 OR v1 = 15 AND v1 != 19",
[]lookup.Range{
lookup.MustClosedRange(idxv1.tuple(11), idxv1.tuple(11)),
lookup.MustClosedRange(idxv1.tuple(15), idxv1.tuple(15)),
},
[]int64{1, 5},
},
{
"v1 = 11 AND v1 = 15 OR v1 != 19",
[]lookup.Range{
lookup.LessThanRange(idxv1.tuple(19)),
lookup.MustGreaterThanRange(idxv1.tuple(19)),
},
[]int64{0, 1, 2, 3, 4, 5, 6, 7, 8},
},
{
"v1 = 11 AND v1 = 15 AND v1 != 19",
[]lookup.Range{
lookup.EmptyRange(),
},
[]int64{},
},
{
"v1 = 11 OR v1 > 15",
[]lookup.Range{
@@ -259,6 +312,286 @@ func TestMergeableIndexes(t *testing.T) {
},
[]int64{},
},
{
"v1 != 11",
[]lookup.Range{
lookup.LessThanRange(idxv1.tuple(11)),
lookup.MustGreaterThanRange(idxv1.tuple(11)),
},
[]int64{0, 2, 3, 4, 5, 6, 7, 8, 9},
},
{
"v1 <> 11",
[]lookup.Range{
lookup.LessThanRange(idxv1.tuple(11)),
lookup.MustGreaterThanRange(idxv1.tuple(11)),
},
[]int64{0, 2, 3, 4, 5, 6, 7, 8, 9},
},
{
"v1 != 11 OR v1 != 15",
[]lookup.Range{
lookup.AllRange(),
},
[]int64{0, 1, 2, 3, 4, 5, 6, 7, 8, 9},
},
{
"v1 <> 11 OR v1 <> 15",
[]lookup.Range{
lookup.AllRange(),
},
[]int64{0, 1, 2, 3, 4, 5, 6, 7, 8, 9},
},
{
"v1 != 11 AND v1 != 15",
[]lookup.Range{
lookup.LessThanRange(idxv1.tuple(11)),
lookup.MustOpenRange(idxv1.tuple(11), idxv1.tuple(15)),
lookup.MustGreaterThanRange(idxv1.tuple(15)),
},
[]int64{0, 2, 3, 4, 6, 7, 8, 9},
},
{
"v1 <> 11 AND v1 <> 15",
[]lookup.Range{
lookup.LessThanRange(idxv1.tuple(11)),
lookup.MustOpenRange(idxv1.tuple(11), idxv1.tuple(15)),
lookup.MustGreaterThanRange(idxv1.tuple(15)),
},
[]int64{0, 2, 3, 4, 6, 7, 8, 9},
},
{
"v1 != 11 OR v1 != 15 OR v1 != 19",
[]lookup.Range{
lookup.AllRange(),
},
[]int64{0, 1, 2, 3, 4, 5, 6, 7, 8, 9},
},
{
"v1 <> 11 OR v1 <> 15 OR v1 <> 19",
[]lookup.Range{
lookup.AllRange(),
},
[]int64{0, 1, 2, 3, 4, 5, 6, 7, 8, 9},
},
{
"v1 != 11 OR v1 != 15 AND v1 != 19",
[]lookup.Range{
lookup.AllRange(),
},
[]int64{0, 1, 2, 3, 4, 5, 6, 7, 8, 9},
},
{
"v1 <> 11 OR v1 <> 15 AND v1 <> 19",
[]lookup.Range{
lookup.AllRange(),
},
[]int64{0, 1, 2, 3, 4, 5, 6, 7, 8, 9},
},
{
"v1 != 11 AND v1 != 15 AND v1 != 19",
[]lookup.Range{
lookup.LessThanRange(idxv1.tuple(11)),
lookup.MustOpenRange(idxv1.tuple(11), idxv1.tuple(15)),
lookup.MustOpenRange(idxv1.tuple(15), idxv1.tuple(19)),
lookup.MustGreaterThanRange(idxv1.tuple(19)),
},
[]int64{0, 2, 3, 4, 6, 7, 8},
},
{
"v1 <> 11 AND v1 <> 15 AND v1 <> 19",
[]lookup.Range{
lookup.LessThanRange(idxv1.tuple(11)),
lookup.MustOpenRange(idxv1.tuple(11), idxv1.tuple(15)),
lookup.MustOpenRange(idxv1.tuple(15), idxv1.tuple(19)),
lookup.MustGreaterThanRange(idxv1.tuple(19)),
},
[]int64{0, 2, 3, 4, 6, 7, 8},
},
{
"v1 != 11 OR v1 > 15",
[]lookup.Range{
lookup.LessThanRange(idxv1.tuple(11)),
lookup.MustGreaterThanRange(idxv1.tuple(11)),
},
[]int64{0, 2, 3, 4, 5, 6, 7, 8, 9},
},
{
"v1 != 11 AND v1 > 15",
[]lookup.Range{
lookup.MustGreaterThanRange(idxv1.tuple(15)),
},
[]int64{6, 7, 8, 9},
},
{
"v1 != 11 OR v1 != 15 OR v1 > 19",
[]lookup.Range{
lookup.AllRange(),
},
[]int64{0, 1, 2, 3, 4, 5, 6, 7, 8, 9},
},
{
"v1 != 11 OR v1 != 15 AND v1 > 19",
[]lookup.Range{
lookup.LessThanRange(idxv1.tuple(11)),
lookup.MustGreaterThanRange(idxv1.tuple(11)),
},
[]int64{0, 2, 3, 4, 5, 6, 7, 8, 9},
},
{
"v1 != 11 AND v1 != 15 OR v1 > 19",
[]lookup.Range{
lookup.LessThanRange(idxv1.tuple(11)),
lookup.MustOpenRange(idxv1.tuple(11), idxv1.tuple(15)),
lookup.MustGreaterThanRange(idxv1.tuple(15)),
},
[]int64{0, 2, 3, 4, 6, 7, 8, 9},
},
{
"v1 != 11 AND v1 != 15 AND v1 > 19",
[]lookup.Range{
lookup.MustGreaterThanRange(idxv1.tuple(19)),
},
[]int64{},
},
{
"v1 != 11 OR v1 >= 15",
[]lookup.Range{
lookup.LessThanRange(idxv1.tuple(11)),
lookup.MustGreaterThanRange(idxv1.tuple(11)),
},
[]int64{0, 2, 3, 4, 5, 6, 7, 8, 9},
},
{
"v1 != 11 AND v1 >= 15",
[]lookup.Range{
lookup.GreaterOrEqualRange(idxv1.tuple(15)),
},
[]int64{5, 6, 7, 8, 9},
},
{
"v1 != 11 OR v1 != 15 OR v1 >= 19",
[]lookup.Range{
lookup.AllRange(),
},
[]int64{0, 1, 2, 3, 4, 5, 6, 7, 8, 9},
},
{
"v1 != 11 OR v1 != 15 AND v1 >= 19",
[]lookup.Range{
lookup.LessThanRange(idxv1.tuple(11)),
lookup.MustGreaterThanRange(idxv1.tuple(11)),
},
[]int64{0, 2, 3, 4, 5, 6, 7, 8, 9},
},
{
"v1 != 11 AND v1 != 15 OR v1 >= 19",
[]lookup.Range{
lookup.LessThanRange(idxv1.tuple(11)),
lookup.MustOpenRange(idxv1.tuple(11), idxv1.tuple(15)),
lookup.MustGreaterThanRange(idxv1.tuple(15)),
},
[]int64{0, 2, 3, 4, 6, 7, 8, 9},
},
{
"v1 != 11 AND v1 != 15 AND v1 >= 19",
[]lookup.Range{
lookup.GreaterOrEqualRange(idxv1.tuple(19)),
},
[]int64{9},
},
{
"v1 != 11 OR v1 < 15",
[]lookup.Range{
lookup.AllRange(),
},
[]int64{0, 1, 2, 3, 4, 5, 6, 7, 8, 9},
},
{
"v1 != 11 AND v1 < 15",
[]lookup.Range{
lookup.LessThanRange(idxv1.tuple(11)),
lookup.MustOpenRange(idxv1.tuple(11), idxv1.tuple(15)),
},
[]int64{0, 2, 3, 4},
},
{
"v1 != 11 OR v1 != 15 OR v1 < 19",
[]lookup.Range{
lookup.AllRange(),
},
[]int64{0, 1, 2, 3, 4, 5, 6, 7, 8, 9},
},
{
"v1 != 11 OR v1 != 15 AND v1 < 19",
[]lookup.Range{
lookup.AllRange(),
},
[]int64{0, 1, 2, 3, 4, 5, 6, 7, 8, 9},
},
{
"v1 != 11 AND v1 != 15 OR v1 < 19",
[]lookup.Range{
lookup.AllRange(),
},
[]int64{0, 1, 2, 3, 4, 5, 6, 7, 8, 9},
},
{
"v1 != 11 AND v1 != 15 AND v1 < 19",
[]lookup.Range{
lookup.LessThanRange(idxv1.tuple(11)),
lookup.MustOpenRange(idxv1.tuple(11), idxv1.tuple(15)),
lookup.MustOpenRange(idxv1.tuple(15), idxv1.tuple(19)),
},
[]int64{0, 2, 3, 4, 6, 7, 8},
},
{
"v1 != 11 OR v1 <= 15",
[]lookup.Range{
lookup.AllRange(),
},
[]int64{0, 1, 2, 3, 4, 5, 6, 7, 8, 9},
},
{
"v1 != 11 AND v1 <= 15",
[]lookup.Range{
lookup.LessThanRange(idxv1.tuple(11)),
lookup.MustCustomRange(idxv1.tuple(11), idxv1.tuple(15),
lookup.Open, lookup.Closed),
},
[]int64{0, 2, 3, 4, 5},
},
{
"v1 != 11 OR v1 != 15 OR v1 <= 19",
[]lookup.Range{
lookup.AllRange(),
},
[]int64{0, 1, 2, 3, 4, 5, 6, 7, 8, 9},
},
{
"v1 != 11 OR v1 != 15 AND v1 <= 19",
[]lookup.Range{
lookup.AllRange(),
},
[]int64{0, 1, 2, 3, 4, 5, 6, 7, 8, 9},
},
{
"v1 != 11 AND v1 != 15 OR v1 <= 19",
[]lookup.Range{
lookup.AllRange(),
},
[]int64{0, 1, 2, 3, 4, 5, 6, 7, 8, 9},
},
{
"v1 != 11 AND v1 != 15 AND v1 <= 19",
[]lookup.Range{
lookup.LessThanRange(idxv1.tuple(11)),
lookup.MustOpenRange(idxv1.tuple(11), idxv1.tuple(15)),
lookup.MustCustomRange(idxv1.tuple(15), idxv1.tuple(19),
lookup.Open, lookup.Closed),
},
[]int64{0, 2, 3, 4, 6, 7, 8, 9},
},
{
"v1 > 11",
[]lookup.Range{
@@ -803,6 +1136,23 @@ func TestMergeableIndexes(t *testing.T) {
},
[]int64{1, 2, 3, 4, 5},
},
{
"v1 BETWEEN 11 AND 15 OR v1 != 13",
[]lookup.Range{
lookup.AllRange(),
},
[]int64{0, 1, 2, 3, 4, 5, 6, 7, 8, 9},
},
{
"v1 BETWEEN 11 AND 15 AND v1 != 13",
[]lookup.Range{
lookup.MustCustomRange(idxv1.tuple(11), idxv1.tuple(13),
lookup.Closed, lookup.Open),
lookup.MustCustomRange(idxv1.tuple(13), idxv1.tuple(15),
lookup.Open, lookup.Closed),
},
[]int64{1, 2, 4, 5},
},
{
"v1 BETWEEN 11 AND 15 AND v1 <= 19",
[]lookup.Range{
@@ -841,6 +1191,21 @@ func TestMergeableIndexes(t *testing.T) {
},
[]int64{2, 3},
},
{
"v1 IN (11, 12, 13) OR v1 != 12",
[]lookup.Range{
lookup.AllRange(),
},
[]int64{0, 1, 2, 3, 4, 5, 6, 7, 8, 9},
},
{
"v1 IN (11, 12, 13) AND v1 != 12",
[]lookup.Range{
lookup.MustClosedRange(idxv1.tuple(11), idxv1.tuple(11)),
lookup.MustClosedRange(idxv1.tuple(13), idxv1.tuple(13)),
},
[]int64{1, 3},
},
{
"v1 IN (11, 12, 13) OR v1 >= 13 AND v1 < 15",
[]lookup.Range{