ローカル環境で簡単に使用できるDBが無いか、出来ればJavaScriptで書いているコードなので
JavaScriptから扱えるものを、と探していたところに、JavaScriptで書かれたライブラリの
AlaSQLというものを知りました。
AlaSQL
http://alasql.org/
https://github.com/agershun/alasql/wiki/readme
alasql.min.jsというライブラリをimportするだけで、オンメモリで動いてくれるDB、
さらにクエリ発行も可能ということだったので、自分の求めていた機能は大体実装されていました。
折角なので少し触ってみた所を書いてみたいと思います。
◇CREATE TABLE
alasql("CREATE TABLE testa (code STRING, name STRING, category STRING, tanka INT)");
alasql("CREATE TABLE testb (code STRING, su INT)");
◇INSERT
alasql("INSERT INTO testa VALUES ('apple','リンゴ','fruit',190)");
alasql("INSERT INTO testa VALUES ('orange','オレンジ','fruit',200)");
alasql("INSERT INTO testa VALUES ('nasi','梨','fruit',210)");
alasql("INSERT INTO testa VALUES ('carrot','人参','vegetable', 210)");
alasql("INSERT INTO testb VALUES ('apple',10)");
alasql("INSERT INTO testb VALUES ('carrot',5)");
//シングルクォートとダブルクォートの使い分けがいかにもJavaScriptって感じです
◇SELECT
var rs1 = alasql("SELECT * FROM testa ORDER BY code");
console.log('rs1', JSON.stringify(rs1));
結果セット:
rs1 [{"code":"apple","name":"リンゴ","category":"fruit","tanka":190},
{"code":"carrot","name":"人参","category":"vegetable","tanka":210},
{"code":"nasi","name":"梨","category":"fruit","tanka":210},
{"code":"orange","name":"オレンジ","category":"fruit","tanka":200}]
var rs2 = alasql("SELECT * FROM testa ORDER BY category, code");
console.log('rs2', JSON.stringify(rs2));
結果セット:
rs2 [{"code":"apple","name":"リンゴ","category":"fruit","tanka":190},
{"code":"nasi","name":"梨","category":"fruit","tanka":210},
{"code":"orange","name":"オレンジ","category":"fruit","tanka":200},
{"code":"carrot","name":"人参","category":"vegetable","tanka":210}]
var rs3 = alasql("SELECT * FROM testa, testb WHERE testa.code = testb.code ORDER BY testa.category, testa.code");
console.log('rs3', JSON.stringify(rs3));
結果セット:
rs3 [{"code":"apple","name":"リンゴ","category":"fruit","tanka":190,"su":10},
{"code":"carrot","name":"人参","category":"vegetable","tanka":210,"su":5}]
◇UPDATE
alasql("UPDATE testa SET name = 'りんご' where code = 'apple'");
var rs4 = alasql("SELECT * FROM testa, testb WHERE testa.code = testb.code ORDER BY testa.category, testa.code");
// 結果セットをArrayとして扱うならこんな感じ
for (var i = 0; i < rs4.length; i++) {
var kin = rs4[i].tanka * rs4[i].su;
console.log('rs4', rs4[i].name + ':' + kin);
}
rs4 りんご:1900
rs4 人参:1050
といった具合に直感的に使えます。
また、
alasql("SELECT * INTO CSV('outputfile',{headers:true,separator:','}) FROM testa, testb WHERE testa.code = testb.code \
ORDER BY testa.category, testa.code");
といった具合に、例えばCSVへのexportや、
alasql.promise("select * from csv('inputfile.txt')")
.then(function(rs6){
for (var j = 0; j < rs6.length; j++) {
console.log('t6', rs6[j].name);
}
}).catch(console.error);
CSVからのimportも可能です。
(他にも、xlsやxlsx、IndexedDB、LocalStorage、SQLiteなどにも対応しているようです。)
軽く触ってみただけでも自分の欲しかった機能は大体見つかったのですが、
まだまだ多くの機能を有しているようです。(トランザクション機能もあるのだとか(!))
是非使いこなしていきたいですが、いやあJavaScriptは深いですねえ…。