GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com — Add VoltDB by jwiebema1 · Pull Request #1375 · sqlancer/sqlancer

Conversation

@jwiebema1

@jwiebema1 jwiebema1 commented Nov 12, 2026

Copy link
Copy Markdown

This adds a provider for VoltDB, an in-memory, partitioned, ACID SQL database. We have run it against VoltDB for several weeks, single nodes and clusters, and it has found more than seventy bugs, most of them wrong results.

What it adds

  • The provider (src/sqlancer/voltdb): schema, data and typed expression generators over VoltDB's SQL. It covers replicated and partitioned tables, indexes, materialized views, stored procedures and streams, and its connection goes through the VoltDB JDBC driver (org.voltdb:voltdbclient).
  • The common oracles: NoREC, TLP (WHERE, DISTINCT, HAVING, aggregates) and PQS. The provider evaluates VoltDB's expressions itself for PQS.
  • Oracles for VoltDB's own features:
    • parameterized statements, materialized views, LIMIT/OFFSET, subqueries, window functions, set operations, derived tables and CTEs;
    • stored procedures, schema changes and the plan cache, geospatial functions;
    • differential query plans (PLANS) and streams.
  • Oracles that need a cluster set up for them, each behind an option: permissions with security on, durability across a whole-cluster crash, XDCR convergence, and a mirror cluster running another version (DIFF).
  • src/sqlancer/voltdb/README.md describes each oracle and option.

Changes to shared code

They are in the first commit, kept apart from the provider:

  • GlobalState and SQLQueryAdapter.checkException pass an IgnoreMeException through instead of wrapping it in an AssertionError. A provider's connection can then skip a statement or a database. VoltDB's does this after a node failure, when a statement may or may not have committed.
  • CompositeTestOracle records the oracle that ran last before running it. getLastQueryString then names the oracle that failed, and its reproducer is returned, so --use-reducer works with more than one oracle.
  • SQLancerResultSet.getObject(int).

Testing

  • mvn verify passes, including checkstyle, PMD, SpotBugs and check_names.py (the provider has its entry).
  • TestVoltDB runs the main oracles against a server on localhost:21212 when VOLTDB_AVAILABLE=true, as the other servers' tests do.

Not in this PR

  • CI. VoltDB's public image, voltactivedata/volt-developer-edition, needs a license key, which a workflow would have to hold as a secret. We will follow up with a CI job once we have a key we can give the project, as CONTRIBUTING.md allows.
  • Ticket numbers. Code comments name issues in VoltDB's tracker, such as ENG-30583, which are not public. --avoid-known-bugs true (the default) steers the generators around those bugs. Each workaround's comment says what it avoids, so it can be removed once the bug is fixed.

We would be glad to adjust anything to fit the project's conventions.

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
jwiebema1 added 3 commits November 10, 2026 14:29
@jwiebema1
Let a provider skip a statement or database from its connection, and …
c75cf9d
…reduce with several oracles

- GlobalState and SQLQueryAdapter.checkException pass an IgnoreMeException through instead of wrapping it in an
  AssertionError, so that a provider's connection can skip the statement or the database (VoltDB's does after a
  node failure, when a statement may or may not have committed).
- CompositeTestOracle records the oracle that ran last before running it, so getLastQueryString names the oracle
  that failed, and returns that oracle's reproducer, so that --use-reducer works with more than one oracle.
- SQLancerResultSet.getObject(int).
@jwiebema1
Add VoltDB
31676ae
A provider for VoltDB (https://www.voltactivedata.com), an in-memory, partitioned, ACID SQL database, with a typed
expression generator over VoltDB's SQL and the NoREC, TLP (WHERE, DISTINCT, HAVING, aggregates) and PQS oracles,
and oracles for VoltDB's own features: parameterized statements, materialized views, LIMIT, subqueries, window
functions, set operations, derived tables, stored procedures, schema changes, geospatial functions, query plans
(PLANS), durability across a cluster restart (DURABLE), XDCR convergence, permissions (PERMS) and streams.
src/sqlancer/voltdb/README.md describes them and the options.

TestVoltDB runs the main oracles against a server on localhost:21212 when VOLTDB_AVAILABLE=true. A CI job is to
follow: VoltDB's public Developer Edition image needs a license key.
@jwiebema1
VoltDB: a README for SQLancer's users, without Volt's internal milest…
2cfa6a1
…ones and tickets
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Reviewers

No reviews

Uh oh!

There was an error while loading. Please reload this page.

Assignees

No one assigned

Labels

None yet

Projects

None yet

Milestone

No milestone

Development

Successfully merging this pull request may close these issues.

Uh oh!

There was an error while loading. Please reload this page.

1 participant

@jwiebema1
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
You are visitor 01402520 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.