github.com/shogo82148/std@v1.22.1-0.20240327122250-4e474527810c/database/sql/driver/types.go (about)

     1  // Copyright 2011 The Go Authors. All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  package driver
     6  
     7  // ValueConverterはConvertValueメソッドを提供するインターフェースです。
     8  //
     9  // ドライバーパッケージによってさまざまなValueConverterの実装が提供され、
    10  // ドライバー間の変換の一貫性を提供します。ValueConverterにはいくつかの用途があります:
    11  //
    12  //   - sqlパッケージによって提供される [Value] 型から、
    13  //     データベーステーブルの特定の列型に変換し、
    14  //     特定のint64がテーブルのuint16列に合うか確認するなどの作業を行います。
    15  //
    16  //   - データベースから取得された値をドライバーの [Value] 型のいずれかに変換します。
    17  //
    18  //   - [database/sql] パッケージによって、スキャン中にドライバーの [Value] 型からユーザーの型に変換します。
    19  type ValueConverter interface {
    20  	ConvertValue(v any) (Value, error)
    21  }
    22  
    23  // ValuerはValueメソッドを提供するインターフェースです。
    24  //
    25  // [Value] メソッドが返すエラーは、database/sqlパッケージによってラップされます。
    26  // これにより、呼び出し元は [database/sql.Query]、[database/sql.Exec]、
    27  // [database/sql.QueryRow] などの操作後に、正確なエラーハンドリングのために
    28  // [errors.Is] を使用することができます。
    29  //
    30  // Valuerインターフェースを実装する型は、自分自身をドライバの [Value] に変換できます。
    31  type Valuer interface {
    32  	Value() (Value, error)
    33  }
    34  
    35  // Boolは入力値をboolに変換する [ValueConverter] です。
    36  //
    37  // 変換ルールは以下の通りです:
    38  //   - ブール値は変更されずに返されます
    39  //   - 整数の場合、
    40  //     1はtrueを、
    41  //     0はfalseを、
    42  //     その他の整数はエラーとなります
    43  //   - 文字列や[]byteの場合、 [strconv.ParseBool] と同じルールが適用されます
    44  //   - それ以外のすべての型はエラーとなります
    45  var Bool boolType
    46  
    47  var _ ValueConverter = boolType{}
    48  
    49  // Int32は、入力値をint64に変換する [ValueConverter] であり、int32の制限を尊重します。
    50  var Int32 int32Type
    51  
    52  var _ ValueConverter = int32Type{}
    53  
    54  // Stringは、入力を文字列に変換する [ValueConverter] です。
    55  // 値が既に文字列または[]byteの場合は変更されません。
    56  // 値が他の型の場合は、fmt.Sprintf("%v", v)で文字列に変換されます。
    57  var String stringType
    58  
    59  // Nullは、nilを許可することでValueConverterを実装するタイプですが、それ以外の場合は別のValueConverterに委任します。
    60  type Null struct {
    61  	Converter ValueConverter
    62  }
    63  
    64  func (n Null) ConvertValue(v any) (Value, error)
    65  
    66  // NotNullは、nilを許可しないことで [ValueConverter] を実装する型ですが、他の [ValueConverter] に委譲します。
    67  type NotNull struct {
    68  	Converter ValueConverter
    69  }
    70  
    71  func (n NotNull) ConvertValue(v any) (Value, error)
    72  
    73  // IsValue はvが有効な [Value] パラメータータイプかどうかを報告します。
    74  func IsValue(v any) bool
    75  
    76  // IsScanValueは [IsValue] と同等です。
    77  // 互換性のために存在します。
    78  func IsScanValue(v any) bool
    79  
    80  // DefaultParameterConverterは、 [Stmt] が [ColumnConverter] を実装していない場合に使用される [ValueConverter] のデフォルト実装です。
    81  //
    82  // DefaultParameterConverterは、引数がIsValue(arg)を満たす場合はその引数を直接返します。
    83  // そうでない場合、引数が [Valuer] を実装している場合はそのValueメソッドを使用して [Value] を返します。
    84  // 代替として、提供された引数の基底の型を使用して [Value] に変換します。
    85  // 基底の整数型はint64に変換され、浮動小数点数はfloat64に変換され、bool型、string型、および[]byte型はそれ自体に変換されます。
    86  // 引数がnilポインタの場合、 defaultConverter.ConvertValue はnilのValueを返します。引数がnilではないポインタの場合、それは逆参照され、再帰的に defaultConverter.ConvertValue が呼び出されます。他の型はエラーです。
    87  var DefaultParameterConverter defaultConverter
    88  
    89  var _ ValueConverter = defaultConverter{}