Cloud Software Group, Inc. EBX®
ドキュメント > 開発者ガイド > EBX® の SQL
ナビゲーションモードドキュメント > 開発者ガイド > EBX® の SQL

はじめに

概要

このドキュメントでは、EBX® の構造化照会言語 (SQL) のクエリと式について説明します。EBX® は、1 つ以上のテーブルから選択された行を取得するための標準 SQL クエリをサポートしています。一部の EBX® SQL 言語機能は、標準の拡張機能です。サポートされている EBX® SQL 構文には、テーブル式 (SELECT、FROM、WHERE、GROUP BY、および HAVING 句)、DISTINCT、ORDER BY、LIMIT、および OFFSET、クエリの組み合わせ (UNION [ALL])、および WITH (RECURSIVE修飾子を除く) が含まれます。

この API の目的は、よく知られた標準を使用して EBX® からデータを取得する機能を開発者に提供することです。

EBX® SQL は Java API を介して、特に Query クラスからアクセスできます。クエリはパラメーターもサポートしています。Query.setParameter を参照してください。

クエリには、単一のデータセットまたは複数のデータセットを含めることができます。クエリの作成方法の詳細については、QueryBuilder を参照してください。

データモデルエンティティのマッピング

次のセクションでは、EBX® の概念の SQL へのマッピングについて詳しく説明します。

テーブル (データモデル内)

EBX® テーブルは、SQL テーブルに自然にマッピングされます。データモデルには、同じ名前の EBX® テーブルが複数存在する場合があります。このあいまいさは、テーブルがグループにある場合に発生する可能性があります。あいまいさを取り除くには、二重引用符で囲まれたテーブルのフルパスを使用します (たとえば、"my_group/my_table""other_group/my_table" と競合しなくなります)。データモデル内で一意のテーブルのエンティティ名を使用することもできます。テーブル名は、エンティティ名または別のテーブル名と競合しない場合にのみ使用できます。

フィールド

SQL 標準では、テーブルの構造は 1 つ以上の列で構成されます。親が EBX® テーブルであるすべてのエレメント (フィールドを含む) は、列にマップされます。

グループ

SQL 標準では、テーブルの構造は 1 つ以上の列で構成されます。親が EBX® テーブルであるすべてのエレメントは、列にマップされます。これには、SQL 構造タイプとして SQL 列にマッピングされるグループが含まれます。

関連付け

SQL 標準では、複数のテーブル間でのデータのクエリは、外部キーと主キーに基づいています。EBX® のこれらの概念は、SQL の概念と似ています。したがって、SQL のテーブル間の結合は、EBX® 外部キーと主キーを使用して実行することもできます。

データ型のマッピング

SQL を介したデータの処理は、そのデータ型に大きく依存します。たとえば、述語では、列が同じ SQL データ型を持っている場合にのみ列を比較できます。SQL データ型は、データモデルの型に応じた型です。

単純データ型

サポートされている標準 SQL データ型

この表は、EBX® でサポートされている XML スキーマで定義されているすべての単純型と、それに対応する標準 SQL 型を示しています。

XML スキーマタイプ

SQL タイプ

Java タイプ

注意

xs:string

VARCHAR

java.lang.String

xs:boolean

ブール値

java.lang.Boolean

値:TRUE、FALSE、UNKNOWN

xs:decimal

10 進数

java.math.BigDecimal

xs:dateTime

タイムスタンプ

java.util.Date

xs:time

時間

java.util.Date

返される Date の日付部分は常に「1970/01/01」に設定されます。

xs:date

日付

java.util.Date

返される Date の時間部分は、常に 1 日の始まり (つまり、「00:00:00」) に設定されます。

xs:anyURI

VARCHAR

java.net.URI

xs:Name (xs:string restriction)

VARCHAR

java.lang.String

xs:int

整数

java.lang.Integer

EBX® で定義された拡張単純型

EBX® は、事前定義された単純データ型を提供します。これらのタイプは、内部スキーマ common-1.0.xsd によって定義されます。それらの定義については、EBX® で定義された拡張単純型のセクションで詳しく説明しています。

XML スキーマタイプ

SQL タイプ

Java クラス

osd:text (xs:string restriction)

VARCHAR

java.lang.String

osd:html (xs:string restriction)

VARCHAR

java.lang.String

osd:email (xs:string restriction)

VARCHAR

java.lang.String

osd:password (xs:string restriction)

VARCHAR

java.lang.String

osd:color (xs:string restriction)

VARCHAR

java.lang.String

osd:resource (xs:anyURI restriction)

VARCHAR

内部クラス

osd:locale (xs:string restriction)

VARCHAR

java.util.Locale

osd:dataspaceKey (xs:string restriction)

VARCHAR

java.lang.String

osd:datasetName (xs:string restriction)

VARCHAR

java.lang.String

リスト (複数値) タイプ

リストは SQL 配列として処理されます。対応する Java クラスは java.util.List です。

注意:複数値フィールドでフィルタリングするには、まず UNNEST SQL 演算子を使用して「正規化」する必要があります (これはパフォーマンスの観点から推奨されず、大規模なテーブルでは非常に非効率になる可能性があることに注意してください)。

複合型

複合型は SQL 構造化型として扱われます。対応する Java クラスは Object[] です。これは、外部キー (以下を参照) とグループに適用されます。これらは、複合型によって定義されているためです。ドット演算子を使用して、SQL 構造型内のフィールドにアクセスします。たとえば、複合型の場合は、address.street を使用してフィールド address のフィールド street にアクセスします。クエリで複合型のサブフィールドを参照する場合は、常にテーブル名またはエイリアスを使用する必要があります。

TableRef 型

EBX® では、テーブルに複数のフィールドで構成される主キーを含めることができます。外部キーは、osd:tableRef 宣言のある単一のフィールドによって定義されます。標準の SQL 構文が拡張され、対象の主キーフィールドの値が抽出されるようになりました。外部キーの抽出の例では、次の SQL 式が有効です。

注意

主キーが 1 つのフィールドのみで構成されている場合でも、値にアクセスするにはフィールドの名前を指定する必要があります。たとえば、主キーが単一の id で構成されている場合、tableA.fkb.id = 123 のように、値にアクセスするには fkb.id を使用する必要があります。

tableRef の使用法の典型的な例は、SQL 結合です。

SELECT * FROM employee JOIN department ON employee.fkDept.id = department.id

または、参照されるテーブルに複合主キーがある場合

SELECT * FROM tableA JOIN tableB ON tableA.fkB.id1 = tableB.id1 AND tableA.fkB.id2 = tableB.id2

同様に、FK_AS_STRING ビルトイン関数$pk システム列を使用して、キーの文字列表現を介して同じ JOIN を実行できます。

SELECT * FROM tableA JOIN tableB ON FK_AS_STRING(tableA.fkB) = tableB."$pk"

メタデータフィールド

EBX® SQL は、一部のメタデータ情報へのアクセスも提供します。これらのフィールドは、明示的に参照されない限り、SQL ステートメントによって返されません。たとえば、「SELECT * FROM ...」はメタデータフィールドを返しませんが、「SELECT metadataField FROM ...」は返します。

名前

説明

SQL タイプ

Java クラス

creator

レコードの作成者

VARCHAR

java.lang.String

SELECT t."ebx-metadata"."system"."creator" FROM myTable t

SELECT t.* FROM myTable t WHERE t."ebx-metadata"."system"."creator" = 'Uuser1'

SELECT t.* FROM myTable t ORDER BY t."ebx-metadata"."system"."creator"

creation_time

レコードの作成時刻

タイムスタンプ

java.util.Date

SELECT t."ebx-metadata"."system"."creation_time" FROM myTable t

SELECT t.* FROM myTable t WHERE t."ebx-metadata"."system"."creation_time" > TIMESTAMP'2001-06-10 14:57:20'

SELECT t.* FROM myTable t ORDER BY t."ebx-metadata"."system"."creation_time"

updater

レコードを変更した最後のユーザー

VARCHAR

java.lang.String

SELECT t."ebx-metadata"."system"."updater" FROM myTable t

SELECT t.* FROM myTable t WHERE t."ebx-metadata"."system"."updater" = 'Uuser1'

SELECT t.* FROM myTable t ORDER BY t."ebx-metadata"."system"."updater"

update_time

レコードの最終変更時刻。

タイムスタンプ

java.util.Date

SELECT t."ebx-metadata"."system"."update_time" FROM myTable t

SELECT t.* FROM myTable t WHERE t."ebx-metadata"."system"."update_time" > TIMESTAMP'2001-06-10 14:57:20'

SELECT t.* FROM myTable t ORDER BY t."ebx-metadata"."system"."update_time"

システム列

テーブルに存在するフィールドとは別に、EBX® SQL はいくつかの追加のシステム列を提供します。これらの列は、明示的に参照されていない限り、SQL ステートメントによって返されません。たとえば、「SELECT * FROM ...」はシステム列を返しませんが、「SELECT systemColumnName FROM ...」は返します。

名前

説明

SQL タイプ

Java クラス

$adaptation

テーブルレコードを表す Adaptation

内部型

com.onwbp.adaptation.Adaptation

SELECT t."$adaptation" FROM myTable t WHERE t.value>100

$pk

レコードの主キーの文字列表現。

以下も参照してください。

VARCHAR

java.lang.String

SELECT t.* FROM myTable1 t WHERE t."$pk"='123'

SELECT t.* FROM myTable2 t WHERE t."$pk"='123|abc'

SELECT t."$pk" FROM myTable3 t WHERE t.value>100

SELECT t.value FROM myTable3 t ORDER BY t."$pk"

SQL 構文

サポートされている標準の演算子と関数

演算子は、比較や算術演算などの演算を実行するために、主に SQL ステートメントの WHERE 句で使用される予約語または文字です。これらの演算子は、SQL ステートメントで条件を指定し、ステートメントで複数の条件の接続詞として機能するために使用されます。EBX® は、ほとんどの SQL 標準演算子と関数をサポートしています。一部の関数と演算子は、オプションのパラメーターを持つことができます。ドキュメントでは、それらは角括弧で囲まれています。一般に、演算子と関数には 5 つのタイプがあります。

次の表は、すべての演算子の結合性と優先順位を、高い順に示しています。

演算子

結合性

.

[] (配列エレメント)

+- (単項プラス、マイナス)

* / %

+ -

BETWEEN、IN、LIKE、CONTAINS など

-

< > = <= >= <> !=

IS NULL、IS FALSE、IS NO TTRUE など

-

NOT

AND

OR

識別子のエスケープ

次の場合、識別子は二重引用符を使用してエスケープする必要があります。

次の例は、すべてのケースを例示するためのクエリを示しています。

SELECT t."user", t."$pk" FROM "/root/myTable" t WHERE t."order" = 1

プラン情報

EBX® SQL は EXPLAIN PLAN FOR ... 構文をサポートして、クエリのプラン情報を取得します。

結果は Query.explain に似ています。

例:EXPLAIN PLAN FOR SELECT id FROM myTable

制限とパフォーマンスのガイドライン

ドキュメント > 開発者ガイド > EBX® の SQL