• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

codenotary / immudb
85%
master: 85%

Build:
Build:
LAST BUILD BRANCH: fix/pgsql-empty-parse-panic
DEFAULT BRANCH: master
Repo Added 30 May 2020 08:52AM UTC
Files 311
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

LAST BUILD ON BRANCH fix/pgsql-empty-parse-panic
branch: fix/pgsql-empty-parse-panic
CHANGE BRANCH
x
Reset
  • fix/pgsql-empty-parse-panic
  • changelog/1.11.1
  • chore/build-updates
  • chore/deps-trivy-x-bumps
  • chore/test-followups
  • ci-regex-fix
  • docker-init-db
  • docs/rust-sdk-guidance
  • fargate
  • feat/auditlog
  • feat/coalesce
  • feat/s3performance
  • feature/between-and
  • feature/constant-selection-query
  • feature/discard-precommitted-txs
  • feature/extract-from-timestamp
  • feature/individual-col-primary-key
  • feature/left-join
  • feature/pgsql-catalog
  • fix/2082-scan-latest
  • fix/cas-notarize
  • fix/display-actual-config-path-on-startup
  • fix/empty-tree-flush
  • fix/empty-tree-flush-file
  • fix/index_metrix
  • fix/issue-2100-sql-panics
  • fix/multiapp-readat-keynotfound-race
  • fix/swagger-test-go122-mux
  • gh_action_update
  • issue-2028
  • master
  • moshix-patch-8
  • parallelvcn
  • patch-1
  • refs/tags/v1.1.0
  • refs/tags/v1.10.0
  • refs/tags/v1.11.0
  • refs/tags/v1.11.0-RC2
  • refs/tags/v1.11.1
  • refs/tags/v1.2.0
  • refs/tags/v1.2.0-RC1
  • refs/tags/v1.2.1
  • refs/tags/v1.2.2
  • refs/tags/v1.2.3
  • refs/tags/v1.2.3-RC1
  • refs/tags/v1.2.4
  • refs/tags/v1.2.4-RC1
  • refs/tags/v1.3.0
  • refs/tags/v1.3.0-RC1
  • refs/tags/v1.3.1
  • refs/tags/v1.3.2
  • refs/tags/v1.3.2-RC1
  • refs/tags/v1.4.0
  • refs/tags/v1.4.0-RC1
  • refs/tags/v1.4.0-RC2
  • refs/tags/v1.4.1
  • refs/tags/v1.4.1-RC1
  • refs/tags/v1.5.0
  • refs/tags/v1.5.0-RC1
  • refs/tags/v1.9.0-RC1
  • refs/tags/v1.9.0-RC2
  • refs/tags/v1.9.3
  • refs/tags/v1.9.4
  • refs/tags/v1.9.5
  • refs/tags/v1.9.6
  • refs/tags/v1.9.7
  • refs/tags/v1.9DOM
  • refs/tags/v1.9DOM.0
  • refs/tags/v1.9DOM.1
  • refs/tags/v1.9DOM.1-RC1
  • refs/tags/v1.9DOM.2
  • refs/tags/v1.9DOM.2-RC1
  • refs/tags/v2.0.0-RC1
  • release/v1.10.0
  • release/v1.2.4
  • release/v1.2.4-RC1
  • release/v1.3.0
  • release/v1.3.0-RC1
  • release/v1.3.1
  • release/v1.3.2
  • release/v1.3.2-RC1
  • release/v1.4.0
  • release/v1.4.0-RC1
  • release/v1.4.0-RC2
  • release/v1.4.1
  • release/v1.4.1-RC1
  • release/v1.5.0
  • release/v1.5.0-RC1
  • release/v1.9.0-RC1
  • release/v1.9.0-RC2
  • release/v1.9.3
  • release/v1.9.4
  • release/v1.9.5
  • release/v1.9.6
  • release/v1.9.7
  • release/v1.9DOM
  • release/v1.9DOM.0
  • release/v1.9DOM.1
  • release/v1.9DOM.1-RC1
  • release/v1.9DOM.2
  • release/v1.9DOM.2-RC1
  • release/v2.0.0-RC1
  • update-copyright-notice
  • v2-prerelease

12 Jul 2026 10:59AM UTC coverage: 84.968% (-0.005%) from 84.973%
29190098042

Pull #2110

gh-ci

vchaindz
chore(sql): treat nil row-value slots as SQL NULL in remaining consumers

The projection-pushdown optimization leaves Row.ValuesByPosition[i]
nil for columns a query does not reference. A repo-wide audit after
the fileSorter.encodeRow panic (#2100) found five more consumers that
dereference every positional slot and stay safe only because
projection currently repopulates rows before they run:

- CTE materialization (materializeCTE/materializeRecursiveCTE)
  type-asserted v.(ValueExp) on each slot: hard panic on a nil
  interface. Extracted rowValuesToValueExps, which substitutes a
  typed SQL NULL.
- Row.digest (DISTINCT, diff) called v.Type() on every slot; nil now
  digests the same as NULL.
- setOpRowReader.rowDigest (EXCEPT/INTERSECT) called v.IsNull(); nil
  now digests the same as NULL.
- sqlRowsToProto (gRPC row serialization) dereferenced every slot;
  nil now serializes as SQL NULL.
- embedded/document readers dereferenced positions 0/1 unchecked; nil
  or missing slots now return ErrUnexpectedValue.

None of these is reachable today: every external Resolve passes nil
scanSpecs and SelectStmt.Resolve always projects before returning.
The guards remove the reliance on the "projection always runs first"
invariant, which has already broken once. Unit tests encode the
nil-slot-equals-NULL contract.

The same audit confirmed the empty-statement-slice class from #2100 is
fully closed: every ParseSQL/ParseSQLString call site is now length-
guarded, range-based, or parses hardcoded non-empty input.
Pull Request #2110: fix(pgsql): guard extended-query Parse against zero parsed statements + nil row-value-slot hardening

41 of 62 new or added lines in 7 files covered. (66.13%)

2 existing lines in 1 file now uncovered.

45258 of 53265 relevant lines covered (84.97%)

126001.43 hits per line

Relevant lines Covered
Build:
Build:
53265 RELEVANT LINES 45258 COVERED LINES
126001.43 HITS PER LINE
Source Files on fix/pgsql-empty-parse-panic
  • Tree
  • List 311
  • Changed 11
  • Source Changed 0
  • Coverage Changed 11
Coverage ∆ File Lines Relevant Covered Missed Hits/Line

Recent builds

Builds Branch Commit Type Ran Committer Via Coverage
29190098042 fix/pgsql-empty-parse-panic chore(sql): treat nil row-value slots as SQL NULL in remaining consumers The projection-pushdown optimization leaves Row.ValuesByPosition[i] nil for columns a query does not reference. A repo-wide audit after the fileSorter.encodeRow panic (#2100... Pull #2110 12 Jul 2026 11:08AM UTC vchaindz gh-ci
84.97
See All Builds (4086)
  • Repo on GitHub
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc