[ https://issues.apache.org/jira/browse/CALCITE-5545?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17695420#comment-17695420 ]
Julian Hyde commented on CALCITE-5545: -------------------------------------- [~oliverlee], I reviewed the PR. We can't change {{Function0}} to {{Supplier}} for public/protected methods/fields, so I reverted that. I had to find a way for the 3 ways to customize to co-exist: * calling the {{withPrepareFactory}} method to create a new Driver instance; * overriding the createPrepareFactory method in a subclass(now deprecated, but they are still allowed to override, and therefore we still have to call it, to find out whether it has been overridden); * overriding the new {{createPrepare}} method in a subclass. The best solution is to keep the {{prepareFactory}} method, but make it nullable, and if it's null call the old {{createPrepareFactory}} method. I added a commit the above changes, and tests for all of the combinations. Please review the commit I appended to your commits in [julianhyde/5545-pluggable-validator|https://github.com/julianhyde/calcite/tree/5545-pluggable-validator]. > Allow for overriding SqlValidator to enable custom SqlNode validation > --------------------------------------------------------------------- > > Key: CALCITE-5545 > URL: https://issues.apache.org/jira/browse/CALCITE-5545 > Project: Calcite > Issue Type: Bug > Reporter: Oliver Lee > Priority: Major > Labels: pull-request-available > Time Spent: 3.5h > Remaining Estimate: 0h > > Goal: Be able to enable custom SqlNode validation > It will require overloading {{CalcitePrepareImpl}}, setting the > {{prepareFactory}} in {{Driver.java}} to use the overloaded > {{CalcitePrepareImpl}}, and then overloading {{createSqlValidator()}} and > {{getSqlValidator()}} of {{CalcitePreparingStmt}} > Some changes to constructor access level is needed, no functionality or logic > change is needed -- This message was sent by Atlassian Jira (v8.20.10#820010)