FB3. Alternatives for Embedding Quotes in String Literals
Привет всем.
В FB3 был добавлен новый способ представления текстовых литералов в тексте запроса:
<alternate string literal> ::=
{ q | Q } <quote> <alternate start char> [ { <char> }… ] <alternate end char> <quote>Author: Adriano dos Santos Fernandes
Перед тем как начинать добавлять поддержку этого представления в IBProvider, я пару часов морально готовился, созерцая картинки вида:
И как в воду глядел 🙂
Приступив к созданию более-менее «продвинутых» тестов, я таки наступил на грабли. Которые заставили задуматься.
Текст запроса:
select q'Жмама, мама, что я буду делать?Ж' from dual
При использовании кодовой страницы подключения WIN1251, сервер без проблем переварил этот запрос.
А вот если подключаться с использованием UTF8 (текст запроса будет передан на сервер в виде строки с UTF8 символами), сервер уже не в состоянии подготовить этот запрос.
Причина очевидна (и я нашел в исходниках подтверждение) — «alternate char» должен быть однобайтным символом. Коим русская буква «Ж» не является.
Но напрягло меня не это. А то, что IBProvider, хотя и переварил ‘Ж’ (потому что манипулирует UCS2 символами), тоже может споткнуться, если «alternate char» будет четырехбайтным. И надо будет это учесть.
Вот не было печали.
Dmitry Kovalenko on 11 сентября, 2018
Пять лет прошло. Без изменений.