From c871b1bf99d96ce5b818de4a3e6849d18ff4925f Mon Sep 17 00:00:00 2001 From: myyrakle Date: Mon, 29 Jul 2024 00:20:29 +0900 Subject: [PATCH] =?UTF-8?q?[#142]=20order=20by=20=EC=A0=88=20=ED=85=8C?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8=EC=BD=94=EB=93=9C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Cargo.toml | 3 +- src/parser/test/select.rs | 78 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 80 insertions(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index 2f64225..5f27d1b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -30,7 +30,8 @@ bytes = "1.2.1" tokio-util = { version = "0.7.4", features = [ "codec" ] } futures = "0.3.23" chrono = "0.4.22" -bson = "2.4.0" +bson = "2.11.0" +time = "0.3.36" colored = "2.0.0" uuid = "1.1.2" itertools = "0.10.5" diff --git a/src/parser/test/select.rs b/src/parser/test/select.rs index b51a5fb..d10c336 100644 --- a/src/parser/test/select.rs +++ b/src/parser/test/select.rs @@ -799,12 +799,60 @@ fn test_select_query() { .build(), want_error: false, }, + TestCase { + name: r#" + SELECT + p.content as post + FROM post as p + ORDER BY p.user_id ASC; + "# + .into(), + input: vec![ + Token::Select, + Token::Identifier("p".into()), + Token::Period, + Token::Identifier("content".into()), + Token::As, + Token::Identifier("post".into()), + Token::From, + Token::Identifier("post".into()), + Token::As, + Token::Identifier("p".into()), + Token::Order, + Token::By, + Token::Identifier("p".into()), + Token::Period, + Token::Identifier("user_id".into()), + Token::Asc, + Token::SemiColon, + ], + expected: SelectQuery::builder() + .add_select_item( + SelectItem::builder() + .set_item(SelectColumn::new(Some("p".into()), "content".into()).into()) + .set_alias("post".into()) + .build(), + ) + .set_from_table(TableName { + database_name: None, + table_name: "post".into(), + }) + .set_from_alias("p".into()) + .add_order_by(OrderByItem { + item: SelectColumn::new(Some("p".into()), "user_id".into()).into(), + order_type: OrderByType::Asc, + nulls: OrderByNulls::First, + }) + .build(), + want_error: false, + }, TestCase { name: r#" SELECT p.content as post FROM post as p ORDER BY p.user_id ASC + LIMIT 10; "# .into(), input: vec![ @@ -824,6 +872,8 @@ fn test_select_query() { Token::Period, Token::Identifier("user_id".into()), Token::Asc, + Token::Limit, + Token::Integer(10), ], expected: SelectQuery::builder() .add_select_item( @@ -842,9 +892,37 @@ fn test_select_query() { order_type: OrderByType::Asc, nulls: OrderByNulls::First, }) + .set_limit(10) .build(), want_error: false, }, + TestCase { + name: r#" + SELECT + p.content as post + FROM post as p + ORDER BY SELECT ASC; + "# + .into(), + input: vec![ + Token::Select, + Token::Identifier("p".into()), + Token::Period, + Token::Identifier("content".into()), + Token::As, + Token::Identifier("post".into()), + Token::From, + Token::Identifier("post".into()), + Token::As, + Token::Identifier("p".into()), + Token::Order, + Token::By, + Token::Select, + Token::Asc, + ], + expected: Default::default(), + want_error: true, + }, TestCase { name: r#" SELECT