2023.03.28

MariaDB

MariaDB Connector/R2DBC 1.1.4 GA版(リリース日:2023年3月27日)

主な変更

  • MariaDB Connector/R2DBC 1.1.4が既存のTLSトンネルに接続する場合、ホスト検証を無効にすることができます。
    • この動作は、sslTunnelDisableHostVerification接続パラメーターを使用して設定できます。デフォルトはfalseです。
    • sslMode接続パラメーターがSslMode.TUNNELに設定されている場合、sslTunnelDisableHostVerificationをtrueに設定することで、ホスト検証を無効にすることができます。
    • 例:
      try {
           // Configure the Connection
           MariadbConnectionConfiguration conf = MariadbConnectionConfiguration.builder()
                   .host("192.0.2.1")
                   .port(8880) // tunnel port
                   .username("db_user")
                   .password("db_user_password")
                   .database("test")
                   .sslMode(SslMode.TUNNEL)
                   .sslContextBuilderCustomizer(
                           sslContextBuilder -> sslContextBuilder
                                   .protocols("TLSv1.3")
                                   .keyManager(new File("/path/to/client/cert"), new File("/path/to/client/key")))
                   .sslTunnelDisableHostVerification(true)
                   .build();
      
           // Instantiate a Connection Factory
           MariadbConnectionFactory connFactory = new MariadbConnectionFactory(conf);
      
           MariadbConnection connection = connFactory.create().block();
           connection.close().block();
      
       } catch (java.lang.IllegalArgumentException e) {
           System.err.println("Issue encountered while getting connection");
           e.printStackTrace();
       }
  • useServerPrepStmts接続パラメーターが有効になっている場合、プリペアドステートメントはテキストプロトコルを使用できます。
    • このシナリオでテキストプロトコルを使用するためには、プリペアドステートメントを作成する時にクエリ文字列の前に/*text*/を付けます。
    • 例えば、ネイティブ R2DBC APIでテキストプロトコルを使用するためには:
      connection
           .createStatement("/*text*/ call some_proc(?)")
           .bind(0, "connr2dbc_user@example.edu")
           .execute()
           .flatMap(...);
    • または、Spring Dataでテキストプロトコルを使用するためには:
      @Query("/*text*/ call some_proc(:emailparam)")
      List<User> findUsersWithEmailAddress(@Param("emailparam") String emailParam);
  • MariaDB Connector/R2DBC 1.1.4は、MariaDB XpandからのTIMESTAMPおよびDATEの「ゼロ」日付値('0000-00-00')のデコードのサポートを追加します。
    • 以前のリリースでは、コネクタがXpandから「ゼロ」日付値を受信すると、値をデコードできず、次のエラーが発生しました:
      wrong month 0

修正された問題

  • useServerPrepStmts接続パラメータが有効になっている場合、MEDIUMINT値が正しくデコードされません。
    • Connector/R2DBC 1.1.2および 1.1.3では、バイナリプロトコルが使用されると、結果セットからMEDIUMINT値の最後のバイトが読み取られず、そのため、同じ行の残りの値が正しく読み取られません。
  • 10.5より前のバージョンのMariaDB Serverに接続している時にStatement.returnGeneratedValues()メソッドが呼び出されると、エラーが発生します。
    • 以前のリリースでは、次のエラーが発生していました:
      Cannot invoke "Object.getClass()" because "obj" is null
  • MariaDB Connector/R2DBCの内部ステートメントパーサーは、SELECTステートメント内のユーザー定義変数を名前付きステートメントパラメータとして不適切に分類します。
    • 以前のリリースでは、以下のクエリの@amountトークンは、ユーザー定義変数ではなく、名前付きステートメントパラメータとして分類されました。
      SELECT @amount := 10;
    • その名前のステートメントパラメータが存在しないため、次のエラーが発生します:
      java.lang.IllegalStateException: Parameter at position 0 is not set.
    • このリリース以降、内部ステートメントパーサーは、ユーザー定義変数と名前付きステートメントパラメータを区別できるようになりました。
  • ConnectionFactoryを使用してConnectionFactoryOptionsインスタンスから接続文字列を作成すると、restrictedAuth、rsaPublicKey、cachingRsaPublicKey、allowPublicKeyRetrieval接続パラメータが正しく解析されません。
  • サーバーがCLIENT_SESSION_TRACK機能をアドバタイズしない場合(古いバージョンのMariaDB Server、MySQL、MariaDB Xpandなど)、MariadbConnection.getTransactionIsolationLevel()およびMariadbConnection.setTransactionIsolationLevel(IsolationLevel isolationLevel)メソッドは、トランザクション分離レベルを適切に取得または設定しません。

MariaDB Connector/R2DBC 1.1.4のリリースノート(MariaDB社ウェブサイト):
https://mariadb.com/docs/xpand/release-notes/mariadb-connector-r2dbc/1-1-4/


MariaDBプロダクト・サポート・サービス

MariaDB
MariaDBプロダクト・サポート・サービスは、MariaDBおよびその関連製品をご利用されているお客様へ、必要なソフトウェアや専門的なサポートなどを提供するサービスです。