From d58e59324b4a32c32e1fbdf75f26ae0d862d5d61 Mon Sep 17 00:00:00 2001 From: Andy Grove Date: Sat, 8 Sep 2018 08:09:32 -0600 Subject: [PATCH] Add SQLOrderBy struct to replace ASTNode::OrderByExpr --- src/sqlast.rs | 18 ++++++++++++++++-- src/sqlparser.rs | 13 +++++-------- 2 files changed, 21 insertions(+), 10 deletions(-) diff --git a/src/sqlast.rs b/src/sqlast.rs index 84a50802..dc41f6e0 100644 --- a/src/sqlast.rs +++ b/src/sqlast.rs @@ -72,7 +72,7 @@ pub enum ASTNode { /// WHERE selection: Option>, /// ORDER BY - order_by: Option>, + order_by: Option>, /// GROUP BY group_by: Option>, /// HAVING @@ -105,7 +105,7 @@ pub enum ASTNode { /// WHERE selection: Option>, /// ORDER BY - order_by: Option>, + order_by: Option>, limit: Option>, }, /// CREATE TABLE @@ -124,6 +124,20 @@ pub struct SQLAssigment { value: Box } +/// SQL ORDER BY expression +#[derive(Debug, Clone, PartialEq)] +pub struct SQLOrderByExpr { + pub expr: Box, + pub asc: bool +} + +impl SQLOrderByExpr { + pub fn new(expr: Box, + asc: bool) -> Self { + SQLOrderByExpr { expr, asc } + } +} + /// SQL column definition #[derive(Debug, Clone, PartialEq)] pub struct SQLColumnDef { diff --git a/src/sqlparser.rs b/src/sqlparser.rs index d698dafb..a015a8c2 100644 --- a/src/sqlparser.rs +++ b/src/sqlparser.rs @@ -563,8 +563,8 @@ impl Parser { } /// Parse a comma-delimited list of SQL ORDER BY expressions - pub fn parse_order_by_expr_list(&mut self) -> Result, ParserError> { - let mut expr_list: Vec = vec![]; + pub fn parse_order_by_expr_list(&mut self) -> Result, ParserError> { + let mut expr_list: Vec = vec![]; loop { let expr = self.parse_expr(0)?; @@ -590,10 +590,7 @@ impl Parser { None => true, }; - expr_list.push(ASTNode::SQLOrderBy { - expr: Box::new(expr), - asc, - }); + expr_list.push(SQLOrderByExpr::new(Box::new(expr),asc)); if let Some(t) = self.peek_token() { if t == Token::Comma { @@ -805,11 +802,11 @@ mod tests { ASTNode::SQLSelect { order_by, .. } => { assert_eq!( Some(vec![ - ASTNode::SQLOrderBy { + SQLOrderByExpr { expr: Box::new(ASTNode::SQLIdentifier("lname".to_string())), asc: true, }, - ASTNode::SQLOrderBy { + SQLOrderByExpr { expr: Box::new(ASTNode::SQLIdentifier("fname".to_string())), asc: false, },