Сравнение файлов
Проблема ПИРПервое решениеОписаниеПроектДетализация
Что изменено:Как изменено:
102.114107NEWСвойство value интерфейс IResultCol не корректно возвращает значения типа dateИнструментарий прикладного программистаПрямой SQL
DSQL ----- ПРОЯВЛЕНИЕ ПРОБЛЕМЫ ----- 1. При некоторых способах использования DSQL программист не задает тип колонок явно, тип определяет Атлантис, запрашивая описание колонки результата у БД. Часто определяет неправильно: дата, время и мелкие целые типы как longint, datetime как comp, а на Oracle вообще дата, время и все целочисленные -- как double. 2. В объектном интерфейсе DSQL метод IResultCol::value возвращает неверное значение, если тип был определен Атлантисом неправильно. Возможность программисту исправить эту ситуацию явным преобразованием типа не предоставляется. 3. Неправильно работает преобразование типов variant->date и variant->_datetime (в варианте лежит корректная дата, но теряется при приведении)1. При выборке табличных полей тип колонки считается равным типу поля 2. Можно явно задать хинт типа колонки после ее алиаса. Синтаксис [[AS] алиас] [:тип] , т.е. можно задать тип выражения, не задавая колонке алиас. 3. Пункт 2 перекрывает пункт 1. Если не сработали оба, то, как и раньше, тип спросят у БД 4. Пункты 1 и 2 влияют только на ResultSet (на связывание колонок), но ничего не делают, например при sql insert select, select into temporary table и т.п. 5. sql select * или sql select TABLENAME.* теперь всегда разворачивает список колонок, чтобы выбирать только словарные поля. Мемо-поля исключаются из списка. 6. Если явно пытаться выбрать мемо-поле, то результат будет иметь тип longint, его значение платформозависимо, делать так не рекомендуется. 7. Вообще пользоваться sql select TT.* разумно только когда TT -- это INLINE VIEW 8. Исправлены преобразования из variant, что необходимо для корректной работы IResultCol::value с датой/временем # ИНСТРУКЦИЯ ПО НАСТРОЙКЕ: Чтобы заработало преобразование из варианта в дату, в частности присвоение результата метода IResultCol::value в переменную типа date, нужно пересобрать ресурс на новом компиляторе. (Ожидается, что такого кода нет, т.к. он никогда не работал) Пункты 1 и 5 "Как изменено" заработают без пересборки ресурса.