powered by simpleCommunicator - 2.0.19     © 2024 Programmizd 02
Map
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / PDO Firebird bugs
25 сообщений из 222, страница 3 из 9
PDO Firebird bugs
    #39356822
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dorin Marcoci,

если исправишь будет здорово. А то приходится для Fb3 обходные пути искать.

Там есть ещё один недостаток, который проявляется во всех версиях. Предварительный парсер, который вычленяет именованные параметры, делает это везде даже там где не надо. Из-за чего EXECUTE BLOCK наворачивается медным тазом. Вот если бы этот парсер был более умным и искал именованные параметры для EB только во входных параметрах EXECUTE BLOCK [(<params>)] и остальное тело не трогал было бы здорово.
...
Рейтинг: 0 / 0
PDO Firebird bugs
    #39356839
Dorin Marcoci
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Денис,
Я так, не профи в C, VC14, но впервые, после танцем с бубном и много методом тыка, за день, получилось.
Если здесь есть кто-то более продвинут в C, то могу помочь со сборкой, дебагингом и тестингом, и структурами данных в PHP коде.
...
Рейтинг: 0 / 0
PDO Firebird bugs
    #39359935
Dorin Marcoci
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Посмотрел насчет баги https://bugs.php.net/bug.php?id=72931 (insert returning)

Дело в том что PDO драйвер при execute всегда вызывает isc_dsql_execute.
Но как показывют скудные инфы про Firebird, для стэйтмент isc_info_sql_stmt_exec_procedure нужно вызвать isc_dsql_execute2.
isc_dsql_execute подразумевает открытие курсора с последующими isc_dsql_fetch.

До v3 при "insert returning" FB открывал курсор, но Влад говорил что это глюк, и щас уже не открывает :)
Соответственно, isc_dsql_fetch обламывается и получаем ошибку.

Щас нужно вызвать уже isc_dsql_execute2 если стэйтмэнт тайп isc_info_sql_stmt_exec_procedure и обрабатывать по другому фетч в драйвере. Я начал сделать, есть мелкие прогрессы, но чувствую будет долго, так как не очень разбираюсь в FB API :)
...
Рейтинг: 0 / 0
PDO Firebird bugs
    #39359955
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dorin Marcoci,

давай конкретные куски кода - поможем
...
Рейтинг: 0 / 0
PDO Firebird bugs
    #39360377
Dorin Marcoci
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Влад, порядок такой:

firebird_alloc_prepare_stmt(dbh, sql, sql_len, &num_sqlda, &s, np)

/* allocate a statement handle struct of the right size (struct out_sqlda is inlined) */
S = ecalloc(1, sizeof(*S)-sizeof(XSQLDA) + XSQLDA_LENGTH(num_sqlda.sqld));
S->out_sqlda.version = PDO_FB_SQLDA_VERSION;
S->out_sqlda.sqln = num_sqlda.sqld;

isc_dsql_describe(H->isc_status, &s, PDO_FB_SQLDA_VERSION, &S->out_sqlda)

isc_dsql_execute2(H->isc_status, &H->tr, &S->stmt, PDO_FB_SQLDA_VERSION, S->in_sqlda, &S->out_sqlda)

На последнем вызове: General error: -804 Incorrect values within SQLDA structure empty pointer to data at SQLVAR index 0

Если просто isc_dsql_execute и потом isc_dsql_fetch(H->isc_status, &S->stmt, PDO_FB_SQLDA_VERSION, &S->out_sqlda)
То все работает.

Нужно как-то out_sqlda инициализировать по другому в случае isc_dsql_execute2?
...
Рейтинг: 0 / 0
PDO Firebird bugs
    #39360425
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dorin MarcociНужно как-то out_sqlda инициализировать по другому в случае isc_dsql_execute2?

Её нужно хоть как-то инициализировать. Ясно же пишется: "empty pointer to data", то есть
sqldata == NULL. Полученные данные куда клиент должен складывать?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
PDO Firebird bugs
    #39360450
Dorin Marcoci
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry, да, спасибо, нашел косяк.

Там точно &S->out_sqlda->sqlvar[0]->sqldata = NULL

Тоесть нужно заранее приготовить буфер. Я думал что это FB делает при describe или execute2.
Мысль уловил, копаем дальше.
...
Рейтинг: 0 / 0
PDO Firebird bugs
    #39360493
Dorin Marcoci
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ура! Работает!
Там если бы был просто C. А такой стиль в драйвере, логика кодирования и организация структур что пипец.
Ну.. в общем буду еще тестировать, полировать, упаковывать, и потом открою пулл реквест в PHP мастер.
...
Рейтинг: 0 / 0
PDO Firebird bugs
    #39360499
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dorin Marcoci,

Надо бы проверить что ничего старого не сломалось. Спасибо.
...
Рейтинг: 0 / 0
PDO Firebird bugs
    #39360509
Dorin Marcoci
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_dev, это я так, образно писал, дебагером смотрел, никакое присвоение
Денис, тестировал несколько примеров, все ок, и простые селеты, и даже returning id, name.
...
Рейтинг: 0 / 0
PDO Firebird bugs
    #39360516
Dorin Marcoci
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, а как там обьектый API в FB3? готовый к продакшине? есть примеры? Эээх как щас перепишу драйвер :)
Слышал что процедурный стиль щас обертка над обьектным...
...
Рейтинг: 0 / 0
PDO Firebird bugs
    #39360524
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dorin Marcociа как там обьектый API в FB3?
Взяли старые функции, без применения мозга и фантазии сгруппировали по классам на основе
первого хэндла в списке параметров. Всё.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
PDO Firebird bugs
    #39360544
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dorin MarcociКстати, а как там обьектый API в FB3? готовый к продакшине? есть примеры? Эээх как щас перепишу драйвер :)

Примеры есть, но переписывать не стоит.
Не надо ломать совместимость с 2.5
...
Рейтинг: 0 / 0
PDO Firebird bugs
    #39360746
Dorin Marcoci
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов ДенисНе надо ломать совместимость с 2.5
Я так, пошутил конечно. Сможешь тестировать под вин64 билд?
...
Рейтинг: 0 / 0
PDO Firebird bugs
    #39360748
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dorin Marcoci,

смогу если билд выложишь. Я не разбирался как его компилировать
...
Рейтинг: 0 / 0
PDO Firebird bugs
    #39360787
Dorin Marcoci
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот: https://mega.nz/#!EFwCDAjT!kVrAzT7YGPi9Aco6IEdZfR_SISenXL3swTQAYBiS2_M
После распаковке, клади рядом фиребирдскую либу от тройки или чтоб движок находил ее.
...
Рейтинг: 0 / 0
PDO Firebird bugs
    #39360901
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dorin Marcoci,

что-то я не пойму. Я думал ты расширение скомпилировал, а тут весь движок PHP. Ладно попробую запустить
...
Рейтинг: 0 / 0
PDO Firebird bugs
    #39360908
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dorin Marcoci,

вроде всё нормально. Проверил различные виды запросов. INSERT, INSERT ... RETURNING, SELECT, EXECUTE PROCEDURE везде результаты правильные и ничего не падает
...
Рейтинг: 0 / 0
PDO Firebird bugs
    #39360926
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dorin MarcociНужно как-то out_sqlda инициализировать по другому в случае isc_dsql_execute2?Нужно указать - куда данные помещать
Dorin MarcociТоесть нужно заранее приготовить буфер. Я думал что это FB делает при describe или execute2.Нет, FB клиентской памятью не управляет.
В данном случае, скорее всего, память под вых пар-ры\результат выделяется перед первым фетчем.
Это я к тому, куда можно посмотреть в имеющемся коде.
...
Рейтинг: 0 / 0
PDO Firebird bugs
    #39360927
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dorin MarcociУра! Работает!Поздравляю :)
...
Рейтинг: 0 / 0
PDO Firebird bugs
    #39361002
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dorin Marcoci,

надо бы ещё посмотреть нет ли утечек памяти
...
Рейтинг: 0 / 0
PDO Firebird bugs
    #39361069
Dorin Marcoci
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Денис, вроди проверял, все должно быть OK.
В старой реализации шансы были больше на утечек, так как sqldata инициализировалась при firebird_stmt_describe, что было неправильно. Например fetchColumn могли бы не работать, но специально не проверял.
Используется только один выходной буффер sqldata для всех записей и при firebird_stmt_dtor все освобождается.
Дебаг билд кричит в конце если есть утечки, все чисто пока. Там еще до принятия в мэйнстрим проверяют каким-то валгриндом на утечек.
Вот изменения: https://github.com/php/php-src/pull/2230/commits/c92ddeabdc7e40e8e0c2878bd12b96e3dff1a986
Ждем одобрения.
...
Рейтинг: 0 / 0
PDO Firebird bugs
    #39362389
Dorin Marcoci
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Насчет execute block и обработка параметров, вот что есть щас: https://gist.github.com/madorin/83300eaf3d9044bc6e56a710b3700368
new_sql - полученный результат, в хэш списке - именные параметры.
Логика там простая и быстрая, но есть проколы, например не учитывает и комменты (--, /* */).
Супер навороченный парсер/лексер врядли там понадобится но хочется красивое решение.
Нужно в начале определить если "execute block (" и обработать до ")" с существующем алгортиме и все что после передать как есть.
Надо еще учитывать комменты, пробелы, табы и ретурны LF/CRLF.
Все гики и параноики по оптимизации приветствуется :)
...
Рейтинг: 0 / 0
PDO Firebird bugs
    #39362404
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dorin MarcociНадо еще учитывать комменты, пробелы, табы и ретурны LF/CRLF.

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

Код: sql
1.
SELECT 'Параметр :NAME равен ' AS TXT, 'Вася' AS VAL FROM RDB$DATABASE
...
Рейтинг: 0 / 0
PDO Firebird bugs
    #39362408
Dorin Marcoci
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
там есть in_quote, это обрабатывается правильно
...
Рейтинг: 0 / 0
25 сообщений из 222, страница 3 из 9
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / PDO Firebird bugs
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали тему (0):
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]