読者です 読者をやめる 読者になる 読者になる

ddbcli 0.4.0

https://github.com/winebarrel/ddbcli

※最初に断っておくと、菊水を飲みながらコードを書いていました。今はタカラcanチューハイに移ってます。バグ報告をお待ちしています

※0.4.1をリリースしました

これは何?

Amazon DynamoDBインタラクティブcliです。要はmysqlコマンドみたいな感じで、インタラクティブ、かつSQLっぽい文法でDynamoDBの参照・更新ができます。

ChangeLog

DynamoDBのアップデートで新しい型(List/Map/Bool/Null)がサポートされたので、それに対応しました。

具体的には以下のような感じで、List/Map/Bool/Nullをセットできます。

INSERT INTO table (id, val1, val2) VALUES (1, {foo: 'FOO', bar: 'BAR'}, null);
UPDATE ALL table SET val3 = ['FOO', 'BAR'], val4 = true;

これに伴い、いままでset val = nullで属性を削除をやっていたのを以下のように変更しました。

UPDATE table DEL val WHERE ...

気づいたことなど

Nullの比較

APIリファレンスに書いてあるんですが、検索条件の NULL/NOT_NULL は

Note This operator tests for the nonexistence of an attribute, not its data type. If the data type of attribute "a" is null, and you evaluate it using

とのことで、属性がないことをテストするようです。 NULLかどうかをテストするには

... WHERE any_attr = NULL

で、できました。

また、EQでの比較はMap/Listでもできるようで

... WHERE any_attr = {key1: 'XXX', key2: 'YYY'}

とかも普通にできました。

空List/空Map

許容されているようです。 以下のようなクエリはエラーになりません。

INSERT INTO table (id, val1, val2) VALUES (1, {}, []);

ネストしたList/Map

当たり前かもですが、これも許容されているようです。 以下のようなクエリはエラーになりません。

INSERT INTO table (id, val) VALUES (1, {key1:[1, 2, 3], key2: {k1:["FOO", "BAR"], k2:1000}});