2023.02.16

MariaDB

MariaDB Connector/Node.js 3.1.0 GA版(リリース日:2023年2月15日)

主な変更点

タイムゾーンの変換

  • タイムゾーンの変換をローカルで実行する代わりに、MariaDB Connector/Node.jsは、time_zoneシステム変数のセッション値を設定できます。これにより、リモートサーバーがタイムゾーンの変換を処理できるようになります。
    • 以前のリリースでは、タイムゾーンの変換はローカルで実行されるため、特定の日付と時刻の関数を呼び出す時に問題が発生する可能性がありました。
    • このリリース以降、全てのタイムゾーン変換はリモートサーバーで実行されます。timezoneパラメータは、動作を設定するために使用されます。引数は変更されませんが、各引数の意味がわずかに変更されています:
      タイムゾーン
      (パラメータ引数)
      説明
      local
      • これがデフォルトのモードです。
      • time_zoneシステム変数のセッション値が設定されていないため、タイムゾーンの変換は実行されません。
      • このモードは、クライアントとサーバーが同じタイムゾーンを使用する場合にのみ推奨されます。
      auto
      • サーバーのタイムゾーンがクライアントのタイムゾーンと異なる場合、time_zoneシステム変数のセッション値はクライアントのタイムゾーンに設定されます。
      • このモードは、サーバーとクライアントが異なるタイムゾーンを使用しているが、クライアントのタイムゾーンが適切に設定されていることがわかっている場合に推奨されます。
      • クライアントのタイムゾーンがIANAタイムゾーン名に設定され、リモートサーバーがMariaDBサーバーである場合、タイムゾーンデータベースをリモートサーバーにロードする必要があります。MariaDBサーバーは、IANAタイムゾーンデータベース(tzdataまたはzoneinfoとも呼ばれる)からのデータがmariadb-tzinfo-to-sqlユーティリティを使用して読み込まれた場合、time_zoneシステム変数でIANAタイムゾーン名のみをサポートします。
      IANAタイムゾーン名
      America/New_Yorkなど)
      • time_zoneシステム変数のセッション値は、サーバーのタイムゾーンをチェックせずに、指定されたIANAタイムゾーン名に設定されます。
      • リモートサーバーがMariaDBサーバーの場合、タイムゾーンデータベースをリモートサーバーにロードする必要があります。MariaDBサーバーは、IANAタイムゾーンデータベース(tzdataまたはzoneinfo とも呼ばれる)からのデータがmariadb-tzinfo-to-sqlユーティリティを使用して読み込まれた場合、time_zoneシステム変数でIANAタイムゾーン名のみをサポートします。
      UTCオフセット

      (-04:00など)

      • time_zoneシステム変数のセッション値は、サーバーのタイムゾーンをチェックせずに、提供されたUTCオフセットに設定されます。

パフォーマンスの改善

  • 内部結果セットメタデータパーサーのパフォーマンスの改善が実装されました。
  • 内部のプリペアドステートメントパーサーのパフォーマンスの改善が実装されました。
  • COM_PING、COM_STMT_CLOSE、COM_QUIT、COM_RESET_CONNECTIONなど、既知のサイズであるコマンドパケットの実行のパフォーマンスの改善が実装されました。

結果セットのメタデータ

  • 結果セットオブジェクトのメタプロパティは、列挙できない場合があります。
    • 以前のリリースでは、結果セットオブジェクトのメタプロパティは常に列挙可能でした。
    • このリリース以降、結果セットオブジェクトのメタプロパティはデフォルトで列挙不可になりました。古い動作を取得するためには、metaEnumerable接続パラメータをtrueに設定してください。

TypeScriptの改善

  • TypeScriptでは、batch()、execute()、query()メソッドがタイプアサーションを持つように内部的に定義されているため、アプリケーションはアプリケーションレベルでタイプアサーションを定義しなくても戻り値を割り当てることができます。
    • 以前のリリースでは、batch()、execute()、query()メソッドの戻り値を割り当てるにはタイプアサーションが必要でした。つまり、METHOD_CALL() AS TYPE_NAMEまたは METHOD_CALL()構文が必要でした。
    • このリリース以降、タイプアサーションはジェネリックタイプを使用して内部的に定義されます。

プリペアドステートメントキャッシュ

  • プリペアドステートメントキャッシュは、プリペアドステートメントが既に閉じられている場合の処理において、より回復力があります。
    • prepareCacheLength接続パラメータが0より大きい場合、プリペアドステートメントキャッシュが使用されます。
    • 以前のリリースでは、MariaDB Connector/Node.jsは、既に閉じられていた場合でも、キャッシュされたプリペアドステートメントを使用しようとする可能性があり、ER_UNKNOWN_STMT_HANDLERエラーコードが発生する可能性がありました:
      Unknown prepared statement handler (PREPARED_STATEMENT_ID) given to mysqld_stmt_execute
    • このリリース以降、MariaDB Connector/Node.jsは、プリペアドステートメントがいつ閉じられたかを追跡し、閉じられたプリペアドステートメントが使用されると、次のエラーを発生させます:
      Execute fails, prepare command as already been closed

修正されたバグ

  • max_allowed_packetよりも長いパラメータを使用してバッチを実行すると、MariaDB Connector/Node.jsはパラメータの値の4バイトを失う可能性があります。
  • バイナリプロトコルでTIMEデータタイプが使用され、値にマイクロ秒が含まれていない場合、MariaDB Connector/Node.jsは値を正しくデコードしません。
  • コールバックAPIを使用する場合、接続初期化クエリは常にユーザークエリの前に実行されるとは限りません。
    • 接続初期化クエリには、forceVersionCheck、initSql、queryTimeout、timezoneの接続パラメータによって実行されるクエリが含まれます。
  • クエリの実行中に接続が強制終了されると、ローカル接続オブジェクトは破棄されますが、クエリはリモートサーバーで実行し続けることができます。
  • TypeScriptでは、ConnectionConfigおよびQueryConfigインターフェースの定義にmetaAsArrayおよびrowsAsArrayプロパティがありません。

MariaDB Connector/Node.js 3.1.0のリリースノート(MariaDB社ウェブサイト):
https://mariadb.com/docs/release-notes/mariadb-connector-nodejs-3-1/3-1-0/


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

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