Skip to content

Commit c94035f

Browse files
committed
Add more sqlite support
1 parent 0b0d9f9 commit c94035f

File tree

6 files changed

+26
-5
lines changed

6 files changed

+26
-5
lines changed

Cargo.lock

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "sql-parse"
3-
version = "0.23.0"
3+
version = "0.24.0"
44
edition = "2021"
55
authors = ["Jakob Truelsen <[email protected]>"]
66
keywords = [ "mysql", "postgresql", "sql", "lexer", "parser" ]

src/create.rs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,9 @@ pub enum TableOption<'a> {
122122
identifier: Span,
123123
value: SString<'a>,
124124
},
125+
Strict {
126+
identifier: Span,
127+
},
125128
//StatsAutoRecalc
126129
//StatsPersistance
127130
//StatsSamplePages
@@ -160,6 +163,7 @@ impl<'a> Spanned for TableOption<'a> {
160163
TableOption::SecondaryEngineAttribute { identifier, value } => {
161164
identifier.span().join_span(value)
162165
}
166+
TableOption::Strict { identifier } => identifier.span(),
163167
}
164168
}
165169
}
@@ -1184,6 +1188,10 @@ fn parse_create_table<'a>(
11841188
value: parser.consume_string()?,
11851189
});
11861190
}
1191+
Token::Ident(_, Keyword::STRICT) => {
1192+
parser.consume_keyword(Keyword::STRICT)?;
1193+
options.push(TableOption::Strict { identifier });
1194+
}
11871195
t if t == &parser.delimiter => break,
11881196
Token::Eof => break,
11891197
_ => {

src/data_type.rs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -302,7 +302,12 @@ pub(crate) fn parse_data_type<'a>(
302302
(parser.consume_keyword(Keyword::FLOAT8)?, Type::Float8)
303303
}
304304
Token::Ident(_, Keyword::REAL) => {
305-
(parser.consume_keyword(Keyword::FLOAT)?, Type::Float(None)) // TODO
305+
let i = parser.consume_keyword(Keyword::REAL)?;
306+
if parser.options.dialect.is_sqlite() {
307+
(i, Type::Double(None))
308+
} else {
309+
(i, Type::Float(None))
310+
}
306311
}
307312
Token::Ident(_, Keyword::FLOAT) => {
308313
(parser.consume_keyword(Keyword::FLOAT)?, Type::Float(None)) // TODO

src/expression.rs

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ pub enum Function<'a> {
5757
DateDiff,
5858
DateFormat,
5959
DateSub,
60+
Datetime,
6061
DayName,
6162
DayOfMonth,
6263
DayOfWeek,
@@ -102,13 +103,13 @@ pub enum Function<'a> {
102103
JsonMergePerserve,
103104
JsonNormalize,
104105
JsonObject,
106+
JsonObjectAgg,
105107
JsonObjectFilterKeys,
106108
JsonObjectToArray,
107-
JsonObjectAgg,
108109
JsonOverlaps,
109110
JsonPretty,
110-
JsonQuote,
111111
JsonQuery,
112+
JsonQuote,
112113
JsonRemove,
113114
JsonReplace,
114115
JsonSchemaValid,
@@ -174,6 +175,7 @@ pub enum Function<'a> {
174175
Space,
175176
Sqrt,
176177
StrCmp,
178+
Strftime,
177179
StrToDate,
178180
SubDate,
179181
SubStr,
@@ -734,6 +736,10 @@ fn parse_function<'a>(
734736
Token::Ident(_, Keyword::JSON_UNQUOTE) => Function::JsonUnquote,
735737
Token::Ident(_, Keyword::JSON_VALID) => Function::JsonValid,
736738
Token::Ident(_, Keyword::JSON_VALUE) => Function::JsonValue,
739+
740+
// Sqlite
741+
Token::Ident(_, Keyword::STRFTIME) => Function::Strftime,
742+
Token::Ident(_, Keyword::DATETIME) => Function::Datetime,
737743
Token::Ident(v, k) if !k.reserved() => Function::Other(v),
738744
_ => {
739745
parser.err("Unknown function", &span);

src/keywords.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -814,6 +814,8 @@ STORED
814814
STR_TO_DATE
815815
STRAIGHT_JOIN
816816
STRCMP
817+
STRFTIME
818+
STRICT
817819
STRING
818820
SUBCLASS_ORIGIN
819821
SUBDATE

0 commit comments

Comments
 (0)