top / index / prev / next / target / source
日記形式でつづる いがぴょんコラム ウェブページです。
Apache Olingo
を利用して OData v4 仕様 REST API Server を作る過程で、一番手間のかかる作業のひとつは Filter Expression の実装だと思われます。
Oiyokan の v1.14 では以下のソースコード箇所がこれに該当します。(Oiyokan では REST から SQL への変換が実装されています)
簡単な実装例は以下のようになります。REST の le
を SQL の <=
に置き換えているところです。Olingo は AST でデータ構築されているので、これをトラバースしながら SQL の WHERE 文に展開していきます。
} else if (opKind == BinaryOperatorKind.LE) {
// LE
sqlInfo.getSqlBuilder().append("(");
expand(impl.getLeftOperand());
sqlInfo.getSqlBuilder().append(" <= ");
expand(impl.getRightOperand());
sqlInfo.getSqlBuilder().append(")");
return;
バージョン違いに留意できるのであれば、Olingo v2 の以下の記事は参考になります。
このコードにあるように、Oiyokan ではまだ未対応の OData v4 文法が残っています。仕様対応追加の提案や pull request などが期待されます。
Last modified: $Date: 2021-05-14 $