Skip to content
Merged
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":119,"target_name":null}},{"Single":{"name":["a","gamma"],"target_id":120,"target_name":null}}],"inputs":[{"id":117,"name":"a","table":["default_db","a"]}]}]],"nodes":[{"id":117,"kind":"Ident","span":"1:0-6","ident":{"Ident":["default_db","a"]},"parent":122},{"id":119,"kind":"Ident","span":"1:18-22","ident":{"Ident":["this","a","beta"]},"targets":[117],"parent":121},{"id":120,"kind":"Ident","span":"1:24-29","ident":{"Ident":["this","a","gamma"]},"targets":[117],"parent":121},{"id":121,"kind":"Tuple","span":"1:16-31","children":[119,120],"parent":122},{"id":122,"kind":"TransformCall: Select","span":"1:9-31","children":[117,121]}],"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":120,"target_name":null}},{"Single":{"name":["a","gamma"],"target_id":121,"target_name":null}}],"inputs":[{"id":118,"name":"a","table":["default_db","a"]}]}]],"nodes":[{"id":118,"kind":"Ident","span":"1:0-6","ident":{"Ident":["default_db","a"]},"parent":123},{"id":120,"kind":"Ident","span":"1:18-22","ident":{"Ident":["this","a","beta"]},"targets":[118],"parent":122},{"id":121,"kind":"Ident","span":"1:24-29","ident":{"Ident":["this","a","gamma"]},"targets":[118],"parent":122},{"id":122,"kind":"Tuple","span":"1:16-31","children":[120,121],"parent":123},{"id":123,"kind":"TransformCall: Select","span":"1:9-31","children":[118,122]}],"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":119,"target_name":null}},{"Single":{"name":["a","gamma"],"target_id":120,"target_name":null}}],"inputs":[{"id":117,"name":"a","table":["default_db","a"]}]}]],"nodes":[{"id":117,"kind":"Ident","span":"1:0-6","ident":{"Ident":["default_db","a"]},"parent":122},{"id":119,"kind":"Ident","span":"1:18-22","ident":{"Ident":["this","a","beta"]},"targets":[117],"parent":121},{"id":120,"kind":"Ident","span":"1:24-29","ident":{"Ident":["this","a","gamma"]},"targets":[117],"parent":121},{"id":121,"kind":"Tuple","span":"1:16-31","children":[119,120],"parent":122},{"id":122,"kind":"TransformCall: Select","span":"1:9-31","children":[117,121]}],"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":120,"target_name":null}},{"Single":{"name":["a","gamma"],"target_id":121,"target_name":null}}],"inputs":[{"id":118,"name":"a","table":["default_db","a"]}]}]],"nodes":[{"id":118,"kind":"Ident","span":"1:0-6","ident":{"Ident":["default_db","a"]},"parent":123},{"id":120,"kind":"Ident","span":"1:18-22","ident":{"Ident":["this","a","beta"]},"targets":[118],"parent":122},{"id":121,"kind":"Ident","span":"1:24-29","ident":{"Ident":["this","a","gamma"]},"targets":[118],"parent":122},{"id":122,"kind":"Tuple","span":"1:16-31","children":[120,121],"parent":123},{"id":123,"kind":"TransformCall: Select","span":"1:9-31","children":[118,122]}],"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: 119
target_id: 120
target_name: null
- !Single
name:
- tracks
- album
target_id: 120
target_id: 121
target_name: null
inputs:
- id: 117
- id: 118
name: tracks
table:
- default_db
- tracks
nodes:
- id: 117
- id: 118
kind: Ident
span: 1:0-11
ident: !Ident
- default_db
- tracks
parent: 122
- id: 119
parent: 123
- id: 120
kind: Ident
span: 1:22-28
ident: !Ident
- this
- tracks
- artist
targets:
- 117
parent: 121
- id: 120
- 118
parent: 122
- id: 121
kind: Ident
span: 1:30-35
ident: !Ident
- this
- tracks
- album
targets:
- 117
parent: 121
- id: 121
- 118
parent: 122
- id: 122
kind: Tuple
span: 1:21-36
children:
- 119
- 120
parent: 122
- id: 122
- 121
parent: 123
- id: 123
kind: 'TransformCall: Select'
span: 1:14-36
children:
- 117
- 121
- 118
- 122
ast:
name: Project
stmts:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,21 +7,21 @@ columns:
name:
- employees
- name
target_id: 133
target_id: 134
target_name: ~
- Single:
name:
- employees
- salary
target_id: 134
target_id: 135
target_name: ~
inputs:
- id: 131
- id: 132
name: employees
table:
- default_db
- employees
- id: 120
- id: 121
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: 118
input_id: 119
except: []
- All:
input_id: 115
input_id: 116
except: []
inputs:
- id: 118
- id: 119
name: table_1
table:
- default_db
- table_1
- id: 115
- id: 116
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: 128
target_id: 129
target_name: ~
- Single:
name:
- e
- gender
target_id: 129
target_id: 130
target_name: ~
- Single:
name:
- emp_salary
target_id: 147
target_id: 148
target_name: ~
inputs:
- id: 121
- id: 122
name: e
table:
- default_db
- employees
- id: 118
- id: 119
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: 122
target_id: 123
target_name: ~
- Single:
name:
- orders
- gross
target_id: 123
target_id: 124
target_name: ~
- Single:
name:
- orders
- tax
target_id: 124
target_id: 125
target_name: ~
- Single:
name: ~
target_id: 125
target_id: 126
target_name: ~
inputs:
- id: 120
- id: 121
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: 117
input_id: 118
except: []
inputs:
- id: 117
- id: 118
name: c_invoice
table:
- default_db
Expand Down Expand Up @@ -94,14 +94,14 @@ lineage:
name:
- c_invoice
- issued_at
target_id: 119
target_id: 120
target_name: ~
- Single:
name: ~
target_id: 135
target_id: 136
target_name: ~
inputs:
- id: 117
- id: 118
name: c_invoice
table:
- default_db
Expand Down
3 changes: 3 additions & 0 deletions prqlc/prqlc/src/semantic/std.prql
Original file line number Diff line number Diff line change
Expand Up @@ -224,7 +224,10 @@ module text {
}

## Date functions

module date {
# Returns the current date and time as a timestamp.
let now = -> <timestamp> internal std.date.now
let to_text = format<text> column -> <text> internal std.date.to_text
let diff = `noresolve.unit` start end -> <int> internal std.date.diff
}
Expand Down
9 changes: 9 additions & 0 deletions prqlc/prqlc/src/sql/std.sql.prql
Original file line number Diff line number Diff line change
Expand Up @@ -130,6 +130,9 @@ module date {
# Snowflake: https://docs.snowflake.com/en/sql-reference/functions/datediff
# Redshift: https://docs.aws.amazon.com/redshift/latest/dg/r_DATEDIFF_function.html
let diff = unit start end -> s"DATEDIFF({unit:0}, {start:0}, {end:0})"

# CURRENT_TIMESTAMP is ANSI SQL standard; dialects may override.
let now = -> s"CURRENT_TIMESTAMP"
}

# Source-reading functions, primarily for DuckDB
Expand Down Expand Up @@ -215,6 +218,8 @@ module bigquery {
let to_text = format column -> s"FORMAT_TIMESTAMP({format:0}, CAST({column:0} AS TIMESTAMP))"
# https://cloud.google.com/bigquery/docs/reference/standard-sql/date_functions#date_diff
let diff = unit start end -> s"DATE_DIFF({end:0}, {start:0}, {unit:0})"
# BigQuery requires parentheses for CURRENT_TIMESTAMP
let now = -> s"CURRENT_TIMESTAMP()"
}

let regex_search = text pattern -> s"REGEXP_CONTAINS({text:0}, {pattern:0})"
Expand All @@ -234,6 +239,8 @@ module clickhouse {
let to_text = format column -> s"formatDateTimeInJodaSyntax({column:0}, {format:0})"
# https://clickhouse.com/docs/en/sql-reference/functions/date-time-functions#dateDiff
let diff = unit start end -> s"dateDiff('{unit:0}', {start:0}, {end:0})"
# Clickhouse uses now() for current timestamp
let now = -> s"now()"
}

let regex_search = text pattern -> s"match({text:0}, {pattern:0})"
Expand Down Expand Up @@ -314,6 +321,8 @@ module mysql {
let to_text = format column -> s"DATE_FORMAT({column:0}, {format:0})"
# https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html#function_timestampdiff
let diff = unit start end -> s"TIMESTAMPDIFF({unit:0}, {start:0}, {end:0})"
# MySQL uses NOW() function
let now = -> s"NOW()"
}

# 'c' for case-sensitive
Expand Down
Loading
Loading