[CouchDB][ネタ] これが本当のRDBとの連携(あと少し)

CommonJS 続き。node.js はあまり意味がないというか面倒なので、flusspfered とかいうやつを試してみます。 http://flusspferd.org/JavaScript for C++ とか書いていますが、SpiderMonkeyベースです。。

portsみたらあったので入れてみます。

$ sudo port info flusspferd
flusspferd @0.8 (devel)
Variants:             gmp, readline, sqlite, test

Description:          flusspferd provides Javascript bindings for C++.
Homepage:             http://flusspferd.org/

Build Dependencies:   cmake
Library Dependencies: spidermonkey, boost
Platforms:            darwin
License:              unknown
Maintainers:          team@flusspferd.org

VariantsにSQLiteとかあるので、これはいれるっきゃない。あとreadlineも。なくても require('system').stdin.readLine() で大丈夫そうだけど。

$ sudo port install flusspferd +readline +sqlite

あとは普通に設定するだけ。ただ、/opt/local/lib にDYLD_LIBRARY_PATHを通しておかないと、_libiconv_open がないとかそんな感じのエラーになった。

$ curl -X PUT -d '"/usr/local/bin/flusspferd /usr/local/share/couchdb/server/main.js"' http://localhost:5984/_config/query_servers/javascript

これでOKです。

じゃあ、SQLite使おうか。

flusspferdをランタイムにすると、原理的にはCouchDBMapReduceのビューの中でSQLiteが使えてしまうことになります。

ところが、サンプル見ながら書いては見たものの、普通にコマンドラインで以下のスクリプトすら動かないので、なんかまだライブラリの設定が必要そう。

const SQLite3 = require('sqlite3').SQLite3;
var db = new SQLite3('/tmp/nosql.db');

symbol not found っていわれる。

ERROR: Script execution failed: exception `Error: Unable to load library '/opt/local/lib/flusspferd/modules/libsqlite3.dylib': dlsym(0x7fff5fc45450, flusspferd_load): symbol not found' at foo.js:1

それはともかく、CouchDBSQLiteMapReduceの最中に組み合わせるのはCommonJSに限らず、Python View Server とかでもできるので次のエントリで乗せようと思います。いつかけるか分からないけど。

っていうかCouchDBのデフォルトのJSって何なの?

というのは単なる素のSpiderMonkeyにテスト用のcURL関数がバインドされたものです。XMLHttpRequestとか高度なことはできないので。https://developer.mozilla.org/en/SpiderMonkey 参照、SpiderMonkeyはエンジンであってエンジンでしかないので、そのままじゃあまり役に立たない子です。というかC/C++向けにアプリに組み込んで使うものだし。