@@ -16073,6 +16073,129 @@ fn test_select_from_first() {
1607316073 }
1607416074}
1607516075
16076+ #[test]
16077+ fn test_select_from_first_with_cte() {
16078+ let dialects = all_dialects_where(|d| d.supports_from_first_select());
16079+ let q = "WITH test AS (FROM t SELECT a) FROM test SELECT 1";
16080+
16081+ let ast = dialects.verified_query(q);
16082+
16083+ let expected = Query {
16084+ with: Some(With {
16085+ with_token: AttachedToken::empty(),
16086+ recursive: false,
16087+ cte_tables: vec![Cte {
16088+ alias: TableAlias {
16089+ explicit: false,
16090+ name: Ident {
16091+ value: "test".to_string(),
16092+ quote_style: None,
16093+ span: Span::empty(),
16094+ },
16095+ columns: vec![],
16096+ },
16097+ query: Box::new(Query {
16098+ with: None,
16099+ body: Box::new(SetExpr::Select(Box::new(Select {
16100+ select_token: AttachedToken::empty(),
16101+ optimizer_hints: vec![],
16102+ distinct: None,
16103+ select_modifiers: None,
16104+ top: None,
16105+ projection: vec![SelectItem::UnnamedExpr(Expr::Identifier(Ident {
16106+ value: "a".to_string(),
16107+ quote_style: None,
16108+ span: Span::empty(),
16109+ }))],
16110+ exclude: None,
16111+ top_before_distinct: false,
16112+ into: None,
16113+ from: vec![TableWithJoins {
16114+ relation: table_from_name(ObjectName::from(vec![Ident {
16115+ value: "t".to_string(),
16116+ quote_style: None,
16117+ span: Span::empty(),
16118+ }])),
16119+ joins: vec![],
16120+ }],
16121+ lateral_views: vec![],
16122+ prewhere: None,
16123+ selection: None,
16124+ group_by: GroupByExpr::Expressions(vec![], vec![]),
16125+ cluster_by: vec![],
16126+ distribute_by: vec![],
16127+ sort_by: vec![],
16128+ having: None,
16129+ named_window: vec![],
16130+ window_before_qualify: false,
16131+ qualify: None,
16132+ value_table_mode: None,
16133+ connect_by: vec![],
16134+ flavor: SelectFlavor::FromFirst,
16135+ }))),
16136+ order_by: None,
16137+ limit_clause: None,
16138+ fetch: None,
16139+ locks: vec![],
16140+ for_clause: None,
16141+ settings: None,
16142+ format_clause: None,
16143+ pipe_operators: vec![],
16144+ }),
16145+ from: None,
16146+ materialized: None,
16147+ closing_paren_token: AttachedToken::empty(),
16148+ }],
16149+ }),
16150+ body: Box::new(SetExpr::Select(Box::new(Select {
16151+ select_token: AttachedToken::empty(),
16152+ optimizer_hints: vec![],
16153+ distinct: None,
16154+ select_modifiers: None,
16155+ top: None,
16156+ projection: vec![SelectItem::UnnamedExpr(Expr::Value(ValueWithSpan {
16157+ value: test_utils::number("1"),
16158+ span: Span::empty(),
16159+ }))],
16160+ exclude: None,
16161+ top_before_distinct: false,
16162+ into: None,
16163+ from: vec![TableWithJoins {
16164+ relation: table_from_name(ObjectName::from(vec![Ident {
16165+ value: "test".to_string(),
16166+ quote_style: None,
16167+ span: Span::empty(),
16168+ }])),
16169+ joins: vec![],
16170+ }],
16171+ lateral_views: vec![],
16172+ prewhere: None,
16173+ selection: None,
16174+ group_by: GroupByExpr::Expressions(vec![], vec![]),
16175+ cluster_by: vec![],
16176+ distribute_by: vec![],
16177+ sort_by: vec![],
16178+ having: None,
16179+ named_window: vec![],
16180+ window_before_qualify: false,
16181+ qualify: None,
16182+ value_table_mode: None,
16183+ connect_by: vec![],
16184+ flavor: SelectFlavor::FromFirst,
16185+ }))),
16186+ order_by: None,
16187+ limit_clause: None,
16188+ fetch: None,
16189+ locks: vec![],
16190+ for_clause: None,
16191+ settings: None,
16192+ format_clause: None,
16193+ pipe_operators: vec![],
16194+ };
16195+ assert_eq!(expected, ast);
16196+ assert_eq!(ast.to_string(), q);
16197+ }
16198+
1607616199#[test]
1607716200fn test_geometric_unary_operators() {
1607816201 // Number of points in path or polygon
0 commit comments