Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / IBExpert Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
 Firebird 4. Про него пока пишите сюда.  [new]
IBExpert
Member

Откуда: От верблюда
Сообщений: 2794
В сегодняшней версии поддерживаются новые синтаксические конструкции, функции и т.д. в PSQL-объектах. Можно потестить.

Про Database Comparer писать не надо, его буду пилить в последнюю очередь.

ЗЫ. Модераторы, а можно тему закрепить пока?
28 фев 19, 09:45    [21821399]     Ответить | Цитировать Сообщить модератору
 Re: Firebird 4. Про него пока пишите сюда.  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 10154
IBExpert,

а по часовым поясам положительные новости есть? Последний раз когда пробовал они не верно отображались.
28 фев 19, 10:19    [21821432]     Ответить | Цитировать Сообщить модератору
 Re: Firebird 4. Про него пока пишите сюда.  [new]
IBExpert
Member

Откуда: От верблюда
Сообщений: 2794
Симонов Денис
а по часовым поясам положительные новости есть? Последний раз когда пробовал они не верно отображались.


Я у себя ничего не правил.

Проверил...
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]     Ответить | Цитировать Сообщить модератору
 Re: Firebird 4. Про него пока пишите сюда.  [new]
IBExpert
Member

Откуда: От верблюда
Сообщений: 2794
IBExpert
выдает 21:00:00 в обеих колонках, а раньше выдавал разные значения.
Насколько это (21:00) правильно - фиг знает. Я в этих таймзонах путаюсь.


Похоже, все равно ерунда. Если кастить к строке, то 00:00:00 выдает, что логично.
28 фев 19, 10:50    [21821469]     Ответить | Цитировать Сообщить модератору
 Re: Firebird 4. Про него пока пишите сюда.  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 10154
IBExpert,

надо сравнивать с результатами в ISQL

SQL> connect 'inet4://localhost:3054/test' user SYSDBA password 'masterkey';
Database: 'inet4://localhost:3054/test', User: SYSDBA
SQL> SELECT CAST('00:00:00 Europe/Moscow' AS TIME WITH TIME ZONE),
CON> CAST('00:00:00 +3' AS TIME WITH TIME ZONE) FROM RDB$DATABASE;

CAST CAST
============================================== ==============================================
00:00:00.0000 Europe/Moscow 00:00:00.0000 +03:00

SQL>

Ты сам декодируешь структуры ISC_TIMESTAMP_TZ и ISC_TIME_TZ или используешь
IUtil.decodeTimeTz и IUtil.decodeTimeStampTz?
28 фев 19, 12:20    [21821591]     Ответить | Цитировать Сообщить модератору
 Re: Firebird 4. Про него пока пишите сюда.  [new]
IBExpert
Member

Откуда: От верблюда
Сообщений: 2794
Симонов Денис
надо сравнивать с результатами в ISQL


ISQL и раньше как-то умудрялся правильный результат выдавать, мне это ничего не говорит.
Но в движке-то таки что-то поменяли, раз теперь одно и то же время в обеих колонках выдает. Раньше разное выдавал.

Симонов Денис
Ты сам декодируешь структуры ISC_TIMESTAMP_TZ и ISC_TIME_TZ или используешь
IUtil.decodeTimeTz и IUtil.decodeTimeStampTz?


Значение времени декодируется ровно тем же куском кода, как и в случае ISC_TIME: берутся первые четыре байта и скармливаются isc_decode_sql_time. Ну так вот в данном конкретном случае в этих четырех байтах должен быть ноль. И как его ни крути, 9 часов вечера из него никак не выкрутишь. А от сервера прилетает совсем не ноль...
28 фев 19, 14:54    [21821829]     Ответить | Цитировать Сообщить модератору
 Re: Firebird 4. Про него пока пишите сюда.  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 10154
IBExpert,

Может потому что

README.time_zone.md
TIME/TIMESTAMP WITH TIME ZONE has respectively the same storage of TIME/TIMESTAMP WITHOUT TIME ZONE plus 2 bytes for the time zone identifier or displacement.

The time/timestamp parts are stored in UTC (translated from the informed time zone).
28 фев 19, 15:20    [21821857]     Ответить | Цитировать Сообщить модератору
 Re: Firebird 4. Про него пока пишите сюда.  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 10154
в 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, &times);

	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, &times, &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]     Ответить | Цитировать Сообщить модератору
 Re: Firebird 4. Про него пока пишите сюда.  [new]
IBExpert
Member

Откуда: От верблюда
Сообщений: 2794
Симонов Денис
IBExpert,

Может потому что

README.time_zone.md
TIME/TIMESTAMP WITH TIME ZONE has respectively the same storage of TIME/TIMESTAMP WITHOUT TIME ZONE plus 2 bytes for the time zone identifier or displacement.

The time/timestamp parts are stored in UTC (translated from the informed time zone).


Бррр... Хочешь сказать, надо отнимать/прибавлять сдвиг часовой зоны??
Т.е., '00:00:00 Europe/Moscow' означает "полночь по московскому времени", а соответствующее ему ISC_TIME_TZ должно содержать 21:00 UTC и часовой пояс Москвы? Тогда все логично...
Но где в таком случае брать сдвиг для часовых поясов вроде 'Europe/Moscow'?
28 фев 19, 15:39    [21821891]     Ответить | Цитировать Сообщить модератору
 Re: Firebird 4. Про него пока пишите сюда.  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 10154
IBExpert,

вот поэтому в fbclient и реализовали специальный хелпер, ибо работа с часовыми поясами не тривиальна. Я так понимаю он аж до icu лезет.
28 фев 19, 15:46    [21821903]     Ответить | Цитировать Сообщить модератору
 Re: Firebird 4. Про него пока пишите сюда.  [new]
IBExpert
Member

Откуда: От верблюда
Сообщений: 2794
Симонов Денис
вот поэтому в fbclient и реализовали специальный хелпер, ибо работа с часовыми поясами не тривиальна. Я так понимаю он аж до icu лезет.


Я в legacy api не вижу ничего специального для ISC_TIME_TZ.
28 фев 19, 15:56    [21821921]     Ответить | Цитировать Сообщить модератору
 Re: Firebird 4. Про него пока пишите сюда.  [new]
IBExpert
Member

Откуда: От верблюда
Сообщений: 2794
Симонов Денис
вот поэтому в fbclient и реализовали специальный хелпер, ибо работа с часовыми поясами не тривиальна. Я так понимаю он аж до icu лезет.


Да, пришлось таки прикручивать OOP API. Сейчас вроде правильно все отображается.
1 мар 19, 09:02    [21822398]     Ответить | Цитировать Сообщить модератору
 Re: Firebird 4. Про него пока пишите сюда.  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 10154
IBExpert,

спасибо. Уже можно посмотреть или не выкладывал ещё?
1 мар 19, 14:25    [21822746]     Ответить | Цитировать Сообщить модератору
 Re: Firebird 4. Про него пока пишите сюда.  [new]
IBExpert
Member

Откуда: От верблюда
Сообщений: 2794
Симонов Денис
спасибо. Уже можно посмотреть или не выкладывал ещё?


Лежит уже.
1 мар 19, 15:06    [21822802]     Ответить | Цитировать Сообщить модератору
 Re: Firebird 4. Про него пока пишите сюда.  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 10154
IBExpert,

что-то не работает

select current_time from rdb$database


Error Message:
----------------------------------------
Access violation at address 6AEF917F in module 'fbclient.dll'. Read of address 00000004

[6AEF917F] isc_blob_set_desc + $465F
[00403BDF] System.@HandleAnyException + $33
[004F5BDE] Firebird.IUtil.decodeTimeTz (Line 253, "Firebird.pas" + 1) + $1E
[005345EC] FIBQuery.TFIBXSQLVAR.GetAsDateTime (Line 821, "FIBQuery.pas" + 30) + $30
[0052B8CC] FIBDataSet.TFIBCustomDataSet.FetchCurrentRecordToBuffer (Line 2276, "FIBDataSet.pas" + 69) + $E
[0052EBE7] FIBDataSet.TFIBCustomDataSet.GetRecord (Line 3991, "FIBDataSet.pas" + 50) + $16
[0050E152] Db.TDataSet.GetNextRecord (Line 9185, "DB.pas" + 9) + $13

Клиент родной. Взята официальная Beta 1.
1 мар 19, 15:46    [21822831]     Ответить | Цитировать Сообщить модератору
 Re: Firebird 4. Про него пока пишите сюда.  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 10154
IBExpert
В сегодняшней версии поддерживаются новые синтаксические конструкции, функции и т.д. в PSQL-объектах. Можно потестить.


NUMERIC(34, x) и DECIMAL(34, x) не отображаются в данных таблицы пишет

Unknown SQL data type (32758)

Причём DECFLOAT(34) работает
1 мар 19, 15:55    [21822837]     Ответить | Цитировать Сообщить модератору
 Re: Firebird 4. Про него пока пишите сюда.  [new]
IBExpert
Member

Откуда: От верблюда
Сообщений: 2794
Симонов Денис
что-то не работает

select current_time from rdb$database



Странно, у меня работает... Клиент 1436.
1 мар 19, 16:07    [21822853]     Ответить | Цитировать Сообщить модератору
 Re: Firebird 4. Про него пока пишите сюда.  [new]
IBExpert
Member

Откуда: От верблюда
Сообщений: 2794
Симонов Денис
NUMERIC(34, x) и DECIMAL(34, x) не отображаются в данных таблицы пишет

Unknown SQL data type (32758)

Причём DECFLOAT(34) работает


Для DECFLOAT там SET DECFLOAT BIND выполняется, а нумериками я еще не занимался.
1 мар 19, 16:08    [21822854]     Ответить | Цитировать Сообщить модератору
 Re: Firebird 4. Про него пока пишите сюда.  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 10154
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]     Ответить | Цитировать Сообщить модератору
 Re: Firebird 4. Про него пока пишите сюда.  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 10154
Симонов Денис,

* раскомментируем
1 мар 19, 16:30    [21822878]     Ответить | Цитировать Сообщить модератору
 Re: Firebird 4. Про него пока пишите сюда.  [new]
IBExpert
Member

Откуда: От верблюда
Сообщений: 2794
А если не расскоментировать, то все ОК что-ли? Конкретно на current_timestamp валится? А если вместо него вторым полем еще раз CAST('12.12.2018 00:00:00 +4:00' AS TIMESTAMP WITH TIME ZONE) заслать?
1 мар 19, 16:33    [21822881]     Ответить | Цитировать Сообщить модератору
 Re: Firebird 4. Про него пока пишите сюда.  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 10154
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]     Ответить | Цитировать Сообщить модератору
 Re: Firebird 4. Про него пока пишите сюда.  [new]
IBExpert
Member

Откуда: От верблюда
Сообщений: 2794
Симонов Денис
там проблема с именованными поясами


У меня всяко работает. Ладно, забей пока.
1 мар 19, 16:51    [21822907]     Ответить | Цитировать Сообщить модератору
 Re: Firebird 4. Про него пока пишите сюда.  [new]
IBExpert
Member

Откуда: От верблюда
Сообщений: 2794
Возможно, у тебя по какой-то причине клиент IStatus при декодировании дергает. Но я его сейчас туда не передаю, там nil.
Завтра IStatus допилю и будем поглядеть.
1 мар 19, 17:20    [21822945]     Ответить | Цитировать Сообщить модератору
 Re: Firebird 4. Про него пока пишите сюда.  [new]
IBExpert
Member

Откуда: От верблюда
Сообщений: 2794
Ну, так и есть. Если подсунуть неизвестную зону, то без IStatus он в AV выпадает.
Интересно, а что у тебя ISQL выдает на тех же запросах? По идее, тоже ругаться как-то должен.
1 мар 19, 17:28    [21822956]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
Все форумы / IBExpert Ответить