Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / IBExpert |
![]() ![]() |
Топик располагается на нескольких страницах: [1] 2 3 4 5 вперед Ctrl→ все |
IBExpert Member Откуда: От верблюда Сообщений: 3378 |
В сегодняшней версии поддерживаются новые синтаксические конструкции, функции и т.д. в PSQL-объектах. Можно потестить. Про Database Comparer писать не надо, его буду пилить в последнюю очередь. ЗЫ. Модераторы, а можно тему закрепить пока? |
28 фев 19, 09:45 [21821399] Ответить | Цитировать Сообщить модератору |
Симонов Денис Member Откуда: Рязань Сообщений: 10796 |
IBExpert, а по часовым поясам положительные новости есть? Последний раз когда пробовал они не верно отображались. |
28 фев 19, 10:19 [21821432] Ответить | Цитировать Сообщить модератору |
IBExpert Member Откуда: От верблюда Сообщений: 3378 |
Я у себя ничего не правил. Проверил... SELECT CAST('00:00:00 Europe/Moscow' AS TIME WITH TIME ZONE), CAST('00:00:00 +3' AS TIME WITH TIME ZONE) FROM RDB$DATABASE выдает 21:00:00 в обеих колонках, а раньше выдавал разные значения. Насколько это (21:00) правильно - фиг знает. Я в этих таймзонах путаюсь. |
||
28 фев 19, 10:46 [21821464] Ответить | Цитировать Сообщить модератору |
IBExpert Member Откуда: От верблюда Сообщений: 3378 |
Похоже, все равно ерунда. Если кастить к строке, то 00:00:00 выдает, что логично. |
||
28 фев 19, 10:50 [21821469] Ответить | Цитировать Сообщить модератору |
Симонов Денис Member Откуда: Рязань Сообщений: 10796 |
IBExpert, надо сравнивать с результатами в ISQL SQL> connect 'inet4://localhost:3054/test' user SYSDBA password 'masterkey'; Ты сам декодируешь структуры ISC_TIMESTAMP_TZ и ISC_TIME_TZ или используешь IUtil.decodeTimeTz и IUtil.decodeTimeStampTz? |
28 фев 19, 12:20 [21821591] Ответить | Цитировать Сообщить модератору |
IBExpert Member Откуда: От верблюда Сообщений: 3378 |
ISQL и раньше как-то умудрялся правильный результат выдавать, мне это ничего не говорит. Но в движке-то таки что-то поменяли, раз теперь одно и то же время в обеих колонках выдает. Раньше разное выдавал.
Значение времени декодируется ровно тем же куском кода, как и в случае ISC_TIME: берутся первые четыре байта и скармливаются isc_decode_sql_time. Ну так вот в данном конкретном случае в этих четырех байтах должен быть ноль. И как его ни крути, 9 часов вечера из него никак не выкрутишь. А от сервера прилетает совсем не ноль... |
||||
28 фев 19, 14:54 [21821829] Ответить | Цитировать Сообщить модератору |
Симонов Денис Member Откуда: Рязань Сообщений: 10796 |
IBExpert, Может потому что
|
||
28 фев 19, 15:20 [21821857] Ответить | Цитировать Сообщить модератору |
Симонов Денис Member Откуда: Рязань Сообщений: 10796 |
в fbclient работа с TIME WITHOUT TIME ZONE и TIME WITH TIME ZONE отличаетсяvoid UtilInterface::decodeTime(ISC_TIME time, unsigned* hours, unsigned* minutes, unsigned* seconds, unsigned* fractions) { tm times; isc_decode_sql_time(&time, ×); if (hours) *hours = times.tm_hour; if (minutes) *minutes = times.tm_min; if (seconds) *seconds = times.tm_sec; if (fractions) *fractions = time % ISC_TIME_SECONDS_PRECISION; } void UtilInterface::decodeTimeTz(CheckStatusWrapper* status, const ISC_TIME_TZ* timeTz, unsigned* hours, unsigned* minutes, unsigned* seconds, unsigned* fractions, unsigned timeZoneBufferLength, char* timeZoneBuffer) { try { tm times; int intFractions; TimeZoneUtil::decodeTime(*timeTz, CVT_commonCallbacks, ×, &intFractions); if (hours) *hours = times.tm_hour; if (minutes) *minutes = times.tm_min; if (seconds) *seconds = times.tm_sec; if (fractions) *fractions = (unsigned) intFractions; if (timeZoneBuffer) TimeZoneUtil::format(timeZoneBuffer, timeZoneBufferLength, timeTz->time_zone); } catch (const Exception& ex) { ex.stuffException(status); } } |
28 фев 19, 15:23 [21821864] Ответить | Цитировать Сообщить модератору |
IBExpert Member Откуда: От верблюда Сообщений: 3378 |
Бррр... Хочешь сказать, надо отнимать/прибавлять сдвиг часовой зоны?? Т.е., '00:00:00 Europe/Moscow' означает "полночь по московскому времени", а соответствующее ему ISC_TIME_TZ должно содержать 21:00 UTC и часовой пояс Москвы? Тогда все логично... Но где в таком случае брать сдвиг для часовых поясов вроде 'Europe/Moscow'? |
||||
28 фев 19, 15:39 [21821891] Ответить | Цитировать Сообщить модератору |
Симонов Денис Member Откуда: Рязань Сообщений: 10796 |
IBExpert, вот поэтому в fbclient и реализовали специальный хелпер, ибо работа с часовыми поясами не тривиальна. Я так понимаю он аж до icu лезет. |
28 фев 19, 15:46 [21821903] Ответить | Цитировать Сообщить модератору |
IBExpert Member Откуда: От верблюда Сообщений: 3378 |
Я в legacy api не вижу ничего специального для ISC_TIME_TZ. |
||
28 фев 19, 15:56 [21821921] Ответить | Цитировать Сообщить модератору |
IBExpert Member Откуда: От верблюда Сообщений: 3378 |
Да, пришлось таки прикручивать OOP API. Сейчас вроде правильно все отображается. |
||
1 мар 19, 09:02 [21822398] Ответить | Цитировать Сообщить модератору |
Симонов Денис Member Откуда: Рязань Сообщений: 10796 |
IBExpert, спасибо. Уже можно посмотреть или не выкладывал ещё? |
1 мар 19, 14:25 [21822746] Ответить | Цитировать Сообщить модератору |
IBExpert Member Откуда: От верблюда Сообщений: 3378 |
Лежит уже. |
||
1 мар 19, 15:06 [21822802] Ответить | Цитировать Сообщить модератору |
Симонов Денис Member Откуда: Рязань Сообщений: 10796 |
IBExpert, что-то не работает select current_time from rdb$database Error Message: Клиент родной. Взята официальная Beta 1. |
1 мар 19, 15:46 [21822831] Ответить | Цитировать Сообщить модератору |
Симонов Денис Member Откуда: Рязань Сообщений: 10796 |
NUMERIC(34, x) и DECIMAL(34, x) не отображаются в данных таблицы пишет Unknown SQL data type (32758) Причём DECFLOAT(34) работает |
||
1 мар 19, 15:55 [21822837] Ответить | Цитировать Сообщить модератору |
IBExpert Member Откуда: От верблюда Сообщений: 3378 |
Странно, у меня работает... Клиент 1436. |
||
1 мар 19, 16:07 [21822853] Ответить | Цитировать Сообщить модератору |
IBExpert Member Откуда: От верблюда Сообщений: 3378 |
Для DECFLOAT там SET DECFLOAT BIND выполняется, а нумериками я еще не занимался. |
||
1 мар 19, 16:08 [21822854] Ответить | Цитировать Сообщить модератору |
Симонов Денис Member Откуда: Рязань Сообщений: 10796 |
IBExpert,SELECT CAST('12.12.2018 00:00:00 +4:00' AS TIMESTAMP WITH TIME ZONE) -- , current_timestamp as v FROM RDB$DATABASE как только комментируем падает. Клиент точно такой же, БД создана с нуля и пустая. |
1 мар 19, 16:28 [21822876] Ответить | Цитировать Сообщить модератору |
Симонов Денис Member Откуда: Рязань Сообщений: 10796 |
Симонов Денис, * раскомментируем |
1 мар 19, 16:30 [21822878] Ответить | Цитировать Сообщить модератору |
IBExpert Member Откуда: От верблюда Сообщений: 3378 |
А если не расскоментировать, то все ОК что-ли? Конкретно на current_timestamp валится? А если вместо него вторым полем еще раз CAST('12.12.2018 00:00:00 +4:00' AS TIMESTAMP WITH TIME ZONE) заслать? |
1 мар 19, 16:33 [21822881] Ответить | Цитировать Сообщить модератору |
Симонов Денис Member Откуда: Рязань Сообщений: 10796 |
IBExpert, там проблема с именованными поясами SELECT CAST('12.12.2018 00:00:00 Africa/Asmera' AS TIMESTAMP WITH TIME ZONE) FROM RDB$DATABASE если задавать числами +4, +3:00 и другое то нормально |
1 мар 19, 16:38 [21822890] Ответить | Цитировать Сообщить модератору |
IBExpert Member Откуда: От верблюда Сообщений: 3378 |
У меня всяко работает. Ладно, забей пока. |
||
1 мар 19, 16:51 [21822907] Ответить | Цитировать Сообщить модератору |
IBExpert Member Откуда: От верблюда Сообщений: 3378 |
Возможно, у тебя по какой-то причине клиент IStatus при декодировании дергает. Но я его сейчас туда не передаю, там nil. Завтра IStatus допилю и будем поглядеть. |
1 мар 19, 17:20 [21822945] Ответить | Цитировать Сообщить модератору |
IBExpert Member Откуда: От верблюда Сообщений: 3378 |
Ну, так и есть. Если подсунуть неизвестную зону, то без IStatus он в AV выпадает. Интересно, а что у тебя ISQL выдает на тех же запросах? По идее, тоже ругаться как-то должен. |
1 мар 19, 17:28 [21822956] Ответить | Цитировать Сообщить модератору |
Топик располагается на нескольких страницах: [1] 2 3 4 5 вперед Ctrl→ все |
Все форумы / IBExpert | ![]() |