Skip to content

Commit cb385db

Browse files
MarinPostmaaljazerzen
authored andcommitted
feat: Omit table name when only one ident in SELECT (#1094)
1 parent 48a9ea9 commit cb385db

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
@@ -350,7 +347,6 @@ select `first name`
350347
}
351348

352349
#[test]
353-
#[ignore]
354350
fn test_ranges() {
355351
let query = r###"
356352
from employees
@@ -359,7 +355,7 @@ select `first name`
359355

360356
assert_display_snapshot!((compile(query).unwrap()), @r###"
361357
SELECT
362-
employees.*
358+
*
363359
FROM
364360
employees
365361
WHERE
@@ -381,7 +377,7 @@ select `first name`
381377

382378
assert_display_snapshot!((compile(query).unwrap()), @r###"
383379
SELECT
384-
events.*
380+
*
385381
FROM
386382
events
387383
WHERE
@@ -391,7 +387,6 @@ select `first name`
391387
}
392388

393389
#[test]
394-
#[ignore]
395390
fn test_interval() {
396391
let query = r###"
397392
from projects
@@ -400,7 +395,7 @@ select `first name`
400395

401396
assert_display_snapshot!((compile(query).unwrap()), @r###"
402397
SELECT
403-
projects.*,
398+
*,
404399
start + INTERVAL 10 DAY AS first_check_in
405400
FROM
406401
projects
@@ -419,7 +414,7 @@ select `first name`
419414
]
420415
"###).unwrap()), @r###"
421416
SELECT
422-
to_do_empty_table.*,
417+
*,
423418
DATE '2011-02-01' AS date,
424419
TIMESTAMP '2011-02-01T10:00' AS timestamp,
425420
TIME '14:00' AS time
@@ -643,7 +638,6 @@ select `first name`
643638
}
644639

645640
#[test]
646-
#[ignore]
647641
fn test_name_resolving() {
648642
let query = r###"
649643
from numbers
@@ -694,7 +688,6 @@ select `first name`
694688
}
695689

696690
#[test]
697-
#[ignore]
698691
fn test_filter() {
699692
// https://github.com/prql/prql/issues/469
700693
let query = r###"
@@ -709,7 +702,7 @@ select `first name`
709702
filter age > 25 and age < 40
710703
"###).unwrap()), @r###"
711704
SELECT
712-
employees.*
705+
*
713706
FROM
714707
employees
715708
WHERE
@@ -723,7 +716,7 @@ select `first name`
723716
filter age < 40
724717
"###).unwrap()), @r###"
725718
SELECT
726-
employees.*
719+
*
727720
FROM
728721
employees
729722
WHERE
@@ -733,7 +726,6 @@ select `first name`
733726
}
734727

735728
#[test]
736-
#[ignore]
737729
fn test_nulls() {
738730
assert_display_snapshot!((compile(r###"
739731
from employees
@@ -751,7 +743,7 @@ select `first name`
751743
derive amount = amount + 2 ?? 3 * 5
752744
"###).unwrap()), @r###"
753745
SELECT
754-
employees.*,
746+
*,
755747
COALESCE(amount + 2, 3 * 5) AS amount
756748
FROM
757749
employees
@@ -763,7 +755,7 @@ select `first name`
763755
filter first_name == null and null == last_name
764756
"###).unwrap()), @r###"
765757
SELECT
766-
employees.*
758+
*
767759
FROM
768760
employees
769761
WHERE
@@ -777,7 +769,7 @@ select `first name`
777769
filter first_name != null and null != last_name
778770
"###).unwrap()), @r###"
779771
SELECT
780-
employees.*
772+
*
781773
FROM
782774
employees
783775
WHERE
@@ -794,7 +786,7 @@ select `first name`
794786
take ..10
795787
"###).unwrap()), @r###"
796788
SELECT
797-
employees.*
789+
*
798790
FROM
799791
employees
800792
LIMIT
@@ -806,7 +798,7 @@ select `first name`
806798
take 5..10
807799
"###).unwrap()), @r###"
808800
SELECT
809-
employees.*
801+
*
810802
FROM
811803
employees
812804
LIMIT
@@ -818,7 +810,7 @@ select `first name`
818810
take 5..
819811
"###).unwrap()), @r###"
820812
SELECT
821-
employees.*
813+
*
822814
FROM
823815
employees OFFSET 4
824816
"###);
@@ -828,7 +820,7 @@ select `first name`
828820
take 5..5
829821
"###).unwrap()), @r###"
830822
SELECT
831-
employees.*
823+
*
832824
FROM
833825
employees
834826
LIMIT
@@ -842,7 +834,7 @@ select `first name`
842834
take 1..5
843835
"###).unwrap()), @r###"
844836
SELECT
845-
employees.*
837+
*
846838
FROM
847839
employees
848840
LIMIT
@@ -982,7 +974,6 @@ select `first name`
982974
}
983975

984976
#[test]
985-
#[ignore]
986977
fn test_dbt_query() {
987978
assert_display_snapshot!((compile(r###"
988979
from {{ ref('stg_orders') }}
@@ -1048,7 +1039,6 @@ select [mng_name, managers.gender, salary_avg, salary_sd]"#;
10481039
}
10491040

10501041
#[test]
1051-
#[ignore]
10521042
fn test_f_string() {
10531043
let query = r###"
10541044
from employees
@@ -1113,7 +1103,6 @@ select [mng_name, managers.gender, salary_avg, salary_sd]"#;
11131103
}
11141104

11151105
#[test]
1116-
#[ignore]
11171106
fn test_sql_of_ast_2() {
11181107
let query = r###"
11191108
from employees
@@ -1133,7 +1122,6 @@ select [mng_name, managers.gender, salary_avg, salary_sd]"#;
11331122
}
11341123

11351124
#[test]
1136-
#[ignore]
11371125
fn test_prql_to_sql_1() {
11381126
let query = r#"
11391127
from employees
@@ -1420,7 +1408,6 @@ take 20
14201408
}
14211409

14221410
#[test]
1423-
#[ignore]
14241411
fn test_dialects() {
14251412
// Generic
14261413
let query = r###"
@@ -1486,15 +1473,14 @@ take 20
14861473

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

14961483
#[test]
1497-
#[ignore]
14981484
fn test_ident_escaping() {
14991485
// Generic
15001486
let query = r###"
@@ -1504,7 +1490,7 @@ take 20
15041490

15051491
assert_display_snapshot!((compile(query).unwrap()), @r###"
15061492
SELECT
1507-
"anim""ls".*,
1493+
*,
15081494
"BeeName" AS "čebela",
15091495
"bear's_name" AS medved
15101496
FROM
@@ -1521,7 +1507,7 @@ take 20
15211507

15221508
assert_display_snapshot!((compile(query).unwrap()), @r###"
15231509
SELECT
1524-
`anim"ls`.*,
1510+
*,
15251511
`BeeName` AS `čebela`,
15261512
`bear's_name` AS medved
15271513
FROM
@@ -1540,7 +1526,7 @@ take 20
15401526
assert_display_snapshot!(sql,
15411527
@r###"
15421528
SELECT
1543-
employees.*,
1529+
*,
15441530
true AS always_true
15451531
FROM
15461532
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)