コンテンツにスキップ

Scala の使い方

import io.github.edadma.petradb.*
import io.github.edadma.petradb.engine.*
given Session = new MemoryDB().connect()
val results = executeSQL("""
CREATE TABLE products (
id SERIAL,
name TEXT NOT NULL,
price NUMERIC(10,2),
category TEXT
);
INSERT INTO products (name, price, category) VALUES
('Laptop', 999.99, 'Electronics'),
('Coffee', 4.50, 'Food'),
('Book', 19.99, 'Education');
SELECT category, COUNT(*), AVG(price)
FROM products
GROUP BY category
ORDER BY category;
""")
results.foreach(println)

MemoryDBインスタンスは独立しています。すべてのデータはメモリ上に存在します。

PetraDBはstowを使用した、JVMとNativeでのクラッシュセーフな永続ストレージをサポートしています。

import io.github.edadma.petradb.*
import io.github.edadma.petradb.engine.*
val db = PersistentDB.create("mydata.db", 4096)
given Session = db.connect()
executeSQL("""
CREATE TABLE users (
id SERIAL,
name TEXT NOT NULL,
email TEXT,
PRIMARY KEY (id)
);
INSERT INTO users (name, email) VALUES ('Alice', 'alice@example.com');
""")
db.close()
val db = PersistentDB.open("mydata.db")
given Session = db.connect()
val results = executeSQL("SELECT * FROM users")
results.foreach(println)
db.close()

再度開くと、すべてのテーブル、データ、列挙型、自動インクリメントの状態が復元されます。

永続データベースはクラッシュセーフのためにコピーオンライトページとダブルバッファードヘッダーを使用します。すべてのDDLおよびDML操作は永続的です。

TextDBはデータベースを人間が編集可能な.ptxtファイルとして保存します。開くとメモリにロードされ、変更のたびにファイルを書き換えます。初期開発、設定、バージョン管理に最適です。

import io.github.edadma.petradb.*
import io.github.edadma.petradb.engine.*
val db = TextDB.open("mydata.ptxt")
given Session = db.connect()
executeSQL("""
CREATE TABLE settings (key TEXT, value TEXT);
INSERT INTO settings (key, value) VALUES ('theme', 'dark');
""")
db.close()

同じファイルを再度開くとすべてのデータが復元されます。

val db = TextDB.open("mydata.ptxt")
given Session = db.connect()
val results = executeSQL("SELECT * FROM settings")
results.foreach(println)

JVMとNativeで動作します。.ptxt形式は人間が読めて差分に適しています。本番データのクラッシュセーフな永続性が必要な場合はPersistentDBを使用してください。

executeSQL(sql)は1つ以上のセミコロン区切りの文を実行し、Seq[Result]を返します。

val results: Seq[Result] = executeSQL("SELECT * FROM users; SELECT * FROM products;")

結果型、値の抽出、完全なAPIについてはScala APIリファレンスをご覧ください。

Terminal window
# すべてのプラットフォームでテストを実行
sbt test
# JavaScriptテストのみ実行
sbt engineJS/test
# JVMテストのみ実行
sbt engineJVM/test
# Nativeテストのみ実行
sbt engineNative/test

プラットフォームに関する注意事項

Section titled “プラットフォームに関する注意事項”
  • JVM — スレッドセーフ、Spring Boot、Play Framework、Akkaなどと統合
  • Scala.js — Node.jsとブラウザで動作
  • Scala Native — ネイティブ実行ファイルにコンパイル、CLIツールや組み込みシステムに最適