Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Various Decimal Type Fixes #2326

Merged
merged 33 commits into from
Feb 16, 2024
Merged
Show file tree
Hide file tree
Changes from 32 commits
Commits
Show all changes
33 commits
Select commit Hold shift + click to select a range
5b7216c
fix decimal return type
Feb 9, 2024
96e6723
Merge branch 'main' into james/in
Feb 9, 2024
367930e
[ga-format-pr] Run ./format_repo.sh to fix formatting
jycor Feb 9, 2024
6e4b7a4
guard max precision
Feb 12, 2024
08bd71f
merge with main
Feb 12, 2024
562b30e
prevent scale > precision and wire fix
Feb 12, 2024
6b9dcf7
various type fixes
Feb 12, 2024
e7f396a
rewriting tests for add, sub, and mult
Feb 13, 2024
847f4f0
rewriting div tests
Feb 13, 2024
8bbaa44
more tests
Feb 13, 2024
b0a5aa5
[ga-format-pr] Run ./format_repo.sh to fix formatting
jycor Feb 13, 2024
a98c9cb
implement internal decimal scale
Feb 13, 2024
c45c076
[ga-format-pr] Run ./format_repo.sh to fix formatting
jycor Feb 13, 2024
da9a769
reverting changes to memory_engine_test
Feb 13, 2024
a595026
clean up
Feb 13, 2024
edd1b04
Merge branch 'james/in' of https://github.com/dolthub/go-mysql-server…
Feb 13, 2024
5bc7edb
fix test
Feb 13, 2024
65c3451
removing unused code
Feb 14, 2024
44d928d
improve getFinalScale to handle leftmost div
Feb 15, 2024
c273555
[ga-format-pr] Run ./format_repo.sh to fix formatting
jycor Feb 15, 2024
bec19e9
feedback
Feb 15, 2024
ae8cb67
[ga-format-pr] Run ./format_repo.sh to fix formatting
jycor Feb 15, 2024
d53a262
improving comment
Feb 15, 2024
3bca1c7
Merge branch 'james/in' of https://github.com/dolthub/go-mysql-server…
Feb 15, 2024
5cc9d47
tidying up variable names
Feb 15, 2024
af48541
[ga-format-pr] Run ./format_repo.sh to fix formatting
jycor Feb 15, 2024
a77c57a
small clean
Feb 15, 2024
d44d787
Merge branch 'james/in' of https://github.com/dolthub/go-mysql-server…
Feb 15, 2024
b241aaa
microbenchmarks
Feb 15, 2024
69ec5f3
benchmarks
Feb 16, 2024
f769a01
new line
Feb 16, 2024
7b5c2f1
[ga-format-pr] Run ./format_repo.sh to fix formatting
jycor Feb 16, 2024
8dd2104
merge
Feb 16, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 2 additions & 6 deletions enginetest/queries/procedure_queries.go
Original file line number Diff line number Diff line change
Expand Up @@ -75,17 +75,13 @@ var ProcedureLogicTests = []ScriptTest{
{
Query: "CALL testabc(2, 3)",
Expected: []sql.Row{
{
"6",
},
{6.0},
},
},
{
Query: "CALL testabc(9, 9.5)",
Expected: []sql.Row{
{
"85.5",
},
{85.5},
},
},
},
Expand Down
219 changes: 211 additions & 8 deletions enginetest/queries/queries.go
Original file line number Diff line number Diff line change
Expand Up @@ -782,7 +782,8 @@ var QueryTests = []QueryTest{
{
Query: "select 1 as x from xy having AVG(x) > 0",
Expected: []sql.Row{{1}},
}, {
},
{
Query: "select 1 as x, AVG(x) from xy group by (y) having AVG(x) > 0",
Expected: []sql.Row{{1, float64(1)}, {1, float64(2)}, {1, float64(3)}},
},
Expand Down Expand Up @@ -2550,6 +2551,10 @@ Select * from (
Query: "SELECT i + 1 FROM mytable;",
Expected: []sql.Row{{int64(2)}, {int64(3)}, {int64(4)}},
},
{
Query: `select (1 / 3) * (1 / 3);`,
Expected: []sql.Row{{"0.11111111"}},
},
{
Query: "SELECT i div 2 FROM mytable order by 1;",
Expected: []sql.Row{{int64(0)}, {int64(1)}, {int64(1)}},
Expand Down Expand Up @@ -2734,6 +2739,34 @@ Select * from (
Query: "SELECT 'HOMER' IN (1.0)",
Expected: []sql.Row{{false}},
},
{
Query: "select 1 / 3 * 3 in (0.999999999);",
Expected: []sql.Row{{true}},
},
{
Query: "SELECT 99 NOT IN ( 98 + 97 / 99 );",
Expected: []sql.Row{{true}},
},
{
Query: "SELECT 1 NOT IN ( 97 / 99 );",
Expected: []sql.Row{{true}},
},
{
Query: `SELECT 1 NOT IN (1 / 9 * 5);`,
Expected: []sql.Row{{true}},
},
{
Query: `SELECT 1 / 9 * 5 NOT IN (1);`,
Expected: []sql.Row{{true}},
},
{
Query: `SELECT 1 / 9 * 5 IN (1 / 9 * 5);`,
Expected: []sql.Row{{true}},
},
{
Query: "select 0 in (1/100000);",
Expected: []sql.Row{{false}},
},
{
Query: `SELECT * FROM mytable WHERE i in (CAST(NULL AS SIGNED), 2, 3, 4)`,
Expected: []sql.Row{{3, "third row"}, {2, "second row"}},
Expand Down Expand Up @@ -4103,6 +4136,177 @@ Select * from (
Query: "select 1/2/3%4/5/6;",
Expected: []sql.Row{{"0.0055555555555556"}},
},

// check that internal precision is preserved in comparisons
{
// 0 scale + 0 scale = 9 scale
Query: "select 1 / 3 = 0.333333333;",
Expected: []sql.Row{{true}},
},
{
// 0 scale + 1 scale = 9 scale
Query: "select 1 / 3.0 = 0.333333333;",
Expected: []sql.Row{{true}},
},
{
// 0 scale + 6 scale = 18 scale
Query: "select 1 / 3.000000 = 0.333333333333333333;",
Expected: []sql.Row{{true}},
},
{
// 0 scale + 15 scale = 27 scale
Query: "select 1 / 3.000000000000000 = 0.333333333333333333333333333;",
Expected: []sql.Row{{true}},
},
{
// 0 scale + 24 scale = 36 scale
Query: "select 1 / 3.000000000000000000000000 = 0.333333333333333333333333333333333333;",
Expected: []sql.Row{{true}},
},

{
// 1 scale + 0 scale = 9 scale
Query: "select 1.0 / 3 = 0.333333333;",
Expected: []sql.Row{{true}},
},
{
// 1 scale + 1 scale = 18 scale
Query: "select 1.0 / 3.0 = 0.333333333333333333;",
Expected: []sql.Row{{true}},
},
{
// 1 scale + 10 scale = 27 scale
Query: "select 1.0 / 3.0000000000 = 0.333333333333333333333333333;",
Expected: []sql.Row{{true}},
},
{
// 1 scale + 19 scale = 36 scale
Query: "select 1.0 / 3.0000000000000000000 = 0.333333333333333333333333333333333333;",
Expected: []sql.Row{{true}},
},

{
// 6 scale + 8 scale = 18 scale
Query: "select 1.000000 / 3.00000000 = 0.333333333333333333;",
Expected: []sql.Row{{true}},
},
{
// 6 scale + 9 scale = 27 scale
Query: "select 1.000000 / 3.000000000 = 0.333333333333333333333333333;",
Expected: []sql.Row{{true}},
},
{
// 6 scale + 17 scale = 27 scale
Query: "select 1.000000 / 3.00000000000000000 = 0.333333333333333333333333333;",
Expected: []sql.Row{{true}},
},
{
// 6 scale + 18 scale = 36 scale
Query: "select 1.000000 / 3.000000000000000000 = 0.333333333333333333333333333333333333;",
Expected: []sql.Row{{true}},
},

{
// 7 scale + 7 scale = 18 scale
Query: "select 1.0000000 / 3.0000000 = 0.333333333333333333;",
Expected: []sql.Row{{true}},
},
{
// 7 scale + 8 scale = 27 scale
Query: "select 1.0000000 / 3.00000000 = 0.333333333333333333333333333;",
Expected: []sql.Row{{true}},
},
{
// 7 scale + 16 scale = 27 scale
Query: "select 1.0000000 / 3.0000000000000000 = 0.333333333333333333333333333;",
Expected: []sql.Row{{true}},
},
{
// 7 scale + 15 scale = 36 scale
Query: "select 1.0000000 / 3.00000000000000000 = 0.333333333333333333333333333333333333;",
Expected: []sql.Row{{true}},
},

{
// 8 scale + 6 scale = 18 scale
Query: "select 1.00000000 / 3.000000 = 0.333333333333333333;",
Expected: []sql.Row{{true}},
},
{
// 8 scale + 7 scale = 27 scale
Query: "select 1.00000000 / 3.0000000 = 0.333333333333333333333333333;",
Expected: []sql.Row{{true}},
},
{
// 8 scale + 15 scale = 27 scale
Query: "select 1.00000000 / 3.000000000000000 = 0.333333333333333333333333333;",
Expected: []sql.Row{{true}},
},
{
// 8 scale + 14 scale = 36 scale
Query: "select 1.00000000 / 3.0000000000000000 = 0.333333333333333333333333333333333333;",
Expected: []sql.Row{{true}},
},

{
// 9 scale + 5 scale = 18 scale
Query: "select 1.000000000 / 3.00000 = 0.333333333333333333;",
Expected: []sql.Row{{true}},
},
{
// 9 scale + 6 scale = 27 scale
Query: "select 1.000000000 / 3.000000 = 0.333333333333333333333333333;",
Expected: []sql.Row{{true}},
},
{
// 9 scale + 14 scale = 27 scale
Query: "select 1.000000000 / 3.00000000000000 = 0.333333333333333333333333333;",
Expected: []sql.Row{{true}},
},
{
// 9 scale + 13 scale = 36 scale
Query: "select 1.000000000 / 3.000000000000000 = 0.333333333333333333333333333333333333;",
Expected: []sql.Row{{true}},
},

{
// 10 scale + 1 scale = 27 scale
Query: "select 1.0000000000 / 3.0 = 0.333333333333333333333333333;",
Expected: []sql.Row{{true}},
},
{
// 10 scale + 10 scale = 36 scale
Query: "select 1.0000000000 / 3.0000000000 = 0.333333333333333333333333333333333333;",
Expected: []sql.Row{{true}},
},

// check that decimal internal precision is preserved in casts
{
// 0 scale + 0 scale = 9 scale
Query: "select cast(1 / 3 as decimal(65,30));",
Expected: []sql.Row{{"0.333333333000000000000000000000"}},
},
{
// 0 scale + 1 scale = 9 scale
Query: "select cast(1 / 3.0 as decimal(65,30));",
Expected: []sql.Row{{"0.333333333000000000000000000000"}},
},
{
// 0 scale + 6 scale = 18 scale
Query: "select cast(1 / 3.000000 as decimal(65,30));",
Expected: []sql.Row{{"0.333333333333333333000000000000"}},
},
{
// 0 scale + 15 scale = 27 scale
Query: "select cast(1 / 3.000000000000000 as decimal(65,30));",
Expected: []sql.Row{{"0.333333333333333333333333333000"}},
},
{
// 0 scale + 24 scale = 36 scale
Query: "select cast(1 / 3.000000000000000000000000 as decimal(65,30));",
Expected: []sql.Row{{"0.333333333333333333333333333333"}},
},

{
Query: "select 0.05 % 0.024;",
Expected: []sql.Row{{"0.002"}},
Expand Down Expand Up @@ -6228,6 +6432,7 @@ Select * from (
Expected: []sql.Row{{1}},
},
{
// TODO: Neither MySQL or MariaDB have a function called DATETIME; remove this function.
Query: `SELECT DATETIME(NOW()) - NOW()`,
Expected: []sql.Row{{int64(0)}},
},
Expand Down Expand Up @@ -9015,13 +9220,6 @@ var KeylessQueries = []QueryTest{

// BrokenQueries are queries that are known to be broken in the engine.
var BrokenQueries = []QueryTest{
// https://github.com/dolthub/dolt/issues/7207
{
Query: "select 0 in (1/100000);",
Expected: []sql.Row{
{false},
},
},
// union and aggregation typing are tricky
{
Query: "with recursive t (n) as (select sum('1') from dual union all select (2.00) from dual) select sum(n) from t;",
Expand Down Expand Up @@ -9126,6 +9324,11 @@ var BrokenQueries = []QueryTest{
Query: "SELECT STR_TO_DATE('2013 32 Tuesday', '%X %V %W')", // Tuesday of 32th week
Expected: []sql.Row{{"2013-08-13"}},
},
{
// TODO: need to properly handle datetime precision
Query: `SELECT STR_TO_DATE('01,5,2013 09:30:17','%d,%m,%Y %h:%i:%s %f') - (STR_TO_DATE('01,5,2013 09:30:17','%d,%m,%Y %h:%i:%s') - INTERVAL 1 SECOND)`,
Expected: []sql.Row{{int64(1)}},
},
{
// This panics
// The non-recursive part of the UNION ALL returns too many rows, causing index out of bounds errors
Expand Down
29 changes: 29 additions & 0 deletions enginetest/queries/script_queries.go
Original file line number Diff line number Diff line change
Expand Up @@ -5401,6 +5401,35 @@ CREATE TABLE tab3 (
},
},
},
{
Name: "dividing has different rounding behavior",
SetUpScript: []string{
"CREATE TABLE tab0(col0 INTEGER, col1 INTEGER, col2 INTEGER);",
"INSERT INTO tab0 VALUES(97, 1, 99);",
},
Assertions: []ScriptTestAssertion{
{
Query: "SELECT col2 IN ( 98 + col0 / 99 ) from tab0;",
Expected: []sql.Row{
{false},
},
},
{
Query: "SELECT col2 IN ( 98 + 97 / 99 ) from tab0;",
Expected: []sql.Row{
{false},
},
},
{
Query: "SELECT * FROM tab0 WHERE col2 IN ( 98 + 97 / 99 );",
Expected: []sql.Row{},
},
{
Query: "SELECT ALL * FROM tab0 AS cor0 WHERE col2 IN ( 39 + + 89, col0 + + col1 + + ( - ( - col0 ) ) / col2, + ( col0 ) + - 99, + col1, + col2 * - + col2 * - 12 + col1 + - 66 );",
Expected: []sql.Row{},
},
},
},
}

var SpatialScriptTests = []ScriptTest{
Expand Down
Loading
Loading