JavaScript で SQL が使えるデータベースを調べたら alasql.js を見つけたので試してみました。
ブラウザのメモリ上で、テーブル作成、データの追加・更新・削除・検索が SQL で実行できます。
alasql.js 概要
AlaSQL - JavaScript SQL database console :AlaSQL をコマンド入力で試せます。
公式サイトによれば、
「ブラウザとNode.jsで動作するように設計された軽量のクライアント側インメモリSQLデータベース」
AlaSQL - 'à la SQL' - is a lightweight client-side in-memory SQL database designed to work in browser and Node.js.
- AlaSQLは純粋なJavaScriptで書かれており、ブラウザのWebSQLデータベースは使用していません。
- AlaSQLは、JOIN、GROUP、UNION、ANY、ALL、IN、サブクエリ、および非常に限られたトランザクションサポートを備えた、完全に機能するコンパクトなSQL Serverです。
- AlaSQLは、ROLLUP()、CUBE()およびGROUPING SETS()関数をサポートしています
- AlaSQLは現代版のブラウザ(Chrome、Firefox、IE、Safari)、Node.js、モバイルiOS、Androidで動作します。
- AlaSQLはいくつかの最適化手法を使用しているため高速です。
ドキュメント
テスト環境
html, alsql.min.js 、テスト用JavaScript、ブラウザ(Chrome)があればOK
実行結果は、とりあえずコンソール出力。
<html>
<head>
<script src="alasql.min.js"></script>
<script src="test1.js"></script>
</head>
<body>
test2
</body>
</html>
テーブル作成 & SELECT
はじめに、テーブルを作成して、SELECT してみます。
alasql関数に、SELECT 文をパラメータで渡すようです。
// テーブル作成 & SELECT
alasql("CREATE TABLE test (language INT, hello STRING)");
alasql("INSERT INTO test VALUES (1,'Hello!')");
alasql("INSERT INTO test VALUES (2,'Aloha!')");
alasql("INSERT INTO test VALUES (3,'Bonjour!')");
var rs1 = alasql("SELECT * FROM test WHERE language > 1");
console.log('t1', JSON.stringify(rs1));
結果は、json 形式で返ってきます。
t1 [{"language":2,"hello":"Aloha!"},{"language":3,"hello":"Bonjour!"}]
配列を SELECT
同じ構造を持つ配列で実行してみます。
配列もパラメータで指定します。
// 配列を SELECT
var data = [
{ language: 1, hello: 'Hello!' },
{ language: 2, hello: 'Aloha!' },
{ language: 3, hello: 'Bonjour!' },
]
var rs2 = alasql("SELECT * FROM ? WHERE language > 1", [data]);
console.log('t2', JSON.stringify(rs2));
結果は、テーブルの場合と同じです。
t2 [{"language":2,"hello":"Aloha!"},{"language":3,"hello":"Bonjour!"}]
Fluent Interface サポート機能
LINQ のように、書けるとあるが指定方法がよくわからない。
Where を例のように書いて実行してもうまくフィルターが効かない。
var res = alasql(data)
.Where(function(x){x.Population>1000000})
.OrderBy("Name")
.exec();
Select()
From()
GroupBy()
Having()
OrderBy()
Top()
Literals
データベース、テーブルなどオブジェクトに使用できる文字は、下記のとおり。
- A-Z
- a-z
- _ (underscore)
- 0-9 (except first character)
コメント
コメントは、通常の SQL と同じ
- 複数行のコメントは、 /* and */
- 1行のコメントは、 「--」で始める
/*
My
multi-line
comments
*/
SELECT * FROM one; -- and this is comments also
-- and this
-- and this
Data Types
Integer, Decimal, Float, Char などブラウザ上で扱うデータなら問題なさそう。
SELECT
何だか普通に SELECT の指定が使えそうです。
WITH
SELECT columns
REMOVE COLUMNS columns / LIKE pattern
TOP / LIMIT FETCH
DISTINCT
INTO
FROM
JOIN ON / USING
APPLY
LET
GROUP BY
HAVING
WHERE
ORDER BY
UNION / UNION ALL /INTERSECT / EXCEPT / CORRESPONDING
SEARCH
JSON を検索するのに使えそうです。
トランザクション処理
TRANSACTION, COMMIT, ROLLBACK
なんと、トランザクションもサポートしています。
プログラム
alasql 内で実行できるストアドプロシージャーのようなものもあります。
ブラウザ上でここまで、やるのかな?
DECLARE
SET
IF THEN, IF THEN ELSE
BEGIN END
WHILE
SOURCE
次にやること
ある程度のデータ件数で実際にどの程度つかえるのかを試してみたいと思います。
あとがき
ブラウザ上で使うには、十分すぎる機能を持っていると思います。
SQL の構文も特殊なものではなく、普通に書けます。