コンテンツにスキップ

変更履歴

PL/pgSQL — ストアドプロシージャ、関数、トリガー

Section titled “PL/pgSQL — ストアドプロシージャ、関数、トリガー”

DOブロック、ストアド関数、ストアドプロシージャにおける完全な手続き型言語サポートです。

  • DOブロック — DECLARE、BEGIN…ENDを持つ匿名PL/pgSQLブロック
  • ストアド関数CREATE FUNCTION name(params) RETURNS type AS $$ ... $$ LANGUAGE plpgsql、任意のSQL式で呼び出し可能
  • ストアドプロシージャCREATE PROCEDURE name(params) AS $$ ... $$ LANGUAGE plpgsqlCALLで呼び出し
  • トリガーCREATE TRIGGER name BEFORE|AFTER INSERT|UPDATE|DELETE ON table FOR EACH ROW EXECUTE FUNCTION func()
    • BEFOREトリガーはNULLを返すことで操作をキャンセルできます
    • AFTERトリガーは操作の後に実行されます
    • トリガーはINSERT、UPDATE、DELETE、COPY FROMで発火します
    • TG_OP、TG_TABLE_NAME、OLD、NEW変数が利用可能です
  • 制御フロー — IF/ELSIF/ELSE、WHILE LOOP、FORレンジ/クエリLOOP、RETURN、RAISE NOTICE/EXCEPTION、PERFORM、EXCEPTION WHEN
  • 永続化 — 関数、プロシージャ、トリガーはPersistentDBおよびTextDBでclose/reopenしても保持されます
  • OR REPLACE — 既存の関数やプロシージャを上書きできます

ホスト言語のコールバックをSQL関数として登録し、クエリ、トリガー、プロシージャから呼び出せます。

  • Scaladb.registerScalarFunction("name", { args => result })
  • JavaScriptsession.registerFunction("name", (args) => result)
  • Cpetradb_create_function(db, "name", nargs, user_data, callback) SQLiteスタイルの型付きvalue/context API
  • ネイティブ共有ライブラリ — Scala Nativeの@exportedでC呼び出し可能な関数を持つlibpetradb-engine.so
  • SQLiteスタイルのC APIpetradb_openpetradb_execpetradb_prepare/step/finalize、型付きカラムアクセサ
  • ユーザー定義関数petradb_value_int/double/textpetradb_result_int/double/text/null/errorpetradb_user_data
  • カーソルAPIsession.openCursor(sql)による遅延行単位イテレーション、step()、型付きカラムアクセサ、fetch(n)move(n)、パラメータ化クエリ
  • Cヘッダー — 完全なAPIドキュメント付きのpetradb.h
  • Cテストスイート — 67テスト
  • Rust FFIテスト — 38テストで言語間相互運用を実証
  • 拡張可能なフレームワークCREATE VIRTUAL TABLE name USING module(args)、読み取り専用、SHOW TABLESに表示
  • 組み込みCSVモジュールCREATE VIRTUAL TABLE t USING csv('file.csv') ヘッダー/デリミタオプション付き
  • カスタムモジュール — Scala APIのdb.registerVirtualTableModule("name", module)

インポートなしでCSVファイルを直接クエリできます。

SELECT * FROM csv_file('data.csv');
SELECT e.name, d.dept FROM csv_file('employees.csv') e
JOIN csv_file('departments.csv') d ON e.dept_id = d.id;
  • 部分インデックスCREATE INDEX ... WHERE condition — 述語に一致する行のみをインデックス化
  • 式インデックスCREATE INDEX ... ON table ((expr))lower(email)のような計算値をインデックス化
  • 組み合わせ — 部分インデックスと式インデックスを併用可能
  • FIRST_VALUE(expr) — ウィンドウフレームの最初の行の値
  • LAST_VALUE(expr) — ウィンドウフレームの最後の行の値
  • NTH_VALUE(expr, n) — フレームのn番目の行の値

PostgreSQL構文に準拠した複数テーブルの削除です。

DELETE FROM orders USING customers
WHERE orders.customer_id = customers.id AND customers.status = 'inactive';

Quarry — 型安全なASTクエリビルダー

Section titled “Quarry — 型安全なASTクエリビルダー”

新しい@petradb/quarryパッケージ:SQL文字列ではなくASTオブジェクトを生成する型安全なクエリビルダーです。

  • 21のカラム型によるスキーマ定義
  • 完全なCRUD:型安全なカラム参照によるselect、insert、update、delete
  • ジョイン:inner、left、right、full outer、cross(型付き結果)
  • 式:50以上の演算子、集計、CASE/CAST/EXISTS、サブクエリ
  • Upsert:onConflictDoNothing()onConflictDoUpdate()
  • セルフジョイン用のテーブルエイリアス
  • トランザクション、RETURNING、DISTINCT ON
  • すべての機能に対するコンパイル時型テスト
  • 集合演算:UNION、INTERSECT、EXCEPT
  • ウィンドウ関数、CTE、名前付きスカラーヘルパー
  • ByteaValue — BYTEAカラムへのARRAY[...]ArrayValueではなく正しくByteaValueを生成するようになりました
  • JS/Clientの結果型 — 非網羅的マッチによるクラッシュを防ぐため、欠落していたPL/pgSQL結果型ハンドラー(DoBlockResult、CreateFunctionResultなど)を追加しました
  • コーデック — クライアント/サーバー通信用のすべての新しい結果型のシリアライゼーションを追加しました
  • llms.txttypeフィールドをcommandフィールドに修正し、すべての結果型と機能を更新しました
  • shared → common — 共有型モジュールをpetradb-sharedからpetradb-commonに名称変更しました
  • 新しいPL/pgSQLリファレンスページ(トリガー、関数、プロシージャ、制御フロー)
  • 新しいC APIリファレンスページ(完全なSQLiteスタイルインターフェース)
  • JavaおよびCの新しいはじめにガイド
  • DDLドキュメント更新:部分/式インデックス、CHECK制約、トリガー、ストアドルーチン
  • DMLドキュメント更新:DELETE…USING、csv_file()、仮想テーブル
  • JS/Scala APIドキュメント更新:registerFunction、結果型
  • ランディングページ:4つのはじめにボタン(JS、Java、Scala、C)
  • すべての現在の機能を含むllms.txtの書き換え
コンポーネントMaven Centralnpm
common1.5.0
engine1.5.0@petradb/engine 1.5.0
client1.5.0@petradb/client 1.5.0
server1.5.0@petradb/server 1.5.0
cli1.5.0@petradb/cli 1.5.0
jdbc1.5.0
drizzle@petradb/drizzle 1.5.0
knex@petradb/knex 1.5.0
lucid@petradb/lucid 1.5.0
quarry@petradb/quarry 1.5.0
  • 相関INサブクエリの修正 — インデックス付きテーブルでの相関IN (SELECT ...)が正しく動作するようになりました
  • 修飾カラム解決 — 複雑なジョインでの曖昧なカラム参照の修正
  • 空のIN/ANY処理IN ()および= ANY('{}')のエッジケースを解決
  • 外部キーCASCADEクリーンアップDROP TABLE ... CASCADEが子テーブルのFK制約を正しく削除するようになりました
  • DROP TABLE IF EXISTS … CASCADEIF EXISTSCASCADEの組み合わせがパースエラーを起こさなくなりました
  • 配列リテラルのキャスト'{1,2,3}'::integer[] PostgreSQL配列リテラル構文のサポート
  • パラメータ化クエリの修正 — サブクエリと相関パスのパラメータバインディングを改善
コンポーネントMaven Centralnpm
shared1.4.2
engine1.4.9@petradb/engine 1.4.3
client1.4.2@petradb/client 1.4.2
server@petradb/server 1.4.3
cli@petradb/cli 1.4.3
jdbc1.4.3
drizzle@petradb/drizzle 1.4.3

WITHおよびWITH RECURSIVEによる完全なCTEサポートです。

非再帰CTE — 可読性と再利用のための名前付きサブクエリです。

WITH active_orders AS (
SELECT * FROM orders WHERE status = 'active'
)
SELECT customer_id, SUM(amount)
FROM active_orders
GROUP BY customer_id;

単一クエリ内で複数のCTEを定義でき、後のCTEは先のCTEを参照できます。カラムエイリアスがサポートされています:WITH t(x, y) AS (...)。CTEは同名のテーブルをシャドウします。

再帰CTE — 階層データやグラフデータのための反復クエリです。

WITH RECURSIVE descendants(id, name, depth) AS (
SELECT id, name, 0 FROM employees WHERE manager_id IS NULL
UNION ALL
SELECT e.id, e.name, d.depth + 1
FROM employees e INNER JOIN descendants d ON e.manager_id = d.id
)
SELECT name, depth FROM descendants ORDER BY depth, name;

UNION ALL(重複保持)とUNION(重複排除)の両方がサポートされています。安全制限として最大1000回の反復です。

3つのカテゴリによる完全なウィンドウ関数サポートです。

ランキング関数PARTITION BYORDER BYを使ったROW_NUMBER()RANK()DENSE_RANK()です。

SELECT name, department, salary,
RANK() OVER (PARTITION BY department ORDER BY salary DESC) AS dept_rank
FROM employees;

値関数 — 設定可能なオフセットとデフォルト値を持つLAG()LEAD()NTILE()です。

SELECT name, salary,
LAG(salary, 1, 0) OVER (ORDER BY salary) AS prev_salary,
NTILE(4) OVER (ORDER BY salary) AS quartile
FROM employees;

集約ウィンドウ関数 — フレーム指定を含む、OVER()付きの任意の集約関数(SUMCOUNTAVGMINMAXなど)です。

SELECT name, salary,
SUM(salary) OVER (ORDER BY salary ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS running_total,
AVG(salary) OVER (PARTITION BY department) AS dept_avg
FROM employees;

フレーム境界:UNBOUNDED PRECEDINGUNBOUNDED FOLLOWINGCURRENT ROWN PRECEDINGN FOLLOWING。フレーム句がない場合、集約ウィンドウ関数はパーティション全体で計算されます。

グループ化クエリとウィンドウ関数の両方で、集約関数にFILTER (WHERE ...)を適用できます。

SELECT
COUNT(*) AS total,
COUNT(*) FILTER (WHERE status = 'active') AS active_count,
SUM(amount) FILTER (WHERE amount > 100) OVER (ORDER BY created_at
ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS running_high_value
FROM orders;

インデックスのない等価結合がクロス積の代わりにハッシュジョイン戦略を使用するようになり、ジョインの計算量がO(n×m)からO(n+m)に削減されました。INNER、LEFT、RIGHT、FULLジョインに適用されます。インデックスが利用可能な場合はインデックスネストループジョインが優先されます。非等価結合条件は引き続きクロス積にフォールバックします。EXPLAIN出力ではHash JoinHash Left JoinHash Right JoinHash Full Joinとして表示されます。

GENERATED ALWAYS AS (expr) STOREDによる計算カラムです。

CREATE TABLE products (
price NUMERIC,
tax_rate NUMERIC DEFAULT 0.08,
total NUMERIC GENERATED ALWAYS AS (price * (1 + tax_rate)) STORED
);

生成カラムはINSERTおよびUPDATE時に再計算されます。直接設定することはできません。

ORDER BYがSQL標準のNULL順序をデフォルトとするようになりました:ASCNULLS LASTDESCNULLS FIRST。明示的なNULLS FIRST / NULLS LASTによるオーバーライドがサポートされています。

PostgreSQL互換の完全なシーケンスサポートです。オプション付きのCREATE SEQUENCEおよびDROP SEQUENCEINCREMENT BYSTART WITHMINVALUEMAXVALUECYCLEIF NOT EXISTS / IF EXISTS)。シーケンス関数:nextval()currval()setval()lastval()

SERIALSMALLSERIALBIGSERIALカラムがバッキングシーケンス(<table>_<column>_seqという名前)を作成するようになり、PostgreSQLの動作と一致します。DROP TABLEは所有シーケンスのドロップにカスケードします。TRUNCATEはバッキングシーケンスをリセットします。シーケンスの状態は完全にトランザクショナルです — ROLLBACKでシーケンスカウンターが復元されます。永続データベースはシーケンスの状態をカタログにシリアライズします。

新しいSQLコマンド:SHOW SEQUENCESSHOW INDEXES(すべてのテーブルのすべてのインデックス)。

CLI:新しい\ds(シーケンス一覧)および\di(インデックス一覧)メタコマンド。

CREATE INDEX ... USING btree構文が受け入れられるようになりました(btreeが唯一のサポートされるメソッドです)。これによりPostgrSQL生成DDLおよびORMとの互換性が向上します。

  • ORDER BYとNULL値:比較子が両方の値がNULLの場合に0を返すようになり、複数のソートキーでの非決定的なソート結果を修正しました
  • ORDER BYのエイリアス解決:SELECTエイリアス(例:SELECT x AS y ... ORDER BY y)がウィンドウ関数の有無にかかわらず、非グループ化クエリで正しく解決されるようになりました
  • Type.convert()のNULL処理:型変換を通過するNULL値(例:UPDATE SETのプリペアドステートメントパラメータ経由)が型のテキスト表現に変換される代わりにNULLとして保持されるようになりました。13型で修正:TEXT、VARCHAR、CHAR、UUID、TIMESTAMP、DATE、TIME、TIMETZ、INTERVAL、TIMESTAMPTZ、BYTEA、JSON、ENUM
  • ORDER BYパーサーのnulls句における網羅的マッチ警告
  • プレイグラウンドターミナルでの同期throwのサイレントエラー

すべてのコンポーネントが1.4.1にアップされました。

コンポーネントMaven Centralnpm
shared1.4.1
engine1.4.1@petradb/engine 1.4.1
client1.4.1@petradb/client 1.4.1
server1.4.1@petradb/server 1.4.1
cli1.4.1@petradb/cli 1.4.1
jdbc1.4.1
knex@petradb/knex 1.4.0
lucid@petradb/lucid 1.4.0
drizzle@petradb/drizzle 1.4.1

DDL文(CREATE TABLE、CREATE INDEX、DROP TABLEなど)がトランザクション内で完全にサポートされるようになり、DMLとともにアトミックにロールバックされます。DDLとDMLは単一のBEGIN/COMMITブロック内で自由にインターリーブできます。MemoryDBとPersistentDBの両方がBEGIN時に完全なカタログスナップショットをキャプチャし、ROLLBACK時に復元します。

Drizzle ORMリレーショナルクエリの完全サポート(db.query.*.findMany()db.query.*.findFirst())。json_build_arrayおよびjson_build_objectスカラー関数を追加し、LATERALサブクエリでのパラメータ置換を修正しました。

コンポーネントMaven Centralnpm
engine1.3.1@petradb/engine 1.3.3
server1.3.1@petradb/server 1.3.1
cli1.3.1@petradb/cli 1.3.1
jdbc1.3.1
drizzle@petradb/drizzle 1.3.1

PostgreSQLスタイルのスキーマ名前空間です。すべてのデータベースにデフォルトでpublicスキーマがあり、非修飾テーブル名はpublicに解決されます。スキーマ修飾名(schema.table)はすべてのDDLおよびDML文で機能します — CREATE TABLE、INSERT、UPDATE、DELETE、SELECT、ALTER TABLE、DROP TABLE、TRUNCATE、CREATE INDEX、COPY。

CREATE SCHEMA inventory;
CREATE TABLE inventory.products (id SERIAL PRIMARY KEY, name TEXT);
INSERT INTO inventory.products (name) VALUES ('Widget');
SELECT * FROM inventory.products;

information_schema.schematainformation_schema.tablesinformation_schema.columnsがクエリ可能になりました。スキーマ修飾テーブルは正しいtable_schemaを報告します。これらのビューはデータベースメタデータから動的に生成されます。

@petradb/drizzleの新しいmigrate()関数がDrizzle Kitマイグレーションファイルを適用します。meta/_journal.jsonを読み取り、SQLマイグレーションファイルを順番に実行し、適用されたマイグレーションをdrizzle.__drizzle_migrationsで追跡します。

import { migrate } from "@petradb/drizzle";
await migrate(db, { migrationsFolder: "./drizzle" });

DatabaseMetaData.getColumns()がカラム型と精度/スケール宣言に基づいて正確なCOLUMN_SIZEDECIMAL_DIGITSCHAR_OCTET_LENGTH値を返すようになりました。

すべてのコンポーネントが1.3.0にアップされました。

コンポーネントMaven Centralnpm
shared1.3.0
engine1.3.0@petradb/engine 1.3.0
client1.3.0@petradb/client 1.3.0
server1.3.0@petradb/server 1.3.0
cli1.3.0@petradb/cli 1.3.0
jdbc1.3.0
knex@petradb/knex 1.3.0
lucid@petradb/lucid 1.3.0
drizzle@petradb/drizzle 1.3.0

@petradb/drizzledrizzle-orm/pg-proxyラッパーから、PgSession/PgPreparedQuery/PgTransactionを直接拡張するカスタムPostgreSQLダイアレクトドライバーに書き換えられました。これによりdrizzle-orm/node-postgresと完全な機能パリティが実現されました。

  • db.transaction() 自動コミット/ロールバック付き
  • tx.rollback() 明示的ロールバック用
  • returning() insert/update/delete(部分カラム選択を含む)
  • リレーショナルクエリサポート(エンジンのjson_build_array/json_aggサポート待ち)

型変換:テキストパラメータからNUMERICカラムへ

Section titled “型変換:テキストパラメータからNUMERICカラムへ”

NumericType.convertTextValueを受け入れ、BigDecimalとしてパースするようになり、IntegerTypeBigintTypeSmallintTypeDoubleTypeの既存の変換動作と一致しました。これにより、数値をテキストとして送信するORM経由のパラメータ化INSERT/UPDATEが修正されました(標準的なPostgreSQLワイヤプロトコルの動作)。

NULL処理のための完全なSQL三値ロジックです。

  • 比較演算子(=!=<><=>=)はいずれかのオペランドがNULLの場合にNULLを返します
  • AND/ORは適切な三値真理値表を実装します(例:FALSE AND NULLFALSETRUE OR NULLTRUE
  • IN/NOT INはNULLを正しく伝播します(例:3 NOT IN (1, 2, NULL) → unknown)
  • 算術演算(+-*/%)および文字列連結(||)はNULLを伝播します
  • LIKEはNULLオペランドを処理します

SQLパーサーの別個のexpressionbooleanExpression階層が単一の式構文に統合されました。ブール演算子(ANDORNOT)は優先順位チェーン内の通常の演算子になりました。これにより、式が有効な場所であればどこでもブール式を使用できます(例:SELECT a > 5 AND b < 10)。

即時カラム参照バリデーション

Section titled “即時カラム参照バリデーション”

WHEREGROUP BYHAVINGORDER BYのカラム参照がクエリプラン構築時に即座にバリデーションされるようになり、空のテーブルや単一行のソートでも存在しないカラムを検出できます。以前は、不正な参照は行ごとの評価時にのみ検出されていたため、空のテーブルに対するクエリが暗黙的に成功していました。

  • UPDATEでNOT NULL制約が適用されていなかった問題
  • UNIQUE制約が複数のNULLを拒否していた問題(SQL標準:NULLは区別される)
  • INSERTカラムリストの重複カラムが検出されていなかった問題
  • 空のテーブルでSUM/AVG/MIN/MAXがNULLの代わりに0を返していた問題
  • LIKE '_'が空文字列にマッチしていた問題
  • LIMIT 0がエラーを発生させていた問題
コンポーネントMaven Centralnpm
shared1.2.3
engine1.2.9@petradb/engine 1.2.16
client1.2.5@petradb/client 1.2.5
server1.2.6@petradb/server 1.2.9
cli1.2.8@petradb/cli 1.2.9
jdbc1.2.13
knex@petradb/knex 1.2.2
lucid@petradb/lucid 1.2.1
drizzle@petradb/drizzle 1.2.2

SQL:INSERT VALUESでのDEFAULTキーワード

Section titled “SQL:INSERT VALUESでのDEFAULTキーワード”

INSERT INTO t (id, name) VALUES (DEFAULT, 'Alice')が動作するようになりました。SQL標準のDEFAULTキーワードは以前パーサーに拒否されており、シリアルやデフォルト付きカラムに対して明示的にDEFAULTを渡すORM生成のINSERT文が動作しませんでした。

新しい@petradb/drizzleパッケージがカスタムPostgreSQLダイアレクト実装によるDrizzle ORMドライバーを提供します。pgTableによるスキーマ定義、insert/select/update/delete、returning句、自動コミット/ロールバック付きdb.transaction()、型安全なクエリをサポートします。drizzle-orm/node-postgresと完全な機能パリティです。

依存パッケージのバージョンアップ

Section titled “依存パッケージのバージョンアップ”

DEFAULTキーワード修正を反映するため、engine、server、cli、jdbcがバージョンアップされました。

コンポーネントMaven Centralnpm
shared1.2.3
engine1.2.7@petradb/engine 1.2.14
client1.2.5@petradb/client 1.2.5
server@petradb/server 1.2.7
cli@petradb/cli 1.2.7
jdbc1.2.11
knex@petradb/knex 1.2.2
lucid@petradb/lucid 1.2.1
drizzle@petradb/drizzle 1.2.0

JS API:close()Promise<void>を返すように変更

Section titled “JS API:close()がPromise<void>を返すように変更”

Session.close()voidの代わりにPromise<void>を返すようになり、相互運用性のためにclientモジュールのAPIと一致しました。

parseTimestampZサフィックス、+/-HH:MMオフセット、ミリ秒、およびタイムゾーン情報付きのスペース区切りタイムスタンプを処理するようになりました。TIMESTAMPカラムではタイムゾーンを除去してLocalDateTimeにします。

toJStypeStringDateValueTimeValueTimestampTZValueTimeTZValueIntervalValueByteaValueを処理するようになりました。

SELECT t.*構文がジョインや混合式を含むクエリで動作するようになりました。

  • NumberValueTextValueが型をまたいで比較できるようになりました(テキストパラメータと数値カラム、およびその逆)
  • TimestampValueがテキストをタイムスタンプとしてパースすることでTextValueと比較できるようになりました

Knexドライバー:Dateバインディング

Section titled “Knexドライバー:Dateバインディング”

_sanitizeBindingsがJSのDateオブジェクトをISO文字列に変換してからエンジンに渡すようになり、Date.toString()フォーマットでのDateTimeParseExceptionを防止します。

コンポーネントMaven Centralnpm
shared1.2.3
engine1.2.6@petradb/engine 1.2.13
client1.2.5@petradb/client 1.2.5
server@petradb/server 1.2.5
cli@petradb/cli 1.2.5
jdbc1.2.10
knex@petradb/knex 1.2.2
lucid@petradb/lucid 1.2.1
  • ファットjar公開 — io.github.edadma:petradb-jdbcがMaven Central上の単一の自己完結型jarになりました
  • クリーンな接続URL — jdbc:petradb:memoryjdbc:petradb:file:/pathjdbc:petradb://host:port
  • ServiceLoader自動検出 — Class.forNameなしでDriverManager.getConnection()が動作します
  • ハードコードされたメタデータバージョン文字列を修正
  • JSファサードにCreateViewResultDropViewResultExplainResultCopyResultを追加
  • TypeScript型定義にExplainResultCopyResultを追加
  • 完全な例を含む新しいKnex.jsガイド
  • JDBCドキュメント:Maven/Gradle/sbtインストールスニペットを追加、ポート番号を修正
  • petradb-sharedがMaven Centralに公開可能に
  • npm、Scala、JDBCアーティファクトを網羅する公開後スモークテストスクリプト
コンポーネントMaven Centralnpm
shared1.2.1
engine1.2.2@petradb/engine 1.2.5
client1.2.3@petradb/client 1.2.3
server@petradb/server 1.2.3
cli@petradb/cli 1.2.3
jdbc1.2.6
knex@petradb/knex 1.2.0

エンジンサブパッケージの再構成

Section titled “エンジンサブパッケージの再構成”
  • エンジンがio.github.edadma.petradb.engineサブパッケージに移動
  • エンジンとクライアントの両方が拡張する新しい共有Sessionトレイト
  • リモートPetraDBサーバーに接続:petradb --host localhost --port 5480
  • 認証用の--user--passwordフラグ
  • メタコマンドがSQL経由でネットワーク越しに動作
  • SHOW VIEWSコマンドがビュー名と定義を返すように
  • PetraDBでKnex.jsクエリビルダーを使用するための@petradb/knexダイアレクトアダプター
  • clientのnpm公開を修正
  • CLIのnpm公開を修正
  • ハードコードされたJDBCメタデータバージョン文字列を修正
  • JVM、JS、Nativeで1013以上のテストが合格
  • Maven Centralにpetradb-jdbcとして公開
  • getGeneratedKeys()addBatch()/executeBatch()、DBeaver用のFK/インデックスメタデータ
  • ファイルモード(組み込み)とサーバーモード(ネットワーク)接続
  • CSV入出力のためのCOPY FROM/TO
  • CREATE TEMP TABLECREATE/DROP VIEW
  • SHOW FOREIGN KEYS/SHOW INDEXESイントロスペクション
  • 等価結合のためのインデックスネストループジョイン最適化
  • パーサーをfastparseに移行
  • TOML設定によるCORSサポート
  • 設定可能なmax_sessions、デフォルトポート5480
  • Node.js HTTPバックエンドによるJSサーバープラットフォーム
  • JSファサード付きの新しい@petradb/client npmパッケージ
  • Promiseを返すconnect()/execute()/close()を持つSessionクラス
  • \timing\copyコマンド
  • Nativeでの永続履歴
  • Scala 3.8.2、sbt 1.12.4
  • JVM、JS、Nativeで1000テスト合格

TextDB — 人間が編集可能なテキストファイル永続化

Section titled “TextDB — 人間が編集可能なテキストファイル永続化”

データベースを.ptxtテキストファイルとして永続化する新しいストレージバックエンドです。開くとメモリにロードされ、変更のたびにファイルを書き換えます。

EXCLUDED擬似テーブルによるinsert-or-updateセマンティクスです。

汎用的なproblem()呼び出しに代わる型付き例外クラスです。

DB.alterTable()がすべてのALTER TABLEディスパッチを集約するようになりました。

  • @petradb/engineConnectSQLSessionにリネーム
  • Promise<ExecuteResult[]>を返す非同期execute() API
  • ネットワーク使用のための新しい@petradb/clientパッケージ
  • エンジンとサーバー間のレスポンスフォーマットの統一

最初の安定リリースです。

  • クロスプラットフォームSQLエンジン(JVM、JavaScript、Native)
  • PostgreSQL互換構文
  • インメモリおよび永続(クラッシュセーフ)ストレージ
  • DDL、DML、ジョイン、サブクエリ、集計、トランザクション
  • JSONB演算子、配列型、CHECK制約
  • 879のテストが合格