Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Firebird, InterBase |
![]() ![]() |
Топик располагается на нескольких страницах: ←Ctrl назад 1 2 3 4 [5] 6 7 вперед Ctrl→ все |
Симонов Денис Member Откуда: Рязань Сообщений: 10796 |
Dimitry Sibiryakov, int64 есть везде и давно. Для TIMSTAMP есть isc_decode_date / isc_encode_date ... А вот что делать с DECFLOAT? Вон с одними таймзонами уже геморроя нажили |
3 окт 19, 19:47 [21986230] Ответить | Цитировать Сообщить модератору |
Dimitry Sibiryakov Member Откуда: Сообщений: 52472 |
Лучше бы не было. И да, это справедливо и для того ужаса, что они навыдумывали в интерфейсах.
Слаб духом - биндь как SQL_TEXT. Прочие могут гуглить сторонние библиотеки. Особо суровые - спецификацию двоичной раскладки из вики или первоисточника. Лично я буду тупо использовать "в тёмную", как пачку байт, но это специфика. Posted via ActualForum NNTP Server 1.5 |
||||
3 окт 19, 19:50 [21986233] Ответить | Цитировать Сообщить модератору |
Симонов Денис Member Откуда: Рязань Сообщений: 10796 |
ты не пытался
да какая разница сколько это занимает места? Там и без доки всё понятно. Потому что это практически тот же старый API сгруппированный по хендлам. Ничего сложного там нет
тебе и в старом не зачем |
||||||
3 окт 19, 20:19 [21986250] Ответить | Цитировать Сообщить модератору |
Dimitry Sibiryakov Member Откуда: Сообщений: 52472 |
Не совсем. Это "очень старый API", который никогда не рассчитывался на прямое использование, а служил исключительно как поддержка препроцессора gpre. Потому-то и получилось то, что получилось. Posted via ActualForum NNTP Server 1.5 |
||
3 окт 19, 20:27 [21986255] Ответить | Цитировать Сообщить модератору |
Мимопроходящий Member Откуда: бурятский тундрюк, эсквайр Сообщений: 31976 |
03.10.2019 19:19, Dimitry Sibiryakov пишет: > > Куда приткнуть SQL_INT128 Алекс пока не решил. ну, ежели таки воткнут, то не всё так плохо. а касаемо того, что делать с этим в Delphi, то особых проблем не вижу. Posted via ActualForum NNTP Server 1.5 |
4 окт 19, 11:29 [21986551] Ответить | Цитировать Сообщить модератору |
Симонов Денис Member Откуда: Рязань Сообщений: 10796 |
дык это оно и есть вроде
#define SQL_DEC_FIXED 32758
насколько я понял отдельного INT128 не будет, эта штуковина только для реализации NUMERIC(38, x) |
||
4 окт 19, 11:41 [21986574] Ответить | Цитировать Сообщить модератору |
Симонов Денис Member Откуда: Рязань Сообщений: 10796 |
Симонов Денис, хотя не...
|
||
4 окт 19, 11:49 [21986588] Ответить | Цитировать Сообщить модератору |
Симонов Денис Member Откуда: Рязань Сообщений: 10796 |
Dimitry Sibiryakov, ты какой-то старый вариант цитируешь |
4 окт 19, 11:51 [21986593] Ответить | Цитировать Сообщить модератору |
Мимопроходящий Member Откуда: бурятский тундрюк, эсквайр Сообщений: 31976 |
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] Ответить | Цитировать Сообщить модератору |
Dimitry Sibiryakov Member Откуда: Сообщений: 52472 |
Просто давненько дерево не обновлял. Posted via ActualForum NNTP Server 1.5 |
||
4 окт 19, 12:30 [21986634] Ответить | Цитировать Сообщить модератору |
Симонов Денис Member Откуда: Рязань Сообщений: 10796 |
Мимопроходящий, ну реализацию 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] Ответить | Цитировать Сообщить модератору |
Dimitry Sibiryakov Member Откуда: Сообщений: 52472 |
Ну, в Оракеле своя специфика. Там парсер SQL до сих пор на клиентской стороне. Posted via ActualForum NNTP Server 1.5 |
||
4 окт 19, 12:36 [21986644] Ответить | Цитировать Сообщить модератору |
Мимопроходящий Member Откуда: бурятский тундрюк, эсквайр Сообщений: 31976 |
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] Ответить | Цитировать Сообщить модератору |
Симонов Денис Member Откуда: Рязань Сообщений: 10796 |
Мимопроходящий, ИХМО, исключительно с целью унификации OO API, чтобы он везде ОО сохранялся :) |
4 окт 19, 13:15 [21986691] Ответить | Цитировать Сообщить модератору |
Мимопроходящий Member Откуда: бурятский тундрюк, эсквайр Сообщений: 31976 |
04.10.2019 13:15, Симонов Денис пишет: > ИХМО, исключительно с целью унификации OO API, чтобы он везде ОО > сохранялся :) ![]() Posted via ActualForum NNTP Server 1.5 |
4 окт 19, 13:25 [21986700] Ответить | Цитировать Сообщить модератору |
Dimitry Sibiryakov Member Откуда: Сообщений: 52472 |
Если приложение неспособно работать с decfloat, оно не сможет его в базу положить и нет смысла его из базы доставать. Ибо не ГПСЧ же из байт значение там собирается?.. Posted via ActualForum NNTP Server 1.5 |
4 окт 19, 13:34 [21986709] Ответить | Цитировать Сообщить модератору |
Arioch Member Откуда: Сообщений: 11101 |
опять же, если вспомнить мой пример - тупо перемножение нескольких нумериков, то на самом деле все эти 38 знаков и не нужно, ибо последние знаки будут нули-нули-нули и поэтому будут как во времена 1-го диалекте, через другие типа конкретно в Delphi это делалось через поля типа BCD, у которых были сеттеры/геттеры в int32-тип |
4 окт 19, 17:42 [21986988] Ответить | Цитировать Сообщить модератору |
Мимопроходящий Member Откуда: бурятский тундрюк, эсквайр Сообщений: 31976 |
04.10.2019 17:42, Arioch пишет: > конкретно в Delphi это делалось через поля типа BCD, у которых были > сеттеры/геттеры в int32-тип в новых дельфях к рекорду TBCD понавешивали собственных классовых методов. ибо это стильно, модно, молодежно. Posted via ActualForum NNTP Server 1.5 |
4 окт 19, 17:48 [21987001] Ответить | Цитировать Сообщить модератору |
Симонов Денис Member Откуда: Рязань Сообщений: 10796 |
не факт. Нули у тебя потому что ты в дробной части нули задавал. Оно может редко, но нужно. И кстати запрос на длинные нумерики давно был
есть ещё DEFLOAT(34)
причём тут delphi? Пользовательские агрегатные функции ещё не сделали |
||||||
4 окт 19, 18:22 [21987040] Ответить | Цитировать Сообщить модератору |
Arioch Member Откуда: Сообщений: 11101 |
Delphi к вопросу
|
||
4 окт 19, 18:38 [21987061] Ответить | Цитировать Сообщить модератору |
Симонов Денис Member Откуда: Рязань Сообщений: 10796 |
Arioch, оно в bcd само не преобразуется. Теоретически для int128 это не сложно сделать. Можно и для decfloat если почитать стандарт по бинарному размещению. Но на хрена, когда это уже сделали за вас? Шоб понты поколотить смотрите а я смог без OO API |
4 окт 19, 18:43 [21987064] Ответить | Цитировать Сообщить модератору |
Dimitry Sibiryakov Member Откуда: Сообщений: 52472 |
А теперь вопрос на засыпку: что проще: портировать своё приложение на новое API или портировать мелкий кусок нового API в своё приложение? Posted via ActualForum NNTP Server 1.5 |
||
4 окт 19, 18:48 [21987067] Ответить | Цитировать Сообщить модератору |
Симонов Денис Member Откуда: Рязань Сообщений: 10796 |
Dimitry Sibiryakov, конечно кусок. Но не портировать, а использовать. В IBE так и делают. Там всё что можно на Legacy API, где не получается идём за новым. |
4 окт 19, 18:59 [21987076] Ответить | Цитировать Сообщить модератору |
Arioch Member Откуда: Сообщений: 11101 |
Симонов Денис, Фактический стандарт в 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] Ответить | Цитировать Сообщить модератору |
Dimitry Sibiryakov Member Откуда: Сообщений: 52472 |
На пути "использовать" лежат забавные грабли с загрузкой библиотеки и импортом, но да, наверное есть ещё любители геморроя себе на шею. Posted via ActualForum NNTP Server 1.5 |
||
4 окт 19, 19:26 [21987092] Ответить | Цитировать Сообщить модератору |
Топик располагается на нескольких страницах: ←Ctrl назад 1 2 3 4 [5] 6 7 вперед Ctrl→ все |
Все форумы / Firebird, InterBase | ![]() |