What's new with BroadSQL 5.0.7 (2026-08-28)

BroadSQL 5.0.2 introduces PULL, a single command that replaces the patchwork of destination-specific export logic with one unified syntax covering every export target BroadSQL supports: a local H2 database, a multi-tab Excel/OpenDocument spreadsheet, or a flat CSV, plain-text, JSON, Markdown, or HTML file, the latter three entirely new to BroadSQL. EXPORT and DUMP remain fully supported and completely unchanged for existing scripts; PULL is additive, not a replacement.

New features

PULL: one command, every export destination

PULL <source> TO <name>.<table> AS H2 [MODE OVERWRITE | MODE APPEND KEY(<column>)] ;
PULL <source> TO <name>.<tab>   AS XLSX | ODS ;
PULL <source> TO <name>         AS CSV | TXT | JSON | MD | HTML ;

<source> is a bare table/view name (shortcut for SELECT * FROM <name>), / for the last query you ran, or a parenthesized query. Every destination validates column types up front and rejects BLOB/CLOB/binary/structural columns with a clear error before writing anything, rather than silently corrupting or truncating the output: stricter than EXPORT/DUMP, which write whatever the database driver happens to return for such a column. See PULL for the full guide with worked examples for every case.

Copying into a local H2 database (AS H2)

PULL CUSTOMER TO WORKCOPY.CUSTOMER AS H2; reuses an existing H2 connection named WORKCOPY, or creates and registers one automatically if none exists: either way, the target table doesn't need to exist beforehand, its columns and types come straight from the query. Two modes:

  • MODE OVERWRITE (the default) drops and recreates the table from scratch every run.
  • MODE APPEND KEY(<column>) never drops or updates anything; it loads every row on the first run, and on every later run inserts only the rows whose key column is greater than the target's current maximum, leaving existing rows completely untouched. Typical use: mirror a table that gets old rows purged upstream (e.g. every few months) into a local H2 database with a much longer retention window, refreshed on a schedule with zero manual bookkeeping; re-running with no new source rows simply inserts nothing.

Building a multi-tab spreadsheet (AS XLSX / AS ODS)

PULL COUNTRY TO REPORT.COUNTRIES AS XLSX; writes a COUNTRIES tab into REPORT.xlsx. Unlike EXPORT/DUMP, which always overwrite the entire file, PULL erases and replaces just the named tab, leaving every other tab in the file completely untouched; so several PULL calls, each naming a different tab, build up one multi-tab file over time (PULL CITY TO REPORT.CITIES AS XLSX; right after the example above adds a second tab without disturbing the first). Every file also gets an automatic QUERIES tab, maintained for you: one row per data tab, recording that tab's query, the date it was last pulled, the source database connection, and how many rows it holds; updated in place each time that tab is re-pulled, never duplicated.

Writing a flat file (AS CSV / AS TXT / AS JSON / AS MD / AS HTML)

Always a full, clean overwrite of the whole file: no per-file metadata, no partial rewrite, just a plain, self-contained result every time:

  • CSV: comma or semicolon, see the new CsvSeparator setting below.
  • TXT: always tab-separated.
  • JSON (new): a single array of objects, one per row, the shape most tools expect when asked for "the data as JSON". Numbers are written exactly when possible; dates/times use ISO-8601.
  • Markdown (new): a GitHub-Flavored-Markdown table, ready to paste straight into a GitHub/GitLab issue or PR, a Confluence or Notion page, or a Slack message.
  • HTML (new): a lightly-styled <table> fragment (no full page wrapper), ready to paste directly into an email or wiki page.

All five apply proper quoting/escaping automatically (RFC 4180 for CSV/TXT, JSON string escaping, Markdown's |/newline handling, HTML entity escaping), so a value containing the separator, a quote, or a line break never corrupts the file.

New CsvSeparator setting

Controls the field separator used by PULL ... AS CSV: a single character, e.g. ; or ,. Optional: defaults to ; (semicolon) if not set in your BroadSQL.ini/broadsqlux.ini, so existing installs need no changes. Independent of the existing FieldsSeparator/SET SEPARATOR, which continues to govern only EXPORT/DUMP's .txt output exactly as before (.csv via EXPORT/DUMP has always used a comma, unaffected by either setting). See Application settings.

Installing BroadSQL 5.0.7

See Installation.

Upgrading from previous releases

  • No action required. PULL is purely additive, EXPORT/DUMP/SET SEPARATOR behave exactly as before, and the new CsvSeparator setting is optional with a sensible default.
  • MS Access (.mdb) export is now a frozen, legacy format. It is not part of PULL's new unified syntax and is not receiving further development, though EXPORT/DUMP's existing .mdb output continues to work exactly as it does today. If your workflow depends on this format and you'd like to see it continue evolving, let us know. See Export & Dump.

Known issues

  • CTRL+C does not currently cancel an in-progress PULL (unlike EXPORT/DUMP/SELECT, which it does interrupt cleanly).
  • MODE MERGE is recognized by PULL's grammar but not implemented yet: using it fails with an explicit "not implemented yet" error rather than being silently ignored.
  • PULL ... AS XLSX shares Excel's 1,048,576-data-row-per-sheet limit; AS ODS enforces the same practical cap as a memory safeguard (SODS holds the whole sheet in memory, unlike Excel's streaming writer). Both stop cleanly and report how many rows were and weren't written rather than producing a corrupt file.
  • EXPORT/DUMP's own known limitations are unchanged: BLOB/CLOB/NCLOB columns still fall back to generic text rather than a dedicated representation, and a NULL binary column exported to Excel (via EXPORT/DUMP, not PULL) still shows placeholder text instead of a blank cell. Note that PULL's destinations avoid both issues entirely by rejecting these column types outright before writing anything: see "New features" above.
  • On some terminals, pressing CTRL+C while BroadSQL is idle at the prompt (no command currently running) can still exit the application. Only the EXIT command is guaranteed to close BroadSQL cleanly in every case.
  • The CONFIG screen for managing connections is available on Windows only. On Linux, connections are managed with direct SQL against the CDF's CONNECTIONS table.