FlyingZC commented on PR #40203:
URL: https://github.com/apache/shardingsphere/pull/40203#issuecomment-6211431629

   ### Result
   
   Review Result: Mergeable
   
   完整 PR 加授权本地修复的候选通过 Code Correctness Review,无剩余阻塞问题或建议修改。此结论仅适用于本地候选;公开 PR 
尚未包含本轮修复。
   
   ### Evidence
   
   - **F1:最新公开 head 上重新证明,本地已修复。** 三个新增用例在旧实现上通过实际 Parser IT 断言全部失败,列数实际为 
0/1/1,预期为 1/2/3。修复后完整 PostgreSQL Parser IT 为 **1287 tests,0 failures,0 errors,0 
skipped**。
   - 修复位于 
`parser/sql/engine/dialect/postgresql/src/main/java/org/apache/shardingsphere/sql/parser/engine/postgresql/visitor/statement/type/PostgreSQLDDLStatementVisitor.java:762`。helper
 按解析树顺序收集 ColumnrefContext,复用原 visitColumnref 创建列段,避免遗漏内部 CAST/函数中的列引用。
   - 新增回归明确断言:
     - `coalesce(CAST(a AS integer), 0)`:`a@49:49`。
     - `CAST(a + CAST(b AS integer) AS integer)`:`a@40:40, b@49:49`。
     - 嵌套函数和重复引用:`b@53:53, a@74:74, b@89:89`。
   - 两份资源为 
`test/it/parser/src/main/resources/sql/supported/ddl/create-index.xml:107` 和 
`test/it/parser/src/main/resources/case/ddl/create-index.xml:519`。新增三个 Literal 
用例,通过现有 ColumnAssert 验证列名、顺序和起止位置。
   - 本地 delta 仅 **3 文件,39 行新增、15 行删除**。最新公开提交的 13 个 XML 文件逐字保留;其格式调整前后 XML 语义一致。
   - 已复核公开 parser/visitor 入口、列段生产者和 CreateIndexStatementBinder 消费者。未改公共 
API/SPI、共享抽取器、其他方言、依赖或配置;遍历保持线性。
   
   ### Coverage
   
   **候选身份**
   
   - 类型:**PR-backed local candidate**。
   - 最新公开 head 与本地 HEAD:`d85c8d732dea06f1ab1aecdb4e9550ba62ea3909`,开始及收尾均通过 
GitHub REST API 确认。
   - Base:`master`;base 
SHA/merge-base:`fec1f87710d658e43eac95815e223a5108341dff`。
   - 原任务本地基线为上述公开 head,初始 worktree/index 干净。当前为该 head 加三个授权文件的未暂存修复,无新增本地提交。
   - 未提交 
delta:`SHA256=d37972d81367429e0dfd48e169f7aba3573e1357d28e9c6dbb23ed2ccc8d94c4`,计算对象为
 `git diff --binary HEAD`;检查后身份不变。
   - 覆盖权威文件列表的 **86 文件、160 变更块**,范围为 merge-base 到当前工作树。本地 inventory 与公开文件列表完全匹配。
   - 公开 comments/reviews/review comments 均为 0。旧报告仅作为线索,未继承旧 verdict。
   
   **审查依据与收敛**
   
   适用依据为当前 
AGENTS.md、CODE_OF_CONDUCT.md、implementation/testing/non-regression/removal/verification、coding-standards、sql-parser-review
 及本轮授权边界。既有 PostgreSQL parser/visitor 项目承诺由 
`docs/document/content/dev-manual/sql-parser.en.md` 和现有 facade/statement 模型建立。
   
   重新覆盖词法/选项、RESET、GRANT/REVOKE、DDL 分发与类型、routine/publication/subscription 
等语法、索引列提取、JAXB 注册、测试断言和 SQL/expected AST。**106 条相对 merge-base 新增 SQL 均有唯一 
expected AST**。
   
   完成根因与行为、影响与契约、测试与运行时三个视角及全量收敛;最后收敛新增独立问题为 0,ledger 校验退出码 **0**,无未解决证据缺口。
   
   手工复核了命名、集合契约、私有 helper/caller、构造器、注解、方法顺序和换行。PostgreSQL 按仓库关系表没有分支方言;另核对独立 
openGauss grammar/visitor、共享枚举、MySQL/Doris CreateServer 和测试断言消费者。未扩展修复到其他方言或既有 
parenthesized index 缺口。
   
   官方语法依据包括 [CREATE 
INDEX](https://www.postgresql.org/docs/current/sql-createindex.html)、[devel 
CREATE 
PUBLICATION](https://www.postgresql.org/docs/devel/sql-createpublication.html)、[ALTER
 
PUBLICATION](https://www.postgresql.org/docs/devel/sql-alterpublication.html)、[CREATE
 
SUBSCRIPTION](https://www.postgresql.org/docs/devel/sql-createsubscription.html),以及输入未变的相关
 PostgreSQL SQL 手册和原生 grammar/analyzer 契约;已核对仓库 SQL parser 文档和相关示例。
   
   **本轮验证**
   
   `M` 为以下四个模块:
   
       
parser/sql/engine/core,parser/sql/statement/dialect/postgresql,parser/sql/engine/dialect/postgresql,test/it/parser
   
   - `dbplus-engine-mvnw --check`:退出码 **0**;native-wrapper、Maven **3.10.0**、JDK 
**21**。
   - `dbplus-engine-mvnw -B -ntp -pl "$M" -DskipTests -Dspotless.skip=true 
-Dcheckstyle.skip=true -T1 test-compile`:退出码 **0**。
   - 修复前调用 InternalSQLParserIT.assertSupportedSQL 的三个聚焦用例:**3/3 按预期失败,退出码 
1**,均为列集合断言失败。
   - `dbplus-engine-mvnw -B -ntp -pl "$M" -Dspotless.skip=true 
-Dcheckstyle.skip=true -Dtest=InternalPostgreSQLParserIT 
-Dsurefire.failIfNoSpecifiedTests=false -T1 test`:退出码 
**0**,**1287/0/0/0**。Classpath 确认加载当前 worktree 的 core、PostgreSQL 
grammar/visitor、statement 和 Parser IT classes。
   
   样式检查中,`S` 为全部 32 个适用 Java 文件的精确绝对路径正则,`C` 为同一集合的 source-root-relative 路径;`B` 
为上述 merge-base:
   
       files = subprocess.check_output(['git', 'diff', '--name-only', B, '--', 
'*.java'], text=True).splitlines()
       S = ','.join(re.escape(os.path.abspath(f)) for f in files)
       C = ','.join(f.split('/src/main/java/')[1] for f in files)
   
       dbplus-engine-mvnw -B -ntp -pl "$M" -DspotlessFiles="$S" 
-Dcheckstyle.includes="$C" -Dcheckstyle.includeResources=false 
-Dcheckstyle.includeTestResources=false spotless:check checkstyle:check -Pcheck 
-T1
   
   合并命令退出码 **0**。Spotless **3.10.1** 输出确认选择全部 32 文件并保持 clean,修改的 visitor 
被实际重新处理。
   
   Checkstyle 缓存曾省略报告项。保留四个生成缓存的精确备份并使其失效后,以同一文件/模块过滤补跑:
   
       dbplus-engine-mvnw -B -ntp -pl "$M" -Dcheckstyle.includes="$C" 
-Dcheckstyle.includeResources=false -Dcheckstyle.includeTestResources=false 
checkstyle:check -Pcheck -T1
   
   补跑退出码 **0**。Checkstyle **3.6.0** 的四份 XML 报告精确列出 core 
**1**、statement-postgresql **13**、engine-postgresql **2**、Parser IT **16** 
个目标文件,0 violations。
   
   其余 **6 G4、48 XML** 对两项工具为 **Not Applicable**:Spotless 仅配置 Java/POM/指定 GitHub 
YAML;Checkstyle source 默认选择 Java,resourceIncludes 为 
`**/*.properties`,owning/parent POM 未扩展到这些 XML。未执行 apply。
   
   **全部覆盖文件**
   
   以下六个 Java 文件均完成两项样式检查:
   
   - 
`parser/sql/engine/core/src/main/java/org/apache/shardingsphere/sql/parser/engine/core/database/visitor/SQLVisitorRule.java`
   - 
`parser/sql/engine/dialect/postgresql/src/main/java/org/apache/shardingsphere/sql/parser/engine/postgresql/visitor/statement/type/PostgreSQLDALStatementVisitor.java`
   - 
`parser/sql/engine/dialect/postgresql/src/main/java/org/apache/shardingsphere/sql/parser/engine/postgresql/visitor/statement/type/PostgreSQLDDLStatementVisitor.java`
   - 
`test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/ddl/dialect/postgresql/PostgreSQLDDLStatementAssert.java`
   - 
`test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/ddl/standard/StandardDDLStatementAssert.java`
   - 
`test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/RootSQLParserTestCases.java`
   
   另 26 个已检查 Java 文件按以下映射展开:
   
   
生产前缀:`parser/sql/statement/dialect/postgresql/src/main/java/org/apache/shardingsphere/sql/parser/statement/postgresql/ddl/`
   
   
测试前缀:`test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/statement/ddl/dialect/postgresql/`
   
   每行代表生产文件和在 `.java` 前加 `TestCase` 的测试文件,子目录相同。
   
   - `PostgreSQLAlterLargeObjectStatement.java`
   - `PostgreSQLAlterOperatorClassStatement.java`
   - `PostgreSQLAlterOperatorFamilyStatement.java`
   - `PostgreSQLAlterSystemStatement.java`
   - `PostgreSQLAlterUserMappingStatement.java`
   - `PostgreSQLCreateOperatorClassStatement.java`
   - `PostgreSQLCreateOperatorFamilyStatement.java`
   - `PostgreSQLCreateTransformStatement.java`
   - `PostgreSQLCreateUserMappingStatement.java`
   - `PostgreSQLDropUserMappingStatement.java`
   - `event/PostgreSQLAlterEventTriggerStatement.java`
   - `statistics/PostgreSQLCreateStatisticsStatement.java`
   - `subscription/PostgreSQLCreateSubscriptionStatement.java`
   
   
G4:`parser/sql/engine/dialect/postgresql/src/main/antlr4/imports/postgresql/` 
下的 
`BaseRule.g4`、`DALStatement.g4`、`DCLStatement.g4`、`DDLStatement.g4`、`PostgreSQLKeyword.g4`,以及同一
 antlr4 根目录下的 
`org/apache/shardingsphere/sql/parser/autogen/PostgreSQLStatementParser.g4`。
   
   XML:前缀为 `test/it/parser/src/main/resources/`,每行代表 `case/` 与 `sql/supported/` 
两份文件,共 48 文件;仅 `dcl/grant.xml` 对应 
`sql/supported/dcl/grant-user.xml`,`dcl/revoke.xml` 对应 
`sql/supported/dcl/revoke-user.xml`。
   
   - `dal/reset.xml`
   - `dcl/grant.xml`
   - `dcl/revoke.xml`
   - `ddl/alter-default-privileges.xml`
   - `ddl/alter-event-trigger.xml`
   - `ddl/alter-large-object.xml`
   - `ddl/alter-operator.xml`
   - `ddl/alter-publication.xml`
   - `ddl/alter-system.xml`
   - `ddl/alter-table.xml`
   - `ddl/alter-user-mapping.xml`
   - `ddl/create-function.xml`
   - `ddl/create-index.xml`
   - `ddl/create-operator.xml`
   - `ddl/create-procedure.xml`
   - `ddl/create-publication.xml`
   - `ddl/create-server.xml`
   - `ddl/create-statistics.xml`
   - `ddl/create-subscription.xml`
   - `ddl/create-transform.xml`
   - `ddl/create-user-mapping.xml`
   - `ddl/drop-database.xml`
   - `ddl/drop-user-mapping.xml`
   - `dml/select.xml`
   
   完整 Unit/IT、RewriteIT、SQL E2E 和服务未运行,沿用用户明确的全仓执行豁免,不记为通过。未查询、等待或报告 GitHub 
CI/Actions。
   
   本轮没有暂存、commit、push、分支/worktree 操作或远端写入。精确本轮 ledger 与临时输入已清理,自包含报告保留。
   


-- 
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: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to