@@ -12675,20 +12675,21 @@ fn parse_connect_by() {
1267512675 window_before_qualify: false,
1267612676 value_table_mode: None,
1267712677 connect_by: Some(ConnectBy {
12678- condition: Expr::BinaryOp {
12678+ condition: Some( Expr::BinaryOp {
1267912679 left: Box::new(Expr::Identifier(Ident::new("title"))),
1268012680 op: BinaryOperator::Eq,
1268112681 right: Box::new(Expr::Value(
1268212682 Value::SingleQuotedString("president".to_owned()).with_empty_span(),
1268312683 )),
12684- },
12684+ }) ,
1268512685 relationships: vec![Expr::BinaryOp {
1268612686 left: Box::new(Expr::Identifier(Ident::new("manager_id"))),
1268712687 op: BinaryOperator::Eq,
1268812688 right: Box::new(Expr::Prior(Box::new(Expr::Identifier(Ident::new(
1268912689 "employee_id",
1269012690 ))))),
1269112691 }],
12692+ nocycle: false,
1269212693 }),
1269312694 flavor: SelectFlavor::Standard,
1269412695 };
@@ -12763,20 +12764,21 @@ fn parse_connect_by() {
1276312764 window_before_qualify: false,
1276412765 value_table_mode: None,
1276512766 connect_by: Some(ConnectBy {
12766- condition: Expr::BinaryOp {
12767+ condition: Some( Expr::BinaryOp {
1276712768 left: Box::new(Expr::Identifier(Ident::new("title"))),
1276812769 op: BinaryOperator::Eq,
1276912770 right: Box::new(Expr::Value(
1277012771 (Value::SingleQuotedString("president".to_owned(),)).with_empty_span()
1277112772 )),
12772- },
12773+ }) ,
1277312774 relationships: vec![Expr::BinaryOp {
1277412775 left: Box::new(Expr::Identifier(Ident::new("manager_id"))),
1277512776 op: BinaryOperator::Eq,
1277612777 right: Box::new(Expr::Prior(Box::new(Expr::Identifier(Ident::new(
1277712778 "employee_id",
1277812779 ))))),
1277912780 }],
12781+ nocycle: false,
1278012782 }),
1278112783 flavor: SelectFlavor::Standard,
1278212784 }
@@ -12803,6 +12805,51 @@ fn parse_connect_by() {
1280312805 "prior"
1280412806 )))]
1280512807 );
12808+
12809+ // no START WITH and NOCYCLE
12810+ let connect_by_5 = "SELECT child, parent FROM t CONNECT BY NOCYCLE parent = PRIOR child";
12811+ assert_eq!(
12812+ all_dialects_where(|d| d.supports_connect_by()).verified_only_select(connect_by_5),
12813+ Select {
12814+ select_token: AttachedToken::empty(),
12815+ optimizer_hint: None,
12816+ distinct: None,
12817+ top: None,
12818+ top_before_distinct: false,
12819+ projection: vec![
12820+ SelectItem::UnnamedExpr(Expr::Identifier(Ident::new("child"))),
12821+ SelectItem::UnnamedExpr(Expr::Identifier(Ident::new("parent"))),
12822+ ],
12823+ exclude: None,
12824+ from: vec![TableWithJoins {
12825+ relation: table_from_name(ObjectName::from(vec![Ident::new("t")])),
12826+ joins: vec![],
12827+ }],
12828+ into: None,
12829+ lateral_views: vec![],
12830+ prewhere: None,
12831+ selection: None,
12832+ group_by: GroupByExpr::Expressions(vec![], vec![]),
12833+ cluster_by: vec![],
12834+ distribute_by: vec![],
12835+ sort_by: vec![],
12836+ having: None,
12837+ named_window: vec![],
12838+ qualify: None,
12839+ window_before_qualify: false,
12840+ value_table_mode: None,
12841+ connect_by: Some(ConnectBy {
12842+ condition: None,
12843+ relationships: vec![Expr::BinaryOp {
12844+ left: Expr::Identifier(Ident::new("parent")).into(),
12845+ op: BinaryOperator::Eq,
12846+ right: Expr::Prior(Expr::Identifier(Ident::new("child")).into()).into(),
12847+ }],
12848+ nocycle: true,
12849+ }),
12850+ flavor: SelectFlavor::Standard,
12851+ }
12852+ );
1280612853}
1280712854
1280812855#[test]
0 commit comments