Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 12.0.1 » SQL Anywhere 12 変更点とアップグレード » バージョン 11.0.0 の新機能 » SQL Anywhere » SQL Anywhere の新機能

 

プログラミングインターフェイス

次に、SQL Anywhere バージョン 11.0.0 でのプログラミングインターフェイスの強化を示します。

  • 新しい SQL Anywhere C API   SQL Anywhere C アプリケーションプログラミングインターフェイス (API) により、PHP、Perl、Python、Ruby など、複数のインタプリター型プログラミング言語での C や C++ ラッパードライバーの作成が簡単になります。SQL Anywhere C API は DBLIB ライブラリの上層に位置し、Embedded SQL で実装されています。

    DBLIB に代わるものではありませんが、この API は、C や C++ によるアプリケーションの作成を簡単にします。SQL Anywhere C API を使用するのに、Embedded SQL に関する高度な知識は必要ありません。SQL Anywhere C API のサポートを参照してください。

  • 新しい Python データベース API (sqlanydb)   新しい Python データベース API (sqlanydb) を使用すると、Python で作成されたスクリプトから SQL Anywhere データベースにアクセスできるようになります。sqlanydb モジュールは、Python データベース API 仕様バージョン 2.0 を拡張して実装しています。Python サポートを参照してください。

  • 外部環境   SQL Anywhere で、Java、Perl、PHP、CLR、Embedded SQL、ODBC の 6 つの外部ランタイム環境がサポートされるようになりました。これまで SQL Anywhere では、C または C++ で記述されたコンパイル済みネイティブ関数を呼び出すことができました。ただし、これらのプロシージャーがサーバーで実行されるとき、ダイナミックリンクライブラリまたは共有オブジェクトが常にデータベースサーバーによってロードされ、ネイティブ関数への呼び出しがデータベースサーバーによって行われていました。この方法には、ネイティブ関数が原因で障害が発生した場合、データベースサーバーがクラッシュするというリスクがあります。データベースサーバーの外部環境でコンパイル済みネイティブ関数を実行できると、サーバーへのこれらのリスクをなくすことができます。SQL Anywhere 外部環境のサポートを参照してください。

    この新機能を使用するには、データベースをアップグレードする必要があります。SQL Anywhere サーバーのアップグレードを参照してください。

  • PHP 外部環境のサポート   SQL Anywhere 11.0.0 には、5.1.1 ~ 5.1.6 と 5.2.0 ~ 5.2.6 を含むさまざまな PHP バージョン用の構築済みバイナリが含まれます。このいずれかのバージョンをサーバーコンピューターにインストールしてある場合は、PHP 外部環境を構築しないで SQL Anywhere の構築済みバイナリを使用してください。Linux と Solaris 用には、32 ビットと 64 ビットの両方のバージョンのバイナリが用意されています。Windows とその他のシステム用には、32 ビットのバージョンだけがあります。

    上記とは異なる PHP バージョンをインストールしてある場合は、ソフトウェアを構築するか、PHP バージョンを、SQL Anywhere の構築済みバージョンと同じバージョンに切り替える必要があります。SQL Anywhere PHP モジュールの構築方法については、SQL Anywhere PHP 拡張を参照してください。

  • Perl 外部環境のサポート   Perl 外部環境を使用する前に、SQL Anywhere Perl DBD ドライバーのバージョンを更新することが非常に重要です。Perl DBD ドライバーを更新しなかった場合、サーバー側 Perl は機能しません。

    また、PHP とは異なり、SQL Anywhere には Perl のさまざまなバージョン用の構築済みバイナリは含まれません。SQL Anywhere Perl DBD ドライバーのソースコードは %SQLANY11%\SDK\perl にあります。SQL Anywhere Perl DBD ドライバーの構築方法については、Perl DBI サポートを参照してください。

  • Web サーバーでの UTF-8 URL のサポート   これまでは、要求 URL (または要求の本文内の application/x-www-form-urlencoded データ) 内のパーセント記号 (%) でコード化されたデータが、Web サーバーによってデータベースの文字セットに復号化されていました。このリリースでは、パーセント記号 (%) でコード化されたデータの内容で、UTF-8 シーケンスの有無がテストされ、最大エクステントに基づいてデータベースの文字セットに変換されるようになりました。UTF-8 以外でコード化されたデータは、復号化され、すでにデータベースの文字セットになっているかのように処理されます。

    クライアント HTTP アプリケーションではパーセント記号 (%) でコード化された UTF-8 データを排他的に送信する必要があります。ASCII は UTF-8 でそのまま表されます。たとえば、スペースは %20 とコード化されます。

  • 新しいクライアントコールバック API   クライアント側でデータのロードとアンロードを実行する新しい機能のサポートのために、新しいクライアントコールバック API が追加されました。Embedded SQL については、db_register_a_callback 関数の「DB_CALLBACK_VALIDATE_FILE_TRANSFER」を参照してください。ODBC については、SQLSetConnectAttr 拡張接続属性の SA_REGISTER_VALIDATE_FILE_TRANSFER_CALLBACK を参照してください。

  • SQL_ATTR_CONNECTION_DEAD による切断された接続の検出の高速化   ODBC の SQLGetConnectAttr 呼び出しを使用して SQL_ATTR_CONNECTION_DEAD 属性を取得すると、接続が切断されていた場合、切断後にサーバーに要求が送信されていなくても、値 SQL_CD_TRUE が取得されるようになりました。接続が切断したかどうかの確認は、サーバーに要求を送信しないで行われ、切断された接続は数秒以内に検出されます。接続が切断されるのには、アイドルタイムアウトなどの複数の理由があります。この変更の前は、SQL_ATTR_CONNECTION_DEAD で値 SQL_CD_TRUE が取得されたのは、接続が明示的に切断されたか、接続が切断された後に、SQLExecDirect を呼び出すなどして ODBC ドライバーからサーバーに要求が送信された場合だけでした。接続属性の取得を参照してください。

  • JDBC ドライバーでの ResultSet.getBlob().getBinaryStream() のサポート   iAnywhere JDBC ドライバーでは、現在 ResultSet.getBlob() メソッドがサポートされています。このメソッドは、JDBC 仕様ではオプションです。オプションの ResultSet.getBlob().getBinaryStream() メソッドのサポートが追加されました。JDBC 3.0/4.0 API のサポートを参照してください。

  • iAnywhere JDBC ドライバーで URL ヘッダーとして jdbc:odbc に加えて jdbc:ianywhere を許可   これまでは、URL ヘッダー jdbc:odbc を使用するアプリケーションでは、この URL への接続時に JDBC ドライバーマネージャーで iAnywhere JDBC ドライバーが使用されると見なすことができました。しかし、Java VM の最近のバージョンでは JDBC ドライバーとして Sun JDBC-ODBC ブリッジが登録されるようになり、Sun JDBC-ODBC ブリッジでは jdbc:odbc で始まる URL も許可されるので、アプリケーションに iAnywhere JDBC ドライバーではなく Sun JDBC-ODBC ブリッジが使用される可能性が高くなりました。JDBC ドライバーマネージャーで、Sun JDBC-ODBC ブリッジではなく iAnywhere JDBC ドライバーが確実に使用されるようにするには、アプリケーションで URL ヘッダー jdbc:ianywhere を使用してください。JDBC クライアントアプリケーションからの接続を参照してください。

  • ODBC ドライバーマネージャーでの driver=iAnywhere Solutions 11 - Oracle の許可   UNIX ODBC ドライバーマネージャーで driver=iAnywhere Solutions 11 - Oracle が許可されるようになりました。また、アプリケーションがスレッド化されている場合は、スレッド化された Oracle 用 iAnywhere ODBC ドライバーがロードされます。アプリケーションがスレッド化されていない場合、ドライバーはロードされません。スレッド化されていない Oracle 用 iAnywhere ODBC ドライバーはサポートされていません。iAnywhere Solutions 12 - Oracle ODBC ドライバーを参照してください。

  • ODBC ドライバーマネージャーでの driver=UltraLite 11 の許可   UNIX ODBC ドライバーマネージャーでは、driver=SQL Anywhere 10 が許可され、SQL Anywhere ODBC ドライバーがロードされます (アプリケーションに応じて、スレッドバージョンまたは非スレッドバージョン)。UNIX ODBC ドライバーマネージャーでは driver=SQL Anywhere 11 と driver=UltraLite 11 も許可されるようになりました。Ultra Light ドライバーの場合、ドライバーマネージャーでは Ultra Light ODBC ドライバーのスレッドバージョンだけがロードされます。このドライバーはスレッドバージョンだけが存在します。

  • TDS 接続の強化   SQL Anywhere データベースサーバーで、Open Client のログインサーバー名がデフォルトデータベースの名前と一致しなくてもデフォルトデータベースへの TDS 接続が可能になりました。ただし、接続文字列でデータベースを起動していないこと (DBF=... がないこと)、またデータベースサーバーでデータベースが 1 つだけ実行されていること、という条件を満たしている必要があります。

  • 管理ツールのランチャーの再配備の簡素化   データベースツール (Sybase Central、DBISQL、DBConsole、ML Monitor) のランチャー実行プログラムの再配備が簡単になりました。JAR ファイルの場所に関するレジストリのエントリやセットディレクトリ構造が不要になりました。各実行プログラムには、ツールのロード方法を詳細に示す (実行ファイルと同じ名前の) .ini ファイルが、実行ファイルと同じディレクトリに必要です。管理ツールの配備を参照してください。

  • SQL Anywhere の .NET データプロバイダーでの分散トランザクションのエンリストのサポート   .NET 2.0 フレームワークで、トランザクションアプリケーションを記述するためのクラスが含まれる新しいネームスペース System.Transactions が導入されました。クライアントアプリケーションで 1 つまたは複数の参加者が存在する分散トランザクションを作成し、そのトランザクションに参加できます。クライアントアプリケーションでは、TransactionScope クラスを使用して、暗黙的にトランザクションを作成できます。接続オブジェクトでは、TransactionScope によって作成されたアンビエントトランザクションの存在を検出し、自動的にエンリストできます。クライアントアプリケーションでは、CommittableTransaction を作成し、EnlistTransaction メソッドを呼び出してエンリストすることもできます。

    この機能は SQL Anywhere .NET 2.0 データプロバイダーでサポートされています。分散トランザクションには、大きなパフォーマンスのオーバーヘッドがあります。非分散トランザクションにデータベーストランザクションを使用することをおすすめします。Transaction 処理を参照してください。

  • SQL Anywhere .NET データプロバイダーでの名前付きパラメーターのサポート   SQL Anywhere プロバイダーで、SACommand の名前付きパラメーターがサポートされるようになりました。ユーザーがすべてのパラメーター名を指定すると、コマンドの実行時にプロバイダーによってパラメーター値がマッピングされます。名前付きパラメーターを使用するとき、パラメーターの順序が、ホスト変数の順序と一致している必要はありません。


    SACommand cmd = new SACommand( 
        "UPDATE MyTable SET name = :name WHERE id = :id", conn );
    
    SAParameter p1 = new SAParameter( 
        "id", SADbType.Integer );
    p1.Direction = ParameterDirection.Input;
    p1.Value = 1;
    cmd.Parameters.Add( p1 );
    
    SAParameter p2 = new SAParameter( 
        "name", SADbType.Char, 40 );
    p2.Direction = ParameterDirection.Input;
    p2.Value = "asdasd";
    cmd.Parameters.Add( p2 );
    
    cmd.ExecuteNonQuery();

  • Web サービスの強化   このリリースでは、次の Web サービスが強化されています。

    • HTTP:POST タイプの Web クライアントサービスプロシージャーの拡張によるユーザー定義の本文の許可   CREATE PROCEDURE 文と CREATE FUNCTION 文の TYPE 句が拡張され、MIME タイプを指定できるようになりました。CREATE FUNCTION 文 [Web サービス]またはCREATE PROCEDURE 文 [Web サービス]を参照してください。

    • Web サービスクライアントプロシージャーの拡張による PUT、DELETE、HEAD HTTP の各メソッドのサポート   Web サービスクライアントのプロシージャーと関数で PUT、DELETE、HEAD HTTP の各メソッドがサポートされるようになりました。CREATE PROCEDURE 文と CREATE FUNCTION 文の TYPE 句が拡張され、これらのメソッドがサポートされるようになりました。POST メソッドと同様に、PUT では TYPE 句内に Content-Type の拡張を必要とし、1 つの (非代入) パラメーターだけが許可されています。CREATE SERVICE 文 [HTTP Web サービス]CREATE SERVICE 文 [SOAP Web サービス]CREATE FUNCTION 文 [Web サービス]CREATE PROCEDURE 文 [Web サービス]を参照してください。

    • sa_http_php_page システムプロシージャーと sa_http_php_page_interpreted システムプロシージャー   新しい Web サービスシステムプロシージャー sa_http_php_page と sa_http_php_page_interpreted は、PHP インタプリターを経由して渡された PHP スクリプトの結果を返します。sa_http_php_page システムプロシージャーsa_http_php_page_interpreted システムプロシージャーを参照してください。

    • HTTP_BODY システム関数   Web サービスの新しい関数が追加されました。HTTP_BODY 関数は、HTTP 要求の本文をバイナリ形式で返します。HTTP_BODY 関数 [Web サービス]を参照してください。

    • WSDLC での Web サービスクライアント SOAP プロシージャー生成のサポート   C# と JAVA 用の QAnywhere クライアントサイド SOAP インターフェイスの生成に加えて、WSDLC では、SQL Anywhere 用の SQL SOAP (Web サービス) クライアントプロシージャーの生成がサポートされるようになりました。WSDLC では、WSDL1.1 準拠の URL またはファイルが読み込まれ、WSDL 内に記述された対応する各 SOAP 操作にマッピングする、適切なパラメーターと句を持つプロシージャー (または関数) が生成されます。生成された SQL 文は SQL ファイルに書き込まれます。iAnywhere WSDL コンパイラーユーティリティ (wsdlc)を参照してください。

    • FORMAT 句を指定して定義した HTTP SOAP サービスに EXPLICIT OFF または ON を追加可能   HTTP SOAP サービスを作成するとき、FORMAT 句のデフォルトは EXPLICIT ON です。このため、DISH サービスによって生成される WSDL では、結果セットで返されるカラムごとに明示的な名前とデータ型が指定されます。したがって、結果セットを表すクライアント側のオブジェクトとインターフェイスを SOAP クライアントツールキットで自動的に生成でき、カラム値へのネイティブアクセスが可能です。この機能が追加される前は、カラム値は、抽象 XML データ要素としてのみアクセスできました。EXPLICIT OFF を指定すると、この以前の動作を有効にできます。

      EXPLICIT 応答オブジェクトまたは汎用の SimpleDataset の定義方法の詳細については、CREATE SERVICE 文 [SOAP Web サービス]チュートリアル:JAX-WS を使用した SOAP/DISH Web サービスへのアクセスを参照してください。

    • JSON Web サービスのサポート   SQL Anywhere で、JSON 形式の応答を返す Web サービスがサポートされるようになりました。CREATE SERVICE 文 [HTTP Web サービス]を参照してください。

  • Web サービスのクライアントのロギング   データベースサーバーで、Web サービスクライアントの接続を出力ファイルにロギングできるようになりました。-zoc サーバーオプションを指定するか、WebClientLogFile プロパティと WebClientLogging プロパティを sa_server_option システムプロシージャーとともに使用して、ログを制御し、Web サービスクライアントのログファイルの場所を指定できます。-sf サーバーオプションを使用してこの機能の使用を無効にすることもできます。次の項を参照してください。