Skip to content

Commit c6d8ced

Browse files
committed
feat: continue mysql code
[ci skip]
1 parent dee3bb6 commit c6d8ced

File tree

401 files changed

+9848
-2
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

401 files changed

+9848
-2
lines changed

crates/lib-dialects/src/lib.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@ pub mod duckdb;
2525
pub mod hive;
2626
#[cfg(feature = "mysql")]
2727
pub mod mysql;
28+
#[cfg(feature = "mysql")]
29+
mod mysql_keywords;
2830
#[cfg(feature = "postgres")]
2931
pub mod postgres;
3032
#[cfg(feature = "postgres")]

crates/lib-dialects/src/mysql.rs

Lines changed: 71 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,14 @@
11
use sqruff_lib_core::dialects::base::Dialect;
22
use sqruff_lib_core::dialects::init::DialectKind;
33
use sqruff_lib_core::dialects::syntax::SyntaxKind;
4-
use sqruff_lib_core::helpers::Config;
5-
use sqruff_lib_core::parser::lexer::Matcher;
4+
use sqruff_lib_core::helpers::{Config, ToMatchable};
5+
use sqruff_lib_core::parser::grammar::anyof::one_of;
6+
use sqruff_lib_core::parser::grammar::base::Ref;
7+
use sqruff_lib_core::parser::segments::meta::MetaSegment;
8+
use sqruff_lib_core::vec_of_erased;
9+
use sqruff_lib_core::{parser::grammar::sequence::Sequence, parser::lexer::Matcher};
10+
11+
use crate::mysql_keywords::{MYSQL_RESERVED_KEYWORDS, MYSQL_UNRESERVED_KEYWORDS};
612

713
use super::ansi;
814

@@ -20,5 +26,68 @@ pub fn raw_dialect() -> Dialect {
2026
SyntaxKind::InlineComment,
2127
)]);
2228

29+
// # Set Keywords
30+
// Do not clear inherited unreserved ansi keywords. Too many are needed to parse well.
31+
// Just add MySQL unreserved keywords.
32+
mysql.update_keywords_set_from_multiline_string(
33+
"unreserved_keywords",
34+
MYSQL_UNRESERVED_KEYWORDS,
35+
);
36+
mysql.sets("reserved_keywords").clear();
37+
mysql.update_keywords_set_from_multiline_string("reserved_keywords", MYSQL_RESERVED_KEYWORDS);
38+
39+
// Set the datetime units
40+
mysql.sets_mut("datetime_units").clear();
41+
mysql.sets_mut("datetime_units").extend(vec![
42+
// https://github.com/mysql/mysql-server/blob/1bfe02bdad6604d54913c62614bde57a055c8332/sql/sql_yacc.yy#L12321-L12345
43+
// interval:
44+
"DAY_HOUR",
45+
"DAY_MICROSECOND",
46+
"DAY_MINUTE",
47+
"DAY_SECOND",
48+
"HOUR_MICROSECOND",
49+
"HOUR_MINUTE",
50+
"HOUR_SECOND",
51+
"MINUTE_MICROSECOND",
52+
"MINUTE_SECOND",
53+
"SECOND_MICROSECOND",
54+
"YEAR_MONTH",
55+
// interval_time_stamp
56+
"DAY",
57+
"WEEK",
58+
"HOUR",
59+
"MINUTE",
60+
"MONTH",
61+
"QUARTER",
62+
"SECOND",
63+
"MICROSECOND",
64+
"YEAR",
65+
]);
66+
67+
mysql.sets_mut("date_part_function_name").clear();
68+
mysql.sets_mut("date_part_function_name").extend(vec![
69+
"EXTRACT",
70+
"TIMESTAMPADD",
71+
"TIMESTAMPDIFF",
72+
]);
73+
74+
mysql.add([(
75+
// A reference to an object with an `AS` clause.
76+
// The optional AS keyword allows both implicit and explicit aliasing.
77+
"AliasExpressionSegment".into(),
78+
Sequence::new(vec_of_erased![
79+
MetaSegment::indent(),
80+
Ref::keyword("AS").optional(),
81+
one_of(vec_of_erased![
82+
Ref::new("SingleIdentifierGrammar"),
83+
Ref::new("SingleQuotedIdentifierSegment"),
84+
Ref::new("DoubleQuotedIdentifierSegment"),
85+
]),
86+
MetaSegment::dedent(),
87+
])
88+
.to_matchable()
89+
.into(),
90+
)]);
91+
2392
mysql
2493
}

0 commit comments

Comments
 (0)