OData 要求から SQL クエリへの変換

Transform to SQL Select​ 操作を使用して、入力 OData ​GET​ 要求を SQL SELECT クエリに変換できます。この操作は、データベース用 Anypoint Connector (Database Connector) の ​select​ 操作と組み合わせると役立ちます。

*[Transform to SQL select]* 要素と *[Entity set name (エンティティセット名)]* タブが強調表示されています

出力ペイロードはプリペアードステートメントであり、属性はプリペアードステートメントパラメーターのマップです。

*[Select database (データベースを選択)]* および *[Input Parameters (入力パラメーター)]* 項目が強調表示されています

この操作を Database Connector で使用して、OData V4 を使用するデータベースを公開できます。

*[Serialized entity]* 要素と *[Inbound content (インバウンドコンテンツ)]* 項目が強調表示されています

APIkit は、次の要素をサポートしています。

  • システムクエリオプション:

    • $filter

    • $select

    • $search

    • $orderby

    • $skip

    • $top

  • 単一エンティティ

  • エンティティリレーション

  • サーバー側のページネーション

APIkit は、次の要素をサポートしていません。

  • パラメーターの別名

  • 組み込み検索条件操作:

    • has

    • divby

  • 次を除いた組み込みクエリ関数:

    • contains

    • startswith

    • endwith

  • $apply

  • $compute

  • $expand

OData V4 での Transform to SQL Select 操作

OData プロトコルでは、URL を使用して識別されたリソースに対してクライアントがクエリを実行できるようにするための一連の変換を定義しています。 クエリ可能なエンティティ、それぞれの項目、それぞれのリレーションのリストは、HTTP メッセージを使用したデータモデルで定義されています。 OData には、Java Database Connectivity (JDBC) との類似点がいくつかあります。​transform-to-sql-select​ 操作では、このような類似点を利用して、リソースに対する SQL クエリの作成を支援します。 この操作で生成されるメッセージには、SQL ​select​ 文をペイロードとし、パラメーター名と値マップを属性として準備されたステートメントが含まれます。

APIkit for OData V4 を使用して Transform to SQL Select 操作を実装する

SQL への変換操作は、次のパラメーターを持つ ​<apikit-odata:transform-to-sql-select>​ XML 要素を使用して実装できます。

パラメーター名 説明

Display name (表示名)

操作の名前。

Module configuration (モジュール設定)

関連モジュール設定の名前。

Entity set name (エンティティセット)

#[attributes.entitySetName] を取得するエンティティセットの名前。

Page size (ページサイズ)

サーバー側ページネーション中に 1 ページに表示する結果の分量を定義する数値。

Entity type name (エンティティ種別名)

エンティティデータモデルによって指定された [attributes.odataRequestAttributes] を使用して OData 要求から取得される文字列。

Entity type fields (エンティティ種別項目)

#[attributes.odataRequestAttributes] を使用して OData 要求から取得される、エンティティ種からプロパティ項目のリストを定義する文字列の配列。

Entity type keys (エンティティ種別キー)

#[attributes.odataRequestAttributes] を使用して OData 要求から取得される、エンティティのキー名と値のマップを定義するオブジェクト。

System query options (システムクエリオプション)

#[attributes.odataRequestAttributes] を使用して OData 要求から取得されるパラメーター。

Search transformation enabled (検索変換を有効化)

WHERE 句の $search 変換オプションの有効にします。

Strict search term match (厳密な検索語の一致)

$search で完全一致を有効にします。有効になっている場合、WHERE 句内の用語は「%」で囲まれません。

SQL identifiers delimiter (SQL 識別子の区切り文字)

生成された SQL ステートメント内の識別子を区切るオプション (オプション: DOUBLE_QUOTES​、BRACKETS、および ​BACK_TICKS​)。

例:

  • DOUBLE_QUOTES​: SELECT "TrackId", "Name" FROM "Tracks"

  • BRACKETS: SELECT [TrackId], [Name] FROM [Tracks]

  • BACK_TICKS​: SELECT `TrackId`, \​Name​ FROM \​Tracks

SQL limit rows (SQL 制限行数)

行数を制限するオプション (オプション: LIMIT および ​FETCH_NEXT_ROWS_ONLY​)。

例:

  • LIMIT: SELECT OrderID, ShippedDate, ShipCountry FROM Orders LIMIT :parameter1

  • FETCH_NEXT_ROWS_ONLY​: SELECT OrderID, ShippedDate, ShipCountry FROM Orders ORDER BY OrderID ASC OFFSET :parameter2 ROWS FETCH NEXT :parameter1 ROWS ONLY

ORDER BY​ は、要求に存在しない場合、CSDL で定義されたエンティティキーを使用して自動的に含まれます。

OData V4 の $filter 式

OData の ​$filter​ 式では、比較、論理、算術、グルーピングの演算子を使用します。演算子のリストとその意味については、 OData4 仕様​を参照してください。

APIkit では、​has​ 演算子と ​divby​ 演算子はサポートされません。

Transform to SQL select でサポートされる式

OData でサポートされる絞り込み式については、 仕様​を参照してください。

transform-to-sql-select​ 操作は、次の単項演算子とバイナリ演算子、そしてメソッド演算子をサポートします。

OData と SQL でのバイナリ演算子

OData の演算子 SQL の演算子

add

+

and

AND

div

/

eq

=

ge

>=

gt

>

le

=<

lt

<

mod

%

mul

*

ne

<>

または

または

sub

-

OData と SQL での単項演算子

OData の演算子 SQL の演算子

not

NOT

-

-

OData と SQL でのメソッド演算子

OData の演算子 SQL の演算子

contains

LIKE %value%

startswith

LIKE value%

endswith

LIKE %value

$search のサポート

この操作は、システムクエリオプションで指定された ​$search​ 式に基づいて ​WHERE​ 句を構築します。実装では、条件と一致するプロパティ値を持つすべての要素を選択します。

デフォルトでは、ある検索語が項目値に含まれる場合には、その検索語と一致したとみなされます。ただし、設定で ​strict​ が指定されている場合には、一致とはみなされません。

$search​ 機能を定義するパラメーターは次のとおりです。

パラメーター名 説明

Search transformation enabled (検索変換を有効化)

true​ の場合は、このオプションにより変換サポートが有効になります。

Strict search term match (厳密な検索語の一致)

true​ の場合は、式の検索語が項目値に正確に含まれている場合にのみ、一致したとみなされます。