AsaDB v1.3.0 #3
kocoygroup-id
started this conversation in
General
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
AsaDB v1.3.0 Release Notes
Released: 2026-07-19
Status: STABLE
Publication summary: RELEASE.md
Compatibility matrix: COMPATIBILITY.md
1.3.0 cumulative release validation
This is a maintenance and stability release carried forward from v1.2.1 with
no SQL feature-surface break. The cumulative package fixes the Reservoir live
metadata/reload/cancel path, removes the 500-row table/result ceiling, keeps
large SQL gutters populated, adds the single-worker
karyawan.pladviser, andreduces stress-import overhead with bounded batching. The final package set was
validated on 4MLinux 51.2 (Linux 6.12.94, Intel Core i5-6300U, 8 GB RAM).
Linux and source archives were checksum-verified and the Windows portable
archive was rebuilt from the same sources and smoke-tested under Wine.
v1.2.1 -> v1.3.0 capability jump
The GitHub AsaDB v1.2.1 line is the comparison baseline; no intermediate
release is being claimed. AsaDB 1.3.0 keeps the v1.2.1 SQL/storage contract
while adding the operational pieces needed for large, interactive workloads:
Release-host stress audit
Measured on 4MLinux 6.12.94, Intel Core i5-6300U @ 2.40 GHz, with
8,022,200 kB RAM visible. A clean 250,000-row audit completed with zero import
errors: the best interactive run reported by the maintainer was
Double_Company.sql04:01.87 andDouble_Company_Status.sql00:31.60;the cold fresh rerun in this audit measured 06:58.32 and 01:03.45.
The spread is recorded honestly because disk/cache and panel-vs-direct-stream
conditions materially affect a write-heavy import.
In both runs, the analysis view was created successfully, the filtered
qualified JOIN returned its 20 matching rows, and the view query returned its
20 rows. The maintainer's measured query windows were 83–89 ms for view
creation, 122–138 ms for the filtered JOIN, and 320–353 ms for the
analysis-view SELECT; the cold direct audit measured 91 ms and 852 ms
for the two SELECTs.
The repeatable storage stress suite on the same host passed at every size:
Against the published v1.2.1 reference of approximately 247 s for the
100,000-row full scenario, the current 4MLinux run is approximately 76%
faster wall-clock. The reference was recorded on a different Windows host;
the comparison is directional, while the 1.3.0 numbers above are the actual
release-host measurements. Peak RSS is reported rather than marketed as an
improvement: this native 4MLinux run measured about 387.6 MiB.
Table paging and Karyawan adviser
Show moreaction that requests the next ordered page from/api/queryusing a bounded
LIMIT/OFFSETpath, then appends rows without rerunning thefirst page. Multi-statement commands keep their existing result behavior.
views. Stale requests are ignored when the user switches tables, and the
control is disabled while a page is in flight.
Show more tablescontrol at the end. Clicking it or reaching it duringscrolling reveals another bounded slice, so a large catalog does not build a
huge DOM all at once.
src/bridge/karyawan.pl, a pure-Prolog helper. It advises ingress chunk size, queuepressure, backend health, and bounded egress page size while preserving the
Reservoir's one-worker execution invariant. No R runtime is required.
Linux, Windows portable, and main-repo archives are rebuilt from these
current sources with separate SHA-256 manifests.
Large SQL paste and stress-import audit
padding now belongs to an inner content layer instead of the clipped gutter
viewport; pasting thousands of lines no longer leaves the numbers above the
visible area blank.
record appends to 8,192 rows per storage pass. The larger parser batches
reduce repeated execution overhead, while the storage chunk keeps generated
Double_Companyworkloads below the Prolog stack limit.Double_Company.sqlcasing even though request paths are normalized forsafe comparison.
Stable AsAPanel update
static page, dynamic counters and status text, metadata, confirmations,
results, diagnostics, execution logs, and Asa success/correction/error copy.
The choice persists in local browser storage.
viewport through highlight/gutter rerenders, uses a paste-specific restore,
disables browser scroll anchoring, contains overscroll, and reserves stable
scrollbar space.
removes the item only from the browser sidebar, and a successful backend drop
is verified with SHOW TABLES / SHOW DATABASES before local catalog removal.
after restart, accepts repeated IF EXISTS, and confirms that the table heap
and persistent B+Tree files were physically removed.
three-language key coverage, the language controls, and long-paste scroll
safeguards.
Test/Stress Testfilesystem references fromthe Linux import path. Historical
test/...input is still accepted but isresolved to the canonical case-sensitive
stress testsdirectory.browser-side warmup request. The overlay is now only a 650 ms visual cue and
is explicitly non-interactive, so it cannot swallow clicks or keyboard focus.
app-loader.jsplus a checked-in Firefox-38-compatibleapp.legacy.jsbuild. The loader adds the small needed polyfills and shows adirect diagnostic if the UI bundle cannot boot, instead of leaving a static
panel whose buttons appear dead.
NodeList.forEachandElement.append. Both are used while the panel first renders; without them,a pre-Firefox-50 browser stopped before attaching every button listener.
app.legacy.js: static UIassets are read as UTF-8 and streamed once, so Japanese translations cannot
fail or become double-encoded while the web server formats the response.
/favicon.icofallback handler to removethe noisy 404 generated by older Firefox releases.
formats. JP now renders on minimal 4MLinux installs even when the operating
system itself has no Japanese font package.
Stabilization validation completed on the available SWI-Prolog WASM and DOM
test runtimes: all 15 core assertion groups passed; DROP TABLE removed its
catalog entry plus heap/B+Tree files and stayed removed after restart; 165 UI
translation/runtime keys passed in all three languages; interactive language,
Asa output, 6,000-line paste, failed-drop preservation, and verified-drop
scenarios passed; and the 15,000 + 15,000 aliased JOIN returned all 15,000 rows
through the indexed path.
Reservoir realtime, reload, and cancellation
GET /api/reservoir/jobsfor reload recovery. It returns only activereceiving,queued,processing, andcancellingjobs, ordered by newestupdate first; retained terminal jobs remain available through the ID endpoint
but are excluded from discovery.
resumes that exact job after reload, and falls back to active-job discovery
when browser storage or the admission response is unavailable. Recovery
resumes progress, result, and Cancel monitoring without resubmitting SQL.
cache-bypassing, single-flight polling: 500 ms during an active job, 1.5
seconds while the metadata panel is open, and 5 seconds while idle. Hidden
documents skip network refreshes and refresh immediately on visibility or
focus.
receiving -> cancelling -> cancelled; the receiver closes its writer beforespool deletion, the job never reaches
queued, and terminal cancellation isidempotent. This removes reliance on POSIX unlink-while-open behavior and
avoids the corresponding Windows open-file deletion failure.
progress/statistics, receiving/queued/processing cancellation, single-count
cancellation, and spool cleanup. UI regressions cover reload recovery,
Cancel wiring, adaptive metadata polling, and matching modern/legacy bundles.
Linux packaging compares the shipped backend/web bytes and statically checks
that the Windows build uses the same sources and shared realtime preflight.
The Windows x86 portable executable was rebuilt from the same source tree and
validated under Wine with
--helpstartup, live Reservoir progress, metadatapolling, active-job discovery, cancellation, and rollback checks. A native
Windows x64 build remains a separate optional target.
JOIN correctness and performance
Fixed qualified alias evaluation for queries such as:
Replaced the quadratic nested-loop implementation for simple qualified
equality joins with an AVL-backed lookup index. The old 15,000 by 15,000 case
could evaluate 225,000,000 row pairs before filtering; the new path builds
one lookup index and probes it once per row.
Enabled the same optimized equality path for INNER, LEFT, and RIGHT joins.
Pushed source-local
WHEREconjuncts into paged JOIN inputs before rows arematerialized. Small filtered left sides now probe a unique right key without
forcing a fresh persistent index build, so the 250,000-row
Double_Company+Double_Company_Statusquery withLIMIT 20remainsbounded and responsive immediately after import.
Kept view execution bounded by the existing result window when a view is
selected with
ORDER BY ... LIMIT, so a JOIN statement followed by theanalysis-view statement returns both result sets instead of tripping the
generic error path.
Kept nested loops as a compatibility fallback for complex
ONexpressions.Added planner counters and the
tests/join_15000_regression.plperformanceand correctness regression, including a combined JOIN + VIEW multi-statement
assertion.
Linux and 4MLinux
/bin/shlaunchers.swiplis unavailable.scripts/check_linux_runtime.shand dedicated 4MLinux guidance.shell checks.
AsaDB-1.3.0-linux-x86_64.tar.ZplusAsaDB-1.3.0-linux-x86_64.tar.Z.sha256. The archive is a gzip-compressed tarstream retained under the requested
.tar.Zfilename.executable modes, GPL source files, required engine/UI/tests, and absence of
runtime databases, logs, spools, build output, and Windows executables.
spaces.
crypto, UUID, thread, core, Reservoir, and web capabilities.
Open-source release hygiene
Stress Test/Linuxstress testscase mismatch inbenchmark, web import, and packaging paths, including the last stale server
import alias.
build output while retaining source, tests, documentation, license notices,
and build scripts.
Historical v1.2.1 baseline and lineage
Reservoir system included in v1.3.0
The source includes a durable, bounded bridge between AsAPanel and the Prolog
executor. The historical v1.2.1 baseline below is retained for comparison.
Boundary and reliability changes
src/bridge/reservoir.plwith explicit receiving, queued, processing,cancelling, completed, delivered, failed, cancelled, and interrupted states.
worker. Small read-only queries retain the direct low-latency path.
an understated or absent size hint cannot bypass
reservoir_max_spool_bytes.preventing concurrent requests from racing past the configured job limit.
instead of executing a retry twice.
file followed by rename.
marked
interruptedand is not automatically replayed, avoiding accidentalduplicate writes.
/api/reservoir/*.metadata.
channel cancels stale playback.
Validation completed
queue backpressure, and false-size capacity tests: PASS.
following read completed in 64 ms, and no JavaScript exception was recorded.
one write.
public_safety_archive_5500.sql: 5,500 rows, 62 statements, zero errors,287,058 bytes, 15.132 seconds in that measured Reservoir run.
100,000 rows through 1,003 statements with zero errors in 48.628 seconds.
Peak process working set was 196.5 MB, and a restart check returned the same
100,000 persisted rows.
Detailed behavior and non-goals are documented in
docs/reservoir.md.Summary
The v1.2.1 baseline was a panel-to-storage performance and persistence release. It
keeps the SQL surface introduced by earlier versions while removing the main
causes of multi-minute SQL Command runs: full DOM rendering of very large SQL,
thousands of sequential HTTP requests, repeated column resolution and record
copying, per-batch catalog checkpoints, and list-heavy page cache entries.
The release also adds persistent database metadata, an exact metadata-backed
COUNT(*)path, and stricter single-flight Run SQL/audio behavior.Root Causes Found
The delay was not one isolated function. It was the combined cost of several
layers:
highlighting/diagnostics for SQL files with tens of thousands of lines.
adding browser/backend synchronization overhead between statements.
record/page lists more than necessary.
facts, which consumed far more heap than the 4 KB disk payload.
transactional batches.
COUNT(*)scanned every record even though the catalog alreadymaintained the exact row count.
That baseline addressed each layer instead of increasing the RAM limit; 1.3.0
extends the same discipline to Reservoir, JOIN planning, live metadata, and
cross-platform packaging.
AsAPanel And HTTP Pipeline
syntax-highlight overlay empty.
large scripts. Normal-sized SQL keeps the existing assistance.
application/sqlBlob to/api/execute_streamrather than as thousands of sequential form requests.progress through
/api/import_progress.reader, statement parser, transaction, bounded batch executor, and rollback
behavior.
Running...before backend work starts.the complete database state.
script on every refresh.
max_result_rows.One-click Run And Audio
duplicate INSERT, UPDATE, DELETE, or DDL execution.
Audioelement.Storage And Execution Optimizations
strings instead of integer lists in dynamic facts.
module compatibility.
already set.
flush.
a second page with a zeroed checksum field.
against every destination column.
inserted record identifiers.
transaction/checkpoint boundaries. Rollback remains protected by snapshots
and mutation recovery data.
statements with bounded storage appends while preserving rollback barriers.
Exact COUNT Fast Path
SELECT COUNT(*) FROM tablewithout a filter, grouping, or extra projectionnow reads the exact row count stored in
paged_rowscatalog metadata. Thispath:
LIMIT 0semantics;metadata_count_scanplanner statistic;Filtered counts, grouped counts,
COUNT(column), and other aggregates continueto evaluate records normally.
On the final warm panel check, an exact count over 100,000 persisted rows took
4 ms through the local HTTP API. The same database returned an empty table in
8 ms.
Persistent Database Metadata
Every database catalog now has a matching atomic
.asa.metasidecar containing:The metadata API and AsAPanel add live information for:
pinned pages;
Metadata writes use
.tmpplus.bakreplacement and startup recovery. Keepthe
.asa,.asa.store,.asa.meta, WAL, and journal artifacts together whenmoving a database.
Persistence And Recovery
1.3.0 retains the v1.2.1 recovery design:
transaction artifacts;
Transactional batching was optimized without removing these recovery barriers.
The engine still does not claim ARIES or MVCC semantics.
Runtime Configuration
The portable package includes:
page_sizeremains fixed for format compatibility. Other values are loaded atboot and can be tuned without rebuilding the executable.
Measured 1.3.0 Benchmark
Environment: 4MLinux 6.12.94, Intel Core i5-6300U (2 cores / 4 threads),
8,022,200 kB visible RAM, SWI-Prolog 10.0.2 x86_64. Workloads use 100-row
multi-value INSERT statements and verify exact count, index build/lookup,
indexed ordering, UPDATE, DELETE, bounded results, shutdown, reopen, and
persisted count.
The published GitHub v1.2.1 reference for the complete 100,000-row scenario
was approximately 247 seconds and 229.8 MB on a different Windows host. The
1.3.0 release-host run is approximately 76% faster wall-clock; this is a
directional cross-platform comparison, not a claim that peak RSS is lower.
The native 4MLinux run measured about 387.6 MiB peak RSS. Disk/cache state can
move import timings substantially, as documented in the release-host audit
above.
Validation
Regression suite:
Storage benchmark:
Validation completed for:
the local HTTP API.
Compatibility And Migration
from v1.2.1.
.asa.metafile is created automatically at boot.Known Limits
of applying a fully incremental B+Tree split/merge path.
data than simple indexed queries.
License
The source distribution is licensed under GNU GPL v3.0 only. Distributors of
binaries or modified builds must provide complete corresponding source under
the same license. See
LICENSE,LICENSE_HISTORY.md,TRADEMARKS.md, andTHIRD_PARTY_NOTICES.md.This discussion was created from the release AsaDB v1.3.0.
All reactions