From 461a527103b9b0a1fcee992916bea8da87b43a22 Mon Sep 17 00:00:00 2001 From: tamnd Date: Thu, 8 Oct 2026 14:13:54 +0700 Subject: [PATCH] Release 0.1.0 --- CHANGELOG.md | 11 +++++++ Cargo.lock | 86 ++++++++++++++++++++++++------------------------- Cargo.toml | 84 +++++++++++++++++++++++------------------------ fuzz/Cargo.lock | 34 +++++++++---------- 4 files changed, 113 insertions(+), 102 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 07cf24e7..29f739b4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,13 +4,24 @@ All changes that a user can see are in this file. The version is 0.M.patch, wher ## Unreleased +## 0.1.0 (2026-10-08) + +The release that closes M1, the file. The single `.rupg` file, the buffer manager, the per-worker log, recovery, the hot store and the first MVCC are complete, and the three M1 fuzz targets ran 24 CPU hours each with no find. The close report is in issue #2. This release also has the first instruction count set and the first privilege functions. No crate is published. + ### Added - `set_config` (spec/06 section 6.13), which is `SET` as a function. It takes the same values and gives the same errors as `SET`, and gives the new value as `SHOW` does. A null value resets the parameter. The change counts for the rest of the query, so a `set_config` of `TimeZone` changes the output of the values after it in the same row. An error or a rollback undoes the change, and a local change ends with its transaction. +- The access privilege inquiry functions (spec/07 section 7.18.3): the `has_*_privilege` functions for tables, columns, sequences, schemas, functions, types, languages, tablespaces, databases, foreign data wrappers, foreign servers, large objects and parameters, and `pg_has_role`. All 90 forms of `pg_proc.dat` have a kernel. The checks are a port of `acl.c` and `aclchk.c`, with the walks over `pg_auth_members` and the roles `pg_read_all_data`, `pg_write_all_data`, `pg_maintain` and `pg_database_owner`. The errors come in the same order as in PostgreSQL. The server has one role, the bootstrap superuser, so a check for the current user always gives true. + +- `cargo xtask bench` (spec/21 section 21.14). It runs the instruction count set of six cases under `perf stat` and fails when one case is more than 3 percent higher or the total is more than 1 percent higher than a saved count. `xtask/icount.txt` has the first counts. + +- `cargo xtask lifts` (spec/22 section 22.7). It reads the history of each file that rupg lifts from rudb and lists each rudb change after the lift that nobody reviewed. + ### Fixed - After the first query of a transaction, `SET TRANSACTION ISOLATION LEVEL` with a new level, `SET TRANSACTION [NOT] DEFERRABLE` and `SET TRANSACTION READ WRITE` in a read-only transaction now give `25001`, as in PostgreSQL. A query takes the snapshot of the transaction when it is analyzed, in a `Query` or a `Parse` message. +- The static catalog rows have the privileges that `initdb` gives them. `relacl`, `attacl`, `nspacl` and `datacl` are no longer null where PostgreSQL has a value, and all 284 values of the rows below OID 10000 are the same as in PostgreSQL 19. ## 0.0.18 (2026-10-08) diff --git a/Cargo.lock b/Cargo.lock index abcf4ea7..b1288687 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -257,7 +257,7 @@ dependencies = [ [[package]] name = "rupg" -version = "0.0.18" +version = "0.1.0" dependencies = [ "rupg-buffer", "rupg-common", @@ -272,7 +272,7 @@ dependencies = [ [[package]] name = "rupg-analyze" -version = "0.0.18" +version = "0.1.0" dependencies = [ "rupg-common", "rupg-pgcatalog", @@ -282,11 +282,11 @@ dependencies = [ [[package]] name = "rupg-ann" -version = "0.0.18" +version = "0.1.0" [[package]] name = "rupg-buffer" -version = "0.0.18" +version = "0.1.0" dependencies = [ "loom", "rupg-common", @@ -296,41 +296,41 @@ dependencies = [ [[package]] name = "rupg-capi" -version = "0.0.18" +version = "0.1.0" [[package]] name = "rupg-catalog" -version = "0.0.18" +version = "0.1.0" dependencies = [ "rupg-common", ] [[package]] name = "rupg-cli" -version = "0.0.18" +version = "0.1.0" dependencies = [ "rupg", ] [[package]] name = "rupg-cluster" -version = "0.0.18" +version = "0.1.0" [[package]] name = "rupg-column" -version = "0.0.18" +version = "0.1.0" [[package]] name = "rupg-common" -version = "0.0.18" +version = "0.1.0" [[package]] name = "rupg-contrib" -version = "0.0.18" +version = "0.1.0" [[package]] name = "rupg-crash" -version = "0.0.18" +version = "0.1.0" dependencies = [ "rupg", "rupg-common", @@ -340,15 +340,15 @@ dependencies = [ [[package]] name = "rupg-encode" -version = "0.0.18" +version = "0.1.0" [[package]] name = "rupg-exchange" -version = "0.0.18" +version = "0.1.0" [[package]] name = "rupg-exec" -version = "0.0.18" +version = "0.1.0" dependencies = [ "rupg-analyze", "rupg-common", @@ -360,11 +360,11 @@ dependencies = [ [[package]] name = "rupg-ext" -version = "0.0.18" +version = "0.1.0" [[package]] name = "rupg-file" -version = "0.0.18" +version = "0.1.0" dependencies = [ "rupg-common", "rupg-platform", @@ -372,7 +372,7 @@ dependencies = [ [[package]] name = "rupg-func" -version = "0.0.18" +version = "0.1.0" dependencies = [ "md-5", "rupg-analyze", @@ -384,11 +384,11 @@ dependencies = [ [[package]] name = "rupg-graph" -version = "0.0.18" +version = "0.1.0" [[package]] name = "rupg-hot" -version = "0.0.18" +version = "0.1.0" dependencies = [ "rupg-buffer", "rupg-common", @@ -399,23 +399,23 @@ dependencies = [ [[package]] name = "rupg-import" -version = "0.0.18" +version = "0.1.0" [[package]] name = "rupg-index" -version = "0.0.18" +version = "0.1.0" [[package]] name = "rupg-jit" -version = "0.0.18" +version = "0.1.0" [[package]] name = "rupg-kernels" -version = "0.0.18" +version = "0.1.0" [[package]] name = "rupg-log" -version = "0.0.18" +version = "0.1.0" dependencies = [ "loom", "rupg-buffer", @@ -427,19 +427,19 @@ dependencies = [ [[package]] name = "rupg-opt" -version = "0.0.18" +version = "0.1.0" [[package]] name = "rupg-pgcatalog" -version = "0.0.18" +version = "0.1.0" [[package]] name = "rupg-plan" -version = "0.0.18" +version = "0.1.0" [[package]] name = "rupg-platform" -version = "0.0.18" +version = "0.1.0" dependencies = [ "libc", "rupg-common", @@ -447,15 +447,15 @@ dependencies = [ [[package]] name = "rupg-plpgsql" -version = "0.0.18" +version = "0.1.0" [[package]] name = "rupg-raft" -version = "0.0.18" +version = "0.1.0" [[package]] name = "rupg-server" -version = "0.0.18" +version = "0.1.0" dependencies = [ "ring", "rupg-common", @@ -467,7 +467,7 @@ dependencies = [ [[package]] name = "rupg-session" -version = "0.0.18" +version = "0.1.0" dependencies = [ "rupg-analyze", "rupg-common", @@ -482,22 +482,22 @@ dependencies = [ [[package]] name = "rupg-shim" -version = "0.0.18" +version = "0.1.0" [[package]] name = "rupg-sql" -version = "0.0.18" +version = "0.1.0" dependencies = [ "rupg-common", ] [[package]] name = "rupg-summary" -version = "0.0.18" +version = "0.1.0" [[package]] name = "rupg-table" -version = "0.0.18" +version = "0.1.0" dependencies = [ "rupg-common", "rupg-file", @@ -508,7 +508,7 @@ dependencies = [ [[package]] name = "rupg-tree" -version = "0.0.18" +version = "0.1.0" dependencies = [ "rupg-buffer", "rupg-common", @@ -518,7 +518,7 @@ dependencies = [ [[package]] name = "rupg-txn" -version = "0.0.18" +version = "0.1.0" dependencies = [ "rupg-buffer", "rupg-common", @@ -533,18 +533,18 @@ dependencies = [ [[package]] name = "rupg-types" -version = "0.0.18" +version = "0.1.0" dependencies = [ "rupg-common", ] [[package]] name = "rupg-wasm" -version = "0.0.18" +version = "0.1.0" [[package]] name = "rupg-wire" -version = "0.0.18" +version = "0.1.0" dependencies = [ "hmac", "md-5", @@ -818,7 +818,7 @@ checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] name = "xtask" -version = "0.0.18" +version = "0.1.0" [[package]] name = "zeroize" diff --git a/Cargo.toml b/Cargo.toml index 01dfc307..e897f959 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -6,7 +6,7 @@ exclude = ["fuzz"] [workspace.package] # The version is 0.M.patch, where M is the last milestone that closed. See spec/23-milestones.md section 23.17. -version = "0.0.18" +version = "0.1.0" edition = "2024" # The MSRV is 1.88.0. Safe functions with target_feature need 1.86. core::hint::select_unpredictable needs 1.88. See spec/22-crate-layout.md section 22.11. rust-version = "1.88.0" @@ -20,47 +20,47 @@ readme = "README.md" # One version for the whole workspace. Internal crates are pinned exactly, so a partial publish cannot make a build with mixed versions. `cargo xtask version` changes all the pins together. [workspace.dependencies] -rupg = { version = "=0.0.18", path = "crates/rupg" } -rupg-analyze = { version = "=0.0.18", path = "crates/rupg-analyze" } -rupg-ann = { version = "=0.0.18", path = "crates/rupg-ann" } -rupg-buffer = { version = "=0.0.18", path = "crates/rupg-buffer" } -rupg-capi = { version = "=0.0.18", path = "crates/rupg-capi" } -rupg-catalog = { version = "=0.0.18", path = "crates/rupg-catalog" } -rupg-cli = { version = "=0.0.18", path = "crates/rupg-cli" } -rupg-cluster = { version = "=0.0.18", path = "crates/rupg-cluster" } -rupg-column = { version = "=0.0.18", path = "crates/rupg-column" } -rupg-common = { version = "=0.0.18", path = "crates/rupg-common" } -rupg-contrib = { version = "=0.0.18", path = "crates/rupg-contrib" } -rupg-encode = { version = "=0.0.18", path = "crates/rupg-encode" } -rupg-exchange = { version = "=0.0.18", path = "crates/rupg-exchange" } -rupg-exec = { version = "=0.0.18", path = "crates/rupg-exec" } -rupg-ext = { version = "=0.0.18", path = "crates/rupg-ext" } -rupg-file = { version = "=0.0.18", path = "crates/rupg-file" } -rupg-func = { version = "=0.0.18", path = "crates/rupg-func" } -rupg-graph = { version = "=0.0.18", path = "crates/rupg-graph" } -rupg-hot = { version = "=0.0.18", path = "crates/rupg-hot" } -rupg-import = { version = "=0.0.18", path = "crates/rupg-import" } -rupg-index = { version = "=0.0.18", path = "crates/rupg-index" } -rupg-jit = { version = "=0.0.18", path = "crates/rupg-jit" } -rupg-kernels = { version = "=0.0.18", path = "crates/rupg-kernels" } -rupg-log = { version = "=0.0.18", path = "crates/rupg-log" } -rupg-opt = { version = "=0.0.18", path = "crates/rupg-opt" } -rupg-pgcatalog = { version = "=0.0.18", path = "crates/rupg-pgcatalog" } -rupg-plan = { version = "=0.0.18", path = "crates/rupg-plan" } -rupg-platform = { version = "=0.0.18", path = "crates/rupg-platform" } -rupg-plpgsql = { version = "=0.0.18", path = "crates/rupg-plpgsql" } -rupg-raft = { version = "=0.0.18", path = "crates/rupg-raft" } -rupg-server = { version = "=0.0.18", path = "crates/rupg-server" } -rupg-session = { version = "=0.0.18", path = "crates/rupg-session" } -rupg-shim = { version = "=0.0.18", path = "crates/rupg-shim" } -rupg-sql = { version = "=0.0.18", path = "crates/rupg-sql" } -rupg-summary = { version = "=0.0.18", path = "crates/rupg-summary" } -rupg-table = { version = "=0.0.18", path = "crates/rupg-table" } -rupg-tree = { version = "=0.0.18", path = "crates/rupg-tree" } -rupg-txn = { version = "=0.0.18", path = "crates/rupg-txn" } -rupg-types = { version = "=0.0.18", path = "crates/rupg-types" } -rupg-wasm = { version = "=0.0.18", path = "crates/rupg-wasm" } -rupg-wire = { version = "=0.0.18", path = "crates/rupg-wire" } +rupg = { version = "=0.1.0", path = "crates/rupg" } +rupg-analyze = { version = "=0.1.0", path = "crates/rupg-analyze" } +rupg-ann = { version = "=0.1.0", path = "crates/rupg-ann" } +rupg-buffer = { version = "=0.1.0", path = "crates/rupg-buffer" } +rupg-capi = { version = "=0.1.0", path = "crates/rupg-capi" } +rupg-catalog = { version = "=0.1.0", path = "crates/rupg-catalog" } +rupg-cli = { version = "=0.1.0", path = "crates/rupg-cli" } +rupg-cluster = { version = "=0.1.0", path = "crates/rupg-cluster" } +rupg-column = { version = "=0.1.0", path = "crates/rupg-column" } +rupg-common = { version = "=0.1.0", path = "crates/rupg-common" } +rupg-contrib = { version = "=0.1.0", path = "crates/rupg-contrib" } +rupg-encode = { version = "=0.1.0", path = "crates/rupg-encode" } +rupg-exchange = { version = "=0.1.0", path = "crates/rupg-exchange" } +rupg-exec = { version = "=0.1.0", path = "crates/rupg-exec" } +rupg-ext = { version = "=0.1.0", path = "crates/rupg-ext" } +rupg-file = { version = "=0.1.0", path = "crates/rupg-file" } +rupg-func = { version = "=0.1.0", path = "crates/rupg-func" } +rupg-graph = { version = "=0.1.0", path = "crates/rupg-graph" } +rupg-hot = { version = "=0.1.0", path = "crates/rupg-hot" } +rupg-import = { version = "=0.1.0", path = "crates/rupg-import" } +rupg-index = { version = "=0.1.0", path = "crates/rupg-index" } +rupg-jit = { version = "=0.1.0", path = "crates/rupg-jit" } +rupg-kernels = { version = "=0.1.0", path = "crates/rupg-kernels" } +rupg-log = { version = "=0.1.0", path = "crates/rupg-log" } +rupg-opt = { version = "=0.1.0", path = "crates/rupg-opt" } +rupg-pgcatalog = { version = "=0.1.0", path = "crates/rupg-pgcatalog" } +rupg-plan = { version = "=0.1.0", path = "crates/rupg-plan" } +rupg-platform = { version = "=0.1.0", path = "crates/rupg-platform" } +rupg-plpgsql = { version = "=0.1.0", path = "crates/rupg-plpgsql" } +rupg-raft = { version = "=0.1.0", path = "crates/rupg-raft" } +rupg-server = { version = "=0.1.0", path = "crates/rupg-server" } +rupg-session = { version = "=0.1.0", path = "crates/rupg-session" } +rupg-shim = { version = "=0.1.0", path = "crates/rupg-shim" } +rupg-sql = { version = "=0.1.0", path = "crates/rupg-sql" } +rupg-summary = { version = "=0.1.0", path = "crates/rupg-summary" } +rupg-table = { version = "=0.1.0", path = "crates/rupg-table" } +rupg-tree = { version = "=0.1.0", path = "crates/rupg-tree" } +rupg-txn = { version = "=0.1.0", path = "crates/rupg-txn" } +rupg-types = { version = "=0.1.0", path = "crates/rupg-types" } +rupg-wasm = { version = "=0.1.0", path = "crates/rupg-wasm" } +rupg-wire = { version = "=0.1.0", path = "crates/rupg-wire" } # Outside crates. Each one is in the table of spec/22-crate-layout.md section 22.5. # libc: the system calls of rupg-platform on Unix, for example F_FULLFSYNC and getentropy. diff --git a/fuzz/Cargo.lock b/fuzz/Cargo.lock index b9f46af0..a5890c45 100644 --- a/fuzz/Cargo.lock +++ b/fuzz/Cargo.lock @@ -207,7 +207,7 @@ checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf" [[package]] name = "rupg" -version = "0.0.18" +version = "0.1.0" dependencies = [ "rupg-buffer", "rupg-common", @@ -221,7 +221,7 @@ dependencies = [ [[package]] name = "rupg-analyze" -version = "0.0.18" +version = "0.1.0" dependencies = [ "rupg-common", "rupg-pgcatalog", @@ -231,7 +231,7 @@ dependencies = [ [[package]] name = "rupg-buffer" -version = "0.0.18" +version = "0.1.0" dependencies = [ "rupg-common", "rupg-file", @@ -240,11 +240,11 @@ dependencies = [ [[package]] name = "rupg-common" -version = "0.0.18" +version = "0.1.0" [[package]] name = "rupg-file" -version = "0.0.18" +version = "0.1.0" dependencies = [ "rupg-common", "rupg-platform", @@ -252,7 +252,7 @@ dependencies = [ [[package]] name = "rupg-func" -version = "0.0.18" +version = "0.1.0" dependencies = [ "md-5", "rupg-analyze", @@ -281,7 +281,7 @@ dependencies = [ [[package]] name = "rupg-hot" -version = "0.0.18" +version = "0.1.0" dependencies = [ "rupg-common", "rupg-file", @@ -290,11 +290,11 @@ dependencies = [ [[package]] name = "rupg-kernels" -version = "0.0.18" +version = "0.1.0" [[package]] name = "rupg-log" -version = "0.0.18" +version = "0.1.0" dependencies = [ "rupg-buffer", "rupg-common", @@ -304,11 +304,11 @@ dependencies = [ [[package]] name = "rupg-pgcatalog" -version = "0.0.18" +version = "0.1.0" [[package]] name = "rupg-platform" -version = "0.0.18" +version = "0.1.0" dependencies = [ "libc", "rupg-common", @@ -316,14 +316,14 @@ dependencies = [ [[package]] name = "rupg-sql" -version = "0.0.18" +version = "0.1.0" dependencies = [ "rupg-common", ] [[package]] name = "rupg-table" -version = "0.0.18" +version = "0.1.0" dependencies = [ "rupg-common", "rupg-file", @@ -333,7 +333,7 @@ dependencies = [ [[package]] name = "rupg-tree" -version = "0.0.18" +version = "0.1.0" dependencies = [ "rupg-common", "rupg-file", @@ -341,7 +341,7 @@ dependencies = [ [[package]] name = "rupg-txn" -version = "0.0.18" +version = "0.1.0" dependencies = [ "rupg-buffer", "rupg-common", @@ -355,14 +355,14 @@ dependencies = [ [[package]] name = "rupg-types" -version = "0.0.18" +version = "0.1.0" dependencies = [ "rupg-common", ] [[package]] name = "rupg-wire" -version = "0.0.18" +version = "0.1.0" dependencies = [ "hmac", "md-5",