Skip to content

Commit 1dd9bea

Browse files
committed
sql_parser: ordering parser-refactoring
1 parent 830d8cd commit 1dd9bea

File tree

3 files changed

+16
-26
lines changed

3 files changed

+16
-26
lines changed

src/parser/column/mod.rs

+4-13
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,11 @@
11
use crate::{
22
ColumnConstraint, ColumnConstraintType, ColumnDefinition, ConflictClause, Expression, FKAction,
33
FKConstraintAction, FKDeferrableType, ForeignKeyClause, GeneratedColumnConstraint,
4-
GeneratedColumnType, Identifier, Keyword, LiteralValue, Ordering, PrimaryKeyConstraint,
5-
TokenType,
4+
GeneratedColumnType, Identifier, Keyword, LiteralValue, PrimaryKeyConstraint, TokenType,
65
};
76

8-
use super::{
9-
expression::{DataTypeParser, ExpressionParser, IdentifierParser},
10-
Parser, ParsingError,
11-
};
7+
use super::expression::{DataTypeParser, ExpressionParser, IdentifierParser};
8+
use super::{Parser, ParsingError};
129

1310
pub trait ColumnDefinitionParser {
1411
fn parse_column_definition(&mut self) -> Result<ColumnDefinition, ParsingError>;
@@ -82,13 +79,7 @@ impl<'a> ColumnDefinitionParser for Parser<'a> {
8279
self.consume_as_keyword(Keyword::Primary)?;
8380
self.consume_as_keyword(Keyword::Key)?;
8481

85-
let ordering = if self.consume_as_keyword(Keyword::Asc).is_ok() {
86-
Some(Ordering::Asc)
87-
} else if self.consume_as_keyword(Keyword::Desc).is_ok() {
88-
Some(Ordering::Desc)
89-
} else {
90-
None
91-
};
82+
let ordering = self.parse_ordering()?;
9283

9384
// Parse the optional on conflict clause
9485
let conflict_clause = self.parse_on_conflict_clause()?;

src/parser/insert/mod.rs

+1-12
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use crate::{
22
parser::select::SelectStatementParser, ConflictClause, Identifier, IndexedColumn,
3-
InsertStatement, InsertValues, Keyword, Ordering, QualifiedTableName, TokenType, UpsertAction,
3+
InsertStatement, InsertValues, Keyword, QualifiedTableName, TokenType, UpsertAction,
44
UpsertClause, UpsertConflictTarget, UpsertUpdate,
55
};
66

@@ -33,8 +33,6 @@ pub trait InsertStatementParser {
3333
fn parse_indexed_columns(&mut self) -> Result<Vec<IndexedColumn>, ParsingError>;
3434

3535
fn parse_indexed_column(&mut self) -> Result<IndexedColumn, ParsingError>;
36-
37-
fn parse_ordering(&mut self) -> Result<Option<Ordering>, ParsingError>;
3836
}
3937

4038
impl<'a> InsertStatementParser for Parser<'a> {
@@ -213,15 +211,6 @@ impl<'a> InsertStatementParser for Parser<'a> {
213211
let ordering = self.parse_ordering()?;
214212
Ok(IndexedColumn { column, ordering })
215213
}
216-
217-
fn parse_ordering(&mut self) -> Result<Option<Ordering>, ParsingError> {
218-
if self.consume_as_keyword(Keyword::Asc).is_ok() {
219-
return Ok(Some(Ordering::Asc));
220-
} else if self.consume_as_keyword(Keyword::Desc).is_ok() {
221-
return Ok(Some(Ordering::Desc));
222-
}
223-
Ok(None)
224-
}
225214
}
226215

227216
#[cfg(test)]

src/parser/mod.rs

+11-1
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ use update::*;
3232
use window::*;
3333

3434
use crate::ast::{IndexedType, LimitClause, OrderingTerm, Statement};
35-
use crate::{Keyword, Token, TokenType, Tokenizer};
35+
use crate::{Keyword, Ordering, Token, TokenType, Tokenizer};
3636

3737
/// A parser for SQLite SQL statements
3838
pub struct Parser<'a> {
@@ -252,6 +252,16 @@ impl<'a> Parser<'a> {
252252
}
253253
}
254254

255+
/// Parse an ordering if it exists, i.e. ASC or DESC
256+
fn parse_ordering(&mut self) -> Result<Option<Ordering>, ParsingError> {
257+
if self.consume_as_keyword(Keyword::Asc).is_ok() {
258+
return Ok(Some(Ordering::Asc));
259+
} else if self.consume_as_keyword(Keyword::Desc).is_ok() {
260+
return Ok(Some(Ordering::Desc));
261+
}
262+
Ok(None)
263+
}
264+
255265
/// Parse an indexed type if it exists
256266
fn parse_indexed_type(&mut self) -> Result<Option<IndexedType>, ParsingError> {
257267
if self.consume_as_keyword(Keyword::Indexed).is_ok() {

0 commit comments

Comments
 (0)