管理ガイド

     前  次    新しいウィンドウで目次を開く     
ここから内容

データベース サポートの拡張

この章では、AquaLogic Data Services Platform (ALDSP) のデータベース サポートを拡張する方法について説明します。拡張により、サポート対象外のデータベースおよびサポート対象のデータベースの新しいバージョンに対して迅速な動的サポートが提供されます。この章では、「コンフィグレーション可能なリレーショナル プロバイダ」機能を使用したデータベース サポートを拡張する方法について説明します。

ヒント : この章では、コンフィグレーション可能なリレーショナル プロバイダ ファイルのサンプルを提供しています。サンプルをコピーして、独自のカスタマイズされたプロバイダ作成の開始点として使用できます。詳細なリストについては、「コンフィグレーション可能なリレーショナル プロバイダ ファイルのサンプル」を参照してください。

この章では、XQuery、SQL、特に高度なユースケースを理解していることを前提としています。ALDSP に関するこのような推奨されるバックグラウンドについては、「関連情報」を参照してください。

この章では以下のトピックについて説明します。

 


はじめに

コンフィグレーション可能なリレーショナル プロバイダはデータベースのサポートおよび ALDSP の機能を拡張することができます。コンフィグレーション可能なリレーショナル プロバイダは「プロバイダ」という XML ファイルを設定してデータベースのサポートを追加または変更できます。いくつかの高度なケースに対して、データベースのサポートを拡張する XML プロバイダを設定できます。詳細については、「コンフィグレーション可能なリレーショナル プロバイダの使用」を参照してください。

この節では、ALDSP データベース サポートを拡張する全体なフレームワークを説明し、一般的な用語を定義し、拡張フレームワークに対するいくつかのユースケースをリストします。

この章では以下のトピックについて説明します。

汎用のユースケース

この章では、コンフィグレーション可能なリレーショナル プロバイダを使用してデータベースのサポートを拡張するケースについて説明します。

拡張フレームワーク アーキテクチャの概要

リレーショナル ラッパー拡張フレームワークでは、ALDSP 用のリレーショナルデータベースのサポートを追加または変更することができます。このフレームワークはコンフィグレーション ファイルを編集してデータベースのサポートを拡張されるコンフィグレーション可能なリレーショナル プロバイダをサポートします。図 10-1 では、リレーショナル ラッパー拡張フレームワークのアーキテクチャを示します。

図 10-1 データベース拡張フレームワーク アーキテクチャ

データベース拡張フレームワーク アーキテクチャ

このフレームワークでは、リレーショナル ソースの XQuery ビューを表示してこれに対するクエリを実行するリレーショナル ラッパーというコンポーネントが含まれています。リレーショナル ラッパーには、リレーショナル プロバイダというコンポーネントのチェーンを管理するリレーショナル データベース プロバイダ レジストリが含まれます。

ヒント : この章で詳細に説明したコンフィグレーション可能なリレーショナル プロバイダは、ファイルを編集して簡単にコンフィグレーションおよびデプロイできるリレーショナル プロバイダの例です。コンフィグレーション可能なリレーショナル プロバイダはデータベースサポートを拡張するための主要な手段です。

プロバイダ レジストリ内では、リレーショナル プロバイダがチェーンに編成されます。これらのチェーンは互いに委譲され、メソッドの呼び出しをインターセプトして処理することができます。各プロバイダは要求に応答するか、要求をこれらの親プロバイダに委譲します。親プロバイダはプロバイダのデプロイメント記述子の <parent> 要素で指定されます。(「コンフィグレーション可能なリレーショナル プロバイダの形式の説明および参照」を参照)

図 10-1 に示すように、最初のチェーンは、3 つのプロバイダ provider_1provider_2 および provider_3 で構成されます。リレーショナル ラッパーがこのチェーンを呼び出すと、最初に provider_1 が呼び出しを受信し、応答するか親プロバイダ (provider_2) に委譲するかを選択できます。provider_1provider_2 に委譲すると、要求を処理するのは provider_2 の責任となります。provider_2 では、処理を provider_3 に委譲するかを決定することができます。このチェーン アーキテクチャはモジュール プロバイダ定義をサポートし構成を容易にして、システムの柔軟性を高めます。

ヒント : 通常、コンフィグレーション可能なリレーショナル プロバイダを使用してプロバイダを作成する場合、親プロバイダを指定します。親は、デフォルトで子プロバイダを受け入れるか、オーバーライドする機能をいくつか提供します。子プロバイダは親プロバイダの機能を継承します。ただし、親プロバイダに実装されていない機能も子プロバイダに追加できます。通常、抽象プロバイダのいずれかがチェーン内の最初のプロバイダの親として機能します。「抽象 SQL プロバイダ」を参照してください。

デフォルトでは、リレーショナル ラッパー拡張フレームワークはデータベースのコア セットをサポートしています。詳細なリストについては、「ALDSP を含むリレーショナル プロバイダ」を参照してください。拡張性によって、コア セット内にサポートされていないデータベースのフルサポートとコア データベースの新しいバージョンのサポートが可能です。たとえば、コア データベースの新しいバージョンは ALDSP によって現在認識されていない新しいプッシュダウン機能を提供できます。コンフィグレーション可能なリレーショナル プロバイダを編集してデプロイすることで、拡張フレームワークを使用して必要なデータベース サポートを迅速に追加することができます。

ALDSP を含むリレーショナル プロバイダ

表 10-1 ALDSP と共に含まれている標準のリレーショナル プロバイダのセットを示します。標準のプロバイダはリレーショナル ラッパー拡張フレームワークを使用して実装し、デフォルトで登録されます。これらのプロバイダをコンフィグレーション可能なリレーショナル プロバイダをコンフィグレーションするための基礎として使用できます。

表 10-1 ALDSP を含むリレーショナル プロバイダ
プロバイダ ID
サポートされているデータベースの型およびバージョン
基本データベース バージョン (10 進数)
Oracle-8
Oracle >= 8
8
Oracle-9
Oracle >= 9
9
MSSQL-2000
Microsoft SQL Server >= 2000
8
バージョン 8 は SQL Server 2000 用に JDBC ドライバによって返される製品のバージョンである。
DB2-8
IBM DB2 >= 8
8
Sybase-12.5.2
Sybase >= 12.5.2
12.52
Pointbase
Pointbase >= 5.1
5.1
Access
Microsoft Access 2003
コンフィグレーション可能なリレーショナル プロバイダの使用で説明したコンフィグレーション可能なリレーショナル プロバイダを使用して Microsoft Access のサポートが実装される。
4
AbstractSQL、AbstractSQL89、AbstractSQL92
これらの抽象プロバイダはコンフィグレーション可能なリレーショナル プロバイダに基本機能を提供する。詳細については、「コンフィグレーション可能なリレーショナル プロバイダの形式の説明および参照」を参照してください。「抽象 SQL プロバイダ」も参照してください。
不適用。
抽象プロバイダはどのデータベースにも適合しないため、基本バージョンを返さない。

ヒント : 基本データベース バージョンをフレームワークによって計算します。この値は、プロバイダを扱うデータベースの最小のバージョンを指定します。一致規則はデータベースと最もよく一致するプロバイダを選択する際の値を決定するために使用します。この計算の詳細については、「データベースの一致」を参照してください。

サポートされている機能

コンフィグレーション可能なリレーショナル プロバイダはコア リレーショナル プロバイダ内の以下の機能をサポートします。

リレーショナル ラッパー拡張フレームワークによって定義されたいくつかの機能はコンフィグレーション可能なリレーショナル プロバイダでサポートされていません。この場合、コンフィグレーション可能なリレーショナル プロバイダは要求を親プロバイダに委譲して応答します。

サポートされていない機能は以下のとおりです。

リレーショナル ソース メタデータのインポート

アプリケーションで必要なデータ ソースのメタデータは、AquaLogic Data Services Platform のメタデータ インポート ウィザードを使用してインポートできます。このウィザードは、使用可能なデータ ソース内を参照し、データ サービスおよび関数として表現できるデータ オブジェクトを識別します。リレーショナル プロバイダ レジストリはデータベースと最適なプロバイダのリストを返します。ドロップダウン メニューから 1 つのプロバイダ (通常、最適なプロバイダまたはそれに準じるプロバイダ) を選択できます。最も一致するのはドロップダウン メニューの上部に表示されます。作成された物理データ サービスはクエリおよび論理データ サービスの構成要素となります。メタデータ インポート ウィザードの使用の詳細については、『データ サービス開発者ガイド』の「物理データ サービスの作成と更新」を参照してください。一致する方法については、「データベースの一致に対する規則」を参照してください。

関連情報

ALDSP データベース、XQuery および SQL サポートの詳細については、次の ALDSP ドキュメントを参照してください。

 


コンフィグレーション可能なリレーショナル プロバイダ ファイルのサンプル

コード リスト 10-1 では、コンフィグレーション可能なリレーショナル プロバイダ ファイルのサンプルを示します。このサンプルは Microsoft Access プロバイダをカスタム設定する方法について示します。Microsoft Access プロバイダのサンプルは ALDSP インストール先の以下のパスにあります。

ALDSP_HOME\samples\RelationalAdapter\MS-Access
ヒント : このサンプル プロバイダをコピーして、独自のカスタマイズされたプロバイダの作成の開始点として使用します。この章の参照情報では、この XML ファイルのすべてのコンフィグレーション可能な要素について説明します。最初に、「コンフィグレーション可能なリレーショナル プロバイダの使用」を参照してください。
コード リスト 10-1 Microsoft Access データベースのコンフィグレーション可能なリレーショナル プロバイダ ファイルのサンプル
<?xml version="1.0"?>
<aldsp-rdb-extension xmlns="http://www.bea.com/ns/aldsp/rdb/extension">

<name>MS Access XML Provider</name>
<vendor>BEA</vendor>
<implementation-version>1.0</implementation-version>
<description> MS Access Relational Wrapper Extension </description>


<rdb-provider>
<id>MS-Access-2003</id>
<description>XMLProvider MS Access 2003</description>
<parent>AbstractSQL</parent>
<factory
class="com.bea.dsp.wrappers.rdb.providers.custom.XMLCustomizableProviderFactory>
<custom-rdb-provider
xmlns="http://www.bea.com/ns/aldsp/rdb/extension/custom"
xmlns:fn="http://www.w3.org/2004/07/xpath-functions"
xmlns:fn-bea="http://www.bea.com/xquery/xquery-functions"
xmlns:op-bea="http://www.bea.com/xquery/xquery-operators"
xmlns:op="http://www.w3.org/2004/07/xpath-operators"
xmlns:xdt="http://www.w3.org/2004/07/xpath-datatypes"
xmlns:xs="http://www.w3.org/2001/XMLSchema">

<database-kind>
<match-database>
<![CDATA[
(jdbc:getDatabaseProductName() eq "ACCESS") and
(jdbc:getDatabaseMajorVersion() ge 4)
]]>
</match-database>
<base-version>4</base-version>
</database-kind>

<database-objects>
<catalog quote=""" separator="."/>
<schema quote=""" separator="."/>
<table quote=""" qualified-name-parts="catalog schema table" />
</database-objects>


<joins inner-join="true" outer-join="true">
<sql92 right-trees="true">
<inner-join-syntax>
{0} INNER JOIN {1} ON {2}
</inner-join-syntax>
</sql92>
</joins>

<orderby column="true" expression="true" aggregate="true" null-order="low"/>

<groupby column="true" expression="true" constant="true"/>

<subqueries in-from="true" in-where="true" />

<case supported="false" />

<functions>

<!-- String Functions -->
<function name="fn:concat" supported="true" infix="true" >&</function>
<function name="fn:string-length" arity="1">LEN({0})</function>
<function name="fn:lower-case"      arity="1">IIF(ISNULL(LCASE({0})),'',LCASE({0}))</function>
<function name="fn:upper-case" supported="true" >      IIF(ISNULL(UCASE({0})),'',UCASE({0}))</function>
<function name="fn:substring" arity="2" >      IIF(ISNULL(MID({0},{1})),'',MID({0},{1}))</function>
<function name="fn:substring" arity="3" >      IIF(ISNULL(MID({0},{1},{2})),'',MID({0},{1},{2}))</function>

<function name="fn-bea:left" >LEFT({0},{1})</function>
<function name="fn-bea:right" >RIGHT({0},{1})</function>
<function name="fn-bea:repeat" supported="false" />
<function name="fn-bea:trim" arity="1" >TRIM({0})</function>
<function name="fn-bea:trim-left" arity="1" >LTRIM({0})</function>
<function name="fn-bea:trim-right" >RTRIM({0})</function>
<function name="fn-bea:sql-like" arity="2" >({0} LIKE {1})</function>
<function name="fn-bea:sql-like" arity="3" supported="false" />
<function name="fn:starts-with" supported="false" />
<function name="fn:ends-with" supported="false" />
<function name="fn:contains" supported="false" />
<function name="op-bea:string-not-equal" arity="2" >({0} <>      {1})</function>

<!-- Numeric Functions -->
<function name="fn:abs" supported="true" arity="1" >ABS({0})</function>
<function name="fn:ceiling" supported="false" />
<function name="fn:floor" supported="false" />
<function name="fn:round" >ROUND ({0})</function>

<!-- Aggregate Functions -->
<function name="fn:count" supported="true" arity="1" >COUNT({0})</function>
<function name="fn:avg" >AVG({0})</function>
<function name="fn:min" arity="1" >MIN({0})</function>
<function name="fn:max" supported="true" arity="1" >MAX({0})</function>
<function name="fn:sum" arity="1" >      IIF(ISNULL(SUM({0})),0,SUM({0}))</function>

<!-- DateTime Functions -->
<function name="fn:day-from-date" arity="1" >DAY({0})</function>
<function name="fn:month-from-date" >MONTH({0})</function>
<function name="fn:year-from-date" >YEAR({0})</function>
<function name="fn:day-from-dateTime" arity="1" >DAY({0})</function>
<function name="fn:month-from-dateTime" >MONTH({0})</function>
<function name="fn:year-from-dateTime" >YEAR({0})</function>
<function name="fn:hours-from-dateTime" >HOUR({0})</function>
<function name="fn:minutes-from-dateTime" arity="1" >MINUTE({0})</function>
<function name="fn:seconds-from-dateTime" >SECOND({0})</function>
<function name="fn:current-date" supported="false"/>
<function name="fn:current-time" supported="false"/>
<function name="fn:current-dateTime" supported="false"/>



</functions>

<casts>
<cast from="xs:string" from-subtypes="true" to="xs:int">
CINT({0})
</cast>
<cast from="xs:double" from-subtypes="true" to="xs:int">
CINT({0})
</cast>
<cast from="xs:float" from-subtypes="true" to="xs:int">
CINT({0})
</cast>
<cast from="xs:decimal" from-subtypes="true" to="xs:int">
CINT({0})
</cast>

<cast from="xs:string" from-subtypes="true" to="xs:double">
CDBL({0})
</cast>
<cast from="xs:decimal" from-subtypes="true" to="xs:double">
CDBL({0})
</cast>
<cast from="xs:string" from-subtypes="true" to="xs:float">
CDBL({0})
</cast>
<cast from="xs:decimal" from-subtypes="true" to="xs:float">
CDBL({0})
</cast>

<cast from="xs:string" from-subtypes="true" to="xs:dateTime">
CDATE({0})
</cast>

<cast from="xs:float" from-subtypes="true" to="xs:string" >
CSTR({0})
</cast>
<cast from="xs:double" from-subtypes="true" to="xs:string" >
CSTR({0})
</cast>
<cast from="xs:decimal" from-subtypes="true" to="xs:string" >
CSTR({0})
</cast>
<cast from="xs:boolean" from-subtypes="true" to="xs:string" >
CSTR({0})
</cast>
<cast from="xs:dateTime" from-subtypes="false" to="xs:string" >
CSTR({0})
</cast>
</casts>

<limit>
<select-top />
</limit>

<insert>
<auto-column-generator kind="sql-post" >
select @@identity
</auto-column-generator>
</insert>

<properties
supports-multiple-active-queries-per-connection="false"
supports-cancel-query="false"
supports-query-timeout="false" />

</custom-rdb-provider>
</factory>
</rdb-provider>

</aldsp-rdb-extension>

 


コンフィグレーション可能なリレーショナル プロバイダの使用

この章では、コンフィグレーション可能なリレーショナル プロバイダの使用方法について説明します。コンフィグレーション可能なリレーショナル プロバイダは XML コンフィグレーション ファイルを編集して新しいリレーショナル プロバイダをコンフィグレーションすることができます。

ヒント : 続行する前に、「はじめに」セクションを必ず確認してください。

この章では以下のトピックについて説明します。

コンフィグレーションの基本的な手順の概要

この節では、コンフィグレーション可能なリレーショナル プロバイダを開発およびデプロイするために必要な基本的手順を示します。新しいプロバイダを作成するための基本的な手順を図 10-2 にも示しています。

図 10-2 カスタム プロバイダ開発プロセス

カスタム プロバイダ開発プロセス

  1. 抽象 SQL プロバイダ」で説明されている任意の抽象プロバイダのような基本的な親プロバイダを選択します。基本的なプロバイダはプロバイダ チェーンの最初のプロバイダを表します。チェーンにある以降のプロバイダは親プロバイダの機能を拡張またはオーバーライドできます。プロバイダ チェーンの詳細については、「拡張フレームワーク アーキテクチャの概要」を参照してください。
  2. 1 つまたは複数のコンフィグレーション可能なリレーショナル プロバイダをコンフィグレーションします。コンフィグレーション可能なリレーショナル プロバイダは、コンフィグレーション可能なリレーショナル プロバイダのすべてのプロパティを指定している XML ファイルで設定します。「コンフィグレーション可能なリレーショナル プロバイダ ファイルのサンプル」を参照してください。サンプルは独自にカスタマイズしたプロバイダを開発するための最適な開始点です。
  3. プロバイダをデプロイします。コマンドライン スクリプトは独自にカスタマイズしたプロバイダをデプロイするために提供されています。「リレーショナル プロバイダのデプロイメント」を参照してください。
  4. プロバイダをテストします。

リレーショナル プロバイダのデプロイメント

この節で説明されているコマンドラインのデプロイメント ツールは、ALDSP と共に提供されています。このツールを使用して、リレーショナル プロバイダを追加および削除します。このデプロイメント ツールを使用するため、JAR ファイルにプロバイダのデプロイメント記述子がパッケージ化されている必要があります。「リレーショナル プロバイダのデプロイメント」を参照してください。

注意 : ALDSP は拡張をロードすると、デプロイメント記述子が読み込まれ、検証されます。説明のプロバイダ セクションを無効にしている場合は、無視されます。
注意 : この節でリストされているスクリプトを実行する前に、特定の環境変数を設定するため次のスクリプトを実行する必要があります。
注意 : <DOMAIN_HOME>/bin/setDomainEnv.[cmd/sh]

プロバイダの追加

プロバイダを追加するためのコマンド構文は以下のとおりです。

<ALDSP_HOME>/bin/update-providers.[cmd/sh] -add <provider.jar> 

プロバイダ リレーショナル ラッパー拡張 JAR ファイルには完全修飾パスが必要です。新しいプロバイダを追加すると、<ALDSP_HOME>/providers ディレクトリ内にコピーされます。

注意 : プロバイダの追加または削除を実行するには、IDE またはサーバを再起動する必要があります。

プロバイダの削除

プロバイダを削除するためのコマンド構文は以下のとおりです。

<ALDSP_HOME>/bin/update-providers.[cmd/sh] -remove <provider.jar>

<ALDSP_HOME>/providers ディレクトリに格納されているプロバイダ JAR ファイルのファイル名を指定します。既存のプロバイダを削除すると、<ALDSP_HOME>/providers ディレクトリから削除されます。

注意 : プロバイダの追加または削除を実行するには、IDE またはサーバを再起動する必要があります。

 


コンフィグレーション可能なリレーショナル プロバイダの形式の説明および参照

この節では、コンフィグレーション可能なリレーショナル プロバイダのフォーマット、要素およびコンフィグレーション可能なプロパティについて説明します。

注意 : プロバイダの詳細な例はコンフィグレーション可能なリレーショナル プロバイダ ファイルのサンプルのリストに表示されています。

この章の内容は以下のとおりです。

XML の主な要素の概要

この節では、コンフィグレーション可能なリレーショナル プロバイダ ファイルに格納されている主な要素について説明します。このファイルはリレーショナル プロバイダ拡張のプロパティを指定するために使用されるデプロイメント記述子です。

ヒント : ファイルは JAR ファイルにパッケージ化およびデプロイされる必要があります。JAR は 1 つのデプロイメント記述子のみ格納する必要があります。ただし、記述子は 1 つまたは複数のプロバイダを定義およびコンフィグレーションできます。「リレーショナル プロバイダのデプロイメント」を参照してください。

以下のリストではリレーショナル プロバイダのデプロイメント記述子の主な要素について説明します。

注意 : デプロイメント記述子ファイル aldsp-rdb-extension.xml に名前を指定する必要があります。
注意 : ALDSP が拡張をロードすると、デプロイメント記述子が読み込まれ検証されます。説明のプロバイダ セクションを無効にしている場合は無視されます。

<custom-rdb-provider> 要素の概要

コード リスト 10-2 では、コンフィグレーション可能なリレーショナル プロバイダにおける <custom-rdb-provider> 要素の基本コンフィグレーションを示します。このコンフィグレーションは ALDSP と共に提供されたスキーマ ファイルに基づいています。

各プロパティの詳細は、コンフィグレーション可能なリレーショナル プロバイダの参照で説明しています。詳細な例については、「コンフィグレーション可能なリレーショナル プロバイダ ファイルのサンプル」を参照してください。

コード リスト 10-2 <custom-rdb-provider> 要素の概要
<custom-rdb-provider xmlns="http://www.bea.com/ns/aldsp/rdb/extension/custom">

<database-kind>
<match-database>
XQuery expression that uses a predefined external function to
Access JDBC metadata.Result type:
boolean
</match-database>
<base-version>
Base database version supported by this provider (decimal)
</base-version>
<matched-version>
XQuery expression returning matched version.Result type: decimal
</matched-version>
</database-kind>

<database-objects>
<catalog quote?="string" separator?="string"/>
<schema quote?="string" separator?="string" />
<table quote?="string" separator?="string"
qualified-name-parts="string*"/>
<column quote?="string" />
<procedure quote?="string" qualified-name-parts="string*"/>
</database-objects>

<joins inner-join="boolean" outer-join="boolean">
<sql92 right-trees="boolean(:=true)" /> or
<sql89 outer-join-kind?="columnModifier|tableModifier"
outer-join-modifier?="string" />
</joins>

    <orderby column?="boolean" expression?="boolean" aggregate?="boolean"
null-order?="low|high|first|last|undefined"
style?="ordering-expression|ordering-expression-with-projection|
                position-in-project-list" />

<groupby column?="boolean" constant?="boolean" expression?="boolean" />

<subqueries in-from?="boolean" in-where?="boolean" />

<case supported?="boolean(:=true)" />

<functions default-syntax-for-empty-input="lax|strict|strict-coalesce">
<function name="QName" arity?="integer" supported?="boolean(:=true)"
infix?="boolean(:=false)">
SQL expression which uses {0},{1},...{n} for input expressions
(string)
</function>
</functions>

<casts>
<cast from="QName" from-subtypes?="boolean(:=false)" to="QName"
supported?="boolean(:=true)">
SQL expression which uses {0} for input expression
</cast>
</casts>

<limit supported?="boolean(:=true)">
<top parameter="true|false" composable="true|false"/> or
<rownum kind="project_first|filter_first">
ROWNUM
</rownum>
</limit>

<insert>
<key-gen kind?="jdbc|sql-pre|sql-post">
SQL statement
</key-gen>
</insert>

<properties
supports-query-timeout = "boolean"
supports-cancel-query = "boolean"
supports-multiple-active-queries-per-connection = "boolean"
/>

</custom-rdb-provider>

コンフィグレーション可能なリレーショナル プロバイダの参照

表 10-2 では、XML カスタマイズ プロバイダのコンフィグレーション ファイルの各子要素および <custom-rdb-provider> 要素のプロパティについて説明します。

ファイル フォーマットの概要については、「<custom-rdb-provider> 要素の概要」を参照してください。詳細な例については、「コンフィグレーション可能なリレーショナル プロバイダ ファイルのサンプル」を参照してください。

ヒント : 表 10-2 に示されているほとんどの設定は省略可能です。コンフィグレーション ファイルに指定されている任意の設定は親プロバイダによって提供されたデフォルト設定をオーバーライドします。親プロバイダは記述子の <parent> 要素で指定します。属性に対して設定が提供されていない場合、要求は親プロバイダに委譲されます。プロバイダが「チェーン」にある親プロバイダに委譲される方法の詳細については、「拡張フレームワーク アーキテクチャの概要」を参照してください。

表 10-2 コンフィグレーション要素および属性の説明 
要素および
  • 子要素
属性
要素および属性の説明
<match-database>
<matched-version>
 
これらの要素には定義済み外部関数を通じて JDBC データベース メタデータにアクセスできる XQuery 式が含まれる。「データベースの一致」を参照してください。
これらの要素に対するデフォルト値はない。デフォルト値は親プロバイダから継承される。
<database-objects>
 
この要素の子要素は生成された SQL にデータベース オブジェクト識別子のさまざまなプロパティを指定する。
<database-objects>
  • <catalog>
  • <schema>
  • <table>
  • <column>
  • <procedure>
quote
quote 属性は対応するデータベース オブジェクトの識別子引用を指定する。
例 : <catalog quote="'" />
引用開始と引用終了を指定するため、最初に引用開始を指定して引用終了を指定する。
例 : <table quote="[]" />
一般規則は、引用文字列に指定されている文字数が偶数であること、引用開始と引用終了が異なっていることを前提とする。指定した文字列の上半分は引用開始で下半分は引用終了である。文字列に指定されている文字数が奇数の場合、引用開始と引用終了が同じで文字列全体と等しいことを前提とする。
<database-objects>
  • <catalog>
  • <schema>
  • <table>
  • <procedure>
separator
separator 要素は完全修飾オブジェクト名にあるオブジェクト識別子の間のセパレータ文字を指定する。
例 : <schema separator="."/>
この属性が指定されていない場合、デフォルトで親プロバイダの値を使用する。
<table>
<procedure>
qualified-name-parts
qualified-name-parts 属性はこのデータベース オブジェクトに対する完全修飾名の構築方法を示すオブジェクト種類のリストを指定する。

注意 : リスト内のオブジェクト種類は空白文字で区切られている必要がある。

例 : <table qualified-name-parts="catalog schema table" />
例 : <procedure qualified-name-parts="schema procedure"/>
この属性が指定されていない場合、デフォルトで親プロバイダの値を使用する。
<joins>
inner-join
outer-join
この属性は、データベースが内部結合をサポートするか外部結合をサポートするかを指定する Boolean である。
正確な結合構文が「joins」要素の sql92 および sql89 子要素によって定義される。
例 : <joins inner-join="true" outer-join="true">
この属性が指定されていない場合、デフォルトで親プロバイダの値を使用する。
<joins>
  • <sql92>
 
子要素 sql92 はデータベースが結合に SQL-92 構文を使用していることを示す。例 : SELECT ...FROM a INNER JOIN | LEFT OUTER JOIN b ON ...
<joins>
  • <sql92>
right-trees
この属性は、括弧が join 句にある結合順序を管理するかを決定するブールである。
デフォルト値 : true
<joins>
  • <sql92>
inner-join-syntax
(省略可能) 内部結合の構文を定義する。左ブランチ ソースの場合 {0}、右ブランチ ソースの場合 {1} および結合条件式の場合 {2} を使用する。
例 : {0} JOIN {1} ON {2}
<joins>
  • <sql92>
outer-join-syntax
(省略可能) 左外側結合の構文を定義する。左ブランチ ソースの場合 {0}、右ブランチ ソースの場合 {1} および結合条件式の場合 {2} を使用する。
例 : {0} LEFT OUTER JOIN {1} ON {2}
<joins>
  • <sql89>
 
子要素 sql89 はデータベースが結合のため SQL-89 構文を使用していることを示す。たとえば : SELECT ...FROM a,b WHERE ...
<joins>
  • <sql89>
inner-join-syntax
(省略可能) 左内部結合の構文を定義する。左ブランチ ソースの場合 {0}、右ブランチ ソースの場合 {1} を使用する。
デフォルト : {0}, {1}
<joins>
  • <sql89>
outer-join-syntax
(省略可能) 左外側結合の構文を定義する。左ブランチ ソースの場合 {0}、右ブランチ ソースの場合 {1} を使用する。
例 : {0}, OUTER {1}
デフォルト : empty (左外側結合がサポートされていない)
<joins>
  • <sql89>
outer-join-right-branch-
column-modifier
(省略可能) 左外側結合の右側にあるカラムに適用される変換を指定する。右側のカラムを指定するため、{0} を使用する。
例 : {0}(+)
デフォルト : empty (変換が必要ではない)
<orderby>
column
expression
このブール属性は、データベースが「orderby」カラムおよび他の式をサポートするかを指定する。
この属性が指定されていない場合、デフォルトで親プロバイダの値を使用する。
<orderby>
aggregate
このブール属性は、データベースが「orderby」集約をサポートするかを指定する。
<orderby>
null-order
この属性は以下の 1 つの値を指定する。
  • low - NULL 値を最後にソートする。
  • high - NULL 値を先頭にソートする。
  • first - NULL 値を順次にかかわらず最初にソートする。
  • last - NULL 値を順次にかかわらず末尾にソートする。
  • undefined - NULL 値を ALDSP によってソートする。(この場合は、「order by」をデータベースにプッシュされない)。
この属性は指定されていない場合、デフォルトで親プロバイダの値を使用する。
<orderby>
style
生成される「orderby」式のスタイル。
  • position-in-project-list - n で ORDER BYを生成する。「n」は SELECT 句内のソート式の位置である。ソート式は必要に応じて SELECT 句で自動的に追加される。
  • ordering-expression-with-projection - <expr> で ORDER BY を生成する。<expr> は必要に応じて SELECT 句で自動的に追加されている。
  • ordering-expression - <expr> で ORDER BY を生成する。<expr> は SELECT 句で自動的に追加されない。
この属性に対するデフォルト値はない。指定されていない場合、親プロバイダの値を使用します。
<groupby>
column
constant
expression
これらのブール値の属性は、group by 句がカラム、定数および式を処理できるかを指定する。
この属性が指定されていない場合、デフォルトで親プロバイダの値を使用する。
<subqueries>
in-from
in-where
これらのブール属性は FROM および WHERE 句にサブクエリがサポートされているかを指定する。semi-join に変換する場合、ALDSP は WHERE 句でサブクエリのみ生成する。
例 : "WHERE EXITS(...))")
この属性が指定されていない場合、デフォルトで親プロバイダの値を使用する。
<case>
supported
このブール属性は、CASE 式がサポートされているかを指定する。
デフォルト値 : true
<functions>
 
この要素は関数の SQL 構文を定義する。
<functions>
default-syntax-for-
empty-input
NULL 入力がある場合に使用するデフォルト構文を定義する文字列の列挙通常、NULL (XQuery 内の空シーケンス) 入力は SQL および XQuery 関数によって別々に処理される。SQL では、NULL は通常関数の出力に伝播される。例えば : f(NULL)=NULL)。しかし、XQuery では、通常 NULL は値で置き換えられる。
f( () ) = "", sum( () )=0 などの文字列関数この設定は、関数にデフォルト SQL 構文を選択するような状況における処理方法を指定します。
この属性は以下の値のいずれかを指定する必要がある。
  • strict - XQuery セマンティクスに従う。入力が空であれは、プッシュダウンされない。
  • strict-coalesce - (デフォルト) XQuery セマンティクスに従う。SQL の COALESCE 関数を使用してプッシュダウンされる。データベースが COALESCE 関数をサポートしている場合のみこの値を使用する。
  • lax - XQuery セマンティクスに従わない。COALESCE 関数を使用しないで SQL を生成する。f(NULL) -> NULL など。
関数に対するデフォルトの SQL 構文」を参照してください。
デフォルト : strict-coalesce
<functions>
  • <function>
 
この子要素は XQuery 関数 (operator) を SQL に変換することを定義する。
子要素の内容は指定された関数に対して生成が必要な SQL 式である。パラメータは {0}, {1}, ... {n} として指定される。
パラメータの変数をサポートする。フォーマットの詳細については、「関数に対する SQL 構文の指定」を参照する。
サポートされた属性が false に設定されている場合、この要素は不要。
この要素の内容は空である。この場合は、この関数のデフォルト構文を SQL の生成のため使用する。関数に対するデフォルトの SQL 構文では、デフォルト構文のリストが提供されている。
<functions>
  • <function>
name
(必須) 関数の QName を指定する。「関数および 型名の解決プロセス」を参照する。
<functions>
  • <function>
arity
指定された関数のアリティを指定する。関数名は non-ambiguous である場合、省略する。
<functions>
  • <function>
supported
(ブール) 関数のプッシュダウンがサポートされているかを指定する。親プロバイダによって定義した関数のプッシュダウンを無効にする。
デフォルト値 : true
<functions>
  • <function>
infix
(ブール) この関数のため「infix」フォーマット スタイルを使用するかを指定する。この場合、子要素のコンテンツにある SQL 式は「infix」処理のみを指定する。パラメータは自動的に処理される。
<casts>
 
この要素はプッシュダウンのキャスト演算を定義する。
<casts>
  • <cast>
 
特定の型の組み合わせに対する SQL にキャスト演算の変換を定義する。
この要素の内容は、キャスト演算のため生成される SQL 式である。パラメータは {0} として指定される。
サポートされた属性が false に設定されている場合、この要素は必要ではない。
<casts>
  • <cast>
to
from
これらの属性は入力の QNames およびターゲット XQuery 型を指定する。ローカル名のみが指定されている場合、ALDSP は既知のネームスペースで型を検索する。
<casts>
  • <cast>
from-subtypes
(ブール) 入力型が一致するだけでなくそのサブ型も一致している必要があることを指定する。(XQuery 型の階層による)
デフォルト : false。
<casts>
  • <cast>
supported
(ブール) このキャスト演算がサポートされるか指定する。使用目的は親プロバイダのキャスト演算プッシュダウンを無効にすることである。
デフォルト値 : true
<limit>
 
この要素は fn:subsequence() のプッシュダウンを定義する。この要素では 1 つの子要素が指定されている必要がある。この関数のプッシュダウンを無効にするため、「supported」属性を false に設定する。
<limit>
supported
(ブール) データベースが fn:subsequence() プッシュダウンをサポートするか指定する。
デフォルト値 : true
<limit>
  • <select-top>
 
SELECT 句の TOP 変更子を使用して fn:subsequence() がプッシュダウンされることを指定する。たとえば : SELECT TOP n FROM ...
select-top 要素の内容は「select」句の変更子に対する SQL 構文を定義する。{0} は length 式にバインドされる。
デフォルト内容値 : TOP {0}
<limit>
  • <select-top>
parameter
(ブール) TOP 値はパラメータとして利用できるか指定する。たとえば : SELECT TOP ? FROM ... はデータベースによってサポートされるか。
デフォルト : false
<limit>
  • <select-top>
composable
true に設定すると、fn:subsequence() を処理した後で SQL の生成を停止するか指定する。false に設定すると、SELECT TOP ... 文のサブクエリを作成して続行される。
デフォルト : false
<limit>
  • <row-number-
    function>
 
ROWNUM-like 関数を使用して fn:subsequence() をプッシュダウンしたことを指定する。
この要素の内容は、データベースによってサポートされている ROWNUM-like 関数の SQL 構文を定義する。内容部分は省略可能である。
デフォルト内容 : ROW_NUMBER() Over(...)
<limit>
  • <row-number-
    function>
explicit-order-by
(ブール) ROW_NUMBER 関数に ORDER BY ソート式を引数として渡されるか決定する。
<limit>
  • <row-number-
    function>
split-range-filter
(ブール) 範囲テストをサブクエリに分割する必要があるかを決定する。(Oracle ROWNUM パターン)
デフォルト : false
<limit>
  • <limit-clause>
 
SQL クエリの末尾に LIMIT-like 句が追加されているため、fn:subsequence() を SQL に変換するよう指定する。
<limit-clause> 要素の内容は、この句に対する SQL 構文を定義する。ここでの {0} と {1} プレースホルダのバインディングは @style 属性に基づく。(以下を参照。)
内容値は省略可能である。
デフォルト内容値 : LIMIT {0} OFFSET {1}
<limit>
  • <limit-clause>
kind
受け入れた subsequence() 関数の種類を定義する。
  • Range - デフォルトの「start」と「length」式を使用する。この場合「limit」句の構文では、{0} パラメータが「start」式にバインドし {1} を「length」式にバインドする。
  • Top - プッシュダウンするには top-like subsequence() のみを入力する。「start」式に定数 1 がある。この場合「limit」句の構文では、「length」式にバインドされる {0} パラメータがある。
デフォルト値 : range
<limit>
  • <limit-clause>
parameter
(ブール)「limit」句に SQL パラメータが使用できるか指定する。(「start」式や「length」式として)
デフォルト値 : true
<limit>
  • <limit-clause>
composable
(ブール) fn:subsequence() を処理した後で SQL の生成を停止するか (false に設定する場合)、SELECT ... LIMIT に対するサブクエリを作成して続行されるか (true に設定する場合) を指定する。
デフォルト : false
<limit>
<limit-clause>
start-base
整数。0 または 1。0 または 1 によって式を開始するか定義する。@style が range である場合のみ適用できる。
デフォル値 : 0
<insert>
  • <auto-column-
    generator>
 
データベースにデータを挿入している場合、自動的に生成されたカラムにアクセスする方式を定義する。
方式種類は属性によって定義される。
この要素の内容は特定の種類に対しては SQL 式でそれ以外に対しては空である。
例 :
<insert> <auto-column-generator         kind="sql-post">
SELECT LAST_INSERT_ID()
</auto-column-generator></insert>
<insert>
  • <auto-column-
    generator>
kind
主な生成方式を定義する文字列定数 (enumeration)。この属性は以下のいずれかの値を指定する必要がある。
  • jdbc - (デフォルト) JDBC API を通じてキーの生成方式を定義する。この場合、key-gen の内容は空である必要がある。
  • sql-pre - INSERT 文を発行する前に自動生成したキーを取得するには、指定した SQL 文を実行する。たとえば、sequence-like データベース オブジェクトからのキーを取得するためこの属性を使用する。この場合、key-gen 要素の内容はシーケンス オブジェクト名 (データ サービス アノテーションで指定した) に対する {0} をプレースホルダとして使用される SQL 文である。
  • sql-pre - INSERT 文を発行する後で自動生成したキーを取得するには、指定した SQL 文を実行する。key-gen 要素の内容は実行される SQL 文である。
properties
 
この要素の属性はさまざまな SQL 生成および実行するプロパティを含む。これらのプロパティではデフォルト値がない。プロパティを設定されていない場合、親の値を使用する。
<properties>
multiple-active-queries-
per-connection-supported
(ブール) データベースが同じ接続で複数のアクティブな文を実行することをサポートするかを指定する。
<properties>
cancel-query-supported
(ブール) データベースおよびドライバで jdbc.sql.Statement.cancel() メソッドがサポートされているか指定する。
<properties>
query-timeout-supported
(ブール) データベースおよびドライバで jdbc.sql.Statement.setQueryTimeout() メソッドがサポートされているか指定する。

 


データベースの一致

この節では、ALDSP は指定したプロバイダのための適切なデータベースの一致をどうのように決定するかについて説明します。データベース一致のロジックは定義済み XQuery 外部関数で JDBC データベース メタデータにアクセスする XQuery 式として指定します。

一致する式はコンフィグレーション可能なリレーショナル プロバイダ要素で指定して (表 10-2、コンフィグレーション要素および属性の説明)、ALDSP XQuery エンジンによって評価されます。式では、ALDSP XQuery エンジンでサポートされている標準の XQuery 関数およびンフィグレーション可能なリレーショナル プロバイダで定義した追加の関数も使用されます。データベースの一致する XQuery 式は xs:boolean 値を返します。

XQuery 式の一致の他の使用とは、一致したデータベースのバージョンを計算することです。

この章では以下のトピックについて説明します。

データベースの一致に対する規則

フレームワークは、指定したプロバイダはデータベースとの互換性が確認されるため、一致規則を採用しています。メタデータ インポート プロセスの場合は、(「リレーショナル ソース メタデータのインポート」を参照) リレーショナル プロバイダ レジストリはどちらのプロバイダがインポートされるデータベースをサポートするか決定します。一致の成功に対する基本バージョン オフセットも取得します。以下のとおりで、基本データベース バージョンを計算します。

基本バージョン オフセット (10 進値) = (一致したデータベース バージョン - プロバイダによって返された基本データベース バージョン)

標準プロバイダの基本バージョン 10 進値を ALDSP を含むリレーショナル プロバイダセクションの表 10-1 に示しています。

複数の一致の場合、Datasource インポート ウィザードがプロバイダを表示する基本バージョン オフセットを使用します。ウィザードのドロップダウン メニューでは、最小の基本バージョン オフセット (データベースに最寄りのバージョン) が含まれています。最も一致するのはドロップダウン メニューの上部に表示されます。Datasource インポート ウィザードの詳細については、『データ サービス開発者ガイド』の「物理データ サービスの作成と更新」を参照してください。

たとえば、標準の DB2 リレーショナル プロバイダを考慮します。このプロバイダは 8 を始め DB2 のすべてのバージョンを一致します。標準のバージョンは 8 です。DB2 9 は標準のバージョン 9 と一致するコンフィグレーション可能なリレーショナル プロバイダで新しい DB2 プロバイダが作成されていると仮定してみましょう。DB2 9 インスタンスからテーブルのメタデータをインポートする場合、2 つのプロバイダによってデータベースが一致されます。しかし、最初のプロバイダのため基本バージョン オフセットは 1 ですが、2 番目のプロバイダは 0 です。従って、最初のプロバイダより 2 番目のプロバイダが利用できます。

JDBC メタデータ メソッドを XQuery 関数にマップする

この節では、データベースの一致式で使用される XQuery 関数のセットに java.sql.DatabaseMetaData インスタンスをマップする方法について説明します。

マップされたインタフェース : java.sql.DatabaseMetaData

関数ネームスペース :

マップされたメソッドの要求 :

表 10-3 では、これらの要求を満たす java.sql.DatabaseMetaData メソッドおよびそれらに対応する JDBC メソッド、および XQuery 関数を示します。

表 10-3 XQuery 関数に Java メソッドのマッピング
Java メソッド
XQuery 関数
int getDatabaseMajorVersion()
jdbc:getDatabaseMajorVersion() as xs:int?
int getDatabaseMinorVersion()
jdbc:getDatabaseMinorVersion() as xs:int?
String getDatabaseProductName()
jdbc:getDatabaseProductName() as xs:string?
String getDatabaseProductVersion()
jdbc:getDatabaseProductVersion() as xs:string?
int getDriverMajorVersion()
jdbc:getDriverMajorVersion() as xs:int?
int getDriverMinorVersion()
jdbc:getDriverMinorVersion() as xs:int?
String getDriverName()
jdbc:getDriverName() as xs:string?
String getDriverVersion()
jdbc:getDriverVersion() as xs:string?
String getURL()
jdbc:getURL()as xs:string?

例外の処理 :

追加の外部 XQuery 関数

この節では、データベースの一致式に使用できるが、jdbc.sql.DatabaseMetaData インタフェースから直接マップできない追加の関数について説明します。

関数ネームスペース :

表 10-4 では、関数のシグネチャをリストして説明します。

表 10-4 関数のシグネチャ
関数のシグネチャ
説明
cxp:getDatabaseVersion() as xs:decimal
データベース バージョンを xs:decimal として返します。以下のように java.sql.DatabaseMetaData に基づいてバージョンを計算します。
  1. getDatabaseProductVersion() メソッドによって返された文字列からバージョンを検出する。フォーマットの検出 : n1.n2.n3. n1、n2、n3 は負以外の整数で n3 は省略可能である。結果の 10 進数バージョンは n1+max(n2,99)*0.01+max(n3,999)*0.00001。
  2. 手順 1 が失敗した場合および getDatabaseMajorVersion()、getDatabaseMinorVersion() がドライバによって実装されている場合、結果は、major + max(minor,99)*0.01。
cxp:getDriverVersion() as xs:decimal
方法 1 と同じであるが、jdbc.sql.DatabaseMetaData: getDriverVersion()、getDriverMajorVersion()、getDriverMinorVersion() から次の関数を使用する。

 


関数に対する SQL 構文の指定

この節では、コンフィグレーション可能なリレーショナル プロバイダのデプロイメント記述子に指定した関数に対する SQL 文について説明します。「コンフィグレーション可能なリレーショナル プロバイダの参照」および「コンフィグレーション可能なリレーショナル プロバイダ ファイルのサンプル」の記述子の例も参照してください。

この章では以下のトピックについて説明します。

構文の概要

SQL 構文の関数は文字列として各パラメータのプレースホルダで指定します。対応する XQuery 関数を SQL に変換する場合、構文はリレーショナル ラッパーによって生成される SQL フラグメントを定義します。これは、<function> 要素の内容として指定されます。

例 :

<function name="fn:lower">LOWER({0})</functions> 

0 で始まるパラメータのプレースホルダ。複数のプレースホルダに同じインデックスがある場合もありますので、生成された SQL で引数を複製する必要があります。

例 :

<function name="fn:substring" arity="2">SUBSTR({0}, {1}, LENGTH({0})-{1}+1) </function> 

引数の変数と関数は 2 つの異なる方法で指定できます。

以下の 2 つの章ではこれらのメソッドについて説明します。

infix 属性の設定

関数要素の infix 属性は以下のように設定します。

<function name="fn:concat" infix="true">||</function> 

この例のために生成された SQL は以下のとおりです。

arg1 || arg2 || arg3 || ...|| argN 

変数長さプレースホルダの使用

SQL 生成の場合、変数長プレースホルダ {...} はカンマで区切られて残りの引数で置き換えられます。

<function name="fn:concat">CONCAT({...})</function>

生成された SQL は以下のとおりです。

CONCAT(arg1,arg2,arg3,....,argN) 

別の文字区切りが必要な場合、以下のように変数長プレースホルダに指定されている必要があります。

{...DELIMITER} 

次に例を示します。

<function name="fn:concat">COALESCE({... || }, "")</function>

生成された SQL は以下のとおりです。

COALESCE(arg1 || arg2 || arg3 || ...|| argN, "")
注意 : この場合、文字区切りは「||」です。

 


関数に対するデフォルトの SQL 構文

コンフィグレーション可能なリレーショナル プロバイダ ファイルの <functions> セクションに関数が指定された場合、関数に対するデフォルト構文が使用されます (表 10-2)。しかし、これらの構文はユーザからは提供されません。(<function> 要素の内容は空です)。いくつかの関数の場合、リレーショナル プロバイダは default-syntax-for-empty-input 属性に基づくデフォルト構文を選択します。default-syntax-for-empty-input 属性の詳細については、「コンフィグレーション可能なリレーショナル プロバイダの参照」を参照してください。

この節では、default-syntax-for-empty-input 属性の 3 つの使用可能な値に対して使用されるデフォルト構文を示します。

属性
説明
strict
strict-coalesce
lax

default-syntax-for-empty-input 属性に基づくデフォルト SQL 構文の関数は 表 10-5表 10-6 および 表 10-7 でアスタリスク付きで示します。この関数は以下があります。

関数のデフォルト構文が定義されていない場合、使用する時関数の構文を指定する必要があります。それ以外の場合は、エラーとします。

表 10-5 default-syntax-for-empty-input = strict-coalesce
XQuery 関数
デフォルト SQL 構文
プッシュダウン要求
op:numeric-add
{0} + {1}
 
op:numeric-multiply
{0} * {1}
 
op:numeric-divide
{0} / {1}
 
op:numeric-mod
MOD({0}, {1})
 
fn:abs
ABS({0})
 
fn:ceiling
CEILING({0})
 
fn:floor
FLOOR({0})
 
fn:round
FLOOR({0} + 0.5)
 
fn-bea:sql-round
ROUND({0})
 
* fn:concat
COALESCE({0} || {1} || ...|| {n}, `')
コンパイル時、入力を空の値 (NULL) に設定できないように決定されている場合 COALESCE が使用できません。
引数の型は CLOB または LONG VARCHAR ではない。
* fn:substring ($str, $pos)
if $pos is a subtype of xs:integer
COALESCE(SUBSTRING({0} FROM {1}), `')
else
COALESCE(SUBSTRING({0} FROM CAST({1}+0.5 AS INTEGER)), `')
コンパイル時、入力を空の値 (NULL) に設定できないように決定されている場合 COALESCE が使用できません。
最初の引数の型は CLOB または LONG VARCHAR ではない。
* fn:substring($str, $pos, $len)
if $pos and $len are subtypes of xs:integer
COALESCE(SUBSTRING({0} FROM {1} FOR {2}), `')
else
COALESCE(SUBSTRING({0} FROM CAST({1}+0.5 AS INTEGER) FOR CAST({2}+0.5 AS INTEGER)), `')
コンパイル時、入力を空の値 (NULL) に設定できないように決定されている場合 COALESCE が使用できません。
最初の引数の型は CLOB または LONG VARCHAR ではない。
* fn:string-length
COALESCE(CHAR_LENGTH({0}), 0)
コンパイル時、入力を空の値 (NULL) に設定できないように決定されている場合 COALESCE が使用できません。
引数の型は CLOB または LONG VARCHAR ではない。
* fn:lower-case
COALESCE(LOWER({0}), `')
コンパイル時、入力を空の値 (NULL) に設定できないように決定されている場合 COALESCE が使用できません。
引数の型は CLOB または LONG VARCHAR ではない。
* fn:upper-case
COALESCE(UPPER({0}), `')
コンパイル時、入力を空の値 (NULL) に設定できないように決定されている場合 COALESCE が使用できません。
引数の型は CLOB または LONG VARCHAR ではない。
fn:contains,
fn:starts-with,
fn:ends-with
LIKE with the ESCAPE clause and `|' as the escape character.
最初の引数の型は CLOB または LONG VARCHAR ではない。
2 番目の引数は SQL 定数またはパラメータである。
fn:year-from-dateTime,
fn:year-from-date
EXTRACT(YEAR FROM {0})
 
fn:month-from-dateTime
fn:month-from-date
EXTRACT(MONTH FROM {0})
 
fn:day-from-dateTime
fn:day-from-date
EXTRACT(DAY FROM {0})
 
fn:hours-from-dateTime,
fn:hours-from-time
EXTRACT(HOUR FROM {0})
 
fn:minutes-from-dateTime,
fn:minutes-from-time
EXTRACT(MINUTE FROM {0})
 
fn:seconds-from-dateTime,
fn:seconds-from-time
CAST(EXTRACT(SECOND FROM {0}) AS DECIMAL)
 
op:hexBinary-equal
{0} = {1}
 
op-bea:hexBinary-not-equal
{0} != {1}
 
fn:empty
{0} IS NULL
 
fn:exists
{0} IS NOT NULL
(また、WHERE 句内のサブクエリをサポートすると、EXISTS)
 
fn:count
COUNT (with COUNT DISTINCT support)
 
* fn:sum
COALESCE(SUM({0}), 0)
コンパイル時、入力を空の値 (NULL) に設定できないように決定されている場合 COALESCE が使用できません。
 
fn:min
MIN({0})
 
fn:max
MAX({0})
 
fn:avg
AVG({0})
 
fn-bea:sql-like($str, $pattern)
{0} LIKE {1}
引数の型は CLOB または LONG VARCHAR ではない。
fn-bea:sql-like($str, $pattern, $escape)
{0} LIKE {1} ESCAPE {2}
引数の型は CLOB または LONG VARCHAR ではない。
fn-bea:left
LEFT({0}, {1})
最初の引数の型は CLOB または LONG VARCHAR ではない。
fn-bea:right
RIGHT({0}, {1})
最初の引数の型は CLOB または LONG VARCHAR ではない。
fn-bea:trim
LTRIM(RTRIM({0}))
引数の型は CLOB または LONG VARCHAR ではない。
fn-bea:trim-left
LTRIM({0})
引数の型は CLOB または LONG VARCHAR ではない。
fn-bea:trim-right
RTRIM({0})
引数の型は CLOB または LONG VARCHAR ではない。
fn-bea:repeat
REPEAT({0})
引数の型は CLOB または LONG VARCHAR ではない。
* default-syntax-for-empty-input 設定に基づくデフォルト SQL 構文に対する関数

表 10-6 default-syntax-for-empty-input = strict
XQuery 関数
デフォルト SQL 構文
プッシュダウン要求
op:numeric-add
{0} + {1}
 
op:numeric-multiply
{0} * {1}
 
op:numeric-divide
{0} / {1}
 
op:numeric-mod
MOD({0}, {1})
 
fn:abs
ABS({0})
 
fn:ceiling
CEILING({0})
 
fn:floor
FLOOR({0})
 
fn:round
FLOOR({0} + 0.5)
 
fn-bea:sql-round
ROUND({0})
 
* fn:concat
{0} || {1} || ... || {n}
引数の型は CLOB または LONG VARCHAR ではない。
引数は null なしの値である必要がある。(コンパイラによって検出されるため)
* fn:substring ($str, $pos)
if $pos is a subtype of xs:integer
SUBSTRING({0} FROM {1})
else
SUBSTRING({0} FROM CAST({1}+0.5 AS INTEGER))
最初の引数の型は CLOB または LONG VARCHAR ではない。
最初の引数は null なしの値である必要がある。(コンパイラによって検出されるので)
* fn:substring($str, $pos, $len)
if $pos and $len are subtypes of xs:integer
SUBSTRING({0} FROM {1} FOR {2})
else
SUBSTRING({0} FROM CAST({1}+0.5 AS INTEGER) FOR CAST({2}+0.5 AS INTEGER))
最初の引数の型は CLOB または LONG VARCHAR ではない。
最初の引数は null なしの値である必要がある。(コンパイラによって検出されるので)
* fn:string-length
CHAR_LENGTH({0})
引数の型は CLOB または LONG VARCHAR ではない。
引数は null なしの値である必要がある。(コンパイラによって検出されるので)
* fn:lower-case
LOWER({0})
引数の型は CLOB または LONG VARCHAR ではない。
引数は null なしの値である必要がある。(コンパイラによって検出されるので)
* fn:upper-case
UPPER({0})
引数の型は CLOB または LONG VARCHAR ではない。
引数は null なしの値である必要がある。(コンパイラによって検出されるので)
fn:contains,
fn:starts-with,
fn:ends-with
LIKE with the ESCAPE clause and `|' as escape character.
最初の引数の型は CLOB または LONG VARCHAR ではない。
2 番目の引数は SQL 定数またはパラメータである。
fn:year-from-dateTime,
fn:year-from-date
EXTRACT(YEAR FROM {0})
 
fn:month-from-dateTime
fn:month-from-date
EXTRACT(MONTH FROM {0})
 
fn:day-from-dateTime
fn:day-from-date
EXTRACT(DAY FROM {0})
 
fn:hours-from-dateTime,
fn:hours-from-time
EXTRACT(HOUR FROM {0})
 
fn:minutes-from-dateTime,
fn:minutes-from-time
EXTRACT(MINUTE FROM {0})
 
fn:seconds-from-dateTime,
fn:seconds-from-time
CAST(EXTRACT(SECOND FROM {0}) AS DECIMAL)
 
op:hexBinary-equal
{0} = {1}
 
op-bea:hexBinary-not-equal
{0} != {1}
 
fn:empty
{0} IS NULL
 
fn:exists
{0} IS NOT NULL
(また、WHERE 句内のサブクエリをサポートすると、EXISTS)
 
fn:count
COUNT (with COUNT DISTINCT support)
 
* fn:sum
SUM({0})
引数は null なしの値である必要がある。(コンパイラによって検出されるため)
fn:min
MIN({0})
 
fn:max
MAX({0})
 
fn:avg
AVG({0})
 
fn-bea:sql-like($str, $pattern)
{0} LIKE {1}
引数の型は CLOB または LONG VARCHAR ではない。
fn-bea:sql-like($str, $pattern, $escape)
{0} LIKE {1} ESCAPE {2}
引数の型は CLOB または LONG VARCHAR ではない。
fn-bea:left
LEFT({0}, {1})
最初の引数の型は CLOB または LONG VARCHAR ではない。
fn-bea:right
RIGHT({0}, {1})
最初の引数の型は CLOB または LONG VARCHAR ではない。
fn-bea:trim
LTRIM(RTRIM({0}))
引数の型は CLOB または LONG VARCHAR ではない。
fn-bea:trim-left
LTRIM({0})
引数の型は CLOB または LONG VARCHAR ではない。
fn-bea:trim-right
RTRIM({0})
引数の型は CLOB または LONG VARCHAR ではない。
fn-bea:repeat
REPEAT({0})
引数の型は CLOB または LONG VARCHAR ではない。
* default-syntax-for-empty-input 設定に基づくデフォルト SQL 構文に対する関数

表 10-7 default-syntax-for-empty-input = lax
XQuery 関数
デフォルト SQL 構文
プッシュダウン要求
op:numeric-add
{0} + {1}
 
op:numeric-multiply
{0} * {1}
 
op:numeric-divide
{0} / {1}
 
op:numeric-mod
MOD({0}, {1})
 
fn:abs
ABS({0})
 
fn:ceiling
CEILING({0})
 
fn:floor
FLOOR({0})
 
fn:round
FLOOR({0} + 0.5)
 
fn-bea:sql-round
ROUND({0})
 
* fn:concat
{0} || {1} || ... || {n}
引数の型は CLOB または LONG VARCHAR ではない。
* fn:substring ($str, $pos)
if $pos is a subtype of xs:integer
SUBSTRING({0} FROM {1})
else
SUBSTRING({0} FROM CAST({1}+0.5 AS INTEGER))
最初の引数の型は CLOB または LONG VARCHAR ではない。
* fn:substring($str, $pos, $len)
if $pos and $len are subtypes of xs:integer
SUBSTRING({0} FROM {1} FOR {2})
else
SUBSTRING({0} FROM CAST({1}+0.5 AS INTEGER) FOR CAST({2}+0.5 AS INTEGER))
最初の引数の型は CLOB または LONG VARCHAR ではない。
* fn:string-length
CHAR_LENGTH({0})
引数の型は CLOB または LONG VARCHAR ではない。
* fn:lower-case
LOWER({0})
引数の型は CLOB または LONG VARCHAR ではない。
* fn:upper-case
UPPER({0})
引数の型は CLOB または LONG VARCHAR ではない。
fn:contains,
fn:starts-with,
fn:ends-with
LIKE with ESCAPE clause and `|' as escape character
最初の引数の型は CLOB または LONG VARCHAR ではない。
2 番目の引数は SQL 定数またはパラメータである。
fn:year-from-dateTime,
fn:year-from-date
EXTRACT(YEAR FROM {0})
 
fn:month-from-dateTime
fn:month-from-date
EXTRACT(MONTH FROM {0})
 
fn:day-from-dateTime
fn:day-from-date
EXTRACT(DAY FROM {0})
 
fn:hours-from-dateTime,
fn:hours-from-time
EXTRACT(HOUR FROM {0})
 
fn:minutes-from-dateTime,
fn:minutes-from-time
EXTRACT(MINUTE FROM {0})
 
fn:seconds-from-dateTime,
fn:seconds-from-time
CAST(EXTRACT(SECOND FROM {0}) AS DECIMAL)
 
op:hexBinary-equal
{0} = {1}
 
op-bea:hexBinary-not-equal
{0} != {1}
 
fn:empty
{0} IS NULL
 
fn:exists
{0} IS NOT NULL
(また、WHERE 句内のサブクエリをサポートすると、EXISTS)
 
fn:count
COUNT (with COUNT distinct support)
 
* fn:sum
SUM({0})
 
fn:min
MIN({0})
 
fn:max
MAX({0})
 
fn:avg
AVG({0})
 
fn-bea:sql-like($str, $pattern)
{0} LIKE {1}
引数の型は CLOB または LONG VARCHAR ではない。
fn-bea:sql-like($str, $pattern, $escape)
{0} LIKE {1} ESCAPE {2}
引数の型は CLOB または LONG VARCHAR ではない。
fn-bea:left
LEFT({0}, {1})
最初の引数の型は CLOB または LONG VARCHAR ではない。
fn-bea:right
RIGHT({0}, {1})
最初の引数の型は CLOB または LONG VARCHAR ではない。
fn-bea:trim
LTRIM(RTRIM({0}))
引数の型は CLOB または LONG VARCHAR ではない。
fn-bea:trim-left
LTRIM({0})
引数の型は CLOB または LONG VARCHAR ではない。
fn-bea:trim-right
RTRIM({0})
引数の型は CLOB または LONG VARCHAR ではない。
fn-bea:repeat
REPEAT({0})
引数の型は CLOB または LONG VARCHAR ではない。
* default-syntax-for-empty-input 設定に基づくデフォルト SQL 構文に対する関数

 


組み込みの XQuery 演算子を SQL に変換する

XQuery 関数および演算子の仕様は、算術演算および比較演算に変換された組み込みの演算子を定義します。一部の操作のため、ALDSP は評価するには使用する追加演算子を定義します。これらの追加演算子は XQuery を SQL に変換することを指定するために使用できます。

ヒント : XQuery 仕様の参照については、『XQuery および XQSE 開発者ガイド』の「サポートされる XQuery 仕様」を参照してください。

以下のいずれかの算術演算のため、ALDSP は次の型のためにより限定的な操作を定義します。型 : integer、decimal、double、floatSQL 生成規則を定義するとき、型の一致を指定するにはこの特定な操作を使用します。

ヒント : 関数および型に対する標準ネームスペースおよび ALDSP ネームスペースでは、展開されている操作 (op-bea など) に使用される演算関数プレフィックスについて説明します。

たとえば、op:numeric-add のため以下の 4 つの操作を定義します。

3 つの演算子によって XQuery 内の比較演算を定義します。

ALDSP は各型に対する 3 つの操作を追加します。

数値型のため、各演算子は (op-bea:numeric-<comparison_op>) 4 つの数値型に展開します。

op-bea:integer-<comparison_op>、op-bea:decimal-<comparison_op>、op-bea:double-<comparison_op>、op-bea:float-<comparison_op>。

ALDSP によって追加された数値比較は同じパターンを従います。例えば、

op-bea:numeric-not-equals を以下のように展開します。

6 つのすべての文字列比較演算子は ALDSP 固有の演算子として定義します。

 


関数および型に対する標準ネームスペースおよび ALDSP ネームスペース

表 10-8 では、関数および型に対する標準ネームスペースおよび ALDSP ネームスペースを示します。表 10-9 では、各ネームスペースの型をリストして説明します。

表 10-8 関数および演算子ネームスペース
プレフィックス
ネームスペース
説明
fn
http://www.w3.org/2004/07/xpath-functions
標準の XQuery 関数
op
http://www.w3.org/2004/07/xpath-operators
標準の XQuery 演算子
fn-bea
http://www.bea.com/xquery/xquery-functions
ALDSP の拡張関数
op-bea
http://www.bea.com/xquery/xquery-operators
ALDSP の拡張演算子

表 10-9 ネームスペースの型
プレフィックス
ネームスペース
説明
xs
http://www.w3.org/2001/XMLSchema
XML スキーマ型
xdt
http://www.w3.org/2004/07/xpath-datatypes
追加の XQuery 型
dt-bea
http://www.bea.com/xquery/xquery-datatypes
追加の ALDSP 型現在、1 つのみ dt-bea:numeric (共通の数値型)

 


関数および型名の解決プロセス

リレーショナル ラッパー拡張フレームワークは以下のように名前によって関数、演算子および型を検索します。

  1. 特定な QName で検索する。オブジェクトが見つかると、これを返します。
  2. ネームスペースが空であるか、プレフィックスが指定されていない場合、このオブジェクトの種類 (関数および型に対する標準ネームスペースおよび ALDSP ネームスペースを参照) に対して通常使用されるネームスペースでループして、各ネームスペースにおけるオブジェクトを検索します。

たとえば、以下の関数定義が存在すると、

<function name="round">ROUND({0})</function>

最初に、デフォルトのネームスペース内の QName で名前を解決して検索します。この名前の XQuery 関数が見つからない場合 (たとえば、XML ドキュメントにデフォルトなネームスペースが使用されていない場合)、システムは以下の関数の検索をこの順番で開始します。fn:round, op:round, fn-bea:round, op-bea:round。システムにより fn:round が検出され、指定した SQL 構文で登録されます。

キャスト演算定義の読み取り時には、型に対して同様なルックアップ処理が適用されます。型に対して、システムは自動的に xs、xdt および dt-bea ネームスペースを検索します。

arity 属性も省略可能で同じ名前の関数を解消するためにのみ必要です。2 つおよび 3 つの引数を持つサブ文字列など。

 


抽象 SQL プロバイダ

ALDSP は、コンフィグレーション可能なリレーショナル プロバイダの機能性を提供する 3 つの基準な抽象クラスのグループを提供します。AbstractSQLProvider クラスはコンフィグレーション可能なリレーショナル プロバイダのデフォルトな親クラスです。parent 要素を使用してコンフィグレーション可能なリレーショナル プロバイダのデプロイメント記述子に抽象プロバイダ クラスが指定されます。「コンフィグレーション可能なリレーショナル プロバイダの使用」を参照してください。

この節では、抽象リレーショナル プロバイダのクラスについて説明し、次の節が含まれています。

AbstractSQLProvider

AbstractSQLProvider は基準な抽象クラスです。他のすべての抽象および具体的なリレーショナル プロバイダのクラスはこのクラスを拡張します。プロバイダのデプロイメント記述子に親プロバイダが指定されていない場合、このクラスは親プロバイダとして使用します。従って、プロバイダ レジストリにこのクラスが明示的に登録されます。

表 10-10 では、AbstractSQLProvider で提供された SQL サポートのレベルを一覧表示しています。

表 10-10 AbstractSQLProvider 機能
機能
ステータス
標準の JDBC データ型
サポートされている。
Trivial select-project クエリ (たとえば、select ... from ... where)
サポートされている。
Joins、group by および order by
サポートされていない。
表を参照するときのカタログおよびスキーマ
サポートされていない。
カタログ、スキーマおよび表
「空文字列」に設定する。
カタログおよびスキーマ セパレータ
「.」に設定する。(このプロバイダによって生成されたクエリのためセパレータが使用されていない場合でも)
実行時プロパティ
すべてのプロパティを false に設定する。

表 10-11 では、AbstractSQLProvider のためサポートされている関数および演算子を示します。

表 10-11 AbstractSQLProvider のためサポートされている関数および演算子
XQuery 関数
SQL 構文
プッシュダウン要求 / コメント
and, or, fn:not
AND, OR, NOT
なし。
op:numeric-equal
op:numeric-less-than
op:numeric-greater-than
op-bea:numeric-less-than-or-equal
op-bea:numeric-greater-than-or-equal
op-bea:numeric-not-equal
=, <, >, <=, >=, !=
 
op-bea:string-equal
op-bea:string-less-than
op-bea:string-greater-than
op-bea:string-less-than-or-equal
op-bea:string-greater-then-or-equal
op-bea:string-not-equal
=, <, >, <=, >=, !=
2 つの引数は CLOB または LONG VARCHAR ではない。
op:dateTime-equal
op:dateTime-less-than
op:dateTime-greater-than
op-bea:dateTime-less-than-or-equal
op-bea:dateTime-greater-than-or-equal
op-bea:dateTime-not-equal
=, <, >, <=, >=, !=
なし。
op:date-equal
op:date-less-than
op:date-greater-than
op-bea:date-less-than-or-equal
op-bea:date-greater-than-or-equal
op-bea:date-not-equal
=, <, >, <=, >=, !=
なし。
op:time-equal
op:time-less-than
op:time-greater-than
op-bea:time-less-than-or-equal
op-bea:time-greater-than-or-equal
op-bea:time-not-equal
=, <, >, <=, >=, !=
なし。
op:hexBinary-equal
op-bea:hexBinary-not-equal
=, !=
2 つの引数は BINARY または VARBINARY のみである。

AbstractSQL89Provider

AbstractSQL89Provider は AbstractSQLProvider を拡張します。(AbstractSQLProvider を参照)。このクラスは追加の句、関数および更新のためサポートを提供します。AbstractSQL89Provider クラスでは以下の機能が含まれています。

表 10-12 では、AbstractSQL89Provider のためサポートされている関数および演算子を示します。これらの関数および演算子は AbstractSQLProvider という親クラスによって提供されている関数および演算子に加える。

表 10-12 AbstractSQL89Provider のためサポートされている関数および演算子
XQuery 関数
SQL 構文
プッシュダウン要求 / コメント
op:numeric-add
op:numeric-subtract
op:numeric-multiply
op:numeric-divide (except op-bea:integer-divide)
+, -, *, /
なし。
fn:exists
{0} IS NOT NULL
(WHERE 句の EXISTS がサポートされていない)
なし。
fn:empty
{0} IS NULL
なし。
fn:count
COUNT (with COUNT DISTINCT support)
なし。
fn:sum
SUM({0})
この関数は XQuery セマンティクスと一致されていない。空入力 (NULL) のため、関数は 0 の代わりに空 (NULL) を返す。
XQuery は SUM(())=0 を指定します。ここで、() は空シーケンスである。このプロバイダは関数を SQL に SUM(...) として変換する。ただし、SQL 内の SUM(NULL)=NULL は XQuery 内の () に相当する。
fn:min
MIN({0})
なし。
fn:max
MAX({0})
なし。
fn:avg
AVG({0})
なし。
fn-bea:sql-like($str, $pattern)
{0} LIKE {1}
最初の引数の型は CLOB または LONG VARCHAR ではない。
2 番目の (3 番目の) 引数は SQL 定数またはパラメータである。
fn-bea:sql-like($str, $pattern, $escape)
{0} LIKE {1} ESCAPE {2}
なし。

AbstractSQL92Provider

AbstractSQL92Provider は AbstractSQL89Provider を拡張します。(AbstractSQL89Provider を参照)。このクラスは SQL92 スタイルの結合 (内部と外部)、サブクエリおよび他の機能のためサポートを追加します。AbstractSQL92Provider クラスは以下の機能をサポートします。

表 10-13 では、AbstractSQL92Provider のためサポートされている関数および演算子を示します。これらの関数および演算子は AbtractSQL89Provider という親クラスによって提供されている関数および演算子に加える。

表 10-13 AbstractSQL92Provider のためサポートされている関数および演算子
XQuery 関数
SQL 構文
プッシュダウン要求 / コメント
fn:concat
COALESCE({0} || {1} || ...|| {n}, `')
コンパイル時、入力を空の値 (NULL) に設定できないように決定されている場合 COALESCE が使用できません。
引数の型は CLOB または LONG VARCHAR ではない。
fn:upper-case
COALESCE(UPPER({0},'')
コンパイル時、入力を空の値 (NULL) に設定できないように決定されている場合 COALESCE が使用できません。
引数の型は CLOB または LONG VARCHAR ではない。
fn:lower-case
COALESCE(LOWER({0},'')
コンパイル時、入力を空の値 (NULL) に設定できないように決定されている場合 COALESCE が使用できません。
引数の型は CLOB または LONG VARCHAR ではない。
fn:substring ($str, $pos)
if $pos is a subtype of xs:integer
COALESCE(SUBSTRING({0} FROM {1}), `')
else
COALESCE(SUBSTRING({0} FROM CAST({1}+0.5 AS INTEGER)), `')
コンパイル時、入力を空の値 (NULL) に設定できないように決定されている場合 COALESCE が使用できません。
最初の引数の型は CLOB または LONG VARCHAR ではない。
fn:substring($str, $pos, $len)
if $pos and $len are subtypes of xs:integer
COALESCE(SUBSTRING({0} FROM {1} FOR {2}), `')
else
COALESCE(SUBSTRING({0} FROM CAST({1}+0.5 AS INTEGER) FOR CAST({2}+0.5 AS INTEGER)), `')
コンパイル時、入力を空の値 (NULL) に設定できないように決定されている場合 COALESCE が使用できません。
最初の引数の型は CLOB または LONG VARCHAR ではない。
fn:string-length
COALESCE(CHAR_LENGTH({0}), 0)
コンパイル時、入力を空の値 (NULL) に設定できないように決定されている場合 COALESCE が使用できません。
引数の型は CLOB または LONG VARCHAR ではない。
fn:contains,
fn:starts-with,
fn:ends-with
LIKE with ESCAPE clause and `|' as escape character
最初の引数の型は CLOB または LONG VARCHAR ではない。
2 番目の引数は SQL 定数またはパラメータである。
fn:year-from-dateTime,
fn:year-from-date
EXTRACT(YEAR FROM {0})
 
fn:month-from-dateTime
fn:month-from-date
EXTRACT(MONTH FROM {0})
 
fn:day-from-dateTime
fn:day-from-date
EXTRACT(DAY FROM {0})
 
fn:hours-from-dateTime,
fn:hours-from-time
EXTRACT(HOUR FROM {0})
 
fn:minutes-from-dateTime,
fn:minutes-from-time
EXTRACT(MINUTE FROM {0})
 
fn:seconds-from-dateTime,
fn:seconds-from-time
CAST(EXTRACT(SECOND FROM {0}) AS DECIMAL)
 
fn:sum
COALESCE(SUM({0}), 0)
コンパイル時、入力を空の値 (NULL) に設定できないように決定されている場合 COALESCE が使用できません。
サポート対象 SUM(DISTINCT ...)
 
fn:min
サポート対象 MIN(DISTINCT ...)
 
fn:max
サポート対象 MAX(DISTINCT ...)
 
fn:avg
サポート対象 AVG(DISTINCT ...)
 
fn-bea:left
SUBSTRING({0} FROM 1 FOR {1})
引数の型は CLOB または LONG VARCHAR ではない。
fn-bea:trim
TRIM (BOTH ` ` FROM {0})
引数の型は CLOB または LONG VARCHAR ではない。
fn-bea:trim-left
TRIM(LEADING ` ` FROM {0})
引数の型は CLOB または LONG VARCHAR ではない。
fn-bea:trim-right
TRIM(TRAILING` ` FROM {0})
引数の型は CLOB または LONG VARCHAR ではない。
fn-bea:date-from-dateTime
CAST({0} AS DATE)
 

表 10-14 では、AbstractSQL92Provider によってプッシュダウンされたキャスト演算を示します。

表 10-14 AbstractSQL92Provider のためサポートされているキャスト演算
ソースのタイプ
対象のタイプ
SQL 構文
コメント
xs:int のサブタイプ
xs:string
CAST({0} AS VARCHAR(11))
 
xs:string
xs:double
CAST({0} AS DOUBLE PRECISION)
引数の型は CLOB または LONG VARCHAR ではない。
数値のサブタイプ
xs:double
 
xs:string
xs:float
CAST({0} AS REAL)
引数の型は CLOB または LONG VARCHAR ではない。
数値のサブタイプ
xs:float
 
xs:string
xs:int
CAST({0} AS INT)
引数の型は CLOB または LONG VARCHAR ではない。
数値のサブタイプ
xs:int
 
xs:string
xs:short
CAST({0} AS SMALLINT)
引数の型は CLOB または LONG VARCHAR ではない。
数値のサブタイプ
xs:short
 
xs:dateTime
xs:date
CAST({0} AS DATE)
 


  ページの先頭       前  次