[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をランタイムにすると、原理的にはCouchDBのMapReduceのビューの中で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
それはともかく、CouchDBとSQLiteをMapReduceの最中に組み合わせるのはCommonJSに限らず、Python View Server とかでもできるので次のエントリで乗せようと思います。いつかけるか分からないけど。
っていうかCouchDBのデフォルトのJSって何なの?
というのは単なる素のSpiderMonkeyにテスト用のcURL関数がバインドされたものです。XMLHttpRequestとか高度なことはできないので。https://developer.mozilla.org/en/SpiderMonkey 参照、SpiderMonkeyはエンジンであってエンジンでしかないので、そのままじゃあまり役に立たない子です。というかC/C++向けにアプリに組み込んで使うものだし。