| Did you know ... | Search Documentation: |
| Pack asadb -- docs/developer-notes.md |
src/asadb_sql_frontend.pl.src/asadb_sql_frontend.pl yang menghasilkan AST baru.src/asadb_core.pl untuk AST tersebut.tests/smoke.sql atau test baru.src/asadb_mysql55_compat.pl dan docs/mysql55-compatibility.md.Saat ini evaluator WHERE/`UPDATE SET` mendukung:
WHERE col = value WHERE col != value WHERE col <> value WHERE col > value WHERE col < value WHERE col >= value WHERE col <= value WHERE col IS NULL WHERE col IS NOT NULL WHERE a = 1 AND b = 2 WHERE a = 1 OR b = 2 WHERE a = 1 XOR b = 2 WHERE NOT a = 1 WHERE enabled IS TRUE WHERE enabled IS NOT FALSE WHERE enabled IS UNKNOWN WHERE id IN (1, 2, 3) WHERE name LIKE 'Air%' WHERE qty BETWEEN 2 AND 10 WHERE price / 2 >= 10 UPDATE t SET qty = qty + 1
Parser ekspresi masih hand-written precedence parser. Kalau grammar makin melebar ke function call kompleks, subquery, dan aggregate expression, langkah berikutnya adalah memindahkan parse_expr/2 ke DCG/Pratt parser yang lebih eksplisit.
Filter ground yang aman dapat dispesialisasi oleh
src/asadb_prolog_jit.pl. Saat menambah bentuk AST baru, tambahkan rule
whitelist beserta regression kesetaraan interpreter/specialization. Jangan
pernah mengubah SQL mentah menjadi goal Prolog: bentuk yang belum di-whitelist
harus tetap memakai evaluator biasa. Cache SQL dan filter masing-masing wajib
tetap bounded.
Rencana AST:
select(Projection, from(Table, Alias, Joins), Where, Order, Limit) join(Type, Table, Alias, OnExpression)
Executor bisa mulai dari nested loop join sederhana, lalu nanti optimizer cost-based.
Rencana metadata:
index(Name, Table, Columns, unique(false), root(PageId))
Versi term-storage saat ini menyimpan metadata index langsung di tabel:
table(Name, Columns, Rows, Indexes) index(Name, Columns, unique) index(Name, Columns, non_unique)
Executor sudah memakai equality predicate yang match index sebagai candidate filter awal. Langkah berikutnya untuk production-grade penuh adalah mengganti metadata ini dengan page-based B+Tree di `.asa` v2.
`START TRANSACTION` membuat snapshot state, COMMIT menyimpan `.asa`, dan ROLLBACK mengembalikan snapshot. Setiap write menulis journal append-only di data.asa.journal.
User/grant disimpan di database internal __asadb_catalog. User default adalah admin; user biasa bisa login dengan:
LOGIN reader IDENTIFIED BY 'pw';
Permission check sudah aktif untuk SELECT, INSERT, UPDATE, DELETE, dan ALTER pada scope db.table, `db.*`, atau *.*.
src/asadb_tvcc.pl owns the reader-generation lifecycle. Keep its contract
strict: it is one local writer plus immutable SELECT snapshots, not an
alternative mutation path. Any new action that changes a physical table store
must be recognized by tvcc_action_table/3; otherwise the publisher cannot
know which heap/index files require a fresh copy. New catalog-only actions may
reuse all existing immutable record files.
Never remove a generation that has tvcc_reader/2 references. The regression test intentionally pins the oldest generation while a writer reaches the fourth publication. See tvcc.md before changing this code.
qsave_program/2 bisa membuat saved state SWI-Prolog:
mkdir -p build swipl -q -s src/asadb_release.pl
Untuk `.exe` Windows, gunakan SWI-Prolog Windows + wrapper installer seperti Inno Setup/NSIS/IExpress sesuai kebutuhan.