diff --git a/docs/ja/scalar-expressions-and-types.md b/docs/ja/scalar-expressions-and-types.md index 6f31c35..243aaf3 100644 --- a/docs/ja/scalar-expressions-and-types.md +++ b/docs/ja/scalar-expressions-and-types.md @@ -626,6 +626,36 @@ notes: | `datetime_interval` | `datetime_interval` | `datetime_interval` | | `unknown` | `datetime_interval` | `datetime_interval` | +### 単項互換昇格 + +単項互換型昇格 (*unary compatible type promotion*) は、あるデータ型を実行時における互換性上限のデータ型に変換する。 +このとき、互換性上限とは、実行時における互換性のあるデータ型の集合のうち、それ以上 [拡大変換](#拡大変換) を適用できないデータ型のことを指す。 + +この規則はほとんどのデータ型にとって恒等変換と同じであるが、以下の表に示すデータ型は異なるデータ型への変換を行う。 + +| 変換元 | 変換先 | +|--:|--:| +| `int1` | `int4` | +| `int2` | `int4` | +| `decimal` | `decimal(*, *)` | +| `character` | `character varying(*)` | +| `character varying` | `character varying(*)` | +| `bit` | `bit varying(*)` | +| `bit varying` | `bit varying(*)` | +| `octet` | `octet varying(*)` | +| `octet varying` | `octet varying(*)` | + +上記の表にないデータ型については、元のデータ型と同等 (恒等変換) の結果になる。 +また、変換先は互換性のある集合の上限であるため、再度単項互換昇格を適用しても同一のデータ型になることが保証される。 + +変換前後でデータ型が異なる組み合わせの特徴は、いずれも変換前後で実行環境上のデータの表現が変わらない、または同等のものとして取り扱えるという点である。 + +---- +note: + +* 単項互換昇格は、主に関数オーバーロード解決時のあいまいさ解消を企図している + * 関数の仮引数のデータ型を互換性上限のみに制限し、実引数に単項互換昇格を適用することで、その後のオーバーロード候補を適切に削減できる + ### 単一化変換 単一化変換 (*type unification*) は複数のデータ型を単一のデータ型に変換する。