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{}