Skip to content

Commit

Permalink
Merge pull request #38 from project-tsurugi/doc-compatible-types
Browse files Browse the repository at this point in the history
doc: define "unary compatible type promotion".
  • Loading branch information
ashigeru authored Jul 13, 2024
2 parents 7915361 + 6061dd3 commit 360d444
Showing 1 changed file with 30 additions and 0 deletions.
30 changes: 30 additions & 0 deletions docs/ja/scalar-expressions-and-types.md
Original file line number Diff line number Diff line change
Expand Up @@ -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*) は複数のデータ型を単一のデータ型に変換する。
Expand Down

0 comments on commit 360d444

Please sign in to comment.