@@ -12658,20 +12658,21 @@ fn parse_connect_by() {
1265812658 window_before_qualify: false,
1265912659 value_table_mode: None,
1266012660 connect_by: Some(ConnectBy {
12661- condition: Expr::BinaryOp {
12661+ condition: Some( Expr::BinaryOp {
1266212662 left: Box::new(Expr::Identifier(Ident::new("title"))),
1266312663 op: BinaryOperator::Eq,
1266412664 right: Box::new(Expr::Value(
1266512665 Value::SingleQuotedString("president".to_owned()).with_empty_span(),
1266612666 )),
12667- },
12667+ }) ,
1266812668 relationships: vec![Expr::BinaryOp {
1266912669 left: Box::new(Expr::Identifier(Ident::new("manager_id"))),
1267012670 op: BinaryOperator::Eq,
1267112671 right: Box::new(Expr::Prior(Box::new(Expr::Identifier(Ident::new(
1267212672 "employee_id",
1267312673 ))))),
1267412674 }],
12675+ nocycle: false,
1267512676 }),
1267612677 flavor: SelectFlavor::Standard,
1267712678 };
@@ -12745,20 +12746,21 @@ fn parse_connect_by() {
1274512746 window_before_qualify: false,
1274612747 value_table_mode: None,
1274712748 connect_by: Some(ConnectBy {
12748- condition: Expr::BinaryOp {
12749+ condition: Some( Expr::BinaryOp {
1274912750 left: Box::new(Expr::Identifier(Ident::new("title"))),
1275012751 op: BinaryOperator::Eq,
1275112752 right: Box::new(Expr::Value(
1275212753 (Value::SingleQuotedString("president".to_owned(),)).with_empty_span()
1275312754 )),
12754- },
12755+ }) ,
1275512756 relationships: vec![Expr::BinaryOp {
1275612757 left: Box::new(Expr::Identifier(Ident::new("manager_id"))),
1275712758 op: BinaryOperator::Eq,
1275812759 right: Box::new(Expr::Prior(Box::new(Expr::Identifier(Ident::new(
1275912760 "employee_id",
1276012761 ))))),
1276112762 }],
12763+ nocycle: false,
1276212764 }),
1276312765 flavor: SelectFlavor::Standard,
1276412766 }
@@ -12785,6 +12787,51 @@ fn parse_connect_by() {
1278512787 "prior"
1278612788 )))]
1278712789 );
12790+
12791+ // no START WITH and NOCYCLE
12792+ let connect_by_5 = "SELECT child, parent FROM t CONNECT BY NOCYCLE parent = PRIOR child";
12793+ assert_eq!(
12794+ all_dialects_where(|d| d.supports_connect_by()).verified_only_select(connect_by_5),
12795+ Select {
12796+ select_token: AttachedToken::empty(),
12797+ optimizer_hint: None,
12798+ distinct: None,
12799+ top: None,
12800+ top_before_distinct: false,
12801+ projection: vec![
12802+ SelectItem::UnnamedExpr(Expr::Identifier(Ident::new("child"))),
12803+ SelectItem::UnnamedExpr(Expr::Identifier(Ident::new("parent"))),
12804+ ],
12805+ exclude: None,
12806+ from: vec![TableWithJoins {
12807+ relation: table_from_name(ObjectName::from(vec![Ident::new("t")])),
12808+ joins: vec![],
12809+ }],
12810+ into: None,
12811+ lateral_views: vec![],
12812+ prewhere: None,
12813+ selection: None,
12814+ group_by: GroupByExpr::Expressions(vec![], vec![]),
12815+ cluster_by: vec![],
12816+ distribute_by: vec![],
12817+ sort_by: vec![],
12818+ having: None,
12819+ named_window: vec![],
12820+ qualify: None,
12821+ window_before_qualify: false,
12822+ value_table_mode: None,
12823+ connect_by: Some(ConnectBy {
12824+ condition: None,
12825+ relationships: vec![Expr::BinaryOp {
12826+ left: Expr::Identifier(Ident::new("parent")).into(),
12827+ op: BinaryOperator::Eq,
12828+ right: Expr::Prior(Expr::Identifier(Ident::new("child")).into()).into(),
12829+ }],
12830+ nocycle: true,
12831+ }),
12832+ flavor: SelectFlavor::Standard,
12833+ }
12834+ );
1278812835}
1278912836
1279012837#[test]
0 commit comments