Release Notes — Sui 0.75N¶
Branch: Sui0.75N
Base: Sui 0.75M (Connection Manager)
Date: 2026-05-10
Summary of Changes¶
| Area | Type | Description |
|---|---|---|
| SQL Dialect Converter | New feature | New ConvertSqlDialog — DB2-to-BigQuery SQL conversion with warnings panel |
| SQL Dialect Converter | New feature | DECIMAL(expr, p, s) → ROUND(CAST(expr AS NUMERIC), s) + warning |
| SQL Dialect Converter | New feature | DECIMAL(expr, p) → CAST(expr AS NUMERIC) + warning |
| SQL Dialect Converter | New feature | VARCHAR_FORMAT(expr, fmt) → FORMAT_TIMESTAMP / FORMAT_DATE with DB2-to-BigQuery format-string conversion |
| SQL Dialect Converter | New feature | MERGE INTO → MERGE; target-alias stripped from UPDATE SET blocks |
| SQL Dialect Converter | New feature | CTE SELECT * body: column header list stripped and warned instead of left as invalid syntax |
| SQL Dialect Converter | New feature | NVL, NVL2, ZEROIFNULL, NULLIFZERO, DECODE, ADD_MONTHS, CHR, ASCII, TRUNCATE, MINUS→EXCEPT DISTINCT conversions |
| SQL Dialect Converter | Bug fix | Warning bullet character rendered as • — fixed to \u2022 |
| Options menu | New feature | "Convert SQL Dialect…" added to the Options menu |
| QryPop menu | Enhancement | Right-click menu reorganised — Format/Validate/Convert at top; file/table ops grouped; Edit ops at bottom |
| QryPop menu | Enhancement | "Sheet Preferences" item removed |
| Inline directives | New feature | #URL= directive — switches JDBC connection mid-script without changing the URL box |
| Inline directives | New feature | #SET KEY=VALUE alternative syntax (previously only #SET= KEY VALUE) |
| Inline directives | Bug fix | Query Report title now shows the #URL= override URL instead of the URL-box URL |
| Syntax highlighting | Enhancement | ~25 new SQL keywords added (JOIN, ON, NULL, IS, LIKE, BETWEEN, DISTINCT, WITH, OVER, PARTITION, MERGE, LIMIT, EXCEPT, INTERSECT, MINUS, FETCH, ROWS, ONLY, NEXT, OFFSET, CROSS) |
| Syntax highlighting | Enhancement | ~15 new DDL keywords added (INDEX, VIEW, UNIQUE, PRIMARY, KEY, FOREIGN, REFERENCES, CONSTRAINT, DEFAULT, COLUMN, PROCEDURE, FUNCTION, TRIGGER, SEQUENCE, SCHEMA) |
| Syntax highlighting | Enhancement | ~20 new function keywords added (TRIM, CONVERT, EXTRACT, NVL, LPAD, RPAD, LISTAGG, ROW_NUMBER, RANK, DENSE_RANK, LAG, LEAD, FIRST_VALUE, LAST_VALUE, NTILE, CUME_DIST, PERCENT_RANK, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, NUMERIC, INTERVAL, BOOLEAN, NVARCHAR, BIGINT) |
| Syntax highlighting | Bug fix | /* comment inside a -- single-line comment no longer incorrectly coloured the rest of the document |
| Syntax highlighting | Performance | Syntax scanning skipped when document exceeds 5 000 characters; styles reset on every change to prevent colour bleeding |
| SQL Tree | Enhancement | Schema node now groups objects into Tables / Views / Aliases / Synonyms sub-folders; only non-empty groups shown |
| SQL Tree | Enhancement | "Include routines" checkbox adds a lazy Routines group alongside the object-type groups |
| Excel export | Enhancement | Numeric columns written as Excel numeric cells; integers and decimals use separate configurable formats |
| Excel export | Enhancement | BigDecimal columns formatted as decimals; all others attempted as integers with fallback to string |
| Excel export | Enhancement | Meta sheet now includes "Result set status" (full / partial) and row count |
| Excel export | Enhancement | Font, integer format, and decimal format configurable in Preferences → Export |
| Preferences → Export | New feature | New fields: XLS font name (dropdown of installed fonts), XLS integer format, XLS decimal format |
| ConnDB | Bug fix | sanitizeUrl negative lookahead prevents stripping :// from BigQuery https:// embedded URLs |
| Toolbar | Enhancement | Connection Manager toolbar button tooltip updated; action wired to ConnManager dialog |
| Version | Bump | Version string updated to 0.75N in Sui.java, ExpXLS.java, ExpXLSRS.java, pom.xml, About dialog |
Detailed Changes by Area¶
SQL Dialect Converter (SqlDialectConverter.java, ConvertSqlDialog.java)¶
A new Convert SQL Dialect… dialog is available from the Options menu and from the right-click menu in the query editor. It converts DB2 SQL to BigQuery-compatible SQL and collects warnings about constructs that were changed or need manual review.
Function conversions¶
| DB2 construct | BigQuery equivalent | Notes |
|---|---|---|
DECIMAL(expr, p, s) |
ROUND(CAST(expr AS NUMERIC), s) |
Warning generated |
DECIMAL(expr, p) |
CAST(expr AS NUMERIC) |
Warning generated |
VARCHAR_FORMAT(expr, fmt) |
FORMAT_TIMESTAMP(bq_fmt, expr) or FORMAT_DATE(…) |
DB2 format tokens mapped to BigQuery strftime tokens |
NVL(a, b) |
COALESCE(a, b) |
|
NVL2(a, b, c) |
IF(a IS NOT NULL, b, c) |
|
ZEROIFNULL(a) |
COALESCE(a, 0) |
|
NULLIFZERO(a) |
NULLIF(a, 0) |
|
DECODE(e, s, r, …) |
CASE WHEN e=s THEN r … END |
|
ADD_MONTHS(d, n) |
DATE_ADD(d, INTERVAL n MONTH) |
|
CHR(n) |
CODE_POINTS_TO_STRING([n]) |
|
ASCII(s) |
TO_CODE_POINTS(s)[OFFSET(0)] |
|
TRUNCATE(n, s) |
TRUNC(n, s) |
|
MINUS (set operator) |
EXCEPT DISTINCT |
|
MERGE INTO tgt t … |
MERGE tgt AS t … |
INTO removed; target alias in UPDATE SET blocks de-qualified |
CTE handling¶
A CTE that selects SELECT * in its body previously left the column header list in place,
producing invalid BigQuery syntax. The converter now strips the header list and emits a warning.
Date format mapping (convertDb2DateFmt)¶
| DB2 token | BigQuery token |
|---|---|
YYYY |
%Y |
MM |
%m |
DD |
%d |
HH24 |
%H |
HH |
%I |
MI |
%M |
SS |
%S |
DY |
%a |
DAY |
%A |
MON |
%b |
MONTH |
%B |
Inline Directives (nonSQL.java, RunIt.java)¶
#URL= — per-statement connection override¶
A SQL script can now switch JDBC connections mid-execution:
The target database must have been connected to during the current session so that credentials are available in the session-only memory store. If the connection fails, an error message is shown and execution stops. The override is reset at the start of each Run, so it does not persist between runs.
The Query Report window title reflects the overriding URL, not the URL-box URL.
#SET — new syntax¶
In addition to the original #SET= KEY VALUE form, the natural KEY=VALUE form is
now also accepted:
Both forms store the value in session memory where it can be referenced as &&MYSCHEMA
without prompting the user.
See InlineDirectives.md for full documentation of all inline
directives including <include> and #FILX=.
Syntax Highlighting (Highlighter.java)¶
- Approximately 60 additional SQL keywords are now recognised and coloured.
- Performance cap: when the editor document exceeds 5 000 characters, keyword
scanning is skipped entirely. The
HighLightOnpreference is not changed, so highlighting resumes automatically when the document is cleared or reduced. - Comment fix: a
/*token appearing after--on the same line no longer triggers multi-line comment colouring for the rest of the document. - Styles are reset on every keystroke so that coloured text does not bleed into newly typed characters when highlighting is toggled off mid-session.
SQL Tree (SQLTreePanel.java)¶
When a schema node is expanded, objects are now placed into typed sub-folders:
| Sub-folder | TABLE_TYPE values |
|---|---|
| Tables | TABLE, SYSTEM TABLE, GLOBAL TEMPORARY, LOCAL TEMPORARY, and any unrecognised type |
| Views | VIEW, SYSTEM VIEW |
| Aliases | ALIAS |
| Synonyms | SYNONYM |
Empty sub-folders are not shown. If "Include routines" is checked, a Routines lazy-load group is appended after the object-type groups.
Excel Export (ExpXLS.java, ExpXLSRS.java, PropmExp.java, QueryRep.java)¶
Numeric cell handling¶
- Columns are now classified using the JDBC
java.sql.Typescolumn-type array passed fromQueryReprather than the JTable column class name. DECIMAL/NUMERICcolumns are formatted as decimal numbers using configurable format strings and written asdoubleviaBigDecimal.doubleValue().- Integer-type columns are written as
intvalues with a separate configurable format string. - Non-numeric columns remain as strings.
- If parsing fails for any numeric value, the cell falls back to a string value.
Meta sheet additions¶
Two new rows are written to the Sui-Meta sheet:
| Row | Content |
|---|---|
| Result set status | "full result set" or "partial result set" (when row limit was hit) |
| Report rows | Number of rows in the export |
Preferences¶
Three new fields appear in Preferences → Export:
| Preference | Property key | Default |
|---|---|---|
| XLS font name | SUI.XLS.FONT |
Courier |
| XLS integer format | SUI.XLS.INTFMT |
0 |
| XLS decimal format | SUI.XLS.DECFMT |
# ##0.000 |
The font name is selected from a dropdown populated with all fonts installed on the local system.
ConnDB — BigQuery URL fix (ConnDB.java)¶
The sanitizeUrl helper that strips empty port colons from JDBC URLs
(e.g. jdbc:mysql://host:/db → jdbc:mysql://host/db) now uses a negative
lookahead to avoid matching the embedded https:// in BigQuery JDBC URLs
(jdbc:bigquery://https://www.googleapis.com/…).
QryPop Right-click Menu (QryPop.java)¶
The right-click context menu in the query editor has been reorganised:
- Format SQL
- Ext Format SQL
- Syntax Validate
- Syntax Validate by Prepare (when connected)
- ───────────────
- Convert SQL Dialect…
- Remove Initial numerics…
- InList / TextIns
- ───────────────
- Del CSV / Del XLS / Del tmp
- ───────────────
- Highlighting / ParenHig / HideQ·ShowQ / LineNo / QueryToolbar / SQLTree
- ───────────────
- Box / SheetBox / Imp
- ───────────────
- Copy / Cut / Paste
- Trim Trailing Whitespace
- Copy Columns from Selection…
"Sheet Preferences" has been removed.
Options Menu (Sui.java)¶
"Convert SQL Dialect…" has been added at the bottom of the Options menu,
separated from the existing items by a menu separator. It opens the same
ConvertSqlDialog as the right-click menu item.