Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
1 change: 1 addition & 0 deletions grammars/CotEditor/PRQL.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ commands:
- beginString: stddev
- beginString: sum
- beginString: read_csv
- beginString: read_json
- beginString: read_parquet
- beginString: all
- beginString: map
Expand Down
1 change: 1 addition & 0 deletions grammars/GtkSourceView/prql.lang
Original file line number Diff line number Diff line change
Expand Up @@ -112,6 +112,7 @@

<context id="file-reading-functions" style-ref="function">
<keyword>read_csv</keyword>
<keyword>read_json</keyword>
<keyword>read_parquet</keyword>
</context>

Expand Down
4 changes: 2 additions & 2 deletions prqlc/bindings/prqlc-python/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -232,15 +232,15 @@ mod test {
fn debug_prql_lineage() {
assert_snapshot!(
debug::prql_lineage(r#"from a | select { beta, gamma }"#).unwrap(),
@r#"{"frames":[["1:9-31",{"columns":[{"Single":{"name":["a","beta"],"target_id":117,"target_name":null}},{"Single":{"name":["a","gamma"],"target_id":118,"target_name":null}}],"inputs":[{"id":115,"name":"a","table":["default_db","a"]}]}]],"nodes":[{"id":115,"kind":"Ident","span":"1:0-6","ident":{"Ident":["default_db","a"]},"parent":120},{"id":117,"kind":"Ident","span":"1:18-22","ident":{"Ident":["this","a","beta"]},"targets":[115],"parent":119},{"id":118,"kind":"Ident","span":"1:24-29","ident":{"Ident":["this","a","gamma"]},"targets":[115],"parent":119},{"id":119,"kind":"Tuple","span":"1:16-31","children":[117,118],"parent":120},{"id":120,"kind":"TransformCall: Select","span":"1:9-31","children":[115,119]}],"ast":{"name":"Project","stmts":[{"VarDef":{"kind":"Main","name":"main","value":{"Pipeline":{"exprs":[{"FuncCall":{"name":{"Ident":["from"],"span":"1:0-4"},"args":[{"Ident":["a"],"span":"1:5-6"}]},"span":"1:0-6"},{"FuncCall":{"name":{"Ident":["select"],"span":"1:9-15"},"args":[{"Tuple":[{"Ident":["beta"],"span":"1:18-22"},{"Ident":["gamma"],"span":"1:24-29"}],"span":"1:16-31"}]},"span":"1:9-31"}]},"span":"1:0-31"}},"span":"1:0-31"}]}}"#
@r#"{"frames":[["1:9-31",{"columns":[{"Single":{"name":["a","beta"],"target_id":118,"target_name":null}},{"Single":{"name":["a","gamma"],"target_id":119,"target_name":null}}],"inputs":[{"id":116,"name":"a","table":["default_db","a"]}]}]],"nodes":[{"id":116,"kind":"Ident","span":"1:0-6","ident":{"Ident":["default_db","a"]},"parent":121},{"id":118,"kind":"Ident","span":"1:18-22","ident":{"Ident":["this","a","beta"]},"targets":[116],"parent":120},{"id":119,"kind":"Ident","span":"1:24-29","ident":{"Ident":["this","a","gamma"]},"targets":[116],"parent":120},{"id":120,"kind":"Tuple","span":"1:16-31","children":[118,119],"parent":121},{"id":121,"kind":"TransformCall: Select","span":"1:9-31","children":[116,120]}],"ast":{"name":"Project","stmts":[{"VarDef":{"kind":"Main","name":"main","value":{"Pipeline":{"exprs":[{"FuncCall":{"name":{"Ident":["from"],"span":"1:0-4"},"args":[{"Ident":["a"],"span":"1:5-6"}]},"span":"1:0-6"},{"FuncCall":{"name":{"Ident":["select"],"span":"1:9-15"},"args":[{"Tuple":[{"Ident":["beta"],"span":"1:18-22"},{"Ident":["gamma"],"span":"1:24-29"}],"span":"1:16-31"}]},"span":"1:9-31"}]},"span":"1:0-31"}},"span":"1:0-31"}]}}"#
);
}

#[test]
fn debug_pl_to_lineage() {
assert_snapshot!(
prql_to_pl(r#"from a | select { beta, gamma }"#).and_then(|x| debug::pl_to_lineage(&x)).unwrap(),
@r#"{"frames":[["1:9-31",{"columns":[{"Single":{"name":["a","beta"],"target_id":117,"target_name":null}},{"Single":{"name":["a","gamma"],"target_id":118,"target_name":null}}],"inputs":[{"id":115,"name":"a","table":["default_db","a"]}]}]],"nodes":[{"id":115,"kind":"Ident","span":"1:0-6","ident":{"Ident":["default_db","a"]},"parent":120},{"id":117,"kind":"Ident","span":"1:18-22","ident":{"Ident":["this","a","beta"]},"targets":[115],"parent":119},{"id":118,"kind":"Ident","span":"1:24-29","ident":{"Ident":["this","a","gamma"]},"targets":[115],"parent":119},{"id":119,"kind":"Tuple","span":"1:16-31","children":[117,118],"parent":120},{"id":120,"kind":"TransformCall: Select","span":"1:9-31","children":[115,119]}],"ast":{"name":"Project","stmts":[{"VarDef":{"kind":"Main","name":"main","value":{"Pipeline":{"exprs":[{"FuncCall":{"name":{"Ident":["from"],"span":"1:0-4"},"args":[{"Ident":["a"],"span":"1:5-6"}]},"span":"1:0-6"},{"FuncCall":{"name":{"Ident":["select"],"span":"1:9-15"},"args":[{"Tuple":[{"Ident":["beta"],"span":"1:18-22"},{"Ident":["gamma"],"span":"1:24-29"}],"span":"1:16-31"}]},"span":"1:9-31"}]},"span":"1:0-31"}},"span":"1:0-31"}]}}"#
@r#"{"frames":[["1:9-31",{"columns":[{"Single":{"name":["a","beta"],"target_id":118,"target_name":null}},{"Single":{"name":["a","gamma"],"target_id":119,"target_name":null}}],"inputs":[{"id":116,"name":"a","table":["default_db","a"]}]}]],"nodes":[{"id":116,"kind":"Ident","span":"1:0-6","ident":{"Ident":["default_db","a"]},"parent":121},{"id":118,"kind":"Ident","span":"1:18-22","ident":{"Ident":["this","a","beta"]},"targets":[116],"parent":120},{"id":119,"kind":"Ident","span":"1:24-29","ident":{"Ident":["this","a","gamma"]},"targets":[116],"parent":120},{"id":120,"kind":"Tuple","span":"1:16-31","children":[118,119],"parent":121},{"id":121,"kind":"TransformCall: Select","span":"1:9-31","children":[116,120]}],"ast":{"name":"Project","stmts":[{"VarDef":{"kind":"Main","name":"main","value":{"Pipeline":{"exprs":[{"FuncCall":{"name":{"Ident":["from"],"span":"1:0-4"},"args":[{"Ident":["a"],"span":"1:5-6"}]},"span":"1:0-6"},{"FuncCall":{"name":{"Ident":["select"],"span":"1:9-15"},"args":[{"Tuple":[{"Ident":["beta"],"span":"1:18-22"},{"Ident":["gamma"],"span":"1:24-29"}],"span":"1:16-31"}]},"span":"1:9-31"}]},"span":"1:0-31"}},"span":"1:0-31"}]}}"#
);
}
}
34 changes: 17 additions & 17 deletions prqlc/prqlc/src/cli/test.rs
Original file line number Diff line number Diff line change
Expand Up @@ -434,61 +434,61 @@ fn debug() {
name:
- tracks
- artist
target_id: 117
target_id: 118
target_name: null
- !Single
name:
- tracks
- album
target_id: 118
target_id: 119
target_name: null
inputs:
- id: 115
- id: 116
name: tracks
table:
- default_db
- tracks
nodes:
- id: 115
- id: 116
kind: Ident
span: 1:0-11
ident: !Ident
- default_db
- tracks
parent: 120
- id: 117
parent: 121
- id: 118
kind: Ident
span: 1:22-28
ident: !Ident
- this
- tracks
- artist
targets:
- 115
parent: 119
- id: 118
- 116
parent: 120
- id: 119
kind: Ident
span: 1:30-35
ident: !Ident
- this
- tracks
- album
targets:
- 115
parent: 119
- id: 119
- 116
parent: 120
- id: 120
kind: Tuple
span: 1:21-36
children:
- 117
- 118
parent: 120
- id: 120
- 119
parent: 121
- id: 121
kind: 'TransformCall: Select'
span: 1:14-36
children:
- 115
- 119
- 116
- 120
ast:
name: Project
stmts:
Expand Down
Original file line number Diff line number Diff line change
@@ -1,28 +1,27 @@
---
source: prqlc/prqlc/src/semantic/resolver/mod.rs
assertion_line: 234
expression: final_lineage
---
columns:
- Single:
name:
- employees
- name
target_id: 131
target_id: 132
target_name: ~
- Single:
name:
- employees
- salary
target_id: 132
target_id: 133
target_name: ~
inputs:
- id: 129
- id: 130
name: employees
table:
- default_db
- employees
- id: 118
- id: 119
name: managers
table:
- default_db
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,18 +4,18 @@ expression: "resolve_lineage(r#\"\n from table_1\n join cu
---
columns:
- All:
input_id: 116
input_id: 117
except: []
- All:
input_id: 113
input_id: 114
except: []
inputs:
- id: 116
- id: 117
name: table_1
table:
- default_db
- table_1
- id: 113
- id: 114
name: customers
table:
- default_db
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,26 +7,26 @@ columns:
name:
- e
- emp_no
target_id: 126
target_id: 127
target_name: ~
- Single:
name:
- e
- gender
target_id: 127
target_id: 128
target_name: ~
- Single:
name:
- emp_salary
target_id: 145
target_id: 146
target_name: ~
inputs:
- id: 119
- id: 120
name: e
table:
- default_db
- employees
- id: 116
- id: 117
name: salaries
table:
- default_db
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,26 +7,26 @@ columns:
name:
- orders
- customer_no
target_id: 120
target_id: 121
target_name: ~
- Single:
name:
- orders
- gross
target_id: 121
target_id: 122
target_name: ~
- Single:
name:
- orders
- tax
target_id: 122
target_id: 123
target_name: ~
- Single:
name: ~
target_id: 123
target_id: 124
target_name: ~
inputs:
- id: 118
- id: 119
name: orders
table:
- default_db
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,10 +21,10 @@ TransformCall:
lineage:
columns:
- All:
input_id: 115
input_id: 116
except: []
inputs:
- id: 115
- id: 116
name: c_invoice
table:
- default_db
Expand Down Expand Up @@ -94,14 +94,14 @@ lineage:
name:
- c_invoice
- issued_at
target_id: 117
target_id: 118
target_name: ~
- Single:
name: ~
target_id: 133
target_id: 134
target_name: ~
inputs:
- id: 115
- id: 116
name: c_invoice
table:
- default_db
Expand Down
1 change: 1 addition & 0 deletions prqlc/prqlc/src/semantic/std.prql
Original file line number Diff line number Diff line change
Expand Up @@ -237,6 +237,7 @@ let read_parquet = func
union_by_name <bool>:false
-> <relation> internal std.read_parquet
let read_csv = source<text> -> <relation> internal std.read_csv
let read_json = source<text> -> <relation> internal std.read_json


## PRQL compiler functions
Expand Down
5 changes: 3 additions & 2 deletions prqlc/prqlc/src/sql/std.sql.prql
Original file line number Diff line number Diff line change
Expand Up @@ -123,6 +123,7 @@ module text {
# Source-reading functions, primarily for DuckDB
let read_parquet = binary_as_string file_row_number hive_partitioning union_by_name source -> s"read_parquet({source:0})"
let read_csv = source -> s"read_csv({source:0})"
let read_json = source -> s"read_json({source:0})"

@{binding_strength=11}
let mul = l r -> null
Expand Down Expand Up @@ -218,7 +219,7 @@ module clickhouse {
let regex_search = text pattern -> s"match({text:0}, {pattern:0})"

let read_csv = source -> s"file({source:0}, 'CSV')"

let read_json = source -> s"file({source:0}, 'Json')"
let read_parquet = source -> s"file({source:0}, 'Parquet')"
}

Expand All @@ -244,7 +245,7 @@ module duckdb {
let regex_search = text pattern -> s"REGEXP_MATCHES({text:0}, {pattern:0})"

let read_csv = source -> s"read_csv_auto({source:0})"

let read_json = source -> s"read_json_auto({source:0})"
let read_parquet = binary_as_string file_row_number hive_partitioning union_by_name source -> s"read_parquet({source:0}, binary_as_string={binary_as_string:0}, file_row_number={file_row_number:0}, hive_partitioning={hive_partitioning:0}, union_by_name={union_by_name:0})"
}

Expand Down
7 changes: 7 additions & 0 deletions prqlc/prqlc/tests/integration/data/chinook/media_types.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
[
{ "media_type_id": 1, "name": "MPEG audio file" },
{ "media_type_id": 2, "name": "Protected AAC audio file" },
{ "media_type_id": 3, "name": "Protected MPEG-4 video file" },
{ "media_type_id": 4, "name": "Purchased AAC audio file" },
{ "media_type_id": 5, "name": "AAC audio file" }
]
1 change: 1 addition & 0 deletions prqlc/prqlc/tests/integration/queries/read_csv.prql
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,5 @@
# postgres:skip
# mysql:skip
from (read_csv "data_file_root/media_types.csv")
append (read_json "data_file_root/media_types.json")
sort media_type_id
Original file line number Diff line number Diff line change
@@ -1,17 +1,29 @@
---
source: prqlc/prqlc/tests/integration/queries.rs
expression: "# sqlite:skip\n# postgres:skip\n# mysql:skip\nfrom (read_csv \"data_file_root/media_types.csv\")\nsort media_type_id\n"
expression: "# sqlite:skip\n# postgres:skip\n# mysql:skip\nfrom (read_csv \"data_file_root/media_types.csv\")\nappend (read_json \"data_file_root/media_types.json\")\nsort media_type_id\n"
input_file: prqlc/prqlc/tests/integration/queries/read_csv.prql
---
WITH table_0 AS (
SELECT
*
FROM
read_csv('data_file_root/media_types.csv')
),
table_2 AS (
SELECT
*
FROM
table_0
UNION
ALL
SELECT
*
FROM
read_json('data_file_root/media_types.json')
)
SELECT
*
FROM
table_0
table_2
ORDER BY
media_type_id
Loading