Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Firebird, InterBase Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 2 3 4 [5] 6 7   вперед  Ctrl      все
 Re: Корректное завершение gbak/isql при b/r  [new]
Симонов Денис
Member

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

int64 есть везде и давно.

Для TIMSTAMP есть isc_decode_date / isc_encode_date ...

А вот что делать с DECFLOAT? Вон с одними таймзонами уже геморроя нажили
3 окт 19, 19:47    [21986230]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 48674

Симонов Денис
Для TIMSTAMP есть isc_decode_date / isc_encode_date ...

Лучше бы не было. И да, это справедливо и для того ужаса, что они навыдумывали в интерфейсах.

Симонов Денис
А вот что делать с DECFLOAT?

Слаб духом - биндь как SQL_TEXT. Прочие могут гуглить сторонние библиотеки. Особо суровые
- спецификацию двоичной раскладки из вики или первоисточника. Лично я буду тупо
использовать "в тёмную", как пачку байт, но это специфика.

Posted via ActualForum NNTP Server 1.5

3 окт 19, 19:50    [21986233]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
Симонов Денис
Member

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

да, издали

изобрели велосипед с огромным количеством бойлерплейта, в котором хрен разберёшься где что


ты не пытался


Arioch
новый API.... Перемешаны декларации и роботом писанный код на Delphi. Всё это занимает гораздо больше места. Доки нет, даже на уровне IB6 API Guide. Больше такое нигде не используется, т.е. шаблоны восприятия/понимания наработанные на других продуктах тут не помогают.


да какая разница сколько это занимает места? Там и без доки всё понятно. Потому что это практически тот же старый API сгруппированный по хендлам. Ничего сложного там нет

Arioch
вот зачем во всём этом разбираться, кроме возможно одной цели - UDR


тебе и в старом не зачем
3 окт 19, 20:19    [21986250]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 48674

Симонов Денис
это практически тот же старый API сгруппированный по хендлам.

Не совсем. Это "очень старый API", который никогда не рассчитывался на прямое
использование, а служил исключительно как поддержка препроцессора gpre. Потому-то и
получилось то, что получилось.

Posted via ActualForum NNTP Server 1.5

3 окт 19, 20:27    [21986255]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 30655

03.10.2019 19:19, Dimitry Sibiryakov пишет:
>
> Куда приткнуть SQL_INT128 Алекс пока не решил.

ну, ежели таки воткнут, то не всё так плохо.
а касаемо того, что делать с этим в Delphi, то особых проблем не вижу.

Posted via ActualForum NNTP Server 1.5

4 окт 19, 11:29    [21986551]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 10149
Мимопроходящий
03.10.2019 19:19, Dimitry Sibiryakov пишет:
>
> Куда приткнуть SQL_INT128 Алекс пока не решил.

ну, ежели таки воткнут, то не всё так плохо.
а касаемо того, что делать с этим в Delphi, то особых проблем не вижу.


дык это оно и есть вроде

#define SQL_DEC_FIXED                    32758


насколько я понял отдельного INT128 не будет, эта штуковина только для реализации NUMERIC(38, x)
4 окт 19, 11:41    [21986574]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
Симонов Денис
Member

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

хотя не...

src/include/firebird/impl/sqlda_pub.h
#define SQL_INT128                       32752
#define SQL_TIMESTAMP_TZ                 32754
#define SQL_TIME_TZ                      32756
#define SQL_DEC16                        32760
#define SQL_DEC34                        32762
4 окт 19, 11:49    [21986588]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
Симонов Денис
Member

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

ты какой-то старый вариант цитируешь
4 окт 19, 11:51    [21986593]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 30655

04.10.2019 11:49, Симонов Денис пишет:
>
> хотя не...
> src/include/firebird/impl/sqlda_pub.h
> #define SQL_INT128 32752

ага.
значит есть уже.
ну, тогда компонентописателям OO_API можно игнорировать.
причина для игнора: необходимо поддерживать 2 параллельные ветки кода.
ибо нормальная библиотека работает не только с распоследним клиентом,
но и с унаследованными версиями IB/FB.

зы: хотя, например в Оракеле на это дело откровенно кладут...

Posted via ActualForum NNTP Server 1.5

4 окт 19, 12:17    [21986617]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 48674

Симонов Денис
ты какой-то старый вариант цитируешь

Просто давненько дерево не обновлял.

Posted via ActualForum NNTP Server 1.5

4 окт 19, 12:30    [21986634]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 10149
Мимопроходящий,

ну реализацию int128 на delphi найти можно. С DecFloat намного сложнее. Скорее всего большинство воспользуются хелпером

interface DecFloat34 : Versioned
{
	const uint BCD_SIZE = 34;
	const uint STRING_SIZE = 43;	// includes terminating \0
	void toBcd(const FB_DEC34* from, int* sign, uchar* bcd, int* exp);
	void toString(Status status, const FB_DEC34* from, uint bufferLength, string buffer);
	void fromBcd(int sign, const uchar* bcd, int exp, FB_DEC34* to);
	void fromString(Status status, const string from, FB_DEC34* to);
}


впрочем для того чтобы пользоваться хелперами, не обязательно целиком переходить на OO_API

достаточно

master := fb_get_master_interface;
util := master.getUtilInterface;
st := master.getStatus;
dec34 := util.getDecFloat34(st);
4 окт 19, 12:33    [21986641]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 48674

Мимопроходящий
например в Оракеле на это дело откровенно кладут...

Ну, в Оракеле своя специфика. Там парсер SQL до сих пор на клиентской стороне.

Posted via ActualForum NNTP Server 1.5

4 окт 19, 12:36    [21986644]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 30655

04.10.2019 12:33, Симонов Денис пишет:
> master := fb_get_master_interface;
> util := master.getUtilInterface;
> st := master.getStatus;
> dec34 := util.getDecFloat34(st);

вот объясни замшелому ретрограду на пальцах,
ЗАЧЕМ для тупого процедурного преобразования нужны интерфейсы?!
я не про то, что оно уже так сделано.
а про насцущную необходимость.

Posted via ActualForum NNTP Server 1.5

4 окт 19, 13:08    [21986678]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 10149
Мимопроходящий,

ИХМО, исключительно с целью унификации OO API, чтобы он везде ОО сохранялся :)
4 окт 19, 13:15    [21986691]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 30655

04.10.2019 13:15, Симонов Денис пишет:
> ИХМО, исключительно с целью унификации OO API, чтобы он везде ОО
> сохранялся :)

Картинка с другого сайта.

Posted via ActualForum NNTP Server 1.5

4 окт 19, 13:25    [21986700]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 48674

Если приложение неспособно работать с decfloat, оно не сможет его в базу положить и нет
смысла его из базы доставать. Ибо не ГПСЧ же из байт значение там собирается?..

Posted via ActualForum NNTP Server 1.5

4 окт 19, 13:34    [21986709]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
Arioch
Member

Откуда:
Сообщений: 11063
опять же, если вспомнить мой пример - тупо перемножение нескольких нумериков, то на самом деле все эти 38 знаков и не нужно, ибо последние знаки будут нули-нули-нули

и поэтому будут как во времена 1-го диалекте, через другие типа

конкретно в Delphi это делалось через поля типа BCD, у которых были сеттеры/геттеры в int32-тип
4 окт 19, 17:42    [21986988]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 30655

04.10.2019 17:42, Arioch пишет:
> конкретно в Delphi это делалось через поля типа BCD, у которых были
> сеттеры/геттеры в int32-тип

в новых дельфях к рекорду TBCD понавешивали собственных классовых методов.
ибо это стильно, модно, молодежно.

Posted via ActualForum NNTP Server 1.5

4 окт 19, 17:48    [21987001]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 10149
Arioch
опять же, если вспомнить мой пример - тупо перемножение нескольких нумериков, то на самом деле все эти 38 знаков и не нужно, ибо последние знаки будут нули-нули-нули


не факт. Нули у тебя потому что ты в дробной части нули задавал. Оно может редко, но нужно. И кстати запрос на длинные нумерики давно был

Arioch
и поэтому будут как во времена 1-го диалекте, через другие типа


есть ещё DEFLOAT(34)

Arioch
конкретно в Delphi это делалось через поля типа BCD, у которых были сеттеры/геттеры в int32-тип


причём тут delphi? Пользовательские агрегатные функции ещё не сделали
4 окт 19, 18:22    [21987040]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
Arioch
Member

Откуда:
Сообщений: 11063
Delphi к вопросу
Симонов Денис
ага, а портировать классы на Delphi для работы с INT128, DECFLOAT или TIMESTAMP WITH TIMEZONE ты сам будешь?
Т.е. запихнуть то их туда на стороне fbclient можно, а вот что потом с этим указателем на данные делать
4 окт 19, 18:38    [21987061]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
Симонов Денис
Member

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

оно в bcd само не преобразуется. Теоретически для int128 это не сложно сделать. Можно и для decfloat если почитать стандарт по бинарному размещению. Но на хрена, когда это уже сделали за вас? Шоб понты поколотить смотрите а я смог без OO API
4 окт 19, 18:43    [21987064]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 48674

Симонов Денис
Но на хрена, когда это уже сделали за вас?

А теперь вопрос на засыпку: что проще: портировать своё приложение на новое API или
портировать мелкий кусок нового API в своё приложение?

Posted via ActualForum NNTP Server 1.5

4 окт 19, 18:48    [21987067]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
Симонов Денис
Member

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

конечно кусок. Но не портировать, а использовать.

В IBE так и делают. Там всё что можно на Legacy API, где не получается идём за новым.
4 окт 19, 18:59    [21987076]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
Arioch
Member

Откуда:
Сообщений: 11063
Симонов Денис,

Фактический стандарт в Delphi - это TDataset и всё, что вокруг него наросло, от FAQ до визуальщины. Даже ADO - и тот обернули в TDataSet, хотя COM-объекты можно напрямую использовать в языке.

В принципе любую часть "обычной" библиотеки любого языка можно выкинуть и взять другое или написать своё.
Но на практике для этого должны быть причины. Т.е. - это только в узких нишах каких-нибудь.

Далее, в рамках TDataSet уже был прецедент работы с длинными числами ДО появления типа int64 в Delphi. Делалось это через BCD. Сейчас в Delphi есть int64, но нет int128. Ситуация похожа. И вероятно, что можно взять старое решение и адаптировать для этой новой проблемы. Поэтому и BCD.

Можно придумывать что-то новое, нехоженное и неезженное, возможно оно даже в итоге окажется лучше.

> Шоб понты поколотить смотрите а я смог без OO API

Тут всё ровно наоборот. Понты - это выпендриться и сделать не как у всех.

Смотрите, я смог без VCL/FMX, а сразу на Win32 GDI API (вариант - на KOL без MCK) - это выпендрёж.
Смотрите, я смог напистаь на VCL и не писал на KOL - не выпендрёж.

Смотрите, я смог без TDataSet и вообще без обёрток, сразу на низкоуровневом API - это выпендрёж.
Смотрите, я написал на FireDAC/DBX/IBO и не лез в FB-OO-API - не выпендрёж
4 окт 19, 19:11    [21987085]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 48674

Симонов Денис
конечно кусок. Но не портировать, а использовать.

На пути "использовать" лежат забавные грабли с загрузкой библиотеки и импортом, но да,
наверное есть ещё любители геморроя себе на шею.

Posted via ActualForum NNTP Server 1.5

4 окт 19, 19:26    [21987092]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 2 3 4 [5] 6 7   вперед  Ctrl      все
Все форумы / Firebird, InterBase Ответить