diff --git a/CHANGELOG.md b/CHANGELOG.md index c5bffcaafc1f..ce4961ea7dcf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,7 @@ **Fixes**: - Fix an issue with arithmetic precedence (@max-sixty, #3846) +- `+` and `-` can be used after a cast (@PrettyWood, #3923) **Documentation**: diff --git a/prqlc/prql-compiler/src/semantic/resolver/snapshots/prql_compiler__semantic__resolver__test__functions_1.snap b/prqlc/prql-compiler/src/semantic/resolver/snapshots/prql_compiler__semantic__resolver__test__functions_1.snap index 7190a23faf4a..5f91bb1d15e8 100644 --- a/prqlc/prql-compiler/src/semantic/resolver/snapshots/prql_compiler__semantic__resolver__test__functions_1.snap +++ b/prqlc/prql-compiler/src/semantic/resolver/snapshots/prql_compiler__semantic__resolver__test__functions_1.snap @@ -9,60 +9,10 @@ expression: "resolve_derive(r#\"\n let subtract = a b -> a - b\n\n - this - employees - gross_salary - ty: - kind: - Union: - - - ~ - - kind: - Primitive: Int - span: "2:1030-1033" - name: ~ - - - ~ - - kind: - Primitive: Float - span: "2:1037-1042" - name: ~ - - - ~ - - kind: - Primitive: Timestamp - span: "2:1046-1055" - name: ~ - - - ~ - - kind: - Primitive: Date - span: "2:1059-1063" - name: ~ - span: "2:1030-1063" - name: ~ - Ident: - this - employees - tax - ty: - kind: - Union: - - - ~ - - kind: - Primitive: Int - span: "2:1071-1074" - name: ~ - - - ~ - - kind: - Primitive: Float - span: "2:1078-1083" - name: ~ - - - ~ - - kind: - Primitive: Timestamp - span: "2:1087-1096" - name: ~ - - - ~ - - kind: - Primitive: Date - span: "2:1100-1104" - name: ~ - span: "2:1071-1104" - name: ~ alias: net_salary ty: kind: @@ -70,23 +20,23 @@ expression: "resolve_derive(r#\"\n let subtract = a b -> a - b\n\n - - ~ - kind: Primitive: Int - span: "2:1110-1113" + span: "2:970-973" name: ~ - - ~ - kind: Primitive: Float - span: "2:1117-1122" + span: "2:977-982" name: ~ - - ~ - kind: Primitive: Timestamp - span: "2:1126-1135" + span: "2:986-995" name: ~ - - ~ - kind: Primitive: Date - span: "2:1139-1143" + span: "2:999-1003" name: ~ - span: "2:1110-1143" + span: "2:970-1003" name: ~ diff --git a/prqlc/prql-compiler/src/semantic/resolver/snapshots/prql_compiler__semantic__resolver__test__functions_nested.snap b/prqlc/prql-compiler/src/semantic/resolver/snapshots/prql_compiler__semantic__resolver__test__functions_nested.snap index 1f90635e1542..29369da5f78e 100644 --- a/prqlc/prql-compiler/src/semantic/resolver/snapshots/prql_compiler__semantic__resolver__test__functions_nested.snap +++ b/prqlc/prql-compiler/src/semantic/resolver/snapshots/prql_compiler__semantic__resolver__test__functions_nested.snap @@ -53,77 +53,52 @@ expression: "resolve_derive(r#\"\n let lag_day = x -> s\"lag_day_todo - - ~ - kind: Primitive: Int - span: "2:1110-1113" + span: "2:970-973" name: ~ - - ~ - kind: Primitive: Float - span: "2:1117-1122" + span: "2:977-982" name: ~ - - ~ - kind: Primitive: Timestamp - span: "2:1126-1135" + span: "2:986-995" name: ~ - - ~ - kind: Primitive: Date - span: "2:1139-1143" + span: "2:999-1003" name: ~ - span: "2:1110-1143" + span: "2:970-1003" name: ~ - Ident: - this - a - c - ty: - kind: - Union: - - - ~ - - kind: - Primitive: Int - span: "2:924-927" - name: ~ - - - ~ - - kind: - Primitive: Float - span: "2:931-936" - name: ~ - - - ~ - - kind: - Primitive: Timestamp - span: "2:940-949" - name: ~ - - - ~ - - kind: - Primitive: Date - span: "2:953-957" - name: ~ - span: "2:924-957" - name: ~ ty: kind: Union: - - ~ - kind: Primitive: Int - span: "2:963-966" + span: "2:893-896" name: ~ - - ~ - kind: Primitive: Float - span: "2:970-975" + span: "2:900-905" name: ~ - - ~ - kind: Primitive: Timestamp - span: "2:979-988" + span: "2:909-918" name: ~ - - ~ - kind: Primitive: Date - span: "2:992-996" + span: "2:922-926" name: ~ - span: "2:963-996" + span: "2:893-926" name: ~ diff --git a/prqlc/prql-compiler/src/semantic/resolver/snapshots/prql_compiler__semantic__resolver__test__functions_pipeline-2.snap b/prqlc/prql-compiler/src/semantic/resolver/snapshots/prql_compiler__semantic__resolver__test__functions_pipeline-2.snap index 59a448ff703f..de19413b7ade 100644 --- a/prqlc/prql-compiler/src/semantic/resolver/snapshots/prql_compiler__semantic__resolver__test__functions_pipeline-2.snap +++ b/prqlc/prql-compiler/src/semantic/resolver/snapshots/prql_compiler__semantic__resolver__test__functions_pipeline-2.snap @@ -26,9 +26,9 @@ expression: "resolve_derive(r#\"\n let plus_one = x -> x + 1\n kind: Array: kind: Any - span: "2:2069-2076" + span: "2:1929-1936" name: ~ - span: "2:2068-2077" + span: "2:1928-1937" name: array ty: kind: @@ -36,14 +36,14 @@ expression: "resolve_derive(r#\"\n let plus_one = x -> x + 1\n - - ~ - kind: Primitive: Int - span: "2:4300-4303" + span: "2:4160-4163" name: ~ - - ~ - kind: Primitive: Float - span: "2:4307-4312" + span: "2:4167-4172" name: ~ - span: "2:4300-4312" + span: "2:4160-4172" name: ~ - Literal: Integer: 1 @@ -58,24 +58,24 @@ expression: "resolve_derive(r#\"\n let plus_one = x -> x + 1\n - - ~ - kind: Primitive: Int - span: "2:963-966" + span: "2:893-896" name: ~ - - ~ - kind: Primitive: Float - span: "2:970-975" + span: "2:900-905" name: ~ - - ~ - kind: Primitive: Timestamp - span: "2:979-988" + span: "2:909-918" name: ~ - - ~ - kind: Primitive: Date - span: "2:992-996" + span: "2:922-926" name: ~ - span: "2:963-996" + span: "2:893-926" name: ~ alias: b ty: @@ -84,23 +84,23 @@ expression: "resolve_derive(r#\"\n let plus_one = x -> x + 1\n - - ~ - kind: Primitive: Int - span: "2:963-966" + span: "2:893-896" name: ~ - - ~ - kind: Primitive: Float - span: "2:970-975" + span: "2:900-905" name: ~ - - ~ - kind: Primitive: Timestamp - span: "2:979-988" + span: "2:909-918" name: ~ - - ~ - kind: Primitive: Date - span: "2:992-996" + span: "2:922-926" name: ~ - span: "2:963-996" + span: "2:893-926" name: ~ diff --git a/prqlc/prql-compiler/src/semantic/resolver/snapshots/prql_compiler__semantic__resolver__test__functions_pipeline.snap b/prqlc/prql-compiler/src/semantic/resolver/snapshots/prql_compiler__semantic__resolver__test__functions_pipeline.snap index 0c7389d1dadd..eab4c2bacc8a 100644 --- a/prqlc/prql-compiler/src/semantic/resolver/snapshots/prql_compiler__semantic__resolver__test__functions_pipeline.snap +++ b/prqlc/prql-compiler/src/semantic/resolver/snapshots/prql_compiler__semantic__resolver__test__functions_pipeline.snap @@ -13,9 +13,9 @@ expression: "resolve_derive(r#\"\n from a\n derive one = ( kind: Array: kind: Any - span: "2:2069-2076" + span: "2:1929-1936" name: ~ - span: "2:2068-2077" + span: "2:1928-1937" name: array alias: one ty: @@ -24,13 +24,13 @@ expression: "resolve_derive(r#\"\n from a\n derive one = ( - - ~ - kind: Primitive: Int - span: "2:4300-4303" + span: "2:4160-4163" name: ~ - - ~ - kind: Primitive: Float - span: "2:4307-4312" + span: "2:4167-4172" name: ~ - span: "2:4300-4312" + span: "2:4160-4172" name: ~ diff --git a/prqlc/prql-compiler/src/semantic/resolver/snapshots/prql_compiler__semantic__resolver__test__named_args.snap b/prqlc/prql-compiler/src/semantic/resolver/snapshots/prql_compiler__semantic__resolver__test__named_args.snap index 1d163448229b..11f317179792 100644 --- a/prqlc/prql-compiler/src/semantic/resolver/snapshots/prql_compiler__semantic__resolver__test__named_args.snap +++ b/prqlc/prql-compiler/src/semantic/resolver/snapshots/prql_compiler__semantic__resolver__test__named_args.snap @@ -9,31 +9,6 @@ expression: "resolve_derive(r#\"\n let add_one = x to:1 -> x + to\n\n - this - foo_table - bar - ty: - kind: - Union: - - - ~ - - kind: - Primitive: Int - span: "2:883-886" - name: ~ - - - ~ - - kind: - Primitive: Float - span: "2:890-895" - name: ~ - - - ~ - - kind: - Primitive: Timestamp - span: "2:899-908" - name: ~ - - - ~ - - kind: - Primitive: Date - span: "2:912-916" - name: ~ - span: "2:883-916" - name: ~ - Literal: Integer: 3 ty: @@ -48,24 +23,24 @@ expression: "resolve_derive(r#\"\n let add_one = x to:1 -> x + to\n\n - - ~ - kind: Primitive: Int - span: "2:963-966" + span: "2:893-896" name: ~ - - ~ - kind: Primitive: Float - span: "2:970-975" + span: "2:900-905" name: ~ - - ~ - kind: Primitive: Timestamp - span: "2:979-988" + span: "2:909-918" name: ~ - - ~ - kind: Primitive: Date - span: "2:992-996" + span: "2:922-926" name: ~ - span: "2:963-996" + span: "2:893-926" name: ~ - RqOperator: name: std.add @@ -74,31 +49,6 @@ expression: "resolve_derive(r#\"\n let add_one = x to:1 -> x + to\n\n - this - foo_table - bar - ty: - kind: - Union: - - - ~ - - kind: - Primitive: Int - span: "2:883-886" - name: ~ - - - ~ - - kind: - Primitive: Float - span: "2:890-895" - name: ~ - - - ~ - - kind: - Primitive: Timestamp - span: "2:899-908" - name: ~ - - - ~ - - kind: - Primitive: Date - span: "2:912-916" - name: ~ - span: "2:883-916" - name: ~ - Literal: Integer: 1 ty: @@ -113,23 +63,23 @@ expression: "resolve_derive(r#\"\n let add_one = x to:1 -> x + to\n\n - - ~ - kind: Primitive: Int - span: "2:963-966" + span: "2:893-896" name: ~ - - ~ - kind: Primitive: Float - span: "2:970-975" + span: "2:900-905" name: ~ - - ~ - kind: Primitive: Timestamp - span: "2:979-988" + span: "2:909-918" name: ~ - - ~ - kind: Primitive: Date - span: "2:992-996" + span: "2:922-926" name: ~ - span: "2:963-996" + span: "2:893-926" name: ~ diff --git a/prqlc/prql-compiler/src/semantic/resolver/snapshots/prql_compiler__semantic__resolver__test__variables_1.snap b/prqlc/prql-compiler/src/semantic/resolver/snapshots/prql_compiler__semantic__resolver__test__variables_1.snap index de994c30991f..0d83f346f5c4 100644 --- a/prqlc/prql-compiler/src/semantic/resolver/snapshots/prql_compiler__semantic__resolver__test__variables_1.snap +++ b/prqlc/prql-compiler/src/semantic/resolver/snapshots/prql_compiler__semantic__resolver__test__variables_1.snap @@ -9,60 +9,10 @@ expression: "resolve_derive(r#\"\n from employees\n derive - this - employees - salary - ty: - kind: - Union: - - - ~ - - kind: - Primitive: Int - span: "2:883-886" - name: ~ - - - ~ - - kind: - Primitive: Float - span: "2:890-895" - name: ~ - - - ~ - - kind: - Primitive: Timestamp - span: "2:899-908" - name: ~ - - - ~ - - kind: - Primitive: Date - span: "2:912-916" - name: ~ - span: "2:883-916" - name: ~ - Ident: - this - employees - payroll_tax - ty: - kind: - Union: - - - ~ - - kind: - Primitive: Int - span: "2:924-927" - name: ~ - - - ~ - - kind: - Primitive: Float - span: "2:931-936" - name: ~ - - - ~ - - kind: - Primitive: Timestamp - span: "2:940-949" - name: ~ - - - ~ - - kind: - Primitive: Date - span: "2:953-957" - name: ~ - span: "2:924-957" - name: ~ alias: gross_salary ty: kind: @@ -70,24 +20,24 @@ expression: "resolve_derive(r#\"\n from employees\n derive - - ~ - kind: Primitive: Int - span: "2:963-966" + span: "2:893-896" name: ~ - - ~ - kind: Primitive: Float - span: "2:970-975" + span: "2:900-905" name: ~ - - ~ - kind: Primitive: Timestamp - span: "2:979-988" + span: "2:909-918" name: ~ - - ~ - kind: Primitive: Date - span: "2:992-996" + span: "2:922-926" name: ~ - span: "2:963-996" + span: "2:893-926" name: ~ - RqOperator: name: std.add @@ -95,60 +45,10 @@ expression: "resolve_derive(r#\"\n from employees\n derive - Ident: - this - gross_salary - ty: - kind: - Union: - - - ~ - - kind: - Primitive: Int - span: "2:883-886" - name: ~ - - - ~ - - kind: - Primitive: Float - span: "2:890-895" - name: ~ - - - ~ - - kind: - Primitive: Timestamp - span: "2:899-908" - name: ~ - - - ~ - - kind: - Primitive: Date - span: "2:912-916" - name: ~ - span: "2:883-916" - name: ~ - Ident: - this - employees - benefits_cost - ty: - kind: - Union: - - - ~ - - kind: - Primitive: Int - span: "2:924-927" - name: ~ - - - ~ - - kind: - Primitive: Float - span: "2:931-936" - name: ~ - - - ~ - - kind: - Primitive: Timestamp - span: "2:940-949" - name: ~ - - - ~ - - kind: - Primitive: Date - span: "2:953-957" - name: ~ - span: "2:924-957" - name: ~ alias: gross_cost ty: kind: @@ -156,23 +56,23 @@ expression: "resolve_derive(r#\"\n from employees\n derive - - ~ - kind: Primitive: Int - span: "2:963-966" + span: "2:893-896" name: ~ - - ~ - kind: Primitive: Float - span: "2:970-975" + span: "2:900-905" name: ~ - - ~ - kind: Primitive: Timestamp - span: "2:979-988" + span: "2:909-918" name: ~ - - ~ - kind: Primitive: Date - span: "2:992-996" + span: "2:922-926" name: ~ - span: "2:963-996" + span: "2:893-926" name: ~ diff --git a/prqlc/prql-compiler/src/semantic/resolver/snapshots/prql_compiler__semantic__resolver__transforms__tests__aggregate_positional_arg-2.snap b/prqlc/prql-compiler/src/semantic/resolver/snapshots/prql_compiler__semantic__resolver__transforms__tests__aggregate_positional_arg-2.snap index 016d7dd3fb71..ffa808facaca 100644 --- a/prqlc/prql-compiler/src/semantic/resolver/snapshots/prql_compiler__semantic__resolver__transforms__tests__aggregate_positional_arg-2.snap +++ b/prqlc/prql-compiler/src/semantic/resolver/snapshots/prql_compiler__semantic__resolver__transforms__tests__aggregate_positional_arg-2.snap @@ -43,9 +43,9 @@ TransformCall: kind: Array: kind: Any - span: "2:2069-2076" + span: "2:1929-1936" name: ~ - span: "2:2068-2077" + span: "2:1928-1937" name: array ty: kind: @@ -53,14 +53,14 @@ TransformCall: - - ~ - kind: Primitive: Float - span: "2:4365-4370" + span: "2:4225-4230" name: ~ - - ~ - kind: Singleton: "Null" - span: "2:4374-4378" + span: "2:4234-4238" name: ~ - span: "2:4365-4378" + span: "2:4225-4238" name: ~ ty: kind: @@ -72,14 +72,14 @@ TransformCall: - - ~ - kind: Primitive: Float - span: "2:4365-4370" + span: "2:4225-4230" name: ~ - - ~ - kind: Singleton: "Null" - span: "2:4374-4378" + span: "2:4234-4238" name: ~ - span: "2:4365-4378" + span: "2:4225-4238" name: ~ span: ~ name: ~ @@ -98,55 +98,55 @@ TransformCall: - - ~ - kind: Primitive: Int - span: "2:2103-2106" + span: "2:1963-1966" name: ~ - - ~ - kind: Primitive: Float - span: "2:2110-2115" + span: "2:1970-1975" name: ~ - - ~ - kind: Primitive: Bool - span: "2:2119-2123" + span: "2:1979-1983" name: ~ - - ~ - kind: Primitive: Text - span: "2:2127-2131" + span: "2:1987-1991" name: ~ - - ~ - kind: Primitive: Date - span: "2:2135-2139" + span: "2:1995-1999" name: ~ - - ~ - kind: Primitive: Time - span: "2:2143-2147" + span: "2:2003-2007" name: ~ - - ~ - kind: Primitive: Timestamp - span: "2:2151-2160" + span: "2:2011-2020" name: ~ - - ~ - kind: Singleton: "Null" - span: "2:2164-2168" + span: "2:2024-2028" name: ~ - span: "2:2103-2168" + span: "2:1963-2028" name: scalar - - ~ - kind: Tuple: - Wildcard: kind: Any - span: "2:2183-2190" + span: "2:2043-2050" name: ~ - span: "2:2182-2193" + span: "2:2042-2053" name: tuple - span: "2:3192-3207" + span: "2:3052-3067" name: ~ ty: kind: @@ -161,55 +161,55 @@ TransformCall: - - ~ - kind: Primitive: Int - span: "2:2103-2106" + span: "2:1963-1966" name: ~ - - ~ - kind: Primitive: Float - span: "2:2110-2115" + span: "2:1970-1975" name: ~ - - ~ - kind: Primitive: Bool - span: "2:2119-2123" + span: "2:1979-1983" name: ~ - - ~ - kind: Primitive: Text - span: "2:2127-2131" + span: "2:1987-1991" name: ~ - - ~ - kind: Primitive: Date - span: "2:2135-2139" + span: "2:1995-1999" name: ~ - - ~ - kind: Primitive: Time - span: "2:2143-2147" + span: "2:2003-2007" name: ~ - - ~ - kind: Primitive: Timestamp - span: "2:2151-2160" + span: "2:2011-2020" name: ~ - - ~ - kind: Singleton: "Null" - span: "2:2164-2168" + span: "2:2024-2028" name: ~ - span: "2:2103-2168" + span: "2:1963-2028" name: scalar - - ~ - kind: Tuple: - Wildcard: kind: Any - span: "2:2183-2190" + span: "2:2043-2050" name: ~ - span: "2:2182-2193" + span: "2:2042-2053" name: tuple - span: "2:3192-3207" + span: "2:3052-3067" name: ~ span: ~ name: ~ @@ -228,55 +228,55 @@ ty: - - ~ - kind: Primitive: Int - span: "2:2103-2106" + span: "2:1963-1966" name: ~ - - ~ - kind: Primitive: Float - span: "2:2110-2115" + span: "2:1970-1975" name: ~ - - ~ - kind: Primitive: Bool - span: "2:2119-2123" + span: "2:1979-1983" name: ~ - - ~ - kind: Primitive: Text - span: "2:2127-2131" + span: "2:1987-1991" name: ~ - - ~ - kind: Primitive: Date - span: "2:2135-2139" + span: "2:1995-1999" name: ~ - - ~ - kind: Primitive: Time - span: "2:2143-2147" + span: "2:2003-2007" name: ~ - - ~ - kind: Primitive: Timestamp - span: "2:2151-2160" + span: "2:2011-2020" name: ~ - - ~ - kind: Singleton: "Null" - span: "2:2164-2168" + span: "2:2024-2028" name: ~ - span: "2:2103-2168" + span: "2:1963-2028" name: scalar - - ~ - kind: Tuple: - Wildcard: kind: Any - span: "2:2183-2190" + span: "2:2043-2050" name: ~ - span: "2:2182-2193" + span: "2:2042-2053" name: tuple - span: "2:3192-3207" + span: "2:3052-3067" name: ~ - Single: - ~ @@ -285,14 +285,14 @@ ty: - - ~ - kind: Primitive: Float - span: "2:4365-4370" + span: "2:4225-4230" name: ~ - - ~ - kind: Singleton: "Null" - span: "2:4374-4378" + span: "2:4234-4238" name: ~ - span: "2:4365-4378" + span: "2:4225-4238" name: ~ span: ~ name: ~ diff --git a/prqlc/prql-compiler/src/semantic/std.prql b/prqlc/prql-compiler/src/semantic/std.prql index b21f98637574..c66efc2214e2 100644 --- a/prqlc/prql-compiler/src/semantic/std.prql +++ b/prqlc/prql-compiler/src/semantic/std.prql @@ -19,8 +19,8 @@ let mul = left right -> internal std.mul let div_i = left right -> internal std.div_i let div_f = left right -> internal std.div_f let mod = left right -> internal std.mod -let add = left right -> internal std.add -let sub = left right -> internal std.sub +let add = left right -> internal std.add +let sub = left right -> internal std.sub let eq = left right -> internal std.eq let ne = left right -> internal std.ne let gt = left right -> internal std.gt diff --git a/prqlc/prql-compiler/tests/integration/error_messages.rs b/prqlc/prql-compiler/tests/integration/error_messages.rs index 030815c616d8..6a36ec070193 100644 --- a/prqlc/prql-compiler/tests/integration/error_messages.rs +++ b/prqlc/prql-compiler/tests/integration/error_messages.rs @@ -169,6 +169,9 @@ fn test_bad_function_type() { } #[test] +#[ignore] +// FIXME: This would be nice to catch those errors again +// See https://github.com/PRQL/prql/issues/3127#issuecomment-1849032396 fn test_basic_type_checking() { assert_display_snapshot!(compile(r#" from foo diff --git a/prqlc/prql-compiler/tests/integration/sql.rs b/prqlc/prql-compiler/tests/integration/sql.rs index 87ef0c355f9c..a72d664c90e6 100644 --- a/prqlc/prql-compiler/tests/integration/sql.rs +++ b/prqlc/prql-compiler/tests/integration/sql.rs @@ -2806,13 +2806,19 @@ fn test_casting() { from x select {a} derive { - c = (a | as int) / 10 + b = (a | as int) + 10, + c = (a | as int) - 10, + d = (a | as float) * 10, + e = (a | as float) / 10, } "###).unwrap(), @r###" SELECT a, - CAST(a AS int) / 10 AS c + CAST(a AS int) + 10 AS b, + CAST(a AS int) - 10 AS c, + CAST(a AS float) * 10 AS d, + CAST(a AS float) / 10 AS e FROM x "###