You are viewing a plain text version of this content. The canonical link for it is here.
Posted to github@datafusion.apache.org by "pelovett (via GitHub)" <gi...@apache.org> on 2026/08/31 00:39:58 UTC
[PR] Clickhouse: Clickhouse assume table constraint [datafusion-sqlparser-rs]
pelovett opened a new pull request, #2467:
URL: https://github.com/apache/datafusion-sqlparser-rs/pull/2467
Resolves: #2466
First time contributing so please let me know if I missed anything!
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: github-unsubscribe@datafusion.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
---------------------------------------------------------------------
To unsubscribe, e-mail: github-unsubscribe@datafusion.apache.org
For additional commands, e-mail: github-help@datafusion.apache.org
Re: [PR] Clickhouse: Clickhouse assume table constraint [datafusion-sqlparser-rs]
Posted by "LucaCappelletti94 (via GitHub)" <gi...@apache.org>.
LucaCappelletti94 commented on PR #2467:
URL: https://github.com/apache/datafusion-sqlparser-rs/pull/2467#issuecomment-5765292493
Sure, currently I am trying to ultimate the fuzzing CI, once that is done reviews might get more swift given it should provide a stronger claim of consistency
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: github-unsubscribe@datafusion.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
---------------------------------------------------------------------
To unsubscribe, e-mail: github-unsubscribe@datafusion.apache.org
For additional commands, e-mail: github-help@datafusion.apache.org
Re: [PR] Clickhouse: Clickhouse assume table constraint [datafusion-sqlparser-rs]
Posted by "LucaCappelletti94 (via GitHub)" <gi...@apache.org>.
LucaCappelletti94 commented on code in PR #2467:
URL: https://github.com/apache/datafusion-sqlparser-rs/pull/2467#discussion_r3892507923
##########
tests/sqlparser_clickhouse.rs:
##########
@@ -233,6 +233,26 @@ fn parse_create_table() {
);
}
+#[test]
+fn parse_table_constraints() {
+ // The parentheses around the expression are optional to parse, but the
+ // constraint always displays with parentheses.
+ clickhouse().one_statement_parses_to(
+ r#"CREATE TABLE "x" ("a" "int", CONSTRAINT "y" CHECK "a" > 0) ENGINE = MergeTree"#,
+ r#"CREATE TABLE "x" ("a" "int", CONSTRAINT "y" CHECK ("a" > 0)) ENGINE = MergeTree"#,
+ );
+ clickhouse().verified_stmt(
+ r#"CREATE TABLE "x" ("a" "int", CONSTRAINT "y" CHECK ("a" > 0)) ENGINE = MergeTree"#,
+ );
+ clickhouse().one_statement_parses_to(
+ r#"CREATE TABLE "x" ("a" "int", CONSTRAINT "y" ASSUME "a" > 0) ENGINE = MergeTree"#,
+ r#"CREATE TABLE "x" ("a" "int", CONSTRAINT "y" ASSUME ("a" > 0)) ENGINE = MergeTree"#,
+ );
+ clickhouse().verified_stmt(
+ r#"CREATE TABLE "x" ("a" "int", CONSTRAINT "y" ASSUME ("a" > 0)) ENGINE = MergeTree"#,
+ );
+}
+
Review Comment:
These changes currently accept bare `ASSUME a > 0`, and `AssumeConstraint::name` is `Option<Ident>`, but ClickHouse does not have that form.
You may use these **RED** tests as a guide:
```suggestion
#[test]
fn parse_create_table_rejects_unnamed_assume_constraint() {
clickhouse()
.parse_sql_statements(
r#"CREATE TABLE "x" ("a" "int", ASSUME "a" > 0) ENGINE = MergeTree"#,
)
.expect_err("ASSUME constraints require CONSTRAINT and a name");
}
#[test]
fn parse_alter_table_rejects_unnamed_assume_constraint() {
clickhouse()
.parse_sql_statements(r#"ALTER TABLE "x" ADD ASSUME "a" > 0"#)
.expect_err("ASSUME constraints require CONSTRAINT and a name");
}
```
##########
src/ast/table_constraints.rs:
##########
@@ -227,6 +244,38 @@ impl crate::ast::Spanned for CheckConstraint {
}
}
+#[derive(Debug, Clone, PartialEq, PartialOrd, Eq, Ord, Hash)]
+#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
+#[cfg_attr(feature = "visitor", derive(Visit, VisitMut))]
+/// An `ASSUME` constraint (`[ CONSTRAINT <name> ] ASSUME <expr>`).
+pub struct AssumeConstraint {
+ /// Optional constraint name.
+ pub name: Option<Ident>,
+ /// The boolean expression the ASSUME constraint enforces.
Review Comment:
ClickHouse's `ASSUME` is an optimizer assertion that is not enforced and may produce incorrect results when false. Not a constraint, when false it may start doing 2+2=3. It is just an optimization hint as far as I can recall, not an enforced rule.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: github-unsubscribe@datafusion.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
---------------------------------------------------------------------
To unsubscribe, e-mail: github-unsubscribe@datafusion.apache.org
For additional commands, e-mail: github-help@datafusion.apache.org
Re: [PR] Clickhouse: Clickhouse assume table constraint [datafusion-sqlparser-rs]
Posted by "pelovett (via GitHub)" <gi...@apache.org>.
pelovett commented on PR #2467:
URL: https://github.com/apache/datafusion-sqlparser-rs/pull/2467#issuecomment-6326305138
Hey @LucaCappelletti94 , sorry for the delay in responding to your comments after requesting them. I've updated the code with your suggestions and added a fix for check constraints without parentheses. My solution adds a field to the constraint structs tracking if they were created with parentheses. This would be a breaking change for these structs.
The other option I could think of was storing the parenthesis state by wrapping the expressions in `Expr::Nested` but this could break code that creates structs manually rather than with the parser.
Not sure the best option here but would appreciate your opinion.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: github-unsubscribe@datafusion.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
---------------------------------------------------------------------
To unsubscribe, e-mail: github-unsubscribe@datafusion.apache.org
For additional commands, e-mail: github-help@datafusion.apache.org
Re: [PR] Clickhouse: Clickhouse assume table constraint [datafusion-sqlparser-rs]
Posted by "pelovett (via GitHub)" <gi...@apache.org>.
pelovett commented on code in PR #2467:
URL: https://github.com/apache/datafusion-sqlparser-rs/pull/2467#discussion_r3895667552
##########
src/ast/table_constraints.rs:
##########
@@ -227,6 +244,38 @@ impl crate::ast::Spanned for CheckConstraint {
}
}
+#[derive(Debug, Clone, PartialEq, PartialOrd, Eq, Ord, Hash)]
+#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
+#[cfg_attr(feature = "visitor", derive(Visit, VisitMut))]
+/// An `ASSUME` constraint (`[ CONSTRAINT <name> ] ASSUME <expr>`).
+pub struct AssumeConstraint {
+ /// Optional constraint name.
+ pub name: Option<Ident>,
+ /// The boolean expression the ASSUME constraint enforces.
Review Comment:
Yes, updated with a more accurate comment
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: github-unsubscribe@datafusion.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
---------------------------------------------------------------------
To unsubscribe, e-mail: github-unsubscribe@datafusion.apache.org
For additional commands, e-mail: github-help@datafusion.apache.org
Re: [PR] Clickhouse: Clickhouse assume table constraint [datafusion-sqlparser-rs]
Posted by "LucaCappelletti94 (via GitHub)" <gi...@apache.org>.
LucaCappelletti94 commented on code in PR #2467:
URL: https://github.com/apache/datafusion-sqlparser-rs/pull/2467#discussion_r4091735528
##########
src/parser/mod.rs:
##########
@@ -10180,9 +10180,16 @@ impl<'a> Parser<'a> {
))
}
Token::Word(w) if w.keyword == Keyword::CHECK => {
- self.expect_token(&Token::LParen)?;
+ let has_paren = if self.dialect.supports_unparenthesized_check_constraint() {
Review Comment:
The unparenthesized `CHECK` path has the same defect. `CONSTRAINT c CHECK (a + 1) > 0` fails here but ClickHouse accepts it. Add an appropriate test for it, and correct this parser.
##########
src/parser/mod.rs:
##########
@@ -10203,6 +10210,32 @@ impl<'a> Parser<'a> {
.into(),
))
}
+ Token::Word(w)
+ if w.keyword == Keyword::ASSUME && self.dialect.supports_assume_constraint() =>
+ {
+ let Some(identifier) = name else {
+ return self.expected(
+ "CONSTRAINT <name> before ASSUME",
+ TokenWithSpan {
+ token: Token::make_keyword("ASSUME"),
+ span: next_token.span,
+ },
+ );
+ };
+ let has_paren = self.consume_token(&Token::LParen);
+ let expr = Box::new(self.parse_expr()?);
+ if has_paren {
+ self.expect_token(&Token::RParen)?;
+ }
Review Comment:
You should parse the whole expression and strip one `Nested` layer. A leading `(` is consumed as the wrapper today, so `CONSTRAINT c ASSUME (a + 1) > 0` and `ASSUME (a) IN (1, 2)` fail with `Expected: ',' or ')'`. ClickHouse accepts both.
```suggestion
let expr = match self.parse_expr()? {
Expr::Nested(expr) => expr,
expr => Box::new(expr),
};
```
##########
tests/sqlparser_clickhouse.rs:
##########
@@ -233,6 +233,49 @@ fn parse_create_table() {
);
}
+#[test]
+fn parse_table_constraints() {
+ // The parentheses around the expression are optional to parse, but the
+ // constraint always displays with parentheses.
+ clickhouse().one_statement_parses_to(
+ r#"CREATE TABLE "x" ("a" "int", CONSTRAINT "y" CHECK "a" > 0) ENGINE = MergeTree"#,
+ r#"CREATE TABLE "x" ("a" "int", CONSTRAINT "y" CHECK ("a" > 0)) ENGINE = MergeTree"#,
+ );
+ clickhouse().verified_stmt(
+ r#"CREATE TABLE "x" ("a" "int", CONSTRAINT "y" CHECK ("a" > 0)) ENGINE = MergeTree"#,
+ );
+ clickhouse().one_statement_parses_to(
+ r#"CREATE TABLE "x" ("a" "int", CONSTRAINT "y" ASSUME "a" > 0) ENGINE = MergeTree"#,
+ r#"CREATE TABLE "x" ("a" "int", CONSTRAINT "y" ASSUME ("a" > 0)) ENGINE = MergeTree"#,
+ );
+ clickhouse().verified_stmt(
+ r#"CREATE TABLE "x" ("a" "int", CONSTRAINT "y" ASSUME ("a" > 0)) ENGINE = MergeTree"#,
+ );
Review Comment:
You should cover expressions that start with `(`. Both assertions fail on the current head.
```suggestion
clickhouse().verified_stmt(
r#"CREATE TABLE "x" ("a" "int", CONSTRAINT "y" ASSUME ("a" > 0)) ENGINE = MergeTree"#,
);
clickhouse().verified_stmt(
r#"CREATE TABLE "x" ("a" "int", CONSTRAINT "y" CHECK (("a" + 1) > 0)) ENGINE = MergeTree"#,
);
clickhouse().one_statement_parses_to(
r#"CREATE TABLE "x" ("a" "int", CONSTRAINT "y" ASSUME ("a" + 1) > 0) ENGINE = MergeTree"#,
r#"CREATE TABLE "x" ("a" "int", CONSTRAINT "y" ASSUME (("a" + 1) > 0)) ENGINE = MergeTree"#,
);
```
##########
tests/sqlparser_clickhouse.rs:
##########
@@ -233,6 +233,49 @@ fn parse_create_table() {
);
}
+#[test]
+fn parse_table_constraints() {
+ // The parentheses around the expression are optional to parse, but the
+ // constraint always displays with parentheses.
+ clickhouse().one_statement_parses_to(
+ r#"CREATE TABLE "x" ("a" "int", CONSTRAINT "y" CHECK "a" > 0) ENGINE = MergeTree"#,
+ r#"CREATE TABLE "x" ("a" "int", CONSTRAINT "y" CHECK ("a" > 0)) ENGINE = MergeTree"#,
+ );
+ clickhouse().verified_stmt(
+ r#"CREATE TABLE "x" ("a" "int", CONSTRAINT "y" CHECK ("a" > 0)) ENGINE = MergeTree"#,
+ );
+ clickhouse().one_statement_parses_to(
+ r#"CREATE TABLE "x" ("a" "int", CONSTRAINT "y" ASSUME "a" > 0) ENGINE = MergeTree"#,
+ r#"CREATE TABLE "x" ("a" "int", CONSTRAINT "y" ASSUME ("a" > 0)) ENGINE = MergeTree"#,
+ );
+ clickhouse().verified_stmt(
+ r#"CREATE TABLE "x" ("a" "int", CONSTRAINT "y" ASSUME ("a" > 0)) ENGINE = MergeTree"#,
+ );
+}
+
+#[test]
+fn parse_create_table_rejects_unnamed_assume_constraint() {
+ clickhouse()
+ .parse_sql_statements(
+ r#"CREATE TABLE "x" ("a" "int", "y" ASSUME "a" > 0) ENGINE = MergeTree"#,
+ )
+ .expect_err("ASSUME constraints require CONSTRAINT");
+ clickhouse()
+ .parse_sql_statements(
+ r#"CREATE TABLE "x" ("a" "int", CONSTRAINT ASSUME "a" > 0) ENGINE = MergeTree"#,
+ )
+ .expect_err("ASSUME constraints require name");
+ clickhouse()
+ .parse_sql_statements(r#"CREATE TABLE "x" ("a" "int", ASSUME "a" > 0) ENGINE = MergeTree"#)
+ .expect_err("ASSUME constraints require CONSTRAINT and a name");
+}
Review Comment:
This test fails on the current head and passes on `main`.
```suggestion
}
#[test]
fn parse_create_table_column_named_assume() {
clickhouse().verified_stmt("CREATE TABLE x (assume Int32) ENGINE = MergeTree");
}
```
##########
src/ast/table_constraints.rs:
##########
@@ -227,6 +245,36 @@ impl crate::ast::Spanned for CheckConstraint {
}
}
+#[derive(Debug, Clone, PartialEq, PartialOrd, Eq, Ord, Hash)]
+#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
+#[cfg_attr(feature = "visitor", derive(Visit, VisitMut))]
+/// An `ASSUME` constraint (`CONSTRAINT <name> ASSUME <expr>`).
+pub struct AssumeConstraint {
+ /// Optional constraint name.
Review Comment:
The name is mandatory, so this doc comment is wrong.
```suggestion
/// Constraint name.
```
##########
src/ast/table_constraints.rs:
##########
@@ -227,6 +245,36 @@ impl crate::ast::Spanned for CheckConstraint {
}
}
+#[derive(Debug, Clone, PartialEq, PartialOrd, Eq, Ord, Hash)]
+#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
+#[cfg_attr(feature = "visitor", derive(Visit, VisitMut))]
+/// An `ASSUME` constraint (`CONSTRAINT <name> ASSUME <expr>`).
+pub struct AssumeConstraint {
+ /// Optional constraint name.
+ pub name: Ident,
+ /// The boolean expression the ASSUME constraint claims is true.
+ pub expr: Box<Expr>,
+}
+
+impl fmt::Display for AssumeConstraint {
+ fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+ use crate::ast::ddl::display_constraint_name;
+ write!(
+ f,
+ "{}ASSUME ({})",
+ display_constraint_name(&Some(self.name.clone())),
+ self.expr
+ )?;
+ Ok(())
+ }
+}
Review Comment:
You could write the name directly. `display_constraint_name(&Some(self.name.clone()))` allocates a clone on every render.
```suggestion
impl fmt::Display for AssumeConstraint {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(f, "CONSTRAINT {} ASSUME ({})", self.name, self.expr)
}
}
```
##########
src/parser/mod.rs:
##########
@@ -10203,6 +10210,32 @@ impl<'a> Parser<'a> {
.into(),
))
}
+ Token::Word(w)
+ if w.keyword == Keyword::ASSUME && self.dialect.supports_assume_constraint() =>
+ {
+ let Some(identifier) = name else {
+ return self.expected(
+ "CONSTRAINT <name> before ASSUME",
+ TokenWithSpan {
+ token: Token::make_keyword("ASSUME"),
+ span: next_token.span,
+ },
+ );
+ };
Review Comment:
You should fall back to column parsing here instead of erroring. `ASSUME` is not reserved in ClickHouse, and this arm now rejects `CREATE TABLE x (assume Int32) ENGINE = MergeTree`, which parses on `main` and in ClickHouse 26.9. The unnamed-`ASSUME` tests still fail as they should.
```suggestion
let Some(identifier) = name else {
self.prev_token();
return Ok(None);
};
```
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: github-unsubscribe@datafusion.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
---------------------------------------------------------------------
To unsubscribe, e-mail: github-unsubscribe@datafusion.apache.org
For additional commands, e-mail: github-help@datafusion.apache.org
Re: [PR] Clickhouse: Clickhouse assume table constraint [datafusion-sqlparser-rs]
Posted by "pelovett (via GitHub)" <gi...@apache.org>.
pelovett commented on PR #2467:
URL: https://github.com/apache/datafusion-sqlparser-rs/pull/2467#issuecomment-5765153097
@LucaCappelletti94 if you have some time, could you take another look? I tried to address the issues you identified.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: github-unsubscribe@datafusion.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
---------------------------------------------------------------------
To unsubscribe, e-mail: github-unsubscribe@datafusion.apache.org
For additional commands, e-mail: github-help@datafusion.apache.org
Re: [PR] Clickhouse: Clickhouse assume table constraint [datafusion-sqlparser-rs]
Posted by "codecov-commenter (via GitHub)" <gi...@apache.org>.
codecov-commenter commented on PR #2467:
URL: https://github.com/apache/datafusion-sqlparser-rs/pull/2467#issuecomment-5810726221
## [Codecov](https://app.codecov.io/gh/apache/datafusion-sqlparser-rs/pull/2467?dropdown=coverage&src=pr&el=h1&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) Report
:x: Patch coverage is `78.18182%` with `12 lines` in your changes missing coverage. Please review.
:white_check_mark: Project coverage is 80.96%. Comparing base ([`9ae00e7`](https://app.codecov.io/gh/apache/datafusion-sqlparser-rs/commit/9ae00e73b54ebbca2341c3de22312a8011e98757?dropdown=coverage&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache)) to head ([`f292e1a`](https://app.codecov.io/gh/apache/datafusion-sqlparser-rs/commit/f292e1a34e2bf5512d6b3ecc46670d0f98dd3773?dropdown=coverage&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache)).
| [Files with missing lines](https://app.codecov.io/gh/apache/datafusion-sqlparser-rs/pull/2467?dropdown=coverage&src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) | Patch % | Lines |
|---|---|---|
| [src/ast/table\_constraints.rs](https://app.codecov.io/gh/apache/datafusion-sqlparser-rs/pull/2467?src=pr&el=tree&filepath=src%2Fast%2Ftable_constraints.rs&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache#diff-c3JjL2FzdC90YWJsZV9jb25zdHJhaW50cy5ycw==) | 71.42% | [4 Missing :warning: ](https://app.codecov.io/gh/apache/datafusion-sqlparser-rs/pull/2467?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) |
| [src/parser/mod.rs](https://app.codecov.io/gh/apache/datafusion-sqlparser-rs/pull/2467?src=pr&el=tree&filepath=src%2Fparser%2Fmod.rs&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache#diff-c3JjL3BhcnNlci9tb2QucnM=) | 85.71% | [0 Missing and 4 partials :warning: ](https://app.codecov.io/gh/apache/datafusion-sqlparser-rs/pull/2467?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) |
| [src/dialect/mod.rs](https://app.codecov.io/gh/apache/datafusion-sqlparser-rs/pull/2467?src=pr&el=tree&filepath=src%2Fdialect%2Fmod.rs&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache#diff-c3JjL2RpYWxlY3QvbW9kLnJz) | 50.00% | [3 Missing :warning: ](https://app.codecov.io/gh/apache/datafusion-sqlparser-rs/pull/2467?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) |
| [src/ast/spans.rs](https://app.codecov.io/gh/apache/datafusion-sqlparser-rs/pull/2467?src=pr&el=tree&filepath=src%2Fast%2Fspans.rs&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache#diff-c3JjL2FzdC9zcGFucy5ycw==) | 0.00% | [1 Missing :warning: ](https://app.codecov.io/gh/apache/datafusion-sqlparser-rs/pull/2467?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) |
<details><summary>Additional details and impacted files</summary>
```diff
@@ Coverage Diff @@
## main #2467 +/- ##
=======================================
Coverage 80.96% 80.96%
=======================================
Files 42 42
Lines 33359 33412 +53
Branches 33359 33412 +53
=======================================
+ Hits 27009 27053 +44
- Misses 2790 2798 +8
- Partials 3560 3561 +1
```
</details>
[:umbrella: View full report in Codecov by Harness](https://app.codecov.io/gh/apache/datafusion-sqlparser-rs/pull/2467?dropdown=coverage&src=pr&el=continue&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache).
:loudspeaker: Have feedback on the report? [Share it here](https://about.codecov.io/codecov-pr-comment-feedback/?utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache).
<details><summary> :rocket: New features to boost your workflow: </summary>
- :snowflake: [Test Analytics](https://docs.codecov.com/docs/test-analytics): Detect flaky tests, report on failures, and find test suite problems.
</details>
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: github-unsubscribe@datafusion.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
---------------------------------------------------------------------
To unsubscribe, e-mail: github-unsubscribe@datafusion.apache.org
For additional commands, e-mail: github-help@datafusion.apache.org