Skip to content

Commit

Permalink
[no-release-notes] add tests for index lookup precision loss+overflow (
Browse files Browse the repository at this point in the history
…#2554)

* [no-release-notes] add tests for index lookup precision loss+overflow

* simplify
  • Loading branch information
max-hoffman authored Jun 17, 2024
1 parent 74f08a2 commit 8baa9e4
Show file tree
Hide file tree
Showing 3 changed files with 114 additions and 0 deletions.
15 changes: 15 additions & 0 deletions enginetest/enginetests.go
Original file line number Diff line number Diff line change
Expand Up @@ -1633,6 +1633,21 @@ func TestScripts(t *testing.T, harness Harness) {
}
}

func TestNumericErrorScripts(t *testing.T, harness Harness) {
harness.Setup(setup.MydbData)
for _, script := range queries.NumericErrorQueries {
if sh, ok := harness.(SkippingHarness); ok {
if sh.SkipQueryTest(script.Name) {
t.Run(script.Name, func(t *testing.T) {
t.Skip(script.Name)
})
continue
}
}
TestScript(t, harness, script)
}
}

func TestSpatialScripts(t *testing.T, harness Harness) {
harness.Setup(setup.MydbData)
for _, script := range queries.SpatialScriptTests {
Expand Down
4 changes: 4 additions & 0 deletions enginetest/memory_engine_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -665,6 +665,10 @@ func TestSpatialIndexPlans(t *testing.T) {
enginetest.TestSpatialIndexPlans(t, enginetest.NewMemoryHarness("default", 1, testNumPartitions, true, mergableIndexDriver))
}

func TestNumericErrorScripts(t *testing.T) {
enginetest.TestNumericErrorScripts(t, enginetest.NewMemoryHarness("default", 1, testNumPartitions, true, mergableIndexDriver))
}

func TestUserPrivileges(t *testing.T) {
harness := enginetest.NewMemoryHarness("default", 1, testNumPartitions, true, mergableIndexDriver)
if harness.IsUsingServer() {
Expand Down
95 changes: 95 additions & 0 deletions enginetest/queries/numeric_error_queries.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
package queries

import (
"github.com/dolthub/go-mysql-server/sql"
"github.com/dolthub/go-mysql-server/sql/types"
)

var NumericErrorQueries = []ScriptTest{
{
Name: "range key float fuzzer fail",
SetUpScript: []string{
// float
"create table float_pk (a int, b double, primary key(a,b))",
"create table float_uk (a int, b double, primary key(a), unique key (b))",
"create table float_nuk (a int, b double, primary key(a), key (b))",
"insert into float_pk values (1, -4e+212)",
"insert into float_uk values (1, -4e+212)",
"insert into float_nuk values (1, -4e+212)",
// decimal
"create table decimal_pk (a int, b decimal(65,30), primary key(a,b))",
"create table decimal_uk (a int, b decimal(65,30), primary key(a), unique key (b))",
"create table decimal_nuk (a int, b decimal(65,30), primary key(a), key (b))",
"insert into decimal_pk values (1, 9999999999999999999999999.9999999999999999999999999999999)",
"insert into decimal_uk values (1, 9999999999999999999999999.9999999999999999999999999999999)",
"insert into decimal_nuk values (1, 9999999999999999999999999.9999999999999999999999999999999)",
// int overflows
"create table i8 (i tinyint primary key)",
"create table i16 (i smallint primary key)",
"create table i32 (i int primary key)",
"create table i64 (i bigint primary key)",
"create table ui8 (i tinyint unsigned primary key)",
"create table ui16 (i smallint unsigned primary key)",
"create table ui32 (i int unsigned primary key)",
"create table ui64 (i bigint unsigned primary key)",
"insert into i8 values (127)",
"insert into i16 values (32767)",
"insert into i32 values (2147483647)",
"insert into i64 values (9223372036854775807)",
"insert into ui8 values (255)",
"insert into ui16 values (65535)",
"insert into ui32 values (4294967295)",
"insert into ui64 values (18446744073709551615)",
},
Assertions: []ScriptTestAssertion{
{
Query: "delete from float_pk where a = 1 and b = -4e+212",
Expected: []sql.Row{{types.NewOkResult(1)}},
},
{
Query: "delete from decimal_uk where b = 9999999999999999999999999.9999999999999999999999999999999",
Expected: []sql.Row{{types.NewOkResult(1)}},
},
{
Query: "delete from decimal_nuk where b = 9999999999999999999999999.9999999999999999999999999999999",
Expected: []sql.Row{{types.NewOkResult(1)}},
},
{
Query: "delete from decimal_pk where a = 1 and b = 9999999999999999999999999.9999999999999999999999999999999",
Expected: []sql.Row{{types.NewOkResult(1)}},
},
{
Query: "delete from i8 where i = 127",
Expected: []sql.Row{{types.NewOkResult(1)}},
},
{
Query: "delete from i16 where i = 32767",
Expected: []sql.Row{{types.NewOkResult(1)}},
},
{
Query: "delete from i32 where i = 2147483647",
Expected: []sql.Row{{types.NewOkResult(1)}},
},
{
Query: "delete from i64 where i = 9223372036854775807",
Expected: []sql.Row{{types.NewOkResult(1)}},
},
{
Query: "delete from ui8 where i = 255",
Expected: []sql.Row{{types.NewOkResult(1)}},
},
{
Query: "delete from ui16 where i = 65535",
Expected: []sql.Row{{types.NewOkResult(1)}},
},
{
Query: "delete from ui32 where i = 4294967295",
Expected: []sql.Row{{types.NewOkResult(1)}},
},
{
Query: "delete from ui64 where i = 18446744073709551615",
Expected: []sql.Row{{types.NewOkResult(1)}},
},
},
},
}

0 comments on commit 8baa9e4

Please sign in to comment.