Hi Julian,

Thank you very much for looking into our project! Currently Arthur Pan <[email protected]> is the maintainer of cosette-parser, and he is doing something similar to what you suggest: basically getting the `relBefore` and `r` in line 124 and 144 of RelOptTestBase.java, and outputting JSON to the prover. We can automatically extract ~400 cases for the prover now (the remaining are `checkUnchanged()` cases). The prover is now pretty much a WIP, so only a few cases are actually proved, but I am working hard on getting better feature coverage.

Thanks again for your help and input! We’ll report back if we get problems/progress. :)

Shuxian Wang

On 7 Aug 2021, at 12:08, Julian Hyde wrote:

Shuxian,

It would be great to carry on this integration. I downloaded and built your project. (I also opened a pull request[1], adding a maven wrapper and a README.)

It’s difficult to get at the RelNodes in RelOptRulesTest if you’re outside Calcite. (Because it is a test, we don’t currently include it in a library.) Therefore I suggest that you create a fork of Calcite and modify the RelOptTestCase.Sql.checkPlanning method[2] to call your checker. Of course you’ll have to modify core/build.gradle.kts and add your checker library as a testImplementation.

Julian

[1] https://github.com/cosette-solver/cosette-parser/pull/1

[2] https://github.com/apache/calcite/blob/d46137a197a2840ea5ff9f3b38bb86d423c9af11/core/src/test/java/org/apache/calcite/test/RelOptTestBase.java#L87

On Jul 29, 2021, at 2:26 AM, Shuxian Wang <[email protected]> wrote:

Hello Calcite developers,

I am a Berkeley student working on a new version for the [Cosette SQL prover](https://cosette.cs.washington.edu/). This [new implementation](https://github.com/cosette-solver/cosette-rs) aims for higher performance and better SQL feature coverage. One goal for us is to formally check as much rewrite rules in Calcite as possible, which are those located in https://github.com/apache/calcite/blob/master/core/src/test/java/org/apache/calcite/test/RelOptRulesTest.java.

The prover initially relies on a custom SQL parser, but we’ve decided to build a [new one](https://github.com/cosette-solver/cosette-parser) depending on Calcite’s parser instead. This parser takes in SQL and use Calcite to get a corresponding RelNode. Later on the parser translates that RelNode into a JSON format that will be recognized by the prover. This makes integrating with the Calcite testing component very feasible, given a way to extract the RelNode before/after each rewrite test and send them to the prover in JSON.

I writing to ask if there is any general interest in such integration? If so, some help on extracting the RelNode from the Calcite test cases would be appreciated.

Sincerely,

Shuxian Wang

Reply via email to