そこにドラクエウォークで新しく実装されたこころ道で、条件に合致するこころの装備が必要になったため、より一層検索が欲しくなった。
だけれども、
検索をサーバサイドではなく、クライアントサイド、JavaScriptで実装したい、
でもDBがsqlite、CSVで検索は速度がどうだろうなぁ、
と思ってていた。
色々と調べたところ、SQLiteをJavaScriptで実装してくれているらしい。
すごい。
https://github.com/sql-js/sql.js
少しバージョンが古いが、実装サンプルはこちら。
https://puarts.com/?pid=1675
戻り値を取ってくる方法は知恵袋に落ちていた。
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q11259553751
実際に動かしたサンプルは以下。
<html lang="ja">
<head>
<meta charset="utf-8">
<title>DB</title>
<script src="https://cdnjs.cloudflare.com/ajax/libs/sql.js/1.8.0/sql-wasm.min.js" integrity="sha512-VYs2RuvWreNg7oouVhZ/9bEvdPgyd5L2iCPCB8+8Qks/PHbmnc82TQOEctYoEKPveJGML8s+3NGcUEZYJrFIqg==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
<script>
async function start() {
const sqlPromise = initSqlJs({
locateFile: file => `https://cdnjs.cloudflare.com/ajax/libs/sql.js/1.8.0/${file}`
});
const dataPromise = fetch("/work/kensaku.db").then(res => res.arrayBuffer());
const [SQL, buf] = await Promise.all([sqlPromise, dataPromise])
const db = new SQL.Database(new Uint8Array(buf));
let query = "SELECT * FROM kokorokensaku";
let contents = db.exec(query);
console.log(contents);
console.log(contents[0].values[0][1]);
}
start();
</script>
</head>
<body>
Output is in Javascript console
</body>
</html>