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

Откуда: Казань
Сообщений: 6466
Преамбула: я тут задался целью написать для себя кроссплатформенный велосипед с использованием всех утилит FB "в одном стакане", чтобы не мыкаться с командной строкой. В прикладе используется компонент TProcess (лазарусовская обвязка вокруг ShellExecute/System), который создается в доп.потоке, вызывает gbak/isql и т.д., ждет окончания их работы и благопристойно умирает вместе с потоком.

В ситуации, когда нужно срочно прервать b/r, мне необходимо сначала корректно завершить работу gbak/isql. Если просто уничтожить поток вместе с выполняющимся b/r, то утилиты, очевидно, лочат какое-то время выводимые файлы, потому что при повторной попытке запустить процесс я в течение 30-60 сек не могу удалить "неудачный" бекап и получаю отлуп:

gbak: ERROR:cannot open backup file d:\temp\test.fbk
gbak:Exiting before completion due to errors


Я читал про мониторинг, но DELETE FROM MON$ATTACHMENTS WHERE MON$ATTACHMENT_ID <> CURRENT_CONNECTION меня не устраивает, потому что бекап может делаться на работающей с юзерами базе. Можно, конечно, вычислить "виновника" по MON$REMOTE_PROCESS, но в этом случае грохнутся соседние экземпляры моего приложения, которые в этом время будут делать что-то еще. В идеале получить бы MON$ATTACHMENT_ID текущего коннекта, но как это сделать при использовании gbak?

Есть какие-нибудь соображения?
=================
Док.

Win7 Ultim x64/Deb 10 (MATE; gtk3) amd64:
FB 3.0.4.33054, Lazarus 2.1(r.61884); FPC 3.3.1 (r.43016), IBX by -Rik-
28 сен 19, 15:54    [21981678]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
Симонов Денис
Member

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

для gbak можно было сразу воспользоваться ServiceAPI и получить полный контроль за всем происходящим.
28 сен 19, 16:15    [21981680]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
Док
Member

Откуда: Казань
Сообщений: 6466
Симонов Денис
можно было сразу воспользоваться ServiceAPI

можно подробнее для гуманитария, что ты имел ввиду? :)
28 сен 19, 16:39    [21981690]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
hvlad
Member

Откуда:
Сообщений: 10666
Док,

MON$REMOTE_PID
28 сен 19, 16:42    [21981691]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 10154
Док
можно подробнее для гуманитария, что ты имел ввиду? :)


в IBX лазаря нет IBBackupService?
28 сен 19, 16:48    [21981694]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
Док
Member

Откуда: Казань
Сообщений: 6466
Симонов Денис
в IBX лазаря нет IBBackupService?

в данном случае я не использую его

hvlad
MON$REMOTE_PID

а как извлечь его из текущего соединения gbak? Есть какие-нибудь ключи? Или придется изучать низкоуровневой доступ к БД? :)
28 сен 19, 17:04    [21981695]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
hvlad
Member

Откуда:
Сообщений: 10666
Док,
когда ты запускал дочерний процесс, ты мог получить его PID.

Кстати
Док
Можно, конечно, вычислить "виновника" по MON$REMOTE_PROCESS, но в этом случае грохнутся соседние экземпляры моего приложения, которые в этом время будут делать что-то еще
твои приложения называются gbak.exe ? :)

PS PID - это process ID (на всякий)
28 сен 19, 17:09    [21981697]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
Док
Member

Откуда: Казань
Сообщений: 6466
hvlad
когда ты запускал дочерний процесс, ты мог получить его PID.

ага, вот ты о чем! Я наивно полагал, что PID надо получать из таблиц мониторинга :)

Щас спрошу на лазаревском форуме, можно ли получить PID из TProcess.
28 сен 19, 17:27    [21981701]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
Док
Member

Откуда: Казань
Сообщений: 6466
hvlad
твои приложения называются gbak.exe ? :)

:)
нет, конечно, но я сделал вывод по аналогии, глядя в таблицы MON$ATTACHMENTS двух запущенных экземпляров IBE
28 сен 19, 17:28    [21981703]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
Dimitry Sibiryakov
Member

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

Симонов Денис
воспользоваться ServiceAPI и получить полный контроль за всем происходящим.

Авотфиг. Там не то что "полного", там минимального контроля и то нет.

Posted via ActualForum NNTP Server 1.5

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

Откуда:
Сообщений: 1418
Док
Симонов Денис
в IBX лазаря нет IBBackupService?

в данном случае я не использую его

А почему ты его не используешь? Потому, что ты хочешь получать бэкап-файл на локальной (не серверной) машине, или еще почему-то?
28 сен 19, 17:29    [21981705]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
Док
Member

Откуда: Казань
Сообщений: 6466
ёёёёё
А почему ты его не используешь? Потому, что ты хочешь получать бэкап-файл на локальной (не серверной) машине, или еще почему-то?

В том числе.

Я уже писал раньше, что на текущий момент, пилящиеся под Лазарь IBX от mwasoftware, либо не удовлетворяют потребностям последних версий FB (например, legacy-компоненты, оставшиеся в составе этой библы от первоисточника, не имеют пропертей обработки ключей -fix_fss_d/fix_fss_m), либо еще сырые и дают ошибки коннекта, если сервер(а) (например, в винде) установлен(ы) и запущен(ы) не стандартным инсталлятором, а из архивов и вручную.

Плюсуй сюда упертость автора, что продукт лучше развивать в соответствии с хотелками (в разумных пределах, конечно) пользователей, а не автора. Плюс независимость от нестандартных компонент доступа. В итоге получишь мои резоны :)
28 сен 19, 17:51    [21981711]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
hvlad
Member

Откуда:
Сообщений: 10666
Док
я сделал вывод по аналогии, глядя в таблицы MON$ATTACHMENTS двух запущенных экземпляров
IBE
IBE не запускает gbak. Он использует Service API
28 сен 19, 17:59    [21981712]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
Док
Member

Откуда: Казань
Сообщений: 6466
hvlad,

Влад, спасибо за наводку. Пошел пилить дальше

К сообщению приложен файл. Размер - 32Kb
28 сен 19, 18:32    [21981722]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
Tonal
Member

Откуда: Новосибирск
Сообщений: 180
Док,

А вот в linux расширения .exe не будет. :)
У TProcess есть свойство ProcessID, в котором этот самый pid и должен отдаватся.
Кроме того, gbak, должен корректно отрабатывать прерывание по Ctrl+C - сигнал завершения.
Т. е. ты ему по pid-у можешь послать сигнал завершения и он всё корректно закроет.
Возможно TProcess так и делает по Terminate(), но можно и явно ручками послать через FpKill()
28 сен 19, 18:47    [21981729]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
kdv
Member

Откуда: iBase.ru
Сообщений: 28336
Док,

госпидя. скопипастил из fibplus, и сделал свой клон, если автор ибх под лазарь такой дебил, что даже ключи почти десятилетней давности не может добавить в servapi.
28 сен 19, 23:06    [21981822]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
Dimitry Sibiryakov
Member

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

kdv
автор ибх под лазарь такой дебил

И эти люди ещё удивляются почему я использую API напрямую...

Posted via ActualForum NNTP Server 1.5

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

Откуда: Казань
Сообщений: 6466
kdv
если автор ибх под лазарь такой дебил, что даже ключи почти десятилетней давности не может добавить в servapi.

я не был столь категоричен :) он там много чего полезного (я надеюсь, все не щупал) наворотил
+
Картинка с другого сайта.

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

Свой клон делать - это надо программистом работать, вот выйду на пенсию :)

Tonal
Возможно TProcess так и делает по Terminate(), но можно и явно ручками послать через FpKill()

На стороне клиента TProcess.Terminate(), действительно, убивает gbak (кстати, на виндах метод вызывает TerminateProcess, а на линуксе FpKill). На винде огрызок файла бекапа все равно остается залоченным 30-60 сек, в линуксе можно сразу запускать и прерывать процесс бекапа бесконечно много раз.
+
Картинка с другого сайта.

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


Поэкспериментирую с удалением по MON$REMOTE_PID, потом отпишусь
29 сен 19, 00:52    [21981845]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
Док
Member

Откуда: Казань
Сообщений: 6466
Dimitry Sibiryakov
И эти люди ещё удивляются почему я использую API напрямую...

я не удивляюсь, я тебе завидую :)
29 сен 19, 00:53    [21981846]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
Tonal
Member

Откуда: Новосибирск
Сообщений: 180
Док,

Здесь описано как правильно посылать Ctrl+C в винде.
29 сен 19, 13:24    [21981969]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
kdv
Member

Откуда: iBase.ru
Сообщений: 28336
Док
Но вот это вкупе с необходимостью чего-то доказывать, напрочь отбивает охоту ими пользоваться

только что проверил. Поменял порт у фб на 3217. Запустил ФБ.
В Лазарусе коннект из IBXServicesConnection1 к
localhost/3217:service_mgr

отлично коннектится.

Когда меняю на localhost/3218:service_mgr

[Window Title]
Ошибка

[Content]
Unable to complete network request to host "localhost".
Failed to establish a connection

[ОК]

так что всё там работает. Ты просто или ФБ не запустил, или в конфиге ФБ не тот порт указал, или не рестартанул ФБ после изменения порта.
29 сен 19, 23:20    [21982215]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
Док
Member

Откуда: Казань
Сообщений: 6466
kdv
Док
Но вот это вкупе с необходимостью чего-то доказывать, напрочь отбивает охоту ими пользоваться

так что всё там работает. Ты просто или ФБ не запустил, или в конфиге ФБ не тот порт указал, или не рестартанул ФБ после изменения порта.

Вряд ли, у меня, как минимум, две версии сервера всегда крутятся. IBE доволен :). Вечерком проверю, конечно.

А у тебя сервак запущен как приложение или как сервис?
30 сен 19, 08:03    [21982308]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
kdv
Member

Откуда: iBase.ru
Сообщений: 28336
Док
А у тебя сервак запущен как приложение или как сервис?

как приложение, но в случае tcp это не имеет никакого значения.
30 сен 19, 11:17    [21982464]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
Док
Member

Откуда: Казань
Сообщений: 6466
kdv,

скорее всего, у тебя че-та в реестре или в переменных среды есть, чего нет у меня.
+
Attempting to connect to:
localhost/3217:D:\Archive\Databases\general_base\FB_2_1\GENERAL_BASE_4X_2016_03_30.FDB... Connected successfully.
Server version: WI-V6.3.7.18553 Firebird 2.1
 
Disconnecting from database... Passed!
 
Attempting to connect to services manager:
localhost/3217:service_mgr... Connected successfully.
+ cmd
C:\Users\leyba>cd /d D:\Portable_program\Firebird_server\Firebird_2_1_7\bin\

D:\Portable_program\Firebird_server\Firebird_2_1_7\bin>isql
Use CONNECT or CREATE DATABASE to specify a database
SQL> connect 'localhost/3217:D:\Archive\Databases\general_base\FB_2_1\GENERAL_BASE_4X_2016_03_30.FDB' user sysdba password 'cooladmin';
Database:  'localhost/3217:D:\Archive\Databases\general_base\FB_2_1\GENERAL_BASE_4X_2016_03_30.FDB', User: sysdba
SQL> show version;
ISQL Version: WI-V2.1.7.18553 Firebird 2.1
Server version:
Firebird/x86/Windows NT (access method), version "WI-V2.1.7.18553 Firebird 2.1"
Firebird/x86/Windows NT (remote server), version "WI-V2.1.7.18553 Firebird 2.1/tcp (leyba-pc)/P11"
Firebird/x86/Windows NT (remote interface), version "WI-V2.1.7.18553 Firebird 2.1/tcp (leyba-pc)/P11"
on disk structure version 11.1

да и х@р с ним :)
Будет время, отпишу ему
30 сен 19, 15:15    [21982817]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
Мимопроходящий
Member

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

ГРАЖДАНЕ!

вот нахрена вы оборачиваете значимую часть сообщения в СПОЙЛЕР?!!
просто потому что "красиво"?

ИЗАБЭЛЛА, йопть!

зы: по nntp не читаемо.

Posted via ActualForum NNTP Server 1.5

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

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

Мимопроходящий
по nntp не читаемо.

Ругайся Джуджу в ОНС, что он генерит HTML громоптицей не поддерживаемый.

Posted via ActualForum NNTP Server 1.5

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

Откуда:
Сообщений: 10666
Док,

выходит - у тебя нет слушателя на 127.0.0.1, но есть на localhost.
Или он был не запущен.

Покажи
ping localhost
ping 127.0.0.1
30 сен 19, 15:30    [21982846]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
Док
Member

Откуда: Казань
Сообщений: 6466
Мимопроходящий
ГРАЖДАНЕ!

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

IBE:
Attempting to connect to:
localhost/3217:D:\Archive\Databases\general_base\FB_2_1\GENERAL_BASE_4X_2016_03_30.FDB... Connected successfully.
Server version: WI-V6.3.7.18553 Firebird 2.1
 
Disconnecting from database... Passed!
 
Attempting to connect to services manager:
localhost/3217:service_mgr... Connected successfully.


cmd:
C:\Users\leyba>cd /d D:\Portable_program\Firebird_server\Firebird_2_1_7\bin\

D:\Portable_program\Firebird_server\Firebird_2_1_7\bin>isql
Use CONNECT or CREATE DATABASE to specify a database
SQL> connect 'localhost/3217:D:\Archive\Databases\general_base\FB_2_1\GENERAL_BASE_4X_2016_03_30.FDB' user sysdba password 'cooladmin';
Database:  'localhost/3217:D:\Archive\Databases\general_base\FB_2_1\GENERAL_BASE_4X_2016_03_30.FDB', User: sysdba
SQL> show version;
ISQL Version: WI-V2.1.7.18553 Firebird 2.1
Server version:
Firebird/x86/Windows NT (access method), version "WI-V2.1.7.18553 Firebird 2.1"
Firebird/x86/Windows NT (remote server), version "WI-V2.1.7.18553 Firebird 2.1/tcp (leyba-pc)/P11"
Firebird/x86/Windows NT (remote interface), version "WI-V2.1.7.18553 Firebird 2.1/tcp (leyba-pc)/P11"
on disk structure version 11.1


ps. звиняй, все время забываю, что ты nntp читаешь ;)
30 сен 19, 15:32    [21982850]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
Док
Member

Откуда: Казань
Сообщений: 6466
hvlad
выходит - у тебя нет слушателя на 127.0.0.1, но есть на localhost.
Или он был не запущен.

Покажи

C:\Users\leyba>ping localhost

Обмен пакетами с leyba-pc [127.0.0.1] с 32 байтами данных:
Ответ от 127.0.0.1: число байт=32 время<1мс TTL=128
Ответ от 127.0.0.1: число байт=32 время<1мс TTL=128
Ответ от 127.0.0.1: число байт=32 время<1мс TTL=128
Ответ от 127.0.0.1: число байт=32 время<1мс TTL=128

Статистика Ping для 127.0.0.1:
    Пакетов: отправлено = 4, получено = 4, потеряно = 0
    (0% потерь)
Приблизительное время приема-передачи в мс:
    Минимальное = 0мсек, Максимальное = 0 мсек, Среднее = 0 мсек

C:\Users\leyba>ping 127.0.0.1

Обмен пакетами с 127.0.0.1 по с 32 байтами данных:
Ответ от 127.0.0.1: число байт=32 время<1мс TTL=128
Ответ от 127.0.0.1: число байт=32 время<1мс TTL=128
Ответ от 127.0.0.1: число байт=32 время<1мс TTL=128
Ответ от 127.0.0.1: число байт=32 время<1мс TTL=128

Статистика Ping для 127.0.0.1:
    Пакетов: отправлено = 4, получено = 4, потеряно = 0
    (0% потерь)
Приблизительное время приема-передачи в мс:
    Минимальное = 0мсек, Максимальное = 0 мсек, Среднее = 0 мсек
30 сен 19, 15:33    [21982853]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
Мимопроходящий
Member

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

30.09.2019 15:25, Dimitry Sibiryakov пишет:
> Ругайся Джуджу в ОНС

жужель не писал nntp.
как и большую часть сего "портала".
ибо не копенгахен.
кроме того, его уже больше года с собаками ищут.

Posted via ActualForum NNTP Server 1.5

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

Откуда: Казань
Сообщений: 6466
hvlad
выходит - у тебя нет слушателя на 127.0.0.1, но есть на localhost.

не похоже: IBE
Attempting to connect to:
127.0.0.1/3217:D:\Archive\Databases\general_base\FB_2_1\GENERAL_BASE_4X_2016_03_30.FDB... Connected successfully.
Server version: WI-V6.3.7.18553 Firebird 2.1
 
Disconnecting from database... Passed!
 
Attempting to connect to services manager:
127.0.0.1/3217:service_mgr... Connected successfully.
30 сен 19, 15:52    [21982888]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
hvlad
Member

Откуда:
Сообщений: 10666
Значит и "вот это" 21981845 тоже должно работать
30 сен 19, 15:53    [21982889]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
Док
Member

Откуда: Казань
Сообщений: 6466
hvlad
Значит и "вот это" 21981845 тоже должно работать

вечерком попробую переставить компоненты из последнего транка. Побежал на работу :)
30 сен 19, 16:07    [21982915]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
kdv
Member

Откуда: iBase.ru
Сообщений: 28336
Док,

я буквально вчера лазаря и ибх ставил, потыкать, так что у меня полный свежак.
30 сен 19, 17:01    [21982996]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
Gallemar
Member

Откуда: г.Иркутск
Сообщений: 5190
Док
hvlad
Значит и "вот это" 21981845 тоже должно работать

вечерком попробую переставить компоненты из последнего транка. Побежал на работу :)

Эд, а ты IBX какой юзаешь? От Rik или родной? Может он тебе поможет?
30 сен 19, 17:20    [21983019]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
Док
Member

Откуда: Казань
Сообщений: 6466
Gallemar
От Rik или родной?

Речь шла про форк от mwasoftware (которые в репах OPM лежит). От Юрия Копнина (aka Rik) они уже устарели, но надежны. Надо будет поковыряться в исподниках, может и вправду, добавить самому пару свойств.

зы. вообще, это хорошая школа писать такие велосипеды: воленс-ноленс перелопатишь кучу доки. Времени только уходит немеряно. Вот кабы мне этим лет 25 назад заняться...
30 сен 19, 17:49    [21983047]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
Мимопроходящий
Member

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

30.09.2019 17:49, Док пишет:
> Вот кабы мне этим лет 25 назад заняться...

щас бы плевался...

Posted via ActualForum NNTP Server 1.5

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

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

у mwasoftware есть API интерфейс который унифицирует ОО-API тройки и API-2.5 больше ничего интересного я там не нашёл.
Может их унификация и не идеальна, зато много чего можно подсмотреть.
30 сен 19, 18:11    [21983076]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
ёёёёё
Member

Откуда:
Сообщений: 1418
Мимопроходящий
30.09.2019 17:49, Док пишет:
> Вот кабы мне этим лет 25 назад заняться...

щас бы плевался...

''Лучшее время для посадки деревьев - 20 лет назад" - (с).
Второе лучшее время - сейчас.
30 сен 19, 18:22    [21983091]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
Док
Member

Откуда: Казань
Сообщений: 6466
kdv
я буквально вчера лазаря и ибх ставил, потыкать, так что у меня полный свежак.

вот только что поставил сегодняшний транк r61954 и самый последний транк IBX r288. Все то же самое.

Может, в настройках чего не так? Во всех серверах я меняю в firebird.conf только три параметра:
IpcName=firebird_<n+номер версии>
RemoteServiceName = gds_db_<n+номер версии>
RemoteServicePort = <n+номер версии>

Ставлю в HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run\
"<server_n_root_path>\bin\fbserver.exe" -a -p <n+номер версии>

Со старыми компонентами не конфликует. ЧЯДНТ?

Симонов Денис
у mwasoftware есть API интерфейс который унифицирует ОО-API тройки и API-2.5 больше ничего интересного я там не нашёл.

по-хорошему, надо бы разобраться и начать писать на голом апи, как DS. Но у меня образованиев не хватает :)
1 окт 19, 00:20    [21983371]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
Dimitry Sibiryakov
Member

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

Док
-p <n+номер версии>

А вот это лишнее.

Posted via ActualForum NNTP Server 1.5

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

Откуда: Казань
Сообщений: 6466
Dimitry Sibiryakov
А вот это лишнее.

в смысле, лишнее? т.е. номер порта задавать не обязательно? Например, у меня два сервака крутятся одновременно
fb 2.1.7 "D:\Portable_program\Firebird_server\Firebird_2_1_7\bin\fbserver.exe" -a -p 3217
fb 3.0.4 "D:\Portable_program\Firebird_server\Firebird_3_0_4\firebird.exe" -a -p 3304

достаточно <exe-path> -a -p ?
1 окт 19, 00:51    [21983385]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
Док
Member

Откуда: Казань
Сообщений: 6466
Док
достаточно <exe-path> -a -p ?

достаточно <exe-path> -a ?
1 окт 19, 00:56    [21983388]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
hvlad
Member

Откуда:
Сообщений: 10666
Док
RemoteServiceName = gds_db_<n+номер версии>
И этого не надо. В системе нет такого сервиса
1 окт 19, 01:00    [21983389]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
ёёёёё
Member

Откуда:
Сообщений: 1418
hvlad
Док
RemoteServiceName = gds_db_<n+номер версии>
И этого не надо. В системе нет такого сервиса

Я тоже в имя сервиса FB включаю версию и # порта.
1 окт 19, 01:12    [21983393]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
Док
Member

Откуда: Казань
Сообщений: 6466
hvlad,

так как правильно? Шоб навсегда и железобетонно?

Я пробовал читать тут, но мой моск вышел из строя, по меньшей мере, до утра :(
1 окт 19, 01:14    [21983395]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
Basil A. Sidorov
Member

Откуда:
Сообщений: 9525
Док
Я пробовал читать тут, но мой моск вышел из строя, по меньшей мере, до утра :(
Вроде, всё разумно и понятно.
С практической точки зрения:
1. -p в строке запуска - последнее слово;
2. Не выделываемся с RemoteServiceName и меняем RemoteServicePort по мере надобности.

P.S.
Лично я использую "говорящую схему" - 10000 + 10*Версия + Экземпляр: 13040, 12590, 12170, 11560.
1 окт 19, 04:04    [21983406]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
Док
Member

Откуда: Казань
Сообщений: 6466
Basil A. Sidorov,

иными словами, если резюмировать выше сказанное, корректные варианты конфигов (по сравнению с дефолтным) и подключений:

IpcName = <уникальное имя инстанса> - задается в любом случае

#RemoteServiceName = bla-bla-bla
RemoteServicePort = <уникальный номер порта>
...
строка запуска <server_executable_path_name> -a
...
строка коннекта:localhost/<уникальный номер порта>:E:\database\fb21\GENERAL_BASE_1903_25.FDB
...

или

#RemoteServiceName = bla-bla-bla
#RemoteServicePort = bla-bla-bla
...
строка запуска <server_executable_path_name> -a -p <уникальный номер порта>
...
строка коннекта:localhost/<уникальный номер порта>:E:\database\fb21\GENERAL_BASE_1903_25.FDB
...


ps. вот c RemoteServiceName не разобрался
...
RemoteServiceName = gds_db_217
#RemoteServicePort = bla-bla-bla
...
строка запуска <server_executable_path_name> -a -p gds_db_217
...
строка коннекта:localhost/gds_db_217:E:\database\fb21\GENERAL_BASE_1903_25.FDB


в Х-перте получаю
Attempting to connect to:
localhost/gds_db_217:E:\database\fb21\GENERAL_BASE_1903_25.FDB...
Connection failed!
------------------------------------
Unsuccessful execution caused by a system error that precludes
successful execution of subsequent statements.
Unable to complete network request to host "localhost".
Failed to locate host machine.
Undefined service gds_db_217/tcp.
 
Attempting to connect to services manager:
localhost/gds_db_217:service_mgr... Failed!
------------------------------------

Unsuccessful execution caused by a system error that precludes
successful execution of subsequent statements.
Unable to complete network request to host "localhost".
Failed to locate host machine.
Undefined service gds_db_217/tcp.


Содержимое c:\WINDOWS\system32\drivers\etc\hosts (Win XP x32)
127.0.0.1       localhost
192.168.89.113   leybaserver
1 окт 19, 09:56    [21983471]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
Basil A. Sidorov
Member

Откуда:
Сообщений: 9525
Док
ps. вот c RemoteServiceName не разобрался
Это имя, завязанное на /etc/services (%SystemRoot%\System32\drivers\etc\services).
С RemoteServiceName просто нет смысла возиться - ничего "сакрального", окромя "поименованного номера порта" в нём нет.

P.S.
IpcName существенно только для xnet и, соответственно, только для винды.
1 окт 19, 10:05    [21983477]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
Док
Member

Откуда: Казань
Сообщений: 6466
Basil A. Sidorov
IpcName существенно только для xnet и, соответственно, только для винды

т.е. под другие протоколы нет смысла его изменять?


Basil A. Sidorov
С RemoteServiceName просто нет смысла возиться

интересно, с линуксами достаточно будет поиграться с портами и строкой запуска или вдобавок нужно будет в /etc/services прописывать RemoteServiceName?

зы. я уж извиняюсь за назойливость, привык все выяснять до конца. Хочется иметь на никсах (линь, OSX) тоже несколько серверов для икспериментов :)
1 окт 19, 10:15    [21983492]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
Док
Member

Откуда: Казань
Сообщений: 6466
c:\WINDOWS\system32\drivers\etc\services
...
gds_db_217	3217/tcp	firebird_gds_db_217	#firebird 2.1.7 server
...

...
RemoteServiceName = gds_db_217
#RemoteServicePort = bla-bla-bla
...
строка запуска <server_executable_path_name> -a -p gds_db_217
...
строка коннекта: localhost/gds_db_217:E:\database\fb21\GENERAL_BASE_1903_25.FDB
...

а ведь взлетело Картинка с другого сайта.
Attempting to connect to:
localhost/gds_db_217:E:\database\fb21\GENERAL_BASE_1903_25.FDB... Connected successfully.
Server version: WI-V6.3.7.18553 Firebird 2.1
 
Disconnecting from database... Passed!
 
Attempting to connect to services manager:
localhost/gds_db_217:service_mgr... Connected successfully.
1 окт 19, 10:26    [21983510]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
Симонов Денис
Member

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

что удивило то? Это документированное поведение.
Даже в комментах написано, что нужно изменять только один из этих параметров, но не два сразу.
1 окт 19, 10:31    [21983520]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
Док
Member

Откуда: Казань
Сообщений: 6466
Симонов Денис
Это документированное поведение.

кто ж доки сразу читает? Только в крайнем случае...

зы. спасибо всем за участие и советы. Пошел есть моск автору IBX (чую, придется его компонентами скоро начать пользоваться). Теперь хоть смогу корректно исходные условия запуска сервера с возникающими ошибками коннекта ему описывать.

А по поводу сабжа: только собрался создавать тему на форуме FPC, словно по заказу еще один перец с подобными проблемами нарисовался :)

Кстати, если вручную в cmd-окне прервать gbak по <Ctrl>+<C>, то по моим наблюдениям все равно *.bak-файл в винде какое-то время залочен (правда, порядка 5-10 сек при "ручном прерывании" супротив 40-60 сек при "программном").
1 окт 19, 10:56    [21983559]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
kdv
Member

Откуда: iBase.ru
Сообщений: 28336
Док,

а зачем морочить голову с services и service name?
Клиент ФБ давно может игнорировать services, даже клиент ИБ это теперь умеет.
1 окт 19, 12:19    [21983708]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
Dimitry Sibiryakov
Member

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

Док
достаточно <exe-path> -a ?

Да. При условии, что задействуется правильный конфиг из каталога запуска. -p штука
довольно мутная, воздействует сразу на два протокола и я бы её избегал.

Posted via ActualForum NNTP Server 1.5

1 окт 19, 12:31    [21983721]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
Basil A. Sidorov
Member

Откуда:
Сообщений: 9525
Док
интересно, с линуксами достаточно будет поиграться с портами и строкой запуска или вдобавок нужно будет в /etc/services прописывать RemoteServiceName?
Нигде не надо играться со строкой запуска.
Прописали RemoteServicePort, (опционно) IpcName и стартанули (перестартовали) сервис (приложение).
1 окт 19, 13:31    [21983814]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
Док
Member

Откуда: Казань
Сообщений: 6466
kdv
а зачем морочить голову с services и service name?

я уже не морочу, решил для себя в будущем не трогать дефолтные настройки конфигов и просто запускать сервера с параметрами -a -p <уникальный порт>

зы. кстати, я понял, что не так с теми британскими IBX'ами: автор че-та намудрил в компонентах с designtime-свойствами, потому и ошибки сыплет, и черт-те какие настройки в дизайнере кажет (можешь сам транк в svn попробовать). Если задать настройки в рантайме, все тип-топ (проверил навскидку в IBDatabase и IBXServicesConnection)


Dimitry Sibiryakov
-p штука
довольно мутная, воздействует сразу на два протокола и я бы её избегал.

которые из них и чем грозит?

зы. Дим, если не трудно, плз, стукнись мне в яшшик dddoc лай-лай яндек сру. Есть вопросы приватного характера.

Basil A. Sidorov
Прописали RemoteServicePort, (опционно) IpcName и стартанули (перестартовали) сервис (приложение).

у меня машина домашняя, линь/хакинтош в виртуалке, поэтому не страшно. Мне некоторый опыт нужен, чтобы выяснить детали кухни птицы. Вдруг фрилансить придется (а судя по динамике принимаемых больных скоро мы вспомним начало сакральных 90-х), а я не готов :)
1 окт 19, 23:19    [21984411]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
kdv
Member

Откуда: iBase.ru
Сообщений: 28336
Док
и черт-те какие настройки в дизайнере кажет

я скачивал последний релиз ibx4lazarus2.3-3 2.3.3
мне эти транки до лампочки.
1 окт 19, 23:25    [21984415]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
Dimitry Sibiryakov
Member

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

Док
Есть вопросы приватного характера.

Не, к приватным танцам я не готов. Но ты можешь отловить меня где-нибудь за пивком в
Берлине через пару недель.

Posted via ActualForum NNTP Server 1.5

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

Откуда: Казань
Сообщений: 6466
kdv
мне эти транки до лампочки.

так это и есть транк, выложенный в паблик :) Таки ты в DT свойства задавал или в RT?

Dimitry Sibiryakov
Не, к приватным танцам я не готов. Но ты можешь отловить меня где-нибудь за пивком в
Берлине через пару недель.

вот прати-и-и-вный По заграницам я не выездной (типа "институт, экзамены, сессия..." ©).

У тебя какие-нибудь исходники на АПИ с простейшими примерами коннекта, селекта и проч.? Только не предлагай Using_OO_API, там все на "богомерзком С" Картинка с другого сайта.

Или что почитать, букварь какой...
2 окт 19, 16:14    [21985103]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
kdv
Member

Откуда: iBase.ru
Сообщений: 28336
Док
Таки ты в DT свойства задавал или в RT?

в дизайн-тайме, конечно. У меня нужды про RT пока нет.
Как у тебя на картинке было нарисовано, так я и делал.
2 окт 19, 16:23    [21985116]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
kdv
Member

Откуда: iBase.ru
Сообщений: 28336
Док
У тебя какие-нибудь исходники на АПИ с простейшими примерами коннекта, селекта и проч.?

забей. для прикладных программ эта "технология" не годится, слишком много писанины, да еще исключительно рантаймовой. Для инструментальных - без проблем.
2 окт 19, 16:24    [21985119]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
Симонов Денис
Member

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

Using_OO_API там с++, но для Pascal оно переводится с полпинка
2 окт 19, 16:32    [21985127]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
Симонов Денис
Member

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

mwasoftware написали свою обёртку над API завернув всё в интерфейсы аля-COM

https://mwasoftware.co.uk/downloads/send/5-ibx-current/146-firebirdpascalapiguide

эта фиговина входит в состав их IBX. Насколько она хорошо написана хз, но там точно более низкий уровень чем ихние датасеты.
2 окт 19, 16:42    [21985146]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
Мимопроходящий
Member

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

02.10.2019 16:42, Симонов Денис пишет:
> написали свою обёртку над API завернув всё в интерфейсы аля-COM

имхо, перебор.

Posted via ActualForum NNTP Server 1.5

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

Откуда:
Сообщений: 48692
kdv, обижаешь. Писанина, конечно, рантаймовая и среднестатистический мышевозник пальцы сотрёт, но Док-то в курсе как скопировать строку. В приложении библиотека (Дельфи 2006), которую я использую. С ней код выглядит так для коннекта:
var dpb: String;
...
    dpb := fb_dpb_version1+
           fb_dpb_user_name+Char(Length(AdminUser))+AdminUser+
           fb_dpb_password+Char(Length(DecryptedPassword))+DecryptedPassword;
    if Length(Charset) > 0 then
      dpb := dpb+fb_dpb_lc_ctype+Char(Length(Charset))+Charset;
    if Length(AdminRole) > 0 then
     begin
      dpb := dpb+
             fb_dpb_sql_dialect+#1+#0+ // In case of quoted role
             fb_dpb_sql_role_name+Char(Length(AdminRole))+AdminRole;
     end;

    Call(fb_attach_database(status_vector, 0, PChar(ConnectionString),
                            Db,Length(dpb), PChar(dpb)));

Запрос и чтение результатов как-то так:
procedure TFBConfiguration.LoadDatabases;
var
  QryCfg : TFBCursor;
begin
  inherited;
  StartTransaction;
  try
   RunFBSQL(DbCfg, TransCfg, QryCfg,
            'SELECT DBNO,DBPATH,DBNAME,ADMINUSER,ADMINPASSWORD,COMMENTS,'+
            'PRIORITY,TIMEFIELDNAME,CHARSET,DBTYPE,USERROLE,DIALECT,'+
            'DIALUSERNAME,DIALPASSWORD,RASNAME,KEEPCONNECTION,MOREPARAMS'+
            ' FROM REPL$DATABASES',
            17, Dialect);
   While not QryCfg.Eof do
    begin
     AddDbToCache(GetIntegerValue(DbCfg, TransCfg, QryCfg, 0),
                  GetStringValue(DbCfg, TransCfg, QryCfg, 1),
                  GetStringValue(DbCfg, TransCfg, QryCfg, 2),
                  GetStringValue(DbCfg, TransCfg, QryCfg, 3),
                  GetStringValue(DbCfg, TransCfg, QryCfg, 4),
                  GetStringValue(DbCfg, TransCfg, QryCfg, 5),
                  GetIntegerValue(DbCfg, TransCfg, QryCfg, 6),
                  GetStringValue(DbCfg, TransCfg, QryCfg, 7),
                  GetStringValue(DbCfg, TransCfg, QryCfg, 8),
                  GetIntegerValue(DbCfg, TransCfg, QryCfg, 9),
                  GetStringValue(DbCfg, TransCfg, QryCfg, 10),
                  GetIntegerValue(DbCfg, TransCfg, QryCfg, 11),
                  GetStringValue(DbCfg, TransCfg, QryCfg, 12),
                  GetStringValue(DbCfg, TransCfg, QryCfg, 13),
                  GetStringValue(DbCfg, TransCfg, QryCfg, 14),
                  GetIntegerValue(DbCfg, TransCfg, QryCfg, 15),
                  GetStringValue(DbCfg, TransCfg, QryCfg, 16));
     Next(QryCfg);
    end;
   FreeCursor(QryCfg);
   CommitTransaction;
  except
   RollbackTransaction;
   raise;
  end;
end;


К сообщению приложен файл (fbclient.pas.7z - 5Kb) cкачать
2 окт 19, 16:45    [21985158]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
Мимопроходящий
Member

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

а я пожалуй поддержу kdv.
для написания "инструмента" такой подход оправдан.
а для прикладного GUI-софта нонсенс.

Posted via ActualForum NNTP Server 1.5

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

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

Мимопроходящий
для написания "инструмента" такой подход оправдан.
а для прикладного GUI-софта нонсенс.

И тебя не смущает, что и сама библиотека и приведённые куски кода - из того самого
"гуевого софта"?..

Posted via ActualForum NNTP Server 1.5

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

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

не нужно демагогии.
у тебя инструмент.
GUI там сбоку.

Posted via ActualForum NNTP Server 1.5

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

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

Мимопроходящий
у тебя инструмент.
GUI там сбоку.

"Инструмент" у меня написан на С++ и гуй там чисто номинальный. А эти куски таки из чисто
гуевой редактилки базы, которая ничем не отличается от основной продукции Дока.

Posted via ActualForum NNTP Server 1.5

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

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

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

Posted via ActualForum NNTP Server 1.5

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

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

у тебя GUI только для настройки.
У прикладников в приложении живут сотни формочек и не факт что их можно сделать по одному шаблону.
В таком виде умрёшь писать
2 окт 19, 17:15    [21985209]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
Dimitry Sibiryakov
Member

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

Симонов Денис
У прикладников в приложении живут сотни формочек и не факт что их можно сделать по одному
шаблону.

Можно, можно. Все их "сотни формочек" сводятся к "загрузить хрень, позволить пользователю
над ней поиздеваться, сохранить результат".

Posted via ActualForum NNTP Server 1.5

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

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

02.10.2019 17:19, Dimitry Sibiryakov пишет:
> Можно, можно. Все их "сотни формочек" сводятся к "загрузить хрень,
> позволить пользователю над ней поиздеваться, сохранить результат".

ты сознательно сузил размеры окна до замочной скважины.
можно конечно и это переморгать.
но глаз устаёт.

Posted via ActualForum NNTP Server 1.5

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

Откуда: Казань
Сообщений: 6466
Дим (DS), спасибо, поизучаю.

Мужики, спасибо всем за мнения. Я не то, чтобы завтра сяду писать свой репликатор на голом апи, но мне хотя бы оценочно надо прикинуть, стоит ли заморачиваться с этим или нет.
2 окт 19, 18:25    [21985277]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
Dimitry Sibiryakov
Member

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

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

А, ну давай, расскажи как космические корабли бороздят просторы Большого Театра
какие из этих "сотен формочек" не уложатся в данный шаблон и сколько их там будет.

Posted via ActualForum NNTP Server 1.5

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

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

02.10.2019 18:27, Dimitry Sibiryakov пишет:
> А, ну давай, расскажи

я никогда не спорю с носителями сокровенного знания

Posted via ActualForum NNTP Server 1.5

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

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

Мимопроходящий
я никогда не спорю с носителями сокровенного знания

А ты не спорь, ты фактами дави. Типа "в моей прикладухе 100500-я формочка делает то-то и
то-то, но оно совершенно не может быть произведено в брифкейс модели за которую ты топишь".

Posted via ActualForum NNTP Server 1.5

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

Откуда: iBase.ru
Сообщений: 28336
Dimitry Sibiryakov,

"все норовят слепить свой собственный фреймворк".
2 окт 19, 21:43    [21985424]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
Arioch
Member

Откуда:
Сообщений: 11066
Док
У тебя какие-нибудь исходники на АПИ с простейшими примерами коннекта, селекта и проч.?


возьми unified interbase - минимальная библиотека на Delphi - и читай сорсы

правда Анри её давно забросил, во времена ещё до выхода FB3 - но ты же не хочешь OO API (и я тебя понимаю)
3 окт 19, 17:02    [21986064]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 10154
Arioch
и я тебя понимаю


почему? Ты пробовал? Ну у DS есть список своих претензий. Но он хотя бы щупал OO API. А ты небось только из дали видел
3 окт 19, 17:42    [21986114]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
Arioch
Member

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

да, издали

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

при этом, в общем-то, не понятно зачем это надо. Типа, процедурный интерфейс с хэндлами уже не в моде.

старый API проще, обычнее (такое во всех DLL было), к нему документация есть (хотя и с ошибками и времён ib6) и куча проверенного кода. Декларация этого API - пара файлов, из которых самый большой - просто список error codes.

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

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

Итого: объёмный нечеловеческий boilerplate, почти недокументированный, с непонятно где лежащими граблями которые непонятно как если что диагностировать, и - с одним теоретическим преимуществом, которое просто не нужно. Ачивку себе повесить "перешёл на новый модный молодёжный API" ? я её себе лучше в Стиме на игрушке повешу за то же время.
3 окт 19, 18:00    [21986134]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
Мимопроходящий
Member

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

03.10.2019 18:00, Arioch пишет:
> Итого: объёмный нечеловеческий boilerplate, почти недокументированный, с
> непонятно где лежащими граблями которые непонятно как если что
> диагностировать, и - с одним теоретическим преимуществом, которое просто
> не нужно. Ачивку себе повесить "перешёл на новый модный молодёжный API" ?

мне оно тоже не по душе.
но я так понимаю, новые нумерики и тому подобное, на старом АПИ никто не
реализовал и вряд ли будет.

Posted via ActualForum NNTP Server 1.5

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

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

"К свету - по этапу. К счастью - под плетями."

ну вот когда/если понадобится, тогда и будем думать

....взять и реализовать fbclient3 с классическим интерфейсом поверх молодёжного, чтобы на самом деле этот API изучить
3 окт 19, 18:20    [21986151]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
Мимопроходящий
Member

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

03.10.2019 18:20, Arioch пишет:
> ну вот когда/если понадобится, тогда и будем думать

я слабо представляю кому РЕАЛЬНО могут понадобиться нумерики
размером в 30 и более знаков

Posted via ActualForum NNTP Server 1.5

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

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

Мимопроходящий
я так понимаю, новые нумерики и тому подобное, на старом АПИ никто не
реализовал и вряд ли будет.

Фишка старого API в расширяемости и для новых типов там не нужна никакая специальная
поддержка.

Posted via ActualForum NNTP Server 1.5

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

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

03.10.2019 18:36, Dimitry Sibiryakov пишет:
> Фишка старого API в расширяемости и для новых типов там не нужна никакая
> специальная поддержка.

и как сейчас запихать эти нумерики в xsqlda?

Posted via ActualForum NNTP Server 1.5

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

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

для этого сначала нужно разобраться, что такое диалект XSQLDA, вывести его в отдельное понятие (он не должен был быть отдельным понятием, но между IB5 & 6 про это забыли), задокументировать, пофиксить код

и всё это желательно сделать вместе с interbase team, ради мира в о всём мире

попробовать что-ли сделать какой-нибудь блог-пост из переписки с авторами jaybird и interbase objects....
хотя кому это нафиг надо, логика как с теми скобками, "за 20 лет никто не натолкнулся"
3 окт 19, 18:50    [21986180]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
Arioch
Member

Откуда:
Сообщений: 11066
ну или нифига не делать с диалектом data area, а просто ввести новые конвтанты типов, как с тем же boolean, а какие клиентские либа/аппликухи на этом посыплются - те к новым типам не готовы
3 окт 19, 18:52    [21986182]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
Arioch
Member

Откуда:
Сообщений: 11066
Мимопроходящий
03.10.2019 18:20, Arioch пишет:
> ну вот когда/если понадобится, тогда и будем думать

я слабо представляю кому РЕАЛЬНО могут понадобиться нумерики
размером в 30 и более знаков


https://www.sql.ru/forum/1317439/integer-overflow-coalesce-numeric-int64



так что 30 - это только для разгону
3 окт 19, 18:53    [21986184]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
Dimitry Sibiryakov
Member

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

Мимопроходящий
и как сейчас запихать эти нумерики в xsqlda?

Так же как обычно: соответствующий тип в sqltype, размер - в sqllen, указатель на
собственно данные - в sqldata.

Posted via ActualForum NNTP Server 1.5

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

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

03.10.2019 18:56, Dimitry Sibiryakov пишет:
> Так же как обычно: соответствующий тип в sqltype

и кто этот тип должен объявить?
вон ввели SQL_BOOLEAN, все писатели библиотек его заприходовали.

Posted via ActualForum NNTP Server 1.5

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

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

вот ровно также только название будет типа SQL_Integer_128_signed

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

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

03.10.2019 19:03, Arioch пишет:

> вот ровно также только название будет типа SQL_Integer_128_signed
> сначла в движке, потом в fbclient, потом в либах/аппликухах

есть мнение, что не будет :(

Posted via ActualForum NNTP Server 1.5

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

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

значит, не будет

а ты что загрустил, тебе разве уже понадобились "нумерики размером в 30 и более знаков"
3 окт 19, 19:13    [21986203]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
Мимопроходящий
Member

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

03.10.2019 19:13, Arioch пишет:
> а ты что загрустил, тебе разве уже понадобились "нумерики размером
> в 30 и более знаков"

меня удручает тенденция

Posted via ActualForum NNTP Server 1.5

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

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

ты это, лучше оленей от обрыва отгони, не надо о тенденциях, не-на-до!
3 окт 19, 19:16    [21986208]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
Dimitry Sibiryakov
Member

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

Мимопроходящий
есть мнение, что не будет :(

Влад на этом месте уже начал бы ругаться, а я просто процитирую sqlda_pub.h:
#define SQL_TIMESTAMP_TZ                 32754
#define SQL_TIME_TZ                      32756
#define SQL_DEC_FIXED                    32758
#define SQL_DEC16                        32760
#define SQL_DEC34                        32762

Куда приткнуть SQL_INT128 Алекс пока не решил.

Posted via ActualForum NNTP Server 1.5

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

Откуда: Рязань
Сообщений: 10154
Dimitry Sibiryakov
Мимопроходящий
и как сейчас запихать эти нумерики в xsqlda?

Так же как обычно: соответствующий тип в sqltype, размер - в sqllen, указатель на
собственно данные - в sqldata.


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

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

Симонов Денис
Т.е. запихнуть то их туда на стороне fbclient можно, а вот что потом с этим указателем на
данные делать без специальных интерфейсов хз.

А как ты живёшь без специальных интерфейсов для INT64/TIMESTAMP?.. В Си есть встроенные
decimal и int128, в Delphi тоже почти наверняка можно найти библиотеки для работы с ними.

Posted via ActualForum NNTP Server 1.5

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

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

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

Симонов Денис
Для 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

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

да, издали

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


ты не пытался


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


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

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


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

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

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

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

Posted via ActualForum NNTP Server 1.5

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

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

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

Откуда: Рязань
Сообщений: 10154
Мимопроходящий
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

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

хотя не...

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

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

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

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

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

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

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

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

Posted via ActualForum NNTP Server 1.5

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

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

ну реализацию 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

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

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

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

Posted via ActualForum NNTP Server 1.5

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

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

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

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

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

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

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

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

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

Posted via ActualForum NNTP Server 1.5

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

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

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

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

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

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

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


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

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


есть ещё DEFLOAT(34)

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


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

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

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

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

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

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

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

Posted via ActualForum NNTP Server 1.5

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

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

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

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

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

Фактический стандарт в 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

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

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

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

Posted via ActualForum NNTP Server 1.5

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

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

причём тут DataSet. Никто не агитирует от него отказываться, кроме DS.

Arioch
Смотрите, я написал на FireDAC/DBX/IBO и не лез в FB-OO-API - не выпендрёж


ты это не в тему сказал. Речь о том кто будет в эти библиотеки добавлять поддержку новых фич из 4-ки.

Вот у МП, например, свой клон IBX, если ему надо будет добавить новые плюхи, то придётся разбираться с API.
Если нет аналога в старом, то придётся в новое лезть, только и всего.

Перечислю основное, что придётся добавить:
- поддержка тайм-аутов
- поддержка timezone
- поддержка NUMERIC и DECIMAL c точностью 38 (INT_128)
- поддержка DECFLOAT(16), DECFLOAT(34)
- поддержка batch-api

Если тебе этого не надо. или кто-то из компоненто-писателей уже сделал это, то и обсуждать не чего. Заметь я не агитирую за использование API вместо чего-то там вообще.
4 окт 19, 19:28    [21987094]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 10154
Dimitry Sibiryakov
Симонов Денис
конечно кусок. Но не портировать, а использовать.

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


вот здесь не понял. Ты в LegacyAPI импортируешь десятки функций, с чего бы импорт ещё одной должен дать какие-то грабли?
4 окт 19, 19:40    [21987100]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
Arioch
Member

Откуда:
Сообщений: 11066
Симонов Денис
Если нет аналога в старом, то придётся в новое лезть, только и всего.


но речь шла про int128 - а его вроде бы уже протащили в старый API, во всяком случае константы sql_type цитировали
4 окт 19, 19:42    [21987101]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
Симонов Денис
Member

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

эти константы не только для старого API. И да в SQLVAR поместить то можно любой тип. Речь о том что ты будешь делать с этим указателем. Как в Delphi он должен обрабатываться?
Варианта 2: воспользоваться хелперами из нового API, или раскатывать структуру руками.

вот тебе

struct FB_I128_t {
	ISC_UINT64 fb_data[2];
};

typedef struct FB_I128_t FB_I128;


расскажи нам как ты это в BCD раскатаешь?
4 окт 19, 19:57    [21987105]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
Arioch
Member

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

посмотрю, как во времена Delphi 5 или Delphi 2006 переводили int64 в TField.AsDouble и сделаю аналогично

а с твоим хелпером будет аналогичная проблема, как скопировать данные из поля в байтовые буфера "текущая запись плюс-минус пара десятка строк, чтобы на экран влезало" у TDataSet

Только копировать надо будет не из SQLDA, а из твоего хелпера.
4 окт 19, 20:16    [21987112]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
Симонов Денис
Member

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

там есть поле типа FMTBcd в него можно закатать.

Вариант 1. Берём указатель из SQLDA и вызываем в хелепере функцию toBcd, если она бинарно совместимо, то следом

function BcdFromBytes(const AValue: TArray<Byte>): TBcd;

Если нет, то вариант 2. Вызываем из хелпера toString. Далее

function StrToBcd(const AValue: string): TBcd; overload;
4 окт 19, 20:44    [21987125]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
Dimitry Sibiryakov
Member

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

Симонов Денис
Ты в LegacyAPI импортируешь десятки функций, с чего бы импорт ещё одной должен дать
какие-то грабли?

Так и речь-то не обо мне, а о тех между кем и уже импортированными функциями две
жирных-жирных библиотеки. Вот топик для размышления:
https://www.sql.ru/forum/1316505/firedac-i-firebird-shifrovanie
Арефьев, там, кстати, так и не показался.

Posted via ActualForum NNTP Server 1.5

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

Откуда:
Сообщений: 1012
Dimitry Sibiryakov,

А какая вторая из "две"? И, кстати, ваш покорный слуга как раз из той организации, где вполне бы был востребован decfloat и как раз через фаердак, на которые , в симбиозе, весь прошлый год я лелеял надежды. Но теперь уже совершенно ясно, что внедрить FB4 в одной из самых известных структуре в стране уже не успею, время вышло. А жаль.
4 окт 19, 21:57    [21987154]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
Dimitry Sibiryakov
Member

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

Vlad F
А какая вторая из "две"?

VCL+половина FireDAC-а и вторая половина FireDAC-а, так называемый "физический слой".

Posted via ActualForum NNTP Server 1.5

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

Откуда:
Сообщений: 1012
Dimitry Sibiryakov,

Я понял. Но боюсь, что все это теперь придется оставить уже на нового работодателя и на новое десятилетие.))
4 окт 19, 22:15    [21987161]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
Мимопроходящий
Member

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

04.10.2019 22:10, Dimitry Sibiryakov пишет:
> вторая половина FireDAC-а, так называемый "физический слой".

вот за это я его и не люблю.
даже кушать не могу! (С)

Posted via ActualForum NNTP Server 1.5

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

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

ну им надо было чем-то заменить BDE. ADO у них сделан так себе. Собственная разработка dbExpress тоже. По сравнению с ними универсальный FireDac очень даже ничего. Кому не нравится могут продолжать пользоваться IBX/FibPlus и так далее. Хот прямым API
7 окт 19, 11:53    [21988044]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
Мимопроходящий
Member

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

07.10.2019 11:53, Симонов Денис пишет:
> ну им надо было чем-то заменить BDE.

они об этом не думали вааще.
Арефий сам по себе такое решил.
а Дебаркадеры купили готовое решение.

Posted via ActualForum NNTP Server 1.5

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

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

погоди. У Арефьева была цель сделать универсальный компонент доступа к БД. Он это сделал, по-моему мнению весьма не плохо, в особенности по сравнению с тем что предлагали в Embercadero.
Дебаркадера поняла что ихние универсальные компоненты доступа мягко говоря гомно, стали искать чем бы заменить и их выбор пал на AnyDac (на их месте вполне мог оказаться UniDac).

Понятное дело что специализированный компонент под конкретную СУБД всегда можно сделать более гибким. Но у FireDac такой цели нет. Посмотри с другой стороны, кто сейчас делает и поддерживает хоть один из специализированных компонентов доступа?

IBX сосредоточена на IB им плюшки FB до лампочки, разве что самому точить, как ты это делаешь.

FibPlus никто не поддерживает, есть некий клон, но насколько он актуален неизвестно. Да и вообще возникают проблемы с чистотой этого клона. Опять же систематически его никто не правит, какой-то обратной связи в плане поддержки нет. Что остаётся?

Как бы не был сделан FireDac у него хотя бы есть обратная связь, плюшки новых версий FB в него портируются, ошибки правятся.
7 окт 19, 12:14    [21988067]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
Dimitry Sibiryakov
Member

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

Симонов Денис
Дебаркадера поняла что ихние универсальные компоненты доступа мягко говоря гомно, стали
искать чем бы заменить и их выбор пал на AnyDac (на их месте вполне мог оказаться UniDac).

Универсальных компонент доступа у них никогда и не было. Была BDE, купленная с Аштонами,
dbExpress, купленный позже и оказавшийся хуже BDE, а теперь вот FireDAC, который, конечно,
лучше Экспресса, но до уровня BDE пока так и не дотянувшийся.

Posted via ActualForum NNTP Server 1.5

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

Откуда:
Сообщений: 11066
Симонов Денис
там есть поле типа FMTBcd в него можно закатать.


агась, в него родного и закатывали. До сих пор хвосты попадаются в старой прикладухе, которая начиналась с BDE/Paradox через BDE/IB5/Dialect1 и в dbx/Firebird/Dialect3

Вариант 1. Берём указатель из SQLDA и вызываем в хелепере функцию toBcd, если она бинарно совместимо, то следом function BcdFromBytes(const AValue: TArray<Byte>): TBcd;


Ё! ещё и указатель надо взять не НА DA, а ИЗ DA. Т.е. DA придётся руками парсить. К вопросу о полезности хелперов, которые по идее должны превращать низкоуровневый опасный код в высокоуровневый безопасный.

Кстати, спасибо за наводку. Глянул я внутрь этой функции.... buffer overrun на чтение. Размер входного буфера никто не проверяет. И вообще всё, что она делает по сути - это один вызов Move (memory copy), только расписанный на три раздельных операции, чтобы подольше исполнялось. Характерно, что в списке typecast'ов у TBcd этого мрака нет. Видимо осталось с каких-то совсем древних времён чисто ради совместимости. Возможно, ради совместимости с .Net.

В общем, если там и делать Delphi helper, то возвращать он должен не TBytes (неформатированный дамп который может совпасть по длине и внутреннему содержимому с TBcd, а может и не совпасть), а сразу готовый TBcd. И не по указателю "из" SQLDA, а "на" SQLDA. Иначе смысла в таком хелпере не много остаётся.

А сейчас получится, что для доработки TDataSet у нас будет
1. самостоятельная привязка к буферам, TFieldDefs и прочей внутренней кухни TDataSet
2. самостоятельный парсинг низкоуровневой структуры XSQLDA (с проверкой на dialect 0 SQLDA)
3. дёрганье хелпера, создающего "сырой" дамп в TBytes - ARC-структуре, т.е. запускающего две глобальные блокировки потоков процессора, как минимум две.

"В таком аксепте" я бы этим хелпером пользоваться не стал, а либо выдрал из него код копипастом (это хоть какое-то, но использование), а вероятнее таки написал бы сам на основе ib6 api guide. Потому что на фоне 1 и 2 экономия усилий от его использования небольшая, при этом возникает ИЛЛЮЗИЯ высокоуровневого безопасного кода плюс ненужные блокировки.
7 окт 19, 12:31    [21988093]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
Мимопроходящий
Member

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

07.10.2019 12:14, Симонов Денис пишет:
> Как бы не был сделан FireDac...

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


Posted via ActualForum NNTP Server 1.5

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

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

чего это не дотянувшийся до BDE? Что в BDE есть такого чего нет в FireDac?
Если что-то глюкнуло в BDE, то внутрь уже никак не пролезешь хоть лопни.
7 окт 19, 12:34    [21988097]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
Arioch
Member

Откуда:
Сообщений: 11066
Мимопроходящий
04.10.2019 22:10, Dimitry Sibiryakov пишет:
> вторая половина FireDAC-а, так называемый "физический слой".

вот за это я его и не люблю.
даже кушать не могу! (С)


Ну так - оно всё такое. И вообще, как делать унифицированный интерфейс без abstraction layer, как ты его не назови?

DBX - в качестве "физического слоя" используется "провайдер" с закрытыми исходниками и минимумом документации, написанный вокруг COM-модели, с вероятной целью унифицировать нативный и .NET-ный Delphi

Что интересно, китайцы написали альтернативный Firebird DBX Provider - но исходников так же не выложили.

BDE - в качестве "физического слоя" выступает сам BDE. С закрытыми исходниками, изначально рассчитанный на ISAM с SQL прикрученным "сбоку бантик" задним числом, давно не поддерживаемый, по факту почти не совместимый с современными Windows, и гораздо более сложный (кто-нибудь видел сторонний drop-in replacement для BDE?)

Я таки тоже не вижу смысла в претенизии к AnyDAC с этой стороны. Разве что как завуалированную претензию к универсальности AnyDAC. Ну так если кому-то нужно "close to metal" - то есть и UIB и IBX
7 окт 19, 12:42    [21988103]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
Dimitry Sibiryakov
Member

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

Симонов Денис
Что в BDE есть такого чего нет в FireDac?

Кэширование резалт-сета на диске. Он не сожрёт всю память на большом запросе.

Posted via ActualForum NNTP Server 1.5

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

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

речь не об универсальном решателе задач. Речь о том, что в сообществе FB никто не делает заточенного под него компонента на Delphi и уже давно, кроме разве что энтузиастов. Если приходит нуб, у которого нет собственных наработок за последние 10 лет, то ему проще взять FireDac, нежели IBX начинать в него портировать плюшки FB за последние 15 лет. Сейчас начинать разработку на Firebird стало сложнее увы
7 окт 19, 12:42    [21988106]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
Arioch
Member

Откуда:
Сообщений: 11066
Симонов Денис
Что в BDE есть такого чего нет в FireDac?


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

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

07.10.2019 12:42, Симонов Денис пишет:
> Если приходит нуб, у которого нет собственных наработок за последние 10
> лет, то ему проще взять FireDac,

это если ньюб приходит сразу же на распоследние версии Delphi.
а если на Лазаря, то там есть выбор.

а вообще, Delphi(как продаваемый продукт) must die!

Posted via ActualForum NNTP Server 1.5

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

Откуда:
Сообщений: 11066
"Плюшки за 15 лет" для "нуба", которому надо "начинать разработку на Firebird" - они сильно overrated

логиновские FB IBX Utils никто не отменял, если "нуб" по инерции с IBX начнёт.

UIB в режиме Firebird 2.5 даст всё, что нубу будет нужно в ближайшие пару лет.
Включая такую приятную мелочь, как вычитывание запросов в виде
type Q1 = record ..... end;
var R: Q1;
begin
   Query1.open;
   for R in Query1.All<Q1> do begin ... end;


К сожалению, из за убогого полуживого type inference в Delphi тип переменной надо явно объявлять, иначе бы ещё красивее было.

И какой такой killer feature при этом лишится "начинающий разработку" "нуб" ?
7 окт 19, 12:50    [21988117]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 10154
Arioch
Ё! ещё и указатель надо взять не НА DA, а ИЗ DA. Т.е. DA придётся руками парсить.


не надо там ничего парсить. Сразу видно не разбирался.

Arioch
Размер входного буфера никто не проверяет


если ты не рукожоп, то его не надо проверять. Зачем чтобы дополнительные тормоза поиметь?

Arioch
с проверкой на dialect 0 SQLDA


этого не нужно. Старый диалект только для совместимости со старыми компонентами. Он не используется уже лет 15. Разве что в недрах старого BDE. В новом API этого понятия нет вообще.

Arioch
3. дёрганье хелпера, создающего "сырой" дамп в TBytes - ARC-структуре, т.е. запускающего две глобальные блокировки потоков процессора, как минимум две.


сразу видно что ты не пытался разобраться. Нет там никаких блокировок. Хелпер надо получить ровно один раз, а потом пользоваться им. В нём нет глобального состояния.
7 окт 19, 12:52    [21988120]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
Симонов Денис
Member

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

тебя почему-то не смущает string в Delphi. А ведь преобразование char/varchar в string несёт дополнительные накладные расходы и не малые. Не вижу никакой разницы с преобразованиями из/в bcd
7 окт 19, 13:23    [21988168]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
Arioch
Member

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

смущает, но в данном случае влезть влезть внутрь компилятора и переписать строки
1) невозможно
2) если бы было возможно - было бы весьма трудно

а вот в твоём-моём случае не надо "убирать" блокировки, достаточно их "недобавлять"

Возвращаясь к строкам и BCD, в одном англоязычном FAQ отвечала на вечный вопрос о сравнении двух float на равенство.
И "правильный" ответ был - заменить "if f1 = f2" на "if FloatToStr(f1) = FloatToStr(f2)"

В принципе - код рабочий. Но какой-то он неправильный.

Вот твой совет ради копирования raw bytes создать и потом уничтожить dynamic array - с ним на мой вкус ровно та же проблема. Накладные расходы на порядки больше самого действия.
7 окт 19, 13:36    [21988191]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
Симонов Денис
Member

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

оно и в стрингах большое. Преобразование UTF8 <-> UTF-16 вызывает ничуть не меньше проблем и никто не жужжитю Уж извини работает с тем что есть. А от тебя лучших предложений пока не поступало. Вот только не надо про преобразование в double, оно не допустимо ибо несёт потерю точности.

Arioch
И "правильный" ответ был - заменить "if f1 = f2" на "if FloatToStr(f1) = FloatToStr(f2)"


хрень это а не ответ. Все давно знают что сравнивать числа с плавающей точность надо с допустимой погрешностью. Правильный ответ

if abc(f1-f2) <= eps


где eps допустимая погрешность. Хочешь переменную придумай, хочешь константу
7 окт 19, 13:43    [21988208]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
Симонов Денис
Member

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

поправочка abs, т.е. модуль
7 окт 19, 13:44    [21988210]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
Arioch
Member

Откуда:
Сообщений: 11066
Симонов Денис
А от тебя лучших предложений пока не поступало


поступало

Arioch
В общем, если там и делать Delphi helper, то возвращать он должен не TBytes (неформатированный дамп который может совпасть по длине и внутреннему содержимому с TBcd, а может и не совпасть), а сразу готовый TBcd. И не по указателю "из" SQLDA, а "на" SQLDA.


но, конечно, удобнее вопринимать реальность выборочно

Симонов Денис
Arioch
Ё! ещё и указатель надо взять не НА DA, а ИЗ DA. Т.е. DA придётся руками парсить.


не надо там ничего парсить. Сразу видно не разбирался.

Arioch
Размер входного буфера никто не проверяет


Ну что ты написал - то и читаю

если ты не рукожоп, то его не надо проверять. Зачем чтобы дополнительные тормоза поиметь?


Это великолепно.
Т.е. две глобальных блокировки и две неизвестно какой сложности операции внутри pluggable heap manager - это нормально.
А одно сравнение integer с константой - это тормоза.

А давайте из Firebird'а все bugcheck'и уберём. Я-то рукожоп, что с меня взять, но вы-то не рукожопы, вы же чoткие пацаны.
Заодно и "дополнительных тормозов" меньше будет, сервер взлетит просто.

Arioch
с проверкой на dialect 0 SQLDA

этого не нужно. Старый диалект только для совместимости со старыми компонентами. Он не используется уже лет 15. Разве что в недрах старого BDE. В новом API этого понятия нет вообще.


Мы тут как бы про старый API говорим, про введение в классический API integer-128 и какую адаптацию *существующих* библиотек доступа это повлечёт.

Arioch
3. дёрганье хелпера, создающего "сырой" дамп в TBytes - ARC-структуре, т.е. запускающего две глобальные блокировки потоков процессора, как минимум две.


сразу видно что ты не пытался разобраться. Нет там никаких блокировок. Хелпер надо получить ровно один раз, а потом пользоваться им. В нём нет глобального состояния.
[/quote]

Сразу видно, что ты не знаешь, что такое TBytes, хотя и заговорил про string, казалось бы в тему заговорил, но... Я удивлён.
7 окт 19, 14:04    [21988249]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 10154
Arioch
В общем, если там и делать Delphi helper, то возвращать он должен не TBytes


с чего бы "интерфейсам" C++ который совершенно не привязан к Embercadro такое возвращать. Если хочешь пиши сам, да там как раз есть возможность хелперы классам писать. Это уже хелперы в терминах Delphi

Arioch
Т.е. две глобальных блокировки и две неизвестно какой сложности операции внутри pluggable heap manager - это нормально.
А одно сравнение integer с константой - это тормоза.


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

кто мешает проверять допустимость длины буфера на клиенте? Кто мешает выделить сразу буфер нужной длины? Так-то я тебе и в SQLDA могу по указателю хрень воткнуть для любого типа

Arioch
Мы тут как бы про старый API говорим,


ты не о том. Я тебе говорю что даже старый API завязанный на SQLDA уже как 100 лет не использует понятие диалект SQLDA. Параметр есть, пишут туда что-то отличное от 0. Оно с 0 реально используется только в совсем древних компонентах, куда всё равно новые типы никто портировать не будет.

Arioch
Сразу видно, что ты не знаешь, что такое TBytes, хотя и заговорил про string, казалось бы в тему заговорил, но... Я удивлён.


посмотри как устроен TEncoding для перекодировки строк и причём там TBytes, тогда может поймёшь
7 окт 19, 14:21    [21988279]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
Симонов Денис
Member

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

я это к тому, что ты так и сяк уже используешь TBytes для строк и не жужжишь не про его накладные расходы, ни про накладные расходы string. В последних версиях Delphi строки полученные из FB приходится перекодировать почти всегда (если только не AnsiString), ибо они в UTF-16, который никогда из FB не возвращается.
Чего тогда из-за bcd здесь бучу поднимаешь? Не нравится иди на c++, где это можно сделать более прямым способом.
7 окт 19, 15:01    [21988355]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
Мимопроходящий
Member

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

ладно вам спорить то.
перекодировка нужна и там, и там.
ибо
1. нативные (RAW) типы отдаваемые клиентом, напрямую в Delphi не ложатся
(за редким исключением)
2. "интерфейсное АПИ" разрабатывалось тоже без оглядки на Delphi

Posted via ActualForum NNTP Server 1.5

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

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

так я и пытаюсь ему это донести. Накладных расходов избежать не удастся в любом варианте. Тогда чего панику поднимать, мол ой неудобно сделали, тут блокировки... Там и без того накладных расходов вагон и маленькая тележка
7 окт 19, 15:11    [21988366]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
Arioch
Member

Откуда:
Сообщений: 11066
Симонов Денис
В последних версиях Delphi строки полученные из FB приходится перекодировать почти всегда (если только не AnsiString), ибо они в UTF-16, который никогда из FB не возвращается.


ты серьёзно не понимаешь, что перекодирование потока байтов из одного формата в другой не приводит к глобальной блокировке всех потоков одного, а возможно и всех процессов (префикс LOCK в x86)?

при этом как правило перекодируются строки длиннее, чем 16 байтов. Т.е. даже если приравнять остановку всех потоков к неблокирующей работе внутри одного процесса, то и в этом случае накладные расходы на строки вызываются много реже, чем для int128/bcd

> Не нравится иди на c++

А голову отрубать для удаления зуба - это принципиальная позиция Firebird Project ?

....не читатель, но писатель. Я ведь написал, как бы я это делал на Delphi.

Симонов Денис
посмотри как устроен TEncoding для перекодировки строк


Никогда не считал TEncoding образцом хорошего кода. Это просто тупой копипаст из C# не включая голову. Причём настолько не включая, что элементарно можно получить use after free и dangling pointer.
Потому что "цельнотянутое" API разрабатывалось для GC-языка.


Симонов Денис
Arioch
В общем, если там и делать Delphi helper, то возвращать он должен не TBytes


с чего бы "интерфейсам" C++ который совершенно не привязан к Embercadro такое возвращать. Если хочешь пиши сам, да там как раз есть возможность хелперы классам писать. Это уже хелперы в терминах Delphi


И снова подмена предмета спора.
Ты начал разговор про какой-то неофигенно удобный Delphi хелпер, ради которого стоит отказаться от классического API и существующих библиотек, а теперь переключился на какой-то "непривязанный к Эмбаркадеро" новый Delphi-интерфейс.

Arioch
Т.е. две глобальных блокировки и две неизвестно какой сложности операции внутри pluggable heap manager - это нормально.
А одно сравнение integer с константой - это тормоза.


да откуда ты их взял? Пальцем покажи.


показывал уже, снова показываю - TBytes

Там для получения хелпера нет ни одного интерфейса с подсчётом ссылок, да и не забывай про паттерн синглетон, не надо 100500 раз один и тот же хелпер получать.


Я ж говорю, ты не знаешь что такое TBytes - но радостно его советуешь вместо memcpy как "правильное" решение. Ну как те ребята со сравнением float'ов.

кто мешает проверять допустимость длины буфера на клиенте?

А что, посоветованная тобой BcdFromBytes на сервере выполняется???
А мужики-то не знают.... (c)

Так-то я тебе и в SQLDA могу по указателю хрень воткнуть для любого типа

Можешь. Но там нет иллюзии безопасности. Там идёт работа с низкоуровневыми структурами данных.
А BcdFromBytes эту иллюзию создает. Принимая на вход ARC-завёрнутый буфер данных произвольной структуры и размера. И ожидая от кого-то создания этого буфера (с межпоточными блокировами и вызовоми заранее неизвестного heap manager) недокументированного размера и заполнения его в недокументированном формате. И потом убивания буфера (с межпоточными.....).

Фактически единственное относительно безопасное (на уровне source level compatibility с другими версиями Delphi или имитирующими Delphi сторонними языками) этой функции - только и исключительно использование в паре с BcdToBytes и никак кроме.

Arioch
Мы тут как бы про старый API говорим,


ты не о том. Я тебе говорю что даже старый API завязанный на SQLDA уже как 100 лет не использует понятие диалект SQLDA. Параметр есть, пишут туда что-то отличное от 0. Оно с 0 реально используется только в совсем древних компонентах, куда всё равно новые типы никто портировать не будет.


А должно быть, кстати, не "отличное от нуля", а +1, поскольку это версия DA, предназначенная для дальнейшего расширения, и изначально означавшее то же самое, что SQL dialect....

Пока этот диалект DA задокументирован - библиотеки должны ожидать его прихода от сервера, хотя бы в размере "проверить и выдать ошибку".

Хотя, конечно, ничего не проверять и тупо иметь шанс запороть память - лучше. Ведь "дополнительных тормозов" не будет.
7 окт 19, 15:49    [21988434]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
Arioch
Member

Откуда:
Сообщений: 11066
Симонов Денис
Там и без того накладных расходов вагон и маленькая тележка


а поэтому давайте на ровном месте, без какой-либо пользы, сделаем ЕЩЁ БОЛЬШЕ накладных расходов

пц! пц! пц! (с)
7 окт 19, 15:52    [21988438]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
Arioch
Member

Откуда:
Сообщений: 11066
Мимопроходящий
2. "интерфейсное АПИ" разрабатывалось тоже без оглядки на Delphi


Зато Delphi разрабатывался с оглядкой на классическое API 21986134
7 окт 19, 15:56    [21988446]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
Симонов Денис
Member

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

сотый раз тебе повторяю. Все перекодировки строк в Delphi используют TBytes. Я не говорю что это хорошее решение, но оно так работает внутри. У тебя наверное из БД выбираются много полей с типами CHAR/VARCHAR. Ты не жужжишь? Ну так с какого перепугу беспокоиться об использовании его в Bcd?

Покажи нам тупым как правильно инициализировать Bcd прям из структуры INT128. Только кодом, не надо нам тут поток бреда нести.

Загляни в любой компонент доступа для современной Delphi. Глянь как получается string из CHAR/VARCHAR. Перевари, сильно не огорчайся.

У тебя все числа теперь NUMERIC(38, x) что ли стали? Чего это оверхед на каждом шагу чудится
7 окт 19, 16:21    [21988480]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
Мимопроходящий
Member

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

07.10.2019 16:21, Симонов Денис пишет:
> У тебя все числа теперь NUMERIC(38, x) что ли стали?

ну, агрегаты таки уже да.
а это значит, что без изменений в библиотеке доступа не обойтись,
для нормальной работы с FB4.
даже не затачиваясь на новые фичи и типы.
поясню.
большинство (если не все) дельфийских библиотек
для мапирования RAW-типов в дельфийские типы,
не мудрствуя лукаво, запрашивают от сервера описание полей резалтсета
при помощи isc_dsql_describe().
в данном же случае, результат будет отличный от того,
на который библиотека "умеет" реагировать.
так что без напильника не обойтись.
в любом случае.

Posted via ActualForum NNTP Server 1.5

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

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

делаешь в ON CONNECT триггере

SET INT128 BIND BIGINT


Если результат помещается в BIGINT, то можно не править ни одной строчки кода
7 окт 19, 16:57    [21988534]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
Мимопроходящий
Member

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

07.10.2019 16:57, Симонов Денис пишет:
>
> делаешь в ON CONNECT триггере
> SET INT128 BIND BIGINT

кривые костыли.
в DB-конфиге ещё куда ни шло, но в триггере...

Posted via ActualForum NNTP Server 1.5

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

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

да не важно где. Это новый вид запросов, так называемые "Управляющие запросы". Их позволили выполнять где угодно, в том числе и PSQL. Хотя согласен привязка типов там выглядит странно, ибо получается что потенциально мы можем менять привязку на лету.

Можно попросить параметр пока не поздно, ну или через dbp_
7 окт 19, 17:05    [21988543]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
Мимопроходящий
Member

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

07.10.2019 17:05, Симонов Денис пишет:
> Можно попросить параметр пока не поздно, ну или через dbp_

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

Posted via ActualForum NNTP Server 1.5

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

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

isc_dpb_int128_bind уже есть оказывается
7 окт 19, 17:22    [21988584]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
Мимопроходящий
Member

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

07.10.2019 17:22, Симонов Денис пишет:
> isc_dpb_int128_bind уже есть оказывается

а в DB-конфиге?

Posted via ActualForum NNTP Server 1.5

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

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

не уверен что он там нужен. Клиенты разные бывают, кто поддерживает нативный тип, кто-то нет.
ИХМО, сразу для всех ставить не правильно
7 окт 19, 17:33    [21988605]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
Мимопроходящий
Member

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

07.10.2019 17:33, Симонов Денис пишет:
> не уверен что он там нужен. Клиенты разные бывают, кто поддерживает
> нативный тип, кто-то нет.
> ИХМО, сразу для всех ставить не правильно

основной опиньён совместимости:
унаследованный клиент должен работать БЕЗ переделок.

к тому же это ничуть не хужее триггера на коннект.

Posted via ActualForum NNTP Server 1.5

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

Откуда:
Сообщений: 10666
Мимопроходящий
> У тебя все числа теперь NUMERIC(38, x) что ли стали?

ну, агрегаты таки уже да.
Не все. Тип агрегата выводится из типа его аргумента.
Например
sum(int) -> bigint
sum(bigint) -> numeric(38)

С какого перепугу 0.0 стал bigint - тут мы ещё разберёмся.
Не всё так страшно.
7 окт 19, 20:25    [21988764]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: 1 2 3 4 5 6 7      [все]
Все форумы / Firebird, InterBase Ответить