This is an automated email from the ASF dual-hosted git repository.
github-bot pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/datafusion-sqlparser-rs.git
The following commit(s) were added to refs/heads/main by this push:
new c8b7f7cf Add ENFORCED/NOT ENFORCED support for column-level CHECK
constraints (#2180)
c8b7f7cf is described below
commit c8b7f7cf4281cdfff3e08e9827928662b8be8095
Author: Michael Victor Zink <[email protected]>
AuthorDate: Fri Jan 30 03:11:49 2026 -0800
Add ENFORCED/NOT ENFORCED support for column-level CHECK constraints (#2180)
---
src/parser/mod.rs | 11 ++++++++++-
tests/sqlparser_common.rs | 9 +++++++++
2 files changed, 19 insertions(+), 1 deletion(-)
diff --git a/src/parser/mod.rs b/src/parser/mod.rs
index 59ca4522..27631143 100644
--- a/src/parser/mod.rs
+++ b/src/parser/mod.rs
@@ -8922,11 +8922,20 @@ impl<'a> Parser<'a> {
// since `CHECK` requires parentheses, we can parse the inner
expression in ParserState::Normal
let expr: Expr = self.with_state(ParserState::Normal, |p|
p.parse_expr())?;
self.expect_token(&Token::RParen)?;
+
+ let enforced = if self.parse_keyword(Keyword::ENFORCED) {
+ Some(true)
+ } else if self.parse_keywords(&[Keyword::NOT, Keyword::ENFORCED]) {
+ Some(false)
+ } else {
+ None
+ };
+
Ok(Some(
CheckConstraint {
name: None, // Column-level check constraints don't have
names
expr: Box::new(expr),
- enforced: None, // Could be extended later to support
MySQL ENFORCED/NOT ENFORCED
+ enforced,
}
.into(),
))
diff --git a/tests/sqlparser_common.rs b/tests/sqlparser_common.rs
index 8b0bcc12..69524ff9 100644
--- a/tests/sqlparser_common.rs
+++ b/tests/sqlparser_common.rs
@@ -16853,6 +16853,15 @@ fn check_enforced() {
);
}
+#[test]
+fn column_check_enforced() {
+ all_dialects().verified_stmt("CREATE TABLE t (x INT CHECK (x > 1) NOT
ENFORCED)");
+ all_dialects().verified_stmt("CREATE TABLE t (x INT CHECK (x > 1)
ENFORCED)");
+ all_dialects().verified_stmt(
+ "CREATE TABLE t (a INT CHECK (a > 0) NOT ENFORCED, b INT CHECK (b > 0)
ENFORCED, c INT CHECK (c > 0))",
+ );
+}
+
#[test]
fn join_precedence() {
all_dialects_except(|d|
!d.supports_left_associative_joins_without_parens())
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]