关于 PL/SQL Intelligence
PL/SQL Intelligence 是面向评估数据库代码变更团队的离线 Oracle PL/SQL 分析引擎和命令行工具集。它构建具备包语义的依赖与语义模型,明确报告不确定性,并记录分析缺口以改进覆盖率;MCP 服务由独立的 oraclemcp 仓库负责。
主要功能
- 01使用 ANTLR 后端解析 PL/SQL
- 02构建语义模型和依赖关系
- 03分析数据沿袭与变更影响
- 04明确报告分析中的不确定性
- 05离线执行 SAST 检查
- 06跟踪经隐私验证的解析覆盖率改进
适用场景
- 01在修改程序包前评估下游影响
- 02查找列类型变更影响的依赖对象
- 03使用 Oracle 目录快照离线分析代码
- 04根据已记录的分析缺口改进解析覆盖率
MCP 相关
此仓库已不再包含 MCP 服务;MCP 服务已迁移至独立的 oraclemcp 仓库。此处的解析器、语义模型、目录快照、依赖图、数据沿袭、文档、SAST 和变更影响分析库可供该仓库使用。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
docker run -i --rm ghcr.io/muhdur/plsql-mcp:0.6.3本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。
ghcr.io/muhdur/plsql-mcp:0.6.3stdio工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
PL/SQL Intelligence Engine
使用 Rust 构建的离线、支持包感知的 Oracle PL/SQL 代码智能引擎, 并配备自愈式覆盖率飞轮。
在更改 Oracle PL/SQL 之前,先了解哪些地方会出问题。
# Build the workspace and run the default test profile
git clone https://github.com/MuhDur/plsql-intelligence
cd plsql-intelligence
cargo build --workspace && cargo test --workspace
简介
问题所在。 在大型 Oracle 环境中,PL/SQL 包、视图、 触发器和表构成了错综复杂的依赖关系网。更改一个列类型或 一个包规范,就可能在不知不觉中导致数百个下游对象失效;直到 生产环境重新编译失败时,你才会发现。现有工具各自覆盖一部分场景(SQL 部署、血缘产品、SAST 扫描器、 Oracle 自带的 SQLcl MCP 服务),但没有一种能在一个工作流中提供离线、 支持包感知的 PL/SQL 语义分析、明确的不确定性报告、依赖关系 推理和重新编译规划。
解决方案。 一个分层的 Rust 工作区,使用真正的
ANTLR 后端解析 PL/SQL,构建包含名称解析和依赖关系图的语义 IR,并
报告更改影响。如果分析器无法确定,就会通过类型化的 UnknownReason
明确说明,而不会给出错误的“无问题”结果。这些如实记录的不确定性
数据会流入 USR Loop,将记录的缺口转化为经过验证且不含隐私信息的解析器和降级
修复,让覆盖率随着使用不断提升。
MCP 属于 oraclemcp
此仓库现在负责离线 PL/SQL 引擎、库 crate 和
命令行工具。MCP 服务已迁移至独立的
oraclemcp 仓库,数据库连接层和
服务生命周期管理已在该仓库中实现。
旧的 plsql-mcp 工作区 crate 已从此处移除。在分发退役事项完成之前,已发布的
历史版本仍可作为兼容途径;新的 PL/SQL 智能引擎工作应通过库 crate 和
plsql / plsql-depgraph / usr-loop CLI 开展。
这是独立的开源项目,与 Oracle 无关联。离线引擎不包含也不需要 Oracle 客户端 库。
为什么使用它?
| 功能 | 作用 |
|---|---|
| 离线优先 | 原位读取代码和 Oracle 目录快照;分析无需连接实时数据库,默认不收集遥测数据 |
| 真正的解析器后端 | 在 plsql-parser-antlr 中提交了 ANTLR 生成的 Rust 解析器代码,常规构建无需 JVM,并提供无损令牌带(reconstruct(tape) == input) |
| 如实报告不确定性 | 无法确定分析结果时,会输出类型化的 UnknownReason;完整性报告绝不会错误地显示“无问题” |
| 依赖关系推理 | 语义 IR、名称解析、权限模型和依赖关系图,可与 ALL_DEPENDENCIES 交叉验证 |
| USR Loop | 自愈式飞轮:捕获的缺口会转化为经隐私验证的测试样例、候选补丁和 9 阶段故障关闭式一致性门禁 |
| 经验证的累积增长 | 单调递增的 coverage_index 配合 CI 触发检查,确保“覆盖率不断提升”是经检查验证的属性,而非一句口号 |
| 内存安全 | 整个工作区均设置了 #![forbid(unsafe_code)] |
对比
| 需要实时数据库 | 感知包的 PL/SQL 语义 | 如实表达不确定性 | 离线分析 | |
|---|---|---|---|---|
| SQL 部署工具(Liquibase、Flyway) | 是 | 否 | 否 | 否 |
| 血缘 / 目录产品 | 不定 | 部分支持 | 否 | 不定 |
| 通用 SAST 扫描器 | 否 | 否 | 否 | 是 |
| Oracle SQLcl MCP 服务 | 是 | 部分支持 | 否 | 否 |
| PL/SQL Intelligence Engine | 否 | 是 | 是 | 是 |
状态
当前版本路线是面向 0.7.0 的离线转向轨道。工作区在 stable 通道上构建,并且不再包含 plsql-mcp crate。项目仍处于 1.0 之前,因此公开 API 在 1.0 版本线发布前仍可能变动。plan.md 仍是权威规范,而 docs/plans/2026-06-29-offline-pivot-retire-plsql-mcp.md 是 MCP 拆分的当前退役计划。
- Cargo 工作区有 25 个成员:
crates/下的 20 个产品 crate,以及tools/下的 5 个工具 crate。 - 常规源码安装路径需要 stable 通道工具链。只有在重新生成已提交的 ANTLR 解析器输出时才需要 Java,日常构建、测试或 CLI 安装均不需要。
- 面向产品的二进制文件是
plsql、plsql-depgraph和usr-loop。每个都为 Agent 提供capabilities、robot-docs、doctor和--robot-json/--robot-triage接口。 - MCP 服务现在由
oraclemcp负责。本仓库提供解析器、语义模型、目录快照模型、依赖图、血缘、文档、SAST、变更影响和 USR Loop 库接口,供oraclemcp使用。 - USR Loop 已端到端实现:包括
plsql-accretion库、usr-loop工具、固定 SHA 的一致性门禁、单调触发器,以及可重复运行的验收证明scripts/usr_acceptance.sh。 AGENTS.md介绍了自动化 Agent 在本仓库中的工作方式。
测试与验证
默认的本地配置为离线模式和 stable 通道:
cargo fmt --all -- --checkcargo clippy --workspace --all-targets -- -D warningscargo test --workspace --all-targetscargo test --workspace --doccargo bench --workspace --no-runcargo deny checkplan-lint、语料库许可证检查、解析成功检查、实验室基准结果、demo-no-db、离线诚实性 grep、离线边界 lint,以及 USR 增长门禁。
不要将测试套件理解为“任何地方都没有测试替身”。本仓库在需要固定边界的地方有意使用了测试替身:feature 关闭时的实时 XE 哨兵、GitHub Action 发布自测、用于无效标识符的失败即关闭 bindgen 包装器、隔离的 Oracle 连接替身,以及确定性的 USR 提议路径。这些都不是尚未完成的生产占位实现。
私有资产的完成定义如实说明了自身边界。当 PLSQL_PRIVATE_ESTATE 不存在时,scripts/usr_acceptance.sh 会以 estate-absent 标记成功退出,且不会声称已完成完整资产证明。要执行约束性完整证明,必须使用包含资产的主机。
快速示例
# Build the workspace and run the default test profile
cargo build --workspace
cargo test --workspace
# Inspect the CLI contracts agents should read first
cargo run -p plsql-cicd --bin plsql -- capabilities
cargo run -p plsql-depgraph -- capabilities
cargo run -p usr-loop -- capabilities
# Clippy with the project's deny-warning policy
cargo clippy --workspace --all-targets -- -D warnings
# Predict change impact from a directory, diff, or changeset artifact
cargo run -p plsql-cicd --bin plsql -- predict ./changes --robot-json
# Inspect a serialized dependency graph
cargo run -p plsql-depgraph -- --graph depgraph.json doctor --robot-json
# Drive the USR Loop against an estate (read in place, nothing copied out)
cargo run -p usr-loop -- scan /path/to/estate
cargo run -p usr-loop -- cluster /path/to/estate
cargo run -p usr-loop -- propose /path/to/estate --from-scan
cargo run -p usr-loop -- doctor
# The re-runnable Definition of Done for the USR Loop
scripts/usr_acceptance.sh
USR Loop(自修复覆盖率飞轮)
大多数分析器会将解析错误和未解析引用视为失败并丢弃。本工具会将它们记录为带类型、来源信息、可最小化的离线产物,然后进行修复。完整规范见 docs/plans/2026-05-19-usr-loop-self-healing-coverage-flywheel.md;修复类别策略和门禁诚实性清单见 docs/decisions/D3-usr-repair-class-policy.md。
estate (read in place; no byte copied out)
│ plsql-engine analyze → typed diagnostics + UnknownReason + provenance
▼
[A] GAP CAPTURE filter repairable diagnostic classes → GapRecord
▼ (provenance only, never source bytes)
[B] MINIMIZE + smallest input that still triggers the same
PRIVACY-PROVE signature; every literal/identifier re-synthesized;
▼ a redaction-delta manifest proves zero leak
[C] CLUSTER/DEDUP N occurrences → 1 GapCluster, K representative
▼ fixtures
[D] PROPOSE one candidate diff, exactly one repair class
▼ (g grammar / l lowering / d typed degradation)
[E] CONFORMANCE GATE the 9-stage, fail-closed, sha-pinned bar
▼ pass ▼ fail
[F] LAND + LEDGER [F'] QUARANTINE-AS-OPEN-BEAD
apply on branch, file a provenanced bead naming the failing
add the fixture + stage; the gate is never weakened to admit it
a pinned test,
append one
content-addressed
ledger entry
▼
[G] ACCRETION TRIPWIRE the monotone coverage_index, CI-checked
不变量(规范的核心;每一项都会被强制执行,而非仅仅倡导)
| 不变量 | 保证内容 |
|---|---|
| I-PRIVACY | 不会有任何客户字节离开本地环境。每份持久化产物都是经过重新合成、结构等价的最小复现,并且已逐份证明不会泄漏(门禁阶段 G8)。隐私证明失败会中止运行,且不持久化任何内容。 |
| I-NO-REGRESSION | 只有在整个语料库上证明补丁保持行为不变时,才会合入:无损往返、后端一致性、黄金样例同构、单调不回退。先提出,再证明,然后合入;绝不自动合并未经证明的补丁。 |
| I-NO-GAMING | 只有当目标签名提取出的语义也相应地经测量有所提升时,覆盖率提升才计入。通过抑制诊断来“修复”缺口的做法会在 G7 自动拒绝。 |
| I-DETERMINISM | 相同的本地环境和相同的引擎提交会产生逐字节一致的缺口记录、夹具、签名和候选集。任何持久化产物都不得依赖墙上时钟、随机数生成器或映射迭代顺序。 |
| I-PROVENANCE | 每条记录、每个夹具、候选项、判定和已合入补丁都通过内容寻址,并可沿着本地环境运行 → 诊断 → 夹具 → 差异 → 门禁结果追溯。账本仅追加。 |
| I-ISOLATION | 补丁只能修改 .g4 语法、plsql-parser-antlr 代码生成/降级处理,或类型化降级分类器;绝不让下游 crate 依赖 ANTLR 类型,也不以非增量方式破坏公共契约。 |
| I-MONOTONIC-VALUE | 跟踪的 coverage_index 在各个版本之间单调不减。降低该值的版本会导致 CI 失败。 |
一致性门禁
scripts/usr_gate.sh 会按顺序运行 9 个阶段,所有阶段都必须通过,且失败时默认拒绝。
任何未通过的情况都会拒绝候选项,并将其登记为 bead;绝不会削弱门禁来接纳补丁。
| 阶段 | 检查 |
|---|---|
| G1 | 构建:plsql-parser-antlr --features antlr-codegen 和工作区 |
| G2 | 在完整语料库和所有既有 MinFixture 上进行无损往返 |
| G3 | 后端一致性(plsql-parser/tests/conformance.rs) |
| G4 | 黄金样例同构,或明确列出并说明合理性的黄金样例差异 |
| G5 | 保证绝不 panic,并运行模糊测试目标,崩溃数为零 |
| G6 | 单调不回退(scripts/estate_correctness.sh,指标不低于基线) |
| G7 | 反投机与真实性:诊断减少时,提取量必须相应提升;不得削弱防护状态 |
| G8 | 隐私:验证候选项和每个新增夹具的脱敏差异;发生泄漏即中止运行 |
| G9 | 新增的回归测试必须能通过变异测试验证(若撤销补丁,测试就会失败) |
门禁脚本通过内容校验固定:crates/plsql-accretion/gate.sha256
保存预期的 sha256,plsql-accretion 的门禁运行器在校验不匹配时会中止。修改门禁需要经过审慎且由人工审核的提交
并更新 sha。crates/plsql-accretion/tests/gate_selftest.rs 会向
门禁输入一组三个对抗性案例(仅包含抑制的补丁、会泄漏隐私的夹具、破坏往返处理的补丁),并断言它们会在各自指定的阶段被拒绝。
coverage_index 和熔断检查
coverage_index = extracted_semantics_ratio (frozen public corpus
benchmark, never
private estate code)
+ distinct_resolved_gap_signatures (signature classes the
loop has permanently
closed, from the
append-only ledger)
scripts/accretion_tripwire.sh(必需的 CI 检查)会断言
coverage_index(HEAD) >= coverage_index(last release tag),并且
extracted_semantics_ratio(HEAD) >= extracted_semantics_ratio(last release)。
对于全新的 CI 检出,会与 crates/plsql-accretion/accretion_floor.json 中跟踪的确定性种子进行比较,因此即使 .usr/ledger/ 是临时目录,首个基线也会持久保留。降低任一指标都会导致版本发布失败。按时间记录的 coverage_index 表位于 CHANGELOG.md 中。
完成定义
scripts/usr_acceptance.sh 是唯一可重复运行的验收契约。
它不是检查“看起来已构建”的脚本:它会驱动循环端到端地弥补私有环境中一个真实且当前未解决的缺口,并断言所有不变量均成立(来源可追溯、夹具已证明符合隐私要求、门禁退出码为 0 或正确隔离、签名严格递减、extracted_semantics_ratio 严格递增、运行状态保持不变、账本恰好追加一次、变异测试已杀死、对抗性门禁自测通过、两次运行字节级一致)。未配置私有环境时,脚本会以醒目的“estate-absent”横幅退出,说明该环境中未能证明完成定义。CI 每晚运行完整验收证明(.github/workflows/usr.yml)。
架构
工作区采用分层结构(完整详情见 plan.md §5 和 docs/ARCHITECTURE.md)。下游 crate 从不依赖 ANTLR 生成的类型。
| 层 | Crate | 负责内容 |
|---|---|---|
| 0 | plsql-core、plsql-output、plsql-render、plsql-store | 诊断、完整性/不确定性、输出结构、内容寻址缓存 |
| 1 | plsql-parser、plsql-parser-antlr | 与后端无关的解析器接口,以及 ANTLR 后端 |
| 1.5 | plsql-catalog | Oracle 目录快照模型和稳定的行摄取 |
| 2 | plsql-ir、plsql-symbols、plsql-privileges、plsql-depgraph | 语义 IR、名称解析、权限模型、依赖图 |
| 3 | plsql-engine | 编排:每次运行的 AnalysisRun、CompletenessReport |
| 4 | plsql-lineage、plsql-doc、plsql-bindgen、plsql-cicd、plsql-sast | 血缘、文档、Rust 绑定、变更集规划、静态分析 |
| 5 | plsql-accretion、tools/usr-loop | USR Loop 库和编排器 |
| 外部 MCP | oraclemcp | MCP 服务、Oracle 连接生命周期、受保护的实时访问,以及与这些引擎 crate 的可选集成 |
PL/SQL source + Oracle catalog snapshot
│
▼
plsql-parser-antlr (lossless tape + AST)
│
▼
plsql-ir → plsql-symbols → plsql-depgraph
│
▼
plsql-engine: AnalysisRun + CompletenessReport
│ │
▼ ▼
product surfaces typed UnknownReason exhaust
(lineage / docs / │
bindings / cicd / ▼
sast) plsql-accretion + usr-loop
(capture → fixture → gate → land)
工具二进制文件:plsql(变更影响、文档、SAST、doctor)、plsql-depgraph(依赖图查询/解释/doctor)、usr-loop(USR Loop 编排器)、plan-lint、corpus-license-check、corpus-bench 和 corpus-grow。
MCP 不再作为此工作区中的二进制文件,这是有意为之。需要服务的 Agent 应使用 oraclemcp;需要离线 PL/SQL 智能功能的 Agent 应直接调用库 crate 或使用 CLI。
安装
工作区使用 rust-toolchain.toml 中固定的 stable 通道进行构建。工作区的 MSRV 记录在 Cargo.toml 中,为 rust-version = "1.96"。常规安装不需要 Java。只有维护者明确重新生成 ANTLR 解析器输出时才需要 Java。
安装已发布的 CLI
Linux 和 macOS:
curl -fsSL "https://github.com/MuhDur/plsql-intelligence/releases/latest/download/install.sh?$(date +%s)" | bash
Windows PowerShell:
irm "https://github.com/MuhDur/plsql-intelligence/releases/latest/download/install.ps1?$([DateTimeOffset]::UtcNow.ToUnixTimeSeconds())" | iex
安装程序会获取最新的 GitHub 发布版本、验证 SHA256SUMS、安装 plsql 和 plsql-depgraph,并打印卸载说明。
从源代码安装
git clone https://github.com/MuhDur/plsql-intelligence
cd plsql-intelligence
cargo build --workspace --release
从检出目录安装 CLI
cargo install --path crates/plsql-cicd --bin plsql
cargo install --path crates/plsql-depgraph
cargo install --path tools/usr-loop
从 Git 安装 CLI
cargo install --git https://github.com/MuhDur/plsql-intelligence --package plsql-cicd --bin plsql
cargo install --git https://github.com/MuhDur/plsql-intelligence --package plsql-depgraph
cargo install --git https://github.com/MuhDur/plsql-intelligence --package usr-loop
按 crate 迭代
按 crate 构建可在开发期间缩短迭代周期:
cargo build -p plsql-catalog
cargo test -p plsql-accretion
默认的离线 CLI 无需 Oracle 客户端或数据库连接。
命令参考
主要面向用户的二进制文件提供全局发现命令:
<binary> capabilities # machine-readable agent contract
<binary> robot-docs # concise agent handbook
<binary> --robot-triage # capabilities + health + quick reference
<binary> doctor # local health report
plsql
用于变更影响分析、渲染文档、SAST 工件和本地诊断的发布保证 CLI。
plsql predict ./changes --robot-json
plsql predict --git-range main..HEAD --repo .
plsql doc docset.json --format markdown --robot-json
plsql sast scan-report.json --format sarif --robot-json
plsql doctor ./changes --robot-json
plsql capabilities
plsql robot-docs
plsql-depgraph
读取序列化的依赖图,并对其进行查询或解释。
plsql-depgraph --graph depgraph.json doctor --robot-json
plsql-depgraph --graph depgraph.json query reverse-neighbors --logical-id HR.PKG_ORDERS
plsql-depgraph --graph depgraph.json query path --from-logical-id HR.PKG_ORDERS --to-logical-id HR.TABLE_ORDERS
plsql-depgraph --graph depgraph.json explain --logical-id HR.PKG_ORDERS --robot-json
plsql-depgraph capabilities
usr-loop
USR Loop 编排器。全局 --robot-json 标志会让每个子命令输出单行机器可读封装。
usr-loop scan <estate> # [A] capture GapRecords
usr-loop cluster <estate> # [C] deduped GapClusters
usr-loop propose <estate> --from-scan # [D] one candidate diff
usr-loop propose <estate> --cluster-id ID # propose for a specific signature
usr-loop gate <candidate-diff> # run the sha-pinned §3 gate
usr-loop land <candidate> --fixture F # [F] gate, then land or quarantine
usr-loop ledger <action> # inspect the append-only ledger
usr-loop doctor # crate/schema versions, deps
gate/land 的退出码:0 表示接受/落地,3 表示拒绝/隔离(符合规范,并非错误),4 表示门禁 sha-pin 中止,9 表示 I-PRIVACY 中止(未持久化任何内容)。
plan-lint
cargo run -p plan-lint -- # structural lint of plan.md
cargo run -p plan-lint -- --robot-json # machine-readable findings
cargo run -p plan-lint -- --doctor # health summary
设计承诺
- Rust Cargo 工作区,每个组件对应一个 crate。
- 每个 CLI 界面都提供
doctor子命令和--robot-json输出,让 Agent 读取机器契约,而不是自行猜测。 - 每当分析无法确定时,都显式记录
UnknownReason;完整性报告绝不会错误地显示为无问题。 - 隔离解析器后端:下游 crate 不得依赖 ANTLR 生成的类型。
- 整个工作区均使用
#![forbid(unsafe_code)]。 - 默认不启用遥测。
仓库工作流
- 首先阅读
AGENTS.md和plan.md。 - 将
plan.md视为预期架构和范围的事实来源。如果代码与plan.md不一致,请有意识地修正其中一方。 - 仅在 Beads 中跟踪工作;
.beads/是权威来源。 - 切勿将私有材料复制到此仓库。USR Loop 和正确性测试框架会在原处读取私有资产,路径由
PLSQL_PRIVATE_ESTATE环境变量指定,并且绝不持久化其字节内容。
目录结构
plan.md:主规格说明AGENTS.md:仓库操作规则Cargo.toml、crates/、tools/:Rust 工作区corpus/:测试使用的公开及合成 PL/SQL 测试样本docs/:架构快照、计划、决策、集成指南scripts/:usr_gate.sh、usr_acceptance.sh、accretion_tripwire.sh、estate_correctness.sh.beads/:Beads 问题跟踪器状态(权威来源)CHANGELOG.md:发布说明日志及coverage_index表
故障排除
| 症状 | 修复方法 |
|---|---|
usr-loop gate 以 4 退出 | Gate sha 固定值不匹配。Gate 脚本已更改,但未更新 crates/plsql-accretion/gate.sha256 中的 sha 值。这是有意的失败关闭行为;只能通过经过审查的提交重新固定。 |
usr-loop gate/land 以 9 退出 | G8 检测到 I-PRIVACY 泄漏信号。运行已中止,且按设计未持久化任何内容。检查有问题的测试样本;不要削弱 G8。 |
usr_acceptance.sh 以 0 退出并显示 "estate-absent" 横幅 | 未配置私有资产(PLSQL_PRIVATE_ESTATE 未设置或为空),因此此处无法证明 DoD。运行脚本时将该变量指向私有资产,或依赖夜间 CI。 |
| 解析器再生成失败 | 普通构建使用已提交的生成 Rust 代码。再生成属于维护工作:安装 Java,设置 PLSQL_ANTLR_REGEN=1,然后运行解析器漂移检查路径。 |
| 在真实资产上得到空依赖图 | 对于解析器尚无法处理的方言尾部,这是预期行为;这些情况会记录为带类型的 UnknownReason,正是 USR Loop 用于修复的输入,而非无声失败。 |
限制
- 1.0 之前:API 在 1.0 发布前随时可能变更。
- 此仓库不再是 MCP 服务。MCP 服务、Oracle 会话和受保护的实时数据库访问请使用
oraclemcp。 - 此仓库不包含 Oracle 实时数据提取。Oracle 会话、实时目录快照和受保护的数据库访问请使用
oraclemcp。 - USR Loop 提议器不会自动合并。它会生成经过验证的候选项;验证过程自动且完整,是否落地则由该验证结果和仓库的常规审查流程决定(根据
D3)。 - 对于确实存在歧义的 Oracle 方言形式,不会靠猜测来消除歧义。它们会如实记录为带类型的
UnknownReason(修复类别d):覆盖的是诚实标记,而非捏造结果。 - 增量累积基于签名类别,而非原始计数。大量只出现一次的资产特有问题可能会一直未解决;这会如实报告,不会掩盖。
g类语法补丁属于真正的语法工作,像其他工作一样受门控:速度较慢,但结果可靠。- 引用完整性子集处理将列入单独的未来计划,不纳入首个版本。
常见问题
分析需要连接运行中的 Oracle 数据库吗? 不需要。分析在离线状态下进行,依据是源代码以及可选的目录快照。实时访问 Oracle 应由 oraclemcp 负责;本仓库专注于离线引擎和命令行界面。
解析器是真正的解析器,还是启发式扫描器? 是真正的解析器。引擎通过 plsql-parser-antlr 中由 ANTLR 生成的 Rust 后端进行解析,并使用无损令牌带;相关决策和证据见 docs/decisions/D2-backend-final.md。
解析器无法处理的构造会怎样? 它们会以带来源信息的类型化 UnknownReason 记录。完整性报告会如实反映这一点,而不会给出虚假的无问题结果。
USR Loop 是否已在真实项目中弥补了 N 个缺口? 本文不会将这一说法作为已确立的营销事实。该机制已经实现,其证明是可重新运行的 scripts/usr_acceptance.sh 和 nightly CI。本 README 说明了如何运行它,而不是无法验证的夸大宣传。
我能否放宽门禁,以便更快合入补丁? 不能。门禁固定了 sha,并在校验失败时拒绝通过;不匹配就会中止。要修改它,必须经过审核提交,并有意更新 sha。
有任何代码使用了 unsafe 吗? 没有。整个工作区都设置了 #![forbid(unsafe_code)]。
许可证
以下许可证双重授权,任选其一:
- Apache License,Version 2.0(LICENSE-APACHE)
- MIT license(LICENSE-MIT)
由你选择。crates/plsql-parser-antlr/grammars/ 中随附的 ANTLR PL/SQL 语法采用 Apache-2.0 许可证,来自 antlr/grammars-v4;署名信息保留在 crates/plsql-parser-antlr/LICENSE-GRAMMARS.md 中。
除非你明确另行说明,否则根据 Apache-2.0 许可证的定义,你有意提交以纳入本作品的任何贡献,都将按上述方式双重授权,且不附加任何条款或条件。
关于贡献
关于贡献: 请别介意,但我不接受任何人为我的项目贡献代码。我实在没有足够的精力来审核任何内容,而且项目上署的是我的名字,因此由我承担它引发的任何问题;所以在我看来,风险与回报极不对等。我还得顾虑其他“利益相关者”,而对于我大多是免费为自己制作的工具来说,这似乎并不明智。欢迎提交 issue;如果你想展示拟议的修复方案,也可以提交 PR,但请知悉,我不会直接合并。我会让 Claude 或 Codex 通过 gh 审核提交内容,并独立决定是否以及如何处理。尤其欢迎报告 bug。若这让你感到不快,我很抱歉,但我想避免浪费时间和伤害感情。我知道这与倡导社区贡献的主流开源理念并不一致,但这是我保持当前速度和心态平衡的唯一方式。
与我合作
我帮助企业攻克难题:大规模数据库、系统现代化,以及生产环境中的 AI;保持供应商中立(云端或可自托管)。正在构建数据库、Rust / C++ 或 AI 领域的高难度项目?欢迎联系。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。