![]() ![]() ![]() ![]() |
この章では、AquaLogic Data Services Platform (ALDSP) のデータベース サポートを拡張する方法について説明します。拡張により、サポート対象外のデータベースおよびサポート対象のデータベースの新しいバージョンに対して迅速な動的サポートが提供されます。この章では、「コンフィグレーション可能なリレーショナル プロバイダ」機能を使用したデータベース サポートを拡張する方法について説明します。
ヒント : | この章では、コンフィグレーション可能なリレーショナル プロバイダ ファイルのサンプルを提供しています。サンプルをコピーして、独自のカスタマイズされたプロバイダ作成の開始点として使用できます。詳細なリストについては、「コンフィグレーション可能なリレーショナル プロバイダ ファイルのサンプル」を参照してください。 |
この章では、XQuery、SQL、特に高度なユースケースを理解していることを前提としています。ALDSP に関するこのような推奨されるバックグラウンドについては、「関連情報」を参照してください。
コンフィグレーション可能なリレーショナル プロバイダはデータベースのサポートおよび ALDSP の機能を拡張することができます。コンフィグレーション可能なリレーショナル プロバイダは「プロバイダ」という XML ファイルを設定してデータベースのサポートを追加または変更できます。いくつかの高度なケースに対して、データベースのサポートを拡張する XML プロバイダを設定できます。詳細については、「コンフィグレーション可能なリレーショナル プロバイダの使用」を参照してください。
この節では、ALDSP データベース サポートを拡張する全体なフレームワークを説明し、一般的な用語を定義し、拡張フレームワークに対するいくつかのユースケースをリストします。
この章では、コンフィグレーション可能なリレーショナル プロバイダを使用してデータベースのサポートを拡張するケースについて説明します。
ベース プラットフォーム データベースのサポートにより ALDSP を使用すると (「ALDSP を含むリレーショナル プロバイダ」を参照)、データベース自体がベース プラットフォーム プロバイダで生成された式および句などのより複雑なコンストラクトを扱うことができます。この場合は、ユーザはパフォーマンスの低下を経験する可能性があります。この問題を解決するために、コンフィグレーション可能なリレーショナル プロバイダをコンフィグレーションすることができます。
コア データベースの新しいバージョンがリリースされている場合、デフォルトでは、ALDSP はこのバージョンを前のサポート対象バージョンと同じように扱います。明らかに、新しいリリースでは、向上した SQL プッシュダウンのような機能が使用できます。この場合は、コンフィグレーション可能なリレーショナル プロバイダを使用して新しいプッシュダウン機能を追加することで、コア データベースのリレーショナル プロバイダの拡張によるデータベースのサポートを更新できます。
注意 : | これは一般的でないユースケースです。 |
ALDSP コア データベース セットでサポートされていないデータベースへのアクセスが必要であり (表 10-1 を参照)、ベース プラットフォーム プロバイダによって生成された SQL が消費できないという可能性があります。この場合は、コンフィグレーション可能なリレーショナル プロバイダを使用し、サポートしない機能を無効にするか、必要に応じて新しい機能を追加します。
リレーショナル ラッパー拡張フレームワークでは、ALDSP 用のリレーショナルデータベースのサポートを追加または変更することができます。このフレームワークはコンフィグレーション ファイルを編集してデータベースのサポートを拡張されるコンフィグレーション可能なリレーショナル プロバイダをサポートします。図 10-1 では、リレーショナル ラッパー拡張フレームワークのアーキテクチャを示します。
このフレームワークでは、リレーショナル ソースの XQuery ビューを表示してこれに対するクエリを実行するリレーショナル ラッパーというコンポーネントが含まれています。リレーショナル ラッパーには、リレーショナル プロバイダというコンポーネントのチェーンを管理するリレーショナル データベース プロバイダ レジストリが含まれます。
ヒント : | この章で詳細に説明したコンフィグレーション可能なリレーショナル プロバイダは、ファイルを編集して簡単にコンフィグレーションおよびデプロイできるリレーショナル プロバイダの例です。コンフィグレーション可能なリレーショナル プロバイダはデータベースサポートを拡張するための主要な手段です。 |
プロバイダ レジストリ内では、リレーショナル プロバイダがチェーンに編成されます。これらのチェーンは互いに委譲され、メソッドの呼び出しをインターセプトして処理することができます。各プロバイダは要求に応答するか、要求をこれらの親プロバイダに委譲します。親プロバイダはプロバイダのデプロイメント記述子の <parent> 要素で指定されます。(「コンフィグレーション可能なリレーショナル プロバイダの形式の説明および参照」を参照)
図 10-1 に示すように、最初のチェーンは、3 つのプロバイダ provider_1、provider_2 および provider_3 で構成されます。リレーショナル ラッパーがこのチェーンを呼び出すと、最初に provider_1 が呼び出しを受信し、応答するか親プロバイダ (provider_2) に委譲するかを選択できます。provider_1 が provider_2 に委譲すると、要求を処理するのは provider_2 の責任となります。provider_2 では、処理を provider_3 に委譲するかを決定することができます。このチェーン アーキテクチャはモジュール プロバイダ定義をサポートし構成を容易にして、システムの柔軟性を高めます。
ヒント : | 通常、コンフィグレーション可能なリレーショナル プロバイダを使用してプロバイダを作成する場合、親プロバイダを指定します。親は、デフォルトで子プロバイダを受け入れるか、オーバーライドする機能をいくつか提供します。子プロバイダは親プロバイダの機能を継承します。ただし、親プロバイダに実装されていない機能も子プロバイダに追加できます。通常、抽象プロバイダのいずれかがチェーン内の最初のプロバイダの親として機能します。「抽象 SQL プロバイダ」を参照してください。 |
デフォルトでは、リレーショナル ラッパー拡張フレームワークはデータベースのコア セットをサポートしています。詳細なリストについては、「ALDSP を含むリレーショナル プロバイダ」を参照してください。拡張性によって、コア セット内にサポートされていないデータベースのフルサポートとコア データベースの新しいバージョンのサポートが可能です。たとえば、コア データベースの新しいバージョンは ALDSP によって現在認識されていない新しいプッシュダウン機能を提供できます。コンフィグレーション可能なリレーショナル プロバイダを編集してデプロイすることで、拡張フレームワークを使用して必要なデータベース サポートを迅速に追加することができます。
表 10-1 ALDSP と共に含まれている標準のリレーショナル プロバイダのセットを示します。標準のプロバイダはリレーショナル ラッパー拡張フレームワークを使用して実装し、デフォルトで登録されます。これらのプロバイダをコンフィグレーション可能なリレーショナル プロバイダをコンフィグレーションするための基礎として使用できます。
|
||
ヒント : | 基本データベース バージョンをフレームワークによって計算します。この値は、プロバイダを扱うデータベースの最小のバージョンを指定します。一致規則はデータベースと最もよく一致するプロバイダを選択する際の値を決定するために使用します。この計算の詳細については、「データベースの一致」を参照してください。 |
コンフィグレーション可能なリレーショナル プロバイダはコア リレーショナル プロバイダ内の以下の機能をサポートします。
リレーショナル ラッパー拡張フレームワークによって定義されたいくつかの機能はコンフィグレーション可能なリレーショナル プロバイダでサポートされていません。この場合、コンフィグレーション可能なリレーショナル プロバイダは要求を親プロバイダに委譲して応答します。
アプリケーションで必要なデータ ソースのメタデータは、AquaLogic Data Services Platform のメタデータ インポート ウィザードを使用してインポートできます。このウィザードは、使用可能なデータ ソース内を参照し、データ サービスおよび関数として表現できるデータ オブジェクトを識別します。リレーショナル プロバイダ レジストリはデータベースと最適なプロバイダのリストを返します。ドロップダウン メニューから 1 つのプロバイダ (通常、最適なプロバイダまたはそれに準じるプロバイダ) を選択できます。最も一致するのはドロップダウン メニューの上部に表示されます。作成された物理データ サービスはクエリおよび論理データ サービスの構成要素となります。メタデータ インポート ウィザードの使用の詳細については、『データ サービス開発者ガイド』の「物理データ サービスの作成と更新」を参照してください。一致する方法については、「データベースの一致に対する規則」を参照してください。
ALDSP データベース、XQuery および SQL サポートの詳細については、次の ALDSP ドキュメントを参照してください。
コード リスト 10-1 では、コンフィグレーション可能なリレーショナル プロバイダ ファイルのサンプルを示します。このサンプルは Microsoft Access プロバイダをカスタム設定する方法について示します。Microsoft Access プロバイダのサンプルは ALDSP インストール先の以下のパスにあります。
ALDSP_HOME\samples\RelationalAdapter\MS-Access
ヒント : | このサンプル プロバイダをコピーして、独自のカスタマイズされたプロバイダの作成の開始点として使用します。この章の参照情報では、この XML ファイルのすべてのコンフィグレーション可能な要素について説明します。最初に、「コンフィグレーション可能なリレーショナル プロバイダの使用」を参照してください。 |
<?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 にも示しています。
この節で説明されているコマンドラインのデプロイメント ツールは、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 またはサーバを再起動する必要があります。 |
この節では、コンフィグレーション可能なリレーショナル プロバイダのフォーマット、要素およびコンフィグレーション可能なプロパティについて説明します。
注意 : | プロバイダの詳細な例はコンフィグレーション可能なリレーショナル プロバイダ ファイルのサンプルのリストに表示されています。 |
この節では、コンフィグレーション可能なリレーショナル プロバイダ ファイルに格納されている主な要素について説明します。このファイルはリレーショナル プロバイダ拡張のプロパティを指定するために使用されるデプロイメント記述子です。
ヒント : | ファイルは JAR ファイルにパッケージ化およびデプロイされる必要があります。JAR は 1 つのデプロイメント記述子のみ格納する必要があります。ただし、記述子は 1 つまたは複数のプロバイダを定義およびコンフィグレーションできます。「リレーショナル プロバイダのデプロイメント」を参照してください。 |
以下のリストではリレーショナル プロバイダのデプロイメント記述子の主な要素について説明します。
注意 : | デプロイメント記述子ファイル aldsp-rdb-extension.xml に名前を指定する必要があります。 |
<name>
- プロバイダの名前。 <vendor>
- (省略可能) プロバイダのベンダの名前。 <implementation-version>
- (省略可能) プロバイダのバージョン番号。 <description>
- (省略可能) 拡張の簡単な説明。<id>
- プロバイダ ID。プロバイダ レジストリにプロバイダを登録するため、この ID を使用します。 <description>
- (省略可能) プロバイダの簡単な説明。<parent>
- (省略可能) 親プロバイダの <id>
要素。 ヒント : | コンフィグレーション可能なリレーショナル プロバイダ ファイルのサンプル内のサンプル ファイルでは、<parent> 要素によって指定されたクラスは AbstractSQL です。この抽象プロバイダの親クラスの詳細については、「抽象 SQL プロバイダ」を参照してください。 |
<modifier>
- (省略可能) abstract
または final
。abstract
に設定されると、プロバイダは任意のデータ サービスによって参照されません。ただし、抽象プロバイダが拡張できます (他のプロバイダの親プロバイダになります)。final
に設定されると、このプロバイダは任意のプロバイダで拡張されません。<factory>
- (省略可能) この要素はプロバイダをインスタンス化するファクトリを指定します。コンフィグレーション可能なリレーショナル プロバイダは、デフォルト ファクトリ クラスと XMLCustomizableProviderFactory を使用します。 ヒント : | コンフィグレーション可能なリレーショナル プロバイダ ファイルのサンプル内のサンプル ファイルでは、<factory> 要素はデフォルトなファクトリ クラスと XMLCustomizableProviderFactory を明示的に指定します。 |
<custom-rdb-provider>
- コンフィグレーション可能なリレーショナル プロバイダのネームスペースとそれらの完全コンフィグレーションを指定する子要素。デフォルト ネームスペースは次のとおりです。http://www.bea.com/ns/aldsp/rdb/extension/custom ヒント : | <custom-rdb-provider> 要素のコンフィグレーションの詳細については、「コンフィグレーション可能なリレーショナル プロバイダ ファイルのサンプル」および「コンフィグレーション可能なリレーショナル プロバイダの形式の説明および参照」を参照してください。 |
注意 : | ALDSP が拡張をロードすると、デプロイメント記述子が読み込まれ検証されます。説明のプロバイダ セクションを無効にしている場合は無視されます。 |
コード リスト 10-2 では、コンフィグレーション可能なリレーショナル プロバイダにおける <custom-rdb-provider>
要素の基本コンフィグレーションを示します。このコンフィグレーションは ALDSP と共に提供されたスキーマ ファイルに基づいています。
各プロパティの詳細は、コンフィグレーション可能なリレーショナル プロバイダの参照で説明しています。詳細な例については、「コンフィグレーション可能なリレーショナル プロバイダ ファイルのサンプル」を参照してください。
<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> 要素で指定します。属性に対して設定が提供されていない場合、要求は親プロバイダに委譲されます。プロバイダが「チェーン」にある親プロバイダに委譲される方法の詳細については、「拡張フレームワーク アーキテクチャの概要」を参照してください。 |
|
||||
|
||||
|
||||
f( () ) = "", sum( () )=0 などの文字列関数この設定は、関数にデフォルト SQL 構文を選択するような状況における処理方法を指定します。 |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
この節では、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 番目のプロバイダが利用できます。
この節では、データベースの一致式で使用される XQuery 関数のセットに java.sql.DatabaseMetaData インスタンスをマップする方法について説明します。
マップされたインタフェース : java.sql.DatabaseMetaData
表 10-3 では、これらの要求を満たす java.sql.DatabaseMetaData メソッドおよびそれらに対応する JDBC メソッド、および XQuery 関数を示します。
この節では、データベースの一致式に使用できるが、jdbc.sql.DatabaseMetaData インタフェースから直接マップできない追加の関数について説明します。
表 10-4 では、関数のシグネチャをリストして説明します。
この節では、コンフィグレーション可能なリレーショナル プロバイダのデプロイメント記述子に指定した関数に対する 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>
<function name="fn:concat" infix="true">||</function>
arg1 || arg2 || arg3 || ...|| argN
SQL 生成の場合、変数長プレースホルダ {...}
はカンマで区切られて残りの引数で置き換えられます。
<function name="fn:concat">CONCAT({...})</function>
CONCAT(arg1,arg2,arg3,....,argN)
別の文字区切りが必要な場合、以下のように変数長プレースホルダに指定されている必要があります。
{...DELIMITER}
<function name="fn:concat">COALESCE({... || }, "")</function>
COALESCE(arg1 || arg2 || arg3 || ...|| argN, "")
注意 : | この場合、文字区切りは「|| 」です。 |
コンフィグレーション可能なリレーショナル プロバイダ ファイルの <functions>
セクションに関数が指定された場合、関数に対するデフォルト構文が使用されます (表 10-2)。しかし、これらの構文はユーザからは提供されません。(<function>
要素の内容は空です)。いくつかの関数の場合、リレーショナル プロバイダは default-syntax-for-empty-input
属性に基づくデフォルト構文を選択します。default-syntax-for-empty-input
属性の詳細については、「コンフィグレーション可能なリレーショナル プロバイダの参照」を参照してください。
この節では、default-syntax-for-empty-input
属性の 3 つの使用可能な値に対して使用されるデフォルト構文を示します。
default-syntax-for-empty-input 属性に基づくデフォルト SQL 構文の関数は 表 10-5、表 10-6 および 表 10-7 でアスタリスク付きで示します。この関数は以下があります。
関数のデフォルト構文が定義されていない場合、使用する時関数の構文を指定する必要があります。それ以外の場合は、エラーとします。
XQuery 関数および演算子の仕様は、算術演算および比較演算に変換された組み込みの演算子を定義します。一部の操作のため、ALDSP は評価するには使用する追加演算子を定義します。これらの追加演算子は XQuery を SQL に変換することを指定するために使用できます。
ヒント : | XQuery 仕様の参照については、『XQuery および XQSE 開発者ガイド』の「サポートされる XQuery 仕様」を参照してください。 |
以下のいずれかの算術演算のため、ALDSP は次の型のためにより限定的な操作を定義します。型 : integer、decimal、double、floatSQL 生成規則を定義するとき、型の一致を指定するにはこの特定な操作を使用します。
ヒント : | 関数および型に対する標準ネームスペースおよび ALDSP ネームスペースでは、展開されている操作 (op-bea など) に使用される演算関数プレフィックスについて説明します。 |
たとえば、op:numeric-add のため以下の 4 つの操作を定義します。
3 つの演算子によって XQuery 内の比較演算を定義します。
数値型のため、各演算子は (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 固有の演算子として定義します。
表 10-8 では、関数および型に対する標準ネームスペースおよび ALDSP ネームスペースを示します。表 10-9 では、各ネームスペースの型をリストして説明します。
リレーショナル ラッパー拡張フレームワークは以下のように名前によって関数、演算子および型を検索します。
<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 つの引数を持つサブ文字列など。
ALDSP は、コンフィグレーション可能なリレーショナル プロバイダの機能性を提供する 3 つの基準な抽象クラスのグループを提供します。AbstractSQLProvider クラスはコンフィグレーション可能なリレーショナル プロバイダのデフォルトな親クラスです。parent
要素を使用してコンフィグレーション可能なリレーショナル プロバイダのデプロイメント記述子に抽象プロバイダ クラスが指定されます。「コンフィグレーション可能なリレーショナル プロバイダの使用」を参照してください。
この節では、抽象リレーショナル プロバイダのクラスについて説明し、次の節が含まれています。
AbstractSQLProvider は基準な抽象クラスです。他のすべての抽象および具体的なリレーショナル プロバイダのクラスはこのクラスを拡張します。プロバイダのデプロイメント記述子に親プロバイダが指定されていない場合、このクラスは親プロバイダとして使用します。従って、プロバイダ レジストリにこのクラスが明示的に登録されます。
表 10-10 では、AbstractSQLProvider で提供された SQL サポートのレベルを一覧表示しています。
表 10-11 では、AbstractSQLProvider のためサポートされている関数および演算子を示します。
AbstractSQL89Provider は AbstractSQLProvider を拡張します。(AbstractSQLProvider を参照)。このクラスは追加の句、関数および更新のためサポートを提供します。AbstractSQL89Provider クラスでは以下の機能が含まれています。
表 10-12 では、AbstractSQL89Provider のためサポートされている関数および演算子を示します。これらの関数および演算子は AbstractSQLProvider という親クラスによって提供されている関数および演算子に加える。
AbstractSQL92Provider は AbstractSQL89Provider を拡張します。(AbstractSQL89Provider を参照)。このクラスは SQL92 スタイルの結合 (内部と外部)、サブクエリおよび他の機能のためサポートを追加します。AbstractSQL92Provider クラスは以下の機能をサポートします。
表 10-13 では、AbstractSQL92Provider のためサポートされている関数および演算子を示します。これらの関数および演算子は AbtractSQL89Provider という親クラスによって提供されている関数および演算子に加える。
表 10-14 では、AbstractSQL92Provider によってプッシュダウンされたキャスト演算を示します。
![]() ![]() ![]() |