Summary: | Selta: трансляция квадратных скобок. | ||
---|---|---|---|
Product: | SELTA@Etersoft | Reporter: | Антон Азанов (Djelf) <aae> |
Component: | ODBC-драйвер | Assignee: | Andrey Abramov <andrey> |
Status: | CLOSED FIXED | QA Contact: | |
Severity: | normal | ||
Priority: | P5 | CC: | lav |
Version: | 1.0.2 | ||
Target Milestone: | версия 1.0.3 | ||
Hardware: | PC | ||
OS: | Linux | ||
Whiteboard: | |||
Заявки RT: | Связано с: | ||
Дата напоминания: | |||
Bug Depends on: | |||
Bug Blocks: | 2053 |
Description
Антон Азанов (Djelf)
2008-04-03 10:22:34 MSD
Обработка добавлена. Квадратные скобки заменяются на кавычки, все что между ними преобразуется в нижний регистр, поскольку PostgreSQL чувствителен к регистру имен, заключенных в кавычки. Для проверки скачайте selta.dll с ftp из папки 1.0.3.test 1. C приведением в нижний регистр типизация в 1C++ не работает конструкция: SELECT Конт.ID as [Конт $Справочник.Контрагенты] FROM sc172 AS Конт WHERE Конт.ISFOLDER=2 предобазуется в: SELECT Конт.ID as "конт $справочник.контрагенты" FROM sc172 AS Конт WHERE Конт.ISFOLDER=2 отрабатывает, но в выведенной таблице 1С чушь. запрос: SELECT Конт.ID as "Конт $Справочник.Контрагенты" FROM sc172 AS Конт WHERE Конт.ISFOLDER=2 в Postgres отрабатывает нормально и должен выдавать корректый результат. 2. Не хватает длины идентификатора и postgres его "режет". В MSSQL, начиная с 7й версии, длина идентификатора увеличена до 128 символов. В документации postgres указано что длина идентификатора может быть увеличена при компиляции. http://www.postgresql.org/docs/8.2/static/sql-syntax-lexical.html Странно только, что сейчас postgres режет до 33 символов, в по-умолчанию должно быть 63. Из за русских букв? Для более полной поддержки не только 1С++, а вообще эмуляции MSSQL необходима перекомпиляция postgres. (может отдельный баг заведете?). по п.1. Виноват, в MSSQL с 1С++ работает и конструкция в нижнем регистре "SELECT Конт.ID as [конт $справочник.контрагенты]. Однако, все равно, много разработок под 1С++ регистрочувствительны, т.е. приведение в нижний регистр в них работать не будет. Попытаюсь разобраться с типизацией в 1С++, на настоящий момент в выложенном запросе вместо контрагентов почему-то выводятся физ-лица. Я могу убрать приведение к нижнему регистру, но это будет чревато: записи [Name] и [name] в MS SQL Server равнозначны, а в PostgreSQL - нет, важен регистр, к сожалению. Если разработчики 1С++ будут соблюдать регистр, то все будет ОК. Но ошибка, как я предполагаю, вовсе не в этом, а из-за обрезания имен. 33 символа вместо 64 - да, скорее всего из-за русских символов, кодировка UTF-8 всетаки используется. Сейчас я повешаю багу про увеличение этого параметра и постарась решить. Данную багу закроем только после того, как проведем тесты с новыми сборками Постгри. Бес попутал. Странная вещь: На MSSQL два запроса без сортировки 1С`овский и 1C++ выводят одинаковую последовательность значений. Под postgres последовательности оказались разные и как назло первые записи в выборке postgres были визуально похожи на другой справочник...
Вообщем типизация работает корректно.
Но приведение в нижний регистр конструкций [Контрагент $Справочник.Контрагенты] будет приводить к ошибкам в универсальных обработках, например при сравнении кода колонки полученного командой 1С ПолучитьПараметрыКолонки с аналогичным полученным через метаданные: "контрагент"<>"Контрагент".
> Если разработчики 1С++ будут соблюдать регистр, то все будет ОК.
В большинстве случаев соблюдают. Кроме того эти конструкции используются для идентификации конечных колонок запроса и не участвуют в фильтрах т.е. проблем быть не должно.
Закоментировал пока что преобразование в нижний регистр. Будут проблемы - будем думать. Новую версию dll выложил на ftp в папку 1.0.3.test |