TrimQueryの調べ
アブストラクト
TrimQueryはTrimPathプロジェクトにおけるJSONデータをSQL構文で操作可能にするライブラリである。基本SQL SyntaxはSELECT ... FROM、WHERE clauses、GROUP BY、HAVINGなど基本的なものからself joins、LIMITなど利用可能。ライセンスはGNU Public License version 2である。
API関係
TrimQueryのコール(環境により異なります)
TrimPath.makeQueryLang ( tableColumnDefinitions )
本メソッドはtableColumnDefinitionsをコンパイルしselectStatementObjectを返すメソッドです。tableColumnDefinitionsは次のような例になります。(注:SQLでいう所のテーブルスキーマのようなものです。)
<script language="javascript"> var columnDefs = { Invoice : { id : { type: "String" }, total : { type: "Number" }, custId : { type: "String" } }, Customer : { id : { type: "String" }, acctBalance : { type: "Number" } } }; </script>
selectStatement.parseSQL ( sqlString, optionalParamsArray )
parseSQLメソッドは sqlString に指定されたSQL構文を解釈します。パースエラーの際は例外が発生します。SQL構文の中に?を利用することによってoptionalParamsArrayに指定して数字に置き換えることができます。例は以下の通り
selectStatement = queryLang.parseSQL( "SELECT Customer.* FROM Customer " + "WHERE Customer.acctBalance > ? " + "AND Customer.acctBalance < ?", [ minBalance, maxBalance ]);
WHERE Customer.acctBalance > ? が minBalanceに置き換えられ, AND Customer.acctBalance < ? が maxBalanceに置き換えられます。
サンプルコード
ソース読んだほうがはやいと思う…。
var tableColumnDefinitions = { Foo : { id : {type : "String"}, foo : { type : "String"} }, Bar : { id : {type : "String"}, bar : { type : "String"} } }; var queryLang = TrimPath.makeQueryLang(tableColumnDefinitions); var selectStatement = queryLang.parseSQL("SELECT Foo.* FROM Foo"); var tableData = { Foo : [ { id : 1, foo : "foo1" } , { id : 2, foo : "foo2" } ], Bar : [ { id : 1, bar : "bar1" } , { id : 2, bar : "bar2" } ] }; var result = selectStatement.filter(tableData); for(var i in result) { for(var j in result[i]) document.write(j,"->",result[i][j],'<br />'); } // Contents of selectStatement // alert(selectStatement.toString()); // SELECT Foo.* FROM Foo
注意事項
本家の訳ではないです。
*1:http://trimpath.com/project/wiki/TrimQueryより引用
*2:開発チームが知っている範囲だそうです