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

codenotary / immudb / 30524793846
85%

Build:
DEFAULT BRANCH: master
Ran 30 Jul 2026 08:07AM UTC
Jobs 1
Files 311
Run time 1min
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

30 Jul 2026 07:58AM UTC coverage: 84.966% (-0.03%) from 84.998%
30524793846

push

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.

39 of 57 new or added lines in 6 files covered. (68.42%)

70 existing lines in 5 files now uncovered.

45268 of 53278 relevant lines covered (84.97%)

126070.99 hits per line

Uncovered Changes

Lines Coverage ∆ File
10
80.72
-10.45% embedded/document/document_reader.go
8
86.35
-0.57% embedded/document/engine.go

Coverage Regressions

Lines Coverage ∆ File
60
84.97
0.02% pkg/pgsql/server/query_machine.go
4
83.65
-0.15% embedded/store/immustore.go
2
86.68
-0.29% embedded/appendable/multiapp/multi_app.go
2
76.09
-0.36% pkg/database/lazy_db.go
2
79.17
-2.08% pkg/server/stream_replication.go
Jobs
ID Job ID Ran Files Coverage
1 30524793846.1 30 Jul 2026 08:07AM UTC 311
84.97
Source Files on build 30524793846
  • Tree
  • List 311
  • Changed 13
  • Source Changed 0
  • Coverage Changed 13
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • c4a5beed on github
  • Prev Build on master (#30523860198)
  • Next Build on master (#30525169618)
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE TRIAL · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc