Skip to content

Commit c4a49b2

Browse files
MarinPostmaaljazerzen
authored andcommitted
feat: Omit table name when only one ident in SELECT (#1094)
1 parent 4816a25 commit c4a49b2

File tree

7 files changed

+72
-45
lines changed

7 files changed

+72
-45
lines changed

prql-compiler/src/ir/mod.rs

+2
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
mod expr;
22
mod id_gen;
33
mod ir_fold;
4+
mod table_counter;
45

56
pub use expr::{Expr, ExprKind, UnOp};
67
pub use id_gen::IdGenerator;
78
pub use ir_fold::*;
9+
pub use table_counter::TableCounter;
810

911
use serde::{Deserialize, Serialize};
1012

prql-compiler/src/ir/table_counter.rs

+27
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
use std::collections::HashSet;
2+
3+
use super::{IrFold, TId, Transform};
4+
5+
/// Folder that counts the number of table referenced in a PRQL query.
6+
#[derive(Debug, Default)]
7+
pub struct TableCounter {
8+
tables: HashSet<TId>,
9+
}
10+
11+
impl TableCounter {
12+
pub fn count(&self) -> usize {
13+
self.tables.len()
14+
}
15+
}
16+
17+
impl IrFold for TableCounter {
18+
fn fold_transforms(&mut self, transforms: Vec<Transform>) -> anyhow::Result<Vec<Transform>> {
19+
for transform in &transforms {
20+
if let Transform::Join { with: tid, .. } | Transform::From(tid) = transform {
21+
self.tables.insert(*tid);
22+
}
23+
}
24+
25+
Ok(transforms)
26+
}
27+
}

prql-compiler/src/lib.rs

+21-35
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,6 @@ mod test {
5959
use insta::{assert_display_snapshot, assert_snapshot};
6060

6161
#[test]
62-
#[ignore]
6362
fn test_stdlib() {
6463
assert_snapshot!(compile(r###"
6564
from employees
@@ -99,7 +98,6 @@ mod test {
9998
}
10099

101100
#[test]
102-
#[ignore]
103101
fn test_precedence() {
104102
assert_display_snapshot!((compile(r###"
105103
from x
@@ -257,7 +255,6 @@ mod test {
257255
}
258256

259257
#[test]
260-
#[ignore]
261258
fn test_quoting() {
262259
// GH-#822
263260
assert_display_snapshot!((compile(r###"
@@ -270,7 +267,7 @@ join some_schema.tablename [~id]
270267
"###).unwrap()), @r###"
271268
WITH "UPPER" AS (
272269
SELECT
273-
lower.*
270+
*
274271
FROM
275272
lower
276273
)
@@ -319,7 +316,7 @@ select `first name`
319316

320317
assert_display_snapshot!((compile(query).unwrap()), @r###"
321318
SELECT
322-
invoices.*
319+
*
323320
FROM
324321
invoices
325322
ORDER BY
@@ -351,7 +348,6 @@ select `first name`
351348
}
352349

353350
#[test]
354-
#[ignore]
355351
fn test_ranges() {
356352
let query = r###"
357353
from employees
@@ -360,7 +356,7 @@ select `first name`
360356

361357
assert_display_snapshot!((compile(query).unwrap()), @r###"
362358
SELECT
363-
employees.*
359+
*
364360
FROM
365361
employees
366362
WHERE
@@ -382,7 +378,7 @@ select `first name`
382378

383379
assert_display_snapshot!((compile(query).unwrap()), @r###"
384380
SELECT
385-
events.*
381+
*
386382
FROM
387383
events
388384
WHERE
@@ -392,7 +388,6 @@ select `first name`
392388
}
393389

394390
#[test]
395-
#[ignore]
396391
fn test_interval() {
397392
let query = r###"
398393
from projects
@@ -401,7 +396,7 @@ select `first name`
401396

402397
assert_display_snapshot!((compile(query).unwrap()), @r###"
403398
SELECT
404-
projects.*,
399+
*,
405400
start + INTERVAL 10 DAY AS first_check_in
406401
FROM
407402
projects
@@ -420,7 +415,7 @@ select `first name`
420415
]
421416
"###).unwrap()), @r###"
422417
SELECT
423-
to_do_empty_table.*,
418+
*,
424419
DATE '2011-02-01' AS date,
425420
TIMESTAMP '2011-02-01T10:00' AS timestamp,
426421
TIME '14:00' AS time
@@ -644,7 +639,6 @@ select `first name`
644639
}
645640

646641
#[test]
647-
#[ignore]
648642
fn test_name_resolving() {
649643
let query = r###"
650644
from numbers
@@ -695,7 +689,6 @@ select `first name`
695689
}
696690

697691
#[test]
698-
#[ignore]
699692
fn test_filter() {
700693
// https://github.com/prql/prql/issues/469
701694
let query = r###"
@@ -710,7 +703,7 @@ select `first name`
710703
filter age > 25 and age < 40
711704
"###).unwrap()), @r###"
712705
SELECT
713-
employees.*
706+
*
714707
FROM
715708
employees
716709
WHERE
@@ -724,7 +717,7 @@ select `first name`
724717
filter age < 40
725718
"###).unwrap()), @r###"
726719
SELECT
727-
employees.*
720+
*
728721
FROM
729722
employees
730723
WHERE
@@ -734,7 +727,6 @@ select `first name`
734727
}
735728

736729
#[test]
737-
#[ignore]
738730
fn test_nulls() {
739731
assert_display_snapshot!((compile(r###"
740732
from employees
@@ -752,7 +744,7 @@ select `first name`
752744
derive amount = amount + 2 ?? 3 * 5
753745
"###).unwrap()), @r###"
754746
SELECT
755-
employees.*,
747+
*,
756748
COALESCE(amount + 2, 3 * 5) AS amount
757749
FROM
758750
employees
@@ -764,7 +756,7 @@ select `first name`
764756
filter first_name == null and null == last_name
765757
"###).unwrap()), @r###"
766758
SELECT
767-
employees.*
759+
*
768760
FROM
769761
employees
770762
WHERE
@@ -778,7 +770,7 @@ select `first name`
778770
filter first_name != null and null != last_name
779771
"###).unwrap()), @r###"
780772
SELECT
781-
employees.*
773+
*
782774
FROM
783775
employees
784776
WHERE
@@ -795,7 +787,7 @@ select `first name`
795787
take ..10
796788
"###).unwrap()), @r###"
797789
SELECT
798-
employees.*
790+
*
799791
FROM
800792
employees
801793
LIMIT
@@ -807,7 +799,7 @@ select `first name`
807799
take 5..10
808800
"###).unwrap()), @r###"
809801
SELECT
810-
employees.*
802+
*
811803
FROM
812804
employees
813805
LIMIT
@@ -819,7 +811,7 @@ select `first name`
819811
take 5..
820812
"###).unwrap()), @r###"
821813
SELECT
822-
employees.*
814+
*
823815
FROM
824816
employees OFFSET 4
825817
"###);
@@ -829,7 +821,7 @@ select `first name`
829821
take 5..5
830822
"###).unwrap()), @r###"
831823
SELECT
832-
employees.*
824+
*
833825
FROM
834826
employees
835827
LIMIT
@@ -843,7 +835,7 @@ select `first name`
843835
take 1..5
844836
"###).unwrap()), @r###"
845837
SELECT
846-
employees.*
838+
*
847839
FROM
848840
employees
849841
LIMIT
@@ -983,7 +975,6 @@ select `first name`
983975
}
984976

985977
#[test]
986-
#[ignore]
987978
fn test_dbt_query() {
988979
assert_display_snapshot!((compile(r###"
989980
from {{ ref('stg_orders') }}
@@ -1049,7 +1040,6 @@ select [mng_name, managers.gender, salary_avg, salary_sd]"#;
10491040
}
10501041

10511042
#[test]
1052-
#[ignore]
10531043
fn test_f_string() {
10541044
let query = r###"
10551045
from employees
@@ -1114,7 +1104,6 @@ select [mng_name, managers.gender, salary_avg, salary_sd]"#;
11141104
}
11151105

11161106
#[test]
1117-
#[ignore]
11181107
fn test_sql_of_ast_2() {
11191108
let query = r###"
11201109
from employees
@@ -1134,7 +1123,6 @@ select [mng_name, managers.gender, salary_avg, salary_sd]"#;
11341123
}
11351124

11361125
#[test]
1137-
#[ignore]
11381126
fn test_prql_to_sql_1() {
11391127
let query = r#"
11401128
from employees
@@ -1421,7 +1409,6 @@ take 20
14211409
}
14221410

14231411
#[test]
1424-
#[ignore]
14251412
fn test_dialects() {
14261413
// Generic
14271414
let query = r###"
@@ -1487,15 +1474,14 @@ take 20
14871474

14881475
assert_display_snapshot!((compile(query).unwrap()), @r###"
14891476
SELECT
1490-
github_json.*,
1491-
github_json.`event.type` AS event_type_dotted
1477+
*,
1478+
`event.type` AS event_type_dotted
14921479
FROM
14931480
github_json
14941481
"###);
14951482
}
14961483

14971484
#[test]
1498-
#[ignore]
14991485
fn test_ident_escaping() {
15001486
// Generic
15011487
let query = r###"
@@ -1505,7 +1491,7 @@ take 20
15051491

15061492
assert_display_snapshot!((compile(query).unwrap()), @r###"
15071493
SELECT
1508-
"anim""ls".*,
1494+
*,
15091495
"BeeName" AS "čebela",
15101496
"bear's_name" AS medved
15111497
FROM
@@ -1522,7 +1508,7 @@ take 20
15221508

15231509
assert_display_snapshot!((compile(query).unwrap()), @r###"
15241510
SELECT
1525-
`anim"ls`.*,
1511+
*,
15261512
`BeeName` AS `čebela`,
15271513
`bear's_name` AS medved
15281514
FROM
@@ -1541,7 +1527,7 @@ take 20
15411527
assert_display_snapshot!(sql,
15421528
@r###"
15431529
SELECT
1544-
employees.*,
1530+
*,
15451531
true AS always_true
15461532
FROM
15471533
employees

prql-compiler/src/semantic/resolver.rs

-1
Original file line numberDiff line numberDiff line change
@@ -531,7 +531,6 @@ mod test {
531531
}
532532

533533
#[test]
534-
#[ignore]
535534
fn test_func_call_resolve() {
536535
assert_display_snapshot!(compile(r#"
537536
from employees

prql-compiler/src/sql/codegen.rs

+9-6
Original file line numberDiff line numberDiff line change
@@ -415,14 +415,17 @@ pub(super) fn translate_ident(
415415
context: &Context,
416416
) -> Vec<sql_ast::Ident> {
417417
let mut parts = Vec::with_capacity(4);
418-
if let Some(relation) = relation_name {
419-
// Special-case this for BigQuery, Ref #852
420-
if matches!(context.dialect.dialect(), Dialect::BigQuery) {
421-
parts.push(relation);
422-
} else {
423-
parts.extend(relation.split('.').map(|s| s.to_string()));
418+
if !context.omit_ident_prefix || column.is_none() {
419+
if let Some(relation) = relation_name {
420+
// Special-case this for BigQuery, Ref #852
421+
if matches!(context.dialect.dialect(), Dialect::BigQuery) {
422+
parts.push(relation);
423+
} else {
424+
parts.extend(relation.split('.').map(|s| s.to_string()));
425+
}
424426
}
425427
}
428+
426429
parts.extend(column);
427430

428431
parts

0 commit comments

Comments
 (0)