Skip to content

Error when dolt_diff_stat filter names a missing table - #2001

Merged
timsehn merged 2 commits into
masterfrom
fix/diff-stat-missing-table
Aug 6, 2026
Merged

Error when dolt_diff_stat filter names a missing table#2001
timsehn merged 2 commits into
masterfrom
fix/diff-stat-missing-table

Conversation

@timsehn

@timsehn timsehn commented Aug 6, 2026

Copy link
Copy Markdown
Collaborator

Summary

Match Dolt's dolt_diff_stat behavior for an unknown table filter.

Dolt (getDiffStatNodeFromDelta in dolt_diff_stat.go):

if !fromTableExists && !toTableExists {
    return ..., sql.ErrTableNotFound.New(tableName) // "table not found: %s"
}

DoltLite previously accepted the filter blindly, then produced no rows when both catalog lookups missed — status 0, empty result. That looked like a valid empty diff.

Fix

After loading both catalogs in dstFilter, if a table filter is set and the name is absent from both sides, set zErrMsg to table not found: %s and return SQLITE_ERROR.

Not changed: dolt_diff_summary still returns empty for a missing filter name (matches live Dolt).

Test plan

  • test/doltlite_diff.sh — 42/42, including new diff_stat_no_such_table
  • Dropped table still reports rows_deleted (exists on from side only)
  • Live Dolt check: dolt_diff_stat(..., 'doesnotexist')table not found: doesnotexist

Tim added 2 commits August 5, 2026 19:02
Match Dolt: when a table_name filter is present and that table exists on
neither the from nor the to catalog, return SQLITE_ERROR with
"table not found: <name>" instead of an empty result set.

dolt_diff_summary keeps the empty-result behavior, which is also what
Dolt does for summary. A table that exists on only one side (added or
dropped) still produces stats.
Compare DoltLite against Dolt for:
- missing table filter (error)
- missing filter over a real data change (error)
- filter name absent on both sides after drop + empty commit (error)
- bad from/to refs (error)
- dolt_diff_summary missing filter (empty success on both)

Uses the existing oracle_error exit-code contract so crashes are not
scored as matching Dolt rejections.
@github-actions

github-actions Bot commented Aug 6, 2026

Copy link
Copy Markdown
Contributor

DoltLite source coverage

Metric Covered Total Coverage
Lines 42937 50939 84.29%
Branches 18801 28104 66.90%
Functions 2095 2295 91.29%

Merged 165 pooled raw profiles from the distributed Linux correctness jobs.

Per-file coverage (91 files)
File Lines Branches Functions
src/btree_orig_api.c 85.87% 76.19% 87.18%
src/chunk_file.c 100.00% 100.00% 100.00%
src/chunk_index.c 88.76% 76.47% 100.00%
src/chunk_refs.c 99.35% 85.48% 100.00%
src/chunk_staging.c 87.50% 77.05% 94.12%
src/chunk_store.c 91.01% 75.00% 100.00%
src/chunk_store_commit.c 86.32% 66.96% 100.00%
src/chunk_store_lock.c 94.25% 77.47% 100.00%
src/chunk_store_refs_api.c 91.52% 77.40% 100.00%
src/chunk_wal.c 94.24% 75.00% 92.86%
src/doltlite.c 100.00% 100.00% 100.00%
src/doltlite_add.c 85.19% 67.71% 100.00%
src/doltlite_ancestor.c 88.68% 66.11% 100.00%
src/doltlite_at.c 77.98% 59.93% 94.12%
src/doltlite_blame.c 80.70% 58.94% 96.43%
src/doltlite_branch.c 85.28% 81.98% 100.00%
src/doltlite_branches.c 93.51% 76.14% 92.86%
src/doltlite_checkout.c 76.28% 59.67% 100.00%
src/doltlite_cherry_pick.c 70.53% 55.08% 71.43%
src/doltlite_chunk_walk.c 88.60% 64.19% 100.00%
src/doltlite_cmd.c 69.23% 60.83% 93.33%
src/doltlite_commit.c 93.22% 73.08% 100.00%
src/doltlite_commit_ancestors.c 90.65% 68.89% 92.31%
src/doltlite_commit_cmd.c 75.72% 69.42% 100.00%
src/doltlite_config.c 77.54% 71.43% 100.00%
src/doltlite_conflicts.c 81.83% 58.92% 93.44%
src/doltlite_constraint_violations.c 81.56% 55.91% 92.86%
src/doltlite_core.c 91.69% 72.22% 100.00%
src/doltlite_creds.c 84.01% 54.75% 89.74%
src/doltlite_dbpage.c 92.68% 73.21% 91.67%
src/doltlite_diff.c 81.99% 63.68% 92.86%
src/doltlite_diff_stat.c 94.10% 76.02% 95.45%
src/doltlite_diff_table.c 93.78% 68.45% 97.14%
src/doltlite_gc.c 77.11% 56.01% 96.30%
src/doltlite_hashof.c 75.64% 62.86% 94.44%
src/doltlite_history.c 85.61% 70.55% 100.00%
src/doltlite_http_remote.c 82.22% 57.17% 92.31%
src/doltlite_ignore.c 90.06% 66.67% 100.00%
src/doltlite_log.c 94.38% 70.16% 92.31%
src/doltlite_merge.c 96.94% 74.49% 100.00%
src/doltlite_merge_cmd.c 88.89% 73.50% 100.00%
src/doltlite_merge_constraints.c 88.25% 67.65% 100.00%
src/doltlite_merge_constraints_check.c 92.68% 65.76% 100.00%
src/doltlite_merge_constraints_fk.c 77.09% 55.86% 85.71%
src/doltlite_merge_constraints_unique.c 86.50% 64.37% 100.00%
src/doltlite_merge_pass1.c 91.02% 74.87% 100.00%
src/doltlite_merge_pass2.c 62.90% 57.69% 100.00%
src/doltlite_merge_rows.c 88.25% 69.37% 100.00%
src/doltlite_merge_schema.c 84.75% 63.03% 96.55%
src/doltlite_merge_status.c 91.98% 73.53% 92.31%
src/doltlite_patch.c 94.92% 74.25% 97.83%
src/doltlite_rebase.c 85.57% 59.77% 100.00%
src/doltlite_record.c 75.90% 57.54% 92.86%
src/doltlite_ref.c 98.91% 84.48% 100.00%
src/doltlite_remote.c 81.98% 63.65% 95.92%
src/doltlite_remote_sql.c 63.89% 55.98% 92.86%
src/doltlite_remotesrv.c 75.94% 65.14% 90.62%
src/doltlite_reset.c 86.10% 71.53% 100.00%
src/doltlite_revert.c 79.29% 68.18% 100.00%
src/doltlite_schema_diff.c 92.38% 69.46% 96.88%
src/doltlite_schemas.c 68.97% 44.87% 90.91%
src/doltlite_status.c 92.46% 71.84% 97.22%
src/doltlite_tag.c 79.72% 56.06% 93.33%
src/doltlite_tls.c 85.04% 62.73% 92.31%
src/doltlite_verify_constraints.c 74.11% 58.46% 100.00%
src/doltlite_workspace.c 89.46% 65.50% 100.00%
src/pager_shim.c 58.00% 64.73% 32.37%
src/prolly_btree.c 81.21% 63.06% 86.40%
src/prolly_btree_catalog.c 80.81% 66.17% 96.67%
src/prolly_btree_cursor.c 86.32% 62.69% 97.92%
src/prolly_btree_cursor_count.c 78.78% 55.70% 100.00%
src/prolly_btree_cursor_payload.c 78.81% 60.38% 94.12%
src/prolly_btree_cursor_seek.c 73.88% 61.69% 82.35%
src/prolly_btree_mutation.c 85.54% 65.05% 97.92%
src/prolly_btree_orig.c 83.44% 35.71% 87.67%
src/prolly_btree_state.c 93.89% 67.48% 100.00%
src/prolly_btree_txn.c 82.63% 69.75% 98.00%
src/prolly_cache.c 93.24% 69.70% 100.00%
src/prolly_check.c 60.36% 62.96% 100.00%
src/prolly_chunker.c 94.04% 78.38% 100.00%
src/prolly_cursor.c 89.62% 80.95% 100.00%
src/prolly_diff.c 52.48% 38.62% 60.87%
src/prolly_hash.c 93.65% 80.00% 100.00%
src/prolly_hashset.c 90.48% 80.56% 100.00%
src/prolly_mutate.c 87.07% 78.08% 100.00%
src/prolly_mutmap.c 92.95% 80.22% 100.00%
src/prolly_node.c 89.25% 73.64% 100.00%
src/prolly_three_way_diff.c 95.58% 85.90% 100.00%
src/prolly_three_way_merge.c 80.78% 66.67% 91.67%
src/prolly_xxhash.c 100.00% 100.00% 100.00%
src/sortkey.c 93.06% 80.14% 100.00%

Download HTML and LCOV artifacts from this workflow run.

@github-actions

github-actions Bot commented Aug 6, 2026

Copy link
Copy Markdown
Contributor

DoltLite performance vs PR base

  • Baseline: 998cba0006ed50bda635fcbe7633c363cf934def
  • Candidate: 59546a836546a2122b0ed4ae94e025de3a7c4efc
  • Overall ratio: 1.007x
  • Gate result: PASS
  • Gates: individual > 1.25x with more than 5.00ms regression; section, suite, or overall > 1.15x with the same minimum delta
  • vc individual gate: > 1.50x with more than 25.00ms regression
  • Confirmed failed gates: none
  • Automatic retries: int cleared after 3 attempts; no gate failed every time
Suite Workloads Baseline total Candidate total Ratio Result
blobpk 69 11.45s 11.50s 1.005x PASS
compositepk 69 11.81s 11.84s 1.002x PASS
int 69 12.75s 12.84s 1.007x PASS
textpk 69 11.92s 12.09s 1.014x PASS
vc 13 940.15ms 941.51ms 1.001x PASS
blobpk details
Section Test Baseline Candidate Delta Ratio Result
mem_reads oltp_point_select 33.53ms 34.07ms +544us 1.016x PASS
mem_reads oltp_range_select 13.22ms 13.23ms +11us 1.001x PASS
mem_reads oltp_sum_range 12.80ms 12.73ms -63us 0.995x PASS
mem_reads oltp_order_range 3.12ms 3.10ms -10us 0.997x PASS
mem_reads oltp_distinct_range 4.12ms 4.15ms +30us 1.007x PASS
mem_reads oltp_index_scan 5.58ms 5.55ms -30us 0.995x PASS
mem_reads select_random_points 19.37ms 19.40ms +33us 1.002x PASS
mem_reads select_random_ranges 5.10ms 5.11ms +13us 1.003x PASS
mem_reads covering_index_scan 4.24ms 4.28ms +42us 1.010x PASS
mem_reads groupby_scan 35.11ms 35.43ms +324us 1.009x PASS
mem_reads index_join 8.47ms 8.59ms +117us 1.014x PASS
mem_reads index_join_scan 5.40ms 5.37ms -37us 0.993x PASS
mem_reads types_table_scan 1.23s 1.25s +13.58ms 1.011x PASS
mem_reads table_scan 1.34s 1.35s +9.86ms 1.007x PASS
mem_reads oltp_read_only 128.53ms 127.54ms -990us 0.992x PASS
mem_writes oltp_bulk_insert 335.81ms 332.50ms -3.31ms 0.990x PASS
mem_writes oltp_insert 38.64ms 39.13ms +497us 1.013x PASS
mem_writes oltp_update_index 128.06ms 127.70ms -355us 0.997x PASS
mem_writes oltp_update_non_index 83.01ms 83.21ms +202us 1.002x PASS
mem_writes oltp_delete_insert 101.95ms 101.83ms -124us 0.999x PASS
mem_writes oltp_write_only 61.98ms 62.25ms +275us 1.004x PASS
mem_writes types_delete_insert 52.23ms 52.01ms -213us 0.996x PASS
mem_writes oltp_read_write 132.69ms 131.41ms -1.28ms 0.990x PASS
file_reads oltp_point_select 63.54ms 63.55ms +12us 1.000x PASS
file_reads oltp_range_select 16.42ms 16.40ms -20us 0.999x PASS
file_reads oltp_sum_range 15.86ms 15.79ms -69us 0.996x PASS
file_reads oltp_order_range 3.48ms 3.46ms -13us 0.996x PASS
file_reads oltp_distinct_range 4.46ms 4.49ms +28us 1.006x PASS
file_reads oltp_index_scan 8.98ms 8.87ms -107us 0.988x PASS
file_reads select_random_points 22.47ms 22.55ms +85us 1.004x PASS
file_reads select_random_ranges 8.16ms 8.22ms +65us 1.008x PASS
file_reads covering_index_scan 7.50ms 7.59ms +95us 1.013x PASS
file_reads groupby_scan 35.37ms 35.84ms +469us 1.013x PASS
file_reads index_join 11.06ms 11.01ms -53us 0.995x PASS
file_reads index_join_scan 6.08ms 6.00ms -86us 0.986x PASS
file_reads types_table_scan 1.24s 1.23s -1.99ms 0.998x PASS
file_reads table_scan 1.34s 1.35s +9.89ms 1.007x PASS
file_reads oltp_read_only 169.30ms 169.39ms +88us 1.001x PASS
file_writes oltp_bulk_insert 358.71ms 360.85ms +2.14ms 1.006x PASS
file_writes oltp_insert 50.25ms 51.08ms +829us 1.016x PASS
file_writes oltp_update_index 163.17ms 161.50ms -1.67ms 0.990x PASS
file_writes oltp_update_non_index 106.84ms 106.25ms -585us 0.995x PASS
file_writes oltp_delete_insert 129.63ms 129.18ms -453us 0.997x PASS
file_writes oltp_write_only 84.72ms 84.24ms -477us 0.994x PASS
file_writes types_delete_insert 69.85ms 69.90ms +54us 1.001x PASS
file_writes oltp_read_write 154.36ms 153.87ms -498us 0.997x PASS
ac_reads oltp_point_select 62.56ms 63.26ms +702us 1.011x PASS
ac_reads oltp_range_select 16.38ms 16.34ms -42us 0.997x PASS
ac_reads oltp_sum_range 15.81ms 15.92ms +103us 1.007x PASS
ac_reads oltp_order_range 3.50ms 3.50ms -1us 1.000x PASS
ac_reads oltp_distinct_range 4.46ms 4.50ms +41us 1.009x PASS
ac_reads oltp_index_scan 8.95ms 8.98ms +30us 1.003x PASS
ac_reads select_random_points 22.33ms 22.42ms +87us 1.004x PASS
ac_reads select_random_ranges 8.14ms 8.09ms -49us 0.994x PASS
ac_reads covering_index_scan 7.54ms 7.65ms +115us 1.015x PASS
ac_reads groupby_scan 35.40ms 35.86ms +463us 1.013x PASS
ac_reads index_join 10.98ms 11.04ms +56us 1.005x PASS
ac_reads index_join_scan 5.88ms 5.99ms +115us 1.020x PASS
ac_reads types_table_scan 1.23s 1.25s +16.78ms 1.014x PASS
ac_reads table_scan 1.34s 1.35s +11.47ms 1.009x PASS
ac_reads oltp_read_only 168.72ms 169.05ms +336us 1.002x PASS
ac_writes oltp_bulk_insert_ac 61.32ms 61.48ms +161us 1.003x PASS
ac_writes oltp_insert_ac 82.47ms 82.71ms +242us 1.003x PASS
ac_writes oltp_update_index_ac 94.33ms 94.09ms -235us 0.998x PASS
ac_writes oltp_update_non_index_ac 73.36ms 74.55ms +1.19ms 1.016x PASS
ac_writes oltp_delete_insert_ac 85.15ms 84.16ms -989us 0.988x PASS
ac_writes oltp_write_only_ac 84.62ms 83.96ms -658us 0.992x PASS
ac_writes types_delete_insert_ac 74.05ms 73.20ms -857us 0.988x PASS
ac_writes oltp_read_write_ac 91.20ms 90.89ms -311us 0.997x PASS
compositepk details
Section Test Baseline Candidate Delta Ratio Result
mem_reads oltp_point_select 38.12ms 37.45ms -669us 0.982x PASS
mem_reads oltp_range_select 20.05ms 20.13ms +80us 1.004x PASS
mem_reads oltp_sum_range 19.15ms 19.24ms +87us 1.005x PASS
mem_reads oltp_order_range 3.82ms 3.77ms -48us 0.987x PASS
mem_reads oltp_distinct_range 4.81ms 4.82ms +12us 1.002x PASS
mem_reads oltp_index_scan 5.89ms 5.79ms -100us 0.983x PASS
mem_reads select_random_points 30.34ms 29.93ms -411us 0.986x PASS
mem_reads select_random_ranges 8.19ms 8.15ms -37us 0.995x PASS
mem_reads covering_index_scan 4.18ms 4.16ms -17us 0.996x PASS
mem_reads groupby_scan 40.41ms 39.98ms -425us 0.989x PASS
mem_reads index_join 10.14ms 10.21ms +70us 1.007x PASS
mem_reads index_join_scan 5.74ms 5.67ms -77us 0.987x PASS
mem_reads types_table_scan 1.25s 1.26s +10.83ms 1.009x PASS
mem_reads table_scan 1.36s 1.37s +9.09ms 1.007x PASS
mem_reads oltp_read_only 159.12ms 158.56ms -553us 0.997x PASS
mem_writes oltp_bulk_insert 343.71ms 340.96ms -2.75ms 0.992x PASS
mem_writes oltp_insert 36.23ms 36.32ms +90us 1.002x PASS
mem_writes oltp_update_index 118.83ms 120.73ms +1.91ms 1.016x PASS
mem_writes oltp_update_non_index 84.92ms 84.95ms +34us 1.000x PASS
mem_writes oltp_delete_insert 96.95ms 97.97ms +1.03ms 1.011x PASS
mem_writes oltp_write_only 59.34ms 59.49ms +146us 1.002x PASS
mem_writes types_delete_insert 53.75ms 53.32ms -437us 0.992x PASS
mem_writes oltp_read_write 150.12ms 148.34ms -1.77ms 0.988x PASS
file_reads oltp_point_select 66.31ms 66.14ms -174us 0.997x PASS
file_reads oltp_range_select 23.07ms 22.78ms -292us 0.987x PASS
file_reads oltp_sum_range 22.26ms 22.39ms +137us 1.006x PASS
file_reads oltp_order_range 4.17ms 4.13ms -36us 0.991x PASS
file_reads oltp_distinct_range 5.18ms 5.18ms +1us 1.000x PASS
file_reads oltp_index_scan 9.03ms 9.05ms +19us 1.002x PASS
file_reads select_random_points 33.52ms 33.48ms -40us 0.999x PASS
file_reads select_random_ranges 11.31ms 11.23ms -84us 0.993x PASS
file_reads covering_index_scan 7.35ms 7.51ms +156us 1.021x PASS
file_reads groupby_scan 40.87ms 40.73ms -141us 0.997x PASS
file_reads index_join 12.53ms 12.53ms +0us 1.000x PASS
file_reads index_join_scan 6.12ms 6.15ms +37us 1.006x PASS
file_reads types_table_scan 1.25s 1.25s +4.10ms 1.003x PASS
file_reads table_scan 1.36s 1.37s +3.56ms 1.003x PASS
file_reads oltp_read_only 201.18ms 201.66ms +490us 1.002x PASS
file_writes oltp_bulk_insert 359.16ms 363.42ms +4.27ms 1.012x PASS
file_writes oltp_insert 46.21ms 46.62ms +405us 1.009x PASS
file_writes oltp_update_index 146.66ms 147.30ms +634us 1.004x PASS
file_writes oltp_update_non_index 106.74ms 106.03ms -709us 0.993x PASS
file_writes oltp_delete_insert 119.79ms 120.53ms +733us 1.006x PASS
file_writes oltp_write_only 79.85ms 79.55ms -302us 0.996x PASS
file_writes types_delete_insert 66.99ms 67.45ms +463us 1.007x PASS
file_writes oltp_read_write 170.69ms 169.12ms -1.58ms 0.991x PASS
ac_reads oltp_point_select 66.75ms 67.21ms +454us 1.007x PASS
ac_reads oltp_range_select 23.05ms 22.90ms -145us 0.994x PASS
ac_reads oltp_sum_range 22.37ms 22.39ms +16us 1.001x PASS
ac_reads oltp_order_range 4.13ms 4.14ms +14us 1.003x PASS
ac_reads oltp_distinct_range 5.22ms 5.22ms -2us 1.000x PASS
ac_reads oltp_index_scan 9.08ms 9.20ms +122us 1.013x PASS
ac_reads select_random_points 33.71ms 33.65ms -66us 0.998x PASS
ac_reads select_random_ranges 11.39ms 11.18ms -207us 0.982x PASS
ac_reads covering_index_scan 7.37ms 7.36ms -6us 0.999x PASS
ac_reads groupby_scan 40.74ms 40.66ms -73us 0.998x PASS
ac_reads index_join 12.49ms 12.40ms -88us 0.993x PASS
ac_reads index_join_scan 6.22ms 6.08ms -141us 0.977x PASS
ac_reads types_table_scan 1.24s 1.25s +8.49ms 1.007x PASS
ac_reads table_scan 1.38s 1.37s -12.27ms 0.991x PASS
ac_reads oltp_read_only 202.12ms 202.68ms +557us 1.003x PASS
ac_writes oltp_bulk_insert_ac 64.43ms 65.58ms +1.15ms 1.018x PASS
ac_writes oltp_insert_ac 85.42ms 85.40ms -15us 1.000x PASS
ac_writes oltp_update_index_ac 100.36ms 101.53ms +1.18ms 1.012x PASS
ac_writes oltp_update_non_index_ac 77.22ms 75.59ms -1.62ms 0.979x PASS
ac_writes oltp_delete_insert_ac 91.99ms 91.27ms -716us 0.992x PASS
ac_writes oltp_write_only_ac 93.86ms 95.00ms +1.14ms 1.012x PASS
ac_writes types_delete_insert_ac 77.74ms 77.53ms -210us 0.997x PASS
ac_writes oltp_read_write_ac 98.62ms 97.97ms -651us 0.993x PASS
int details
Section Test Baseline Candidate Delta Ratio Result
mem_reads oltp_point_select 14.95ms 15.02ms +69us 1.005x PASS
mem_reads oltp_range_select 7.98ms 7.69ms -292us 0.963x PASS
mem_reads oltp_sum_range 7.35ms 6.90ms -448us 0.939x PASS
mem_reads oltp_order_range 1.88ms 1.87ms -8us 0.996x PASS
mem_reads oltp_distinct_range 2.48ms 2.48ms +2us 1.001x PASS
mem_reads oltp_index_scan 2.96ms 2.93ms -32us 0.989x PASS
mem_reads select_random_points 8.32ms 7.71ms -618us 0.926x PASS
mem_reads select_random_ranges 2.23ms 2.14ms -92us 0.959x PASS
mem_reads covering_index_scan 2.40ms 2.41ms +12us 1.005x PASS
mem_reads groupby_scan 21.39ms 21.54ms +151us 1.007x PASS
mem_reads index_join 5.14ms 5.30ms +159us 1.031x PASS
mem_reads index_join_scan 2.83ms 3.03ms +208us 1.074x PASS
mem_reads types_table_scan 836.85ms 826.40ms -10.45ms 0.988x PASS
mem_reads table_scan 913.03ms 902.64ms -10.39ms 0.989x PASS
mem_reads oltp_read_only 72.36ms 72.36ms +7us 1.000x PASS
mem_writes oltp_bulk_insert 131.82ms 132.08ms +265us 1.002x PASS
mem_writes oltp_insert 15.86ms 15.90ms +40us 1.003x PASS
mem_writes oltp_update_index 64.97ms 64.54ms -429us 0.993x PASS
mem_writes oltp_update_non_index 36.07ms 37.61ms +1.54ms 1.043x PASS
mem_writes oltp_delete_insert 47.95ms 47.61ms -340us 0.993x PASS
mem_writes oltp_write_only 28.05ms 28.08ms +34us 1.001x PASS
mem_writes types_delete_insert 23.30ms 23.64ms +338us 1.015x PASS
mem_writes oltp_read_write 63.27ms 63.07ms -195us 0.997x PASS
file_reads oltp_point_select 22.28ms 22.20ms -79us 0.996x PASS
file_reads oltp_range_select 8.63ms 8.60ms -34us 0.996x PASS
file_reads oltp_sum_range 8.47ms 8.40ms -62us 0.993x PASS
file_reads oltp_order_range 2.08ms 2.05ms -27us 0.987x PASS
file_reads oltp_distinct_range 2.65ms 2.64ms -8us 0.997x PASS
file_reads oltp_index_scan 4.12ms 3.92ms -199us 0.952x PASS
file_reads select_random_points 9.41ms 9.18ms -237us 0.975x PASS
file_reads select_random_ranges 3.11ms 3.11ms -4us 0.999x PASS
file_reads covering_index_scan 3.20ms 3.19ms -7us 0.998x PASS
file_reads groupby_scan 21.39ms 21.44ms +54us 1.003x PASS
file_reads index_join 5.82ms 5.99ms +173us 1.030x PASS
file_reads index_join_scan 2.95ms 3.11ms +160us 1.054x PASS
file_reads types_table_scan 836.06ms 828.47ms -7.59ms 0.991x PASS
file_reads table_scan 910.03ms 904.01ms -6.01ms 0.993x PASS
file_reads oltp_read_only 84.19ms 84.11ms -85us 0.999x PASS
file_writes oltp_bulk_insert 192.68ms 194.48ms +1.80ms 1.009x PASS
file_writes oltp_insert 29.09ms 31.47ms +2.38ms 1.082x PASS
file_writes oltp_update_index 110.24ms 110.58ms +340us 1.003x PASS
file_writes oltp_update_non_index 70.05ms 70.79ms +741us 1.011x PASS
file_writes oltp_delete_insert 96.88ms 102.21ms +5.33ms 1.055x PASS
file_writes oltp_write_only 87.01ms 74.60ms -12.41ms 0.857x PASS
file_writes types_delete_insert 61.04ms 93.27ms +32.24ms 1.528x TRANSIENT
file_writes oltp_read_write 193.33ms 134.66ms -58.67ms 0.697x PASS
ac_reads oltp_point_select 22.30ms 22.48ms +186us 1.008x PASS
ac_reads oltp_range_select 8.89ms 9.00ms +102us 1.011x PASS
ac_reads oltp_sum_range 8.37ms 8.33ms -35us 0.996x PASS
ac_reads oltp_order_range 1.99ms 1.98ms -14us 0.993x PASS
ac_reads oltp_distinct_range 2.60ms 2.58ms -16us 0.994x PASS
ac_reads oltp_index_scan 3.90ms 4.29ms +390us 1.100x PASS
ac_reads select_random_points 9.40ms 9.52ms +114us 1.012x PASS
ac_reads select_random_ranges 3.17ms 3.04ms -125us 0.961x PASS
ac_reads covering_index_scan 3.17ms 3.17ms -7us 0.998x PASS
ac_reads groupby_scan 21.50ms 21.32ms -178us 0.992x PASS
ac_reads index_join 5.71ms 5.78ms +65us 1.011x PASS
ac_reads index_join_scan 3.14ms 3.19ms +48us 1.015x PASS
ac_reads types_table_scan 835.62ms 828.75ms -6.88ms 0.992x PASS
ac_reads table_scan 912.27ms 936.43ms +24.16ms 1.026x PASS
ac_reads oltp_read_only 82.11ms 82.31ms +205us 1.002x PASS
ac_writes oltp_bulk_insert_ac 650.66ms 639.49ms -11.17ms 0.983x PASS
ac_writes oltp_insert_ac 375.51ms 453.31ms +77.79ms 1.207x PASS
ac_writes oltp_update_index_ac 1.22s 790.79ms -433.43ms 0.646x PASS
ac_writes oltp_update_non_index_ac 916.93ms 911.32ms -5.61ms 0.994x PASS
ac_writes oltp_delete_insert_ac 929.47ms 1.09s +160.26ms 1.172x PASS
ac_writes oltp_write_only_ac 685.59ms 373.43ms -312.17ms 0.545x PASS
ac_writes types_delete_insert_ac 635.98ms 703.28ms +67.30ms 1.106x PASS
ac_writes oltp_read_write_ac 329.85ms 922.17ms +592.32ms 2.796x TRANSIENT
textpk details
Section Test Baseline Candidate Delta Ratio Result
mem_reads oltp_point_select 37.69ms 37.79ms +102us 1.003x PASS
mem_reads oltp_range_select 14.08ms 14.19ms +115us 1.008x PASS
mem_reads oltp_sum_range 14.22ms 14.08ms -138us 0.990x PASS
mem_reads oltp_order_range 3.21ms 3.17ms -36us 0.989x PASS
mem_reads oltp_distinct_range 4.29ms 4.23ms -58us 0.986x PASS
mem_reads oltp_index_scan 6.43ms 6.40ms -34us 0.995x PASS
mem_reads select_random_points 21.21ms 21.14ms -62us 0.997x PASS
mem_reads select_random_ranges 5.20ms 5.21ms +13us 1.003x PASS
mem_reads covering_index_scan 4.71ms 4.82ms +113us 1.024x PASS
mem_reads groupby_scan 34.94ms 34.31ms -630us 0.982x PASS
mem_reads index_join 9.46ms 9.71ms +257us 1.027x PASS
mem_reads index_join_scan 5.55ms 5.30ms -249us 0.955x PASS
mem_reads types_table_scan 1.24s 1.27s +25.70ms 1.021x PASS
mem_reads table_scan 1.39s 1.41s +22.11ms 1.016x PASS
mem_reads oltp_read_only 138.54ms 138.78ms +244us 1.002x PASS
mem_writes oltp_bulk_insert 354.44ms 360.92ms +6.48ms 1.018x PASS
mem_writes oltp_insert 39.89ms 40.24ms +348us 1.009x PASS
mem_writes oltp_update_index 135.91ms 136.83ms +914us 1.007x PASS
mem_writes oltp_update_non_index 87.95ms 88.20ms +243us 1.003x PASS
mem_writes oltp_delete_insert 105.91ms 105.40ms -507us 0.995x PASS
mem_writes oltp_write_only 62.71ms 62.94ms +232us 1.004x PASS
mem_writes types_delete_insert 55.99ms 56.91ms +918us 1.016x PASS
mem_writes oltp_read_write 141.53ms 140.22ms -1.31ms 0.991x PASS
file_reads oltp_point_select 63.47ms 63.64ms +177us 1.003x PASS
file_reads oltp_range_select 16.77ms 16.96ms +192us 1.011x PASS
file_reads oltp_sum_range 16.91ms 17.08ms +169us 1.010x PASS
file_reads oltp_order_range 3.56ms 3.57ms +17us 1.005x PASS
file_reads oltp_distinct_range 4.63ms 4.56ms -74us 0.984x PASS
file_reads oltp_index_scan 9.09ms 9.01ms -83us 0.991x PASS
file_reads select_random_points 24.43ms 24.52ms +88us 1.004x PASS
file_reads select_random_ranges 7.73ms 7.78ms +42us 1.005x PASS
file_reads covering_index_scan 7.25ms 7.39ms +143us 1.020x PASS
file_reads groupby_scan 35.44ms 35.01ms -434us 0.988x PASS
file_reads index_join 11.27ms 11.27ms -5us 1.000x PASS
file_reads index_join_scan 5.81ms 5.91ms +101us 1.017x PASS
file_reads types_table_scan 1.24s 1.26s +20.04ms 1.016x PASS
file_reads table_scan 1.38s 1.41s +32.35ms 1.023x PASS
file_reads oltp_read_only 175.53ms 176.36ms +835us 1.005x PASS
file_writes oltp_bulk_insert 385.73ms 386.26ms +530us 1.001x PASS
file_writes oltp_insert 52.13ms 52.49ms +357us 1.007x PASS
file_writes oltp_update_index 172.13ms 171.18ms -949us 0.994x PASS
file_writes oltp_update_non_index 112.92ms 114.38ms +1.46ms 1.013x PASS
file_writes oltp_delete_insert 135.87ms 135.73ms -134us 0.999x PASS
file_writes oltp_write_only 85.68ms 86.26ms +580us 1.007x PASS
file_writes types_delete_insert 75.31ms 75.17ms -144us 0.998x PASS
file_writes oltp_read_write 164.02ms 165.76ms +1.74ms 1.011x PASS
ac_reads oltp_point_select 62.38ms 63.45ms +1.07ms 1.017x PASS
ac_reads oltp_range_select 16.85ms 16.92ms +64us 1.004x PASS
ac_reads oltp_sum_range 16.70ms 17.18ms +479us 1.029x PASS
ac_reads oltp_order_range 3.56ms 3.51ms -45us 0.987x PASS
ac_reads oltp_distinct_range 4.62ms 4.59ms -33us 0.993x PASS
ac_reads oltp_index_scan 8.95ms 9.03ms +73us 1.008x PASS
ac_reads select_random_points 24.37ms 24.32ms -51us 0.998x PASS
ac_reads select_random_ranges 7.71ms 7.84ms +137us 1.018x PASS
ac_reads covering_index_scan 7.26ms 7.38ms +120us 1.017x PASS
ac_reads groupby_scan 35.25ms 34.91ms -338us 0.990x PASS
ac_reads index_join 11.34ms 11.19ms -154us 0.986x PASS
ac_reads index_join_scan 5.89ms 5.82ms -72us 0.988x PASS
ac_reads types_table_scan 1.24s 1.26s +25.65ms 1.021x PASS
ac_reads table_scan 1.38s 1.41s +30.12ms 1.022x PASS
ac_reads oltp_read_only 178.08ms 176.95ms -1.12ms 0.994x PASS
ac_writes oltp_bulk_insert_ac 84.45ms 83.93ms -521us 0.994x PASS
ac_writes oltp_insert_ac 99.12ms 100.91ms +1.80ms 1.018x PASS
ac_writes oltp_update_index_ac 116.95ms 118.00ms +1.05ms 1.009x PASS
ac_writes oltp_update_non_index_ac 94.21ms 96.07ms +1.86ms 1.020x PASS
ac_writes oltp_delete_insert_ac 110.58ms 107.22ms -3.36ms 0.970x PASS
ac_writes oltp_write_only_ac 106.11ms 109.14ms +3.03ms 1.029x PASS
ac_writes types_delete_insert_ac 98.18ms 94.95ms -3.23ms 0.967x PASS
ac_writes oltp_read_write_ac 115.61ms 114.85ms -764us 0.993x PASS
vc details
Section Test Baseline Candidate Delta Ratio Result
vc status_clean_many_tables 82.47ms 82.60ms +130us 1.002x PASS
vc status_dirty_many_tables 85.90ms 85.82ms -80us 0.999x PASS
vc diff_regular_working_one_table 78.90ms 78.85ms -42us 0.999x PASS
vc diff_regular_working_many_tables 91.79ms 91.94ms +146us 1.002x PASS
vc diff_stat_working_many_tables 91.97ms 91.53ms -442us 0.995x PASS
vc diff_schema_working_many_tables 92.02ms 92.49ms +470us 1.005x PASS
vc branch_list_many_branches 23.85ms 23.09ms -762us 0.968x PASS
vc branch_create_delete 26.21ms 26.09ms -118us 0.995x PASS
vc checkout_branch_clean 57.21ms 57.66ms +452us 1.008x PASS
vc merge_data_no_conflicts 30.50ms 30.84ms +348us 1.011x PASS
vc merge_schema_no_conflicts 23.34ms 23.92ms +575us 1.025x PASS
vc merge_data_conflicts 127.98ms 128.01ms +35us 1.000x PASS
vc merge_data_conflicts_with_resolve 128.00ms 128.65ms +647us 1.005x PASS

All relative performance gates passed.

@itoqa

itoqa Bot commented Aug 6, 2026

Copy link
Copy Markdown

Ito QA test results
Commit: 290103b: 14 test cases ran, 14 passed ✅.

Summary

Coverage spans normal and edge-case table comparison behavior, including created, dropped, renamed, modified, and multi-table data, as well as invalid or incomplete references and missing or unusual table filters. It also checks error recovery, isolation between concurrent or repeated queries, stable snapshots, and compatibility of summary results, with all exercised behaviors healthy.

Safe to merge — the exercised comparison, validation, error-handling, state-isolation, and snapshot behaviors show no PR-attributable regressions or failures. Any environment limitation is not a product failure and is a flag for later rather than a merge blocker.

Tests run by Ito

View full run

Result Severity Type Description
Filter A filtered diff-stat query for a table that does not exist fails cleanly with the expected table-not-found message instead of looking like an empty successful result.
Filter A changed table did not hide the missing-table error. The filtered request failed cleanly with no diff-stat rows.
Filter The local database returned a clear table-not-found error for a missing filter, both with and without an unrelated table change. The separate comparison tool could not run because its required command was not installed, so native behavior was used to complete the check.
Filter After a missing table filter failed, the same connection successfully returned the changed table and the full unfiltered results without carrying over the old error.
Filter An unusual table filter was treated as plain text. The command returned a handled table-not-found error containing the full text, without running the embedded statement or crashing.
Lifecycle An invalid starting reference returned a handled error, exited with status 1, and produced no rows.
Lifecycle Queries missing one or both required references return a clear error and no statistics rows.
Lifecycle The unfiltered diff scan completed successfully and returned the changed tables t and u with the expected statistics.
Lifecycle Separate database clients kept their own table filters and results. The invalid filter returned a clear error, the valid filter returned only table u, and reopening the database preserved the unfiltered results.
Lifecycle An unknown table makes the statistics query fail, while the summary query still returns zero rows. Repeating the statistics query returns the same handled error, so the first query does not leave stale state behind.
Stat A dropped table still returns its deletion counts. The result shows 3 rows and 9 cells deleted, with the old count at 3 and the new count at 0.
Stat A newly created table is included in the comparison with three added rows and nine added cells.
Stat Renaming the table kept both name-based checks valid, and the full comparison returned one change instead of duplicate rows.
Stat A scan using fixed references kept the same results after another connection committed table c. A later scan using current references saw c separately, so the original results were not mixed with the new commit.

Tip

Reply with @itoqa to send us feedback on this test run.

@timsehn
timsehn merged commit ffebc9b into master Aug 6, 2026
59 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant