引用符の二重化・連結・ドル引用符が混ざった SQL
'' で書いた引用符、改行で連結した 2 つの文字列、ドル引用符の本文、二重引用符つきの列名、コメントが 1 つの SQL に入った例です。何が文字列として取り出されるかを確かめます。
入力
SQL
SELECT 'it''s', 'foo' 'bar', $f$ x'y $f$, "col'x" -- 'no'
E'…' と U&'…' のエスケープを展開して表示する
はい
結果
エラー 0 件・警告 0 件・情報 1 件
指摘(エラー・警告・情報)
- 情報 1 行目 2 つの文字列が改行をはさんで並んでいるため、1 つの定数に連結しました(4.1.2.1)。
| 文字列リテラルの数 | 3 個 |
|---|---|
| 通常 '…' | 2 個 |
| E'…' | 0 個 |
| U&'…' | 0 個 |
| ドル引用符 | 1 個 |
文字列リテラルの一覧
| # | 種類 | 開始位置 | 内容 |
|---|---|---|---|
| 1 | 通常 '…' | 1 行目 | it's |
| 2 | 通常 '…' | 1 行目 | foobar |
| 3 | ドル引用符 $f$ | 2 行目 | x'y |
検算(この結果になる理由)
'it''s' は it's(4.1.2.1 節)。'foo' と 'bar' は間に改行があるので foobar の 1 つに連結されます。$f$ x'y $f$ はドル引用符で本文が ' x'y '。"col'x" は識別子、-- 以降はコメントで対象外です。取り出す文字列は 3 個、連結の情報が 1 件です。
判定の根拠は仕様と根拠に、仕様の出典とともにまとめています。自分の入力で試すにはツールをお使いください。
このツールの制約
- 完全な SQL の構文解析はしません。文字列が実際にどの式に使われているか、型は何かまでは判定しません。
- コメントをはさんだ隣接リテラルの連結や、standard_conforming_strings を off にした設定での動作は扱いません(既定の on を前提にします)。
- UESCAPE で別のエスケープ文字を指定した U&'…' は展開せず、警告を出します。
- ビット列(B'…'・X'…')などの特殊な定数は文字列リテラルとして取り出しません。
ご利用にあたって
- 結果は字句の読み取りにもとづく確認で、実際のデータベースでの解釈を保証するものではありません。
- ドキュメントは PostgreSQL License で公開されています。このサイトはその内容を要約して参照しており、転載はしていません。