powered by simpleCommunicator - 2.0.44     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / PDO Firebird bugs
25 сообщений из 222, страница 5 из 9
PDO Firebird bugs
    #39367626
Dorin Marcoci
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Щас проверим, знаю только что при insert returning тип тоже был isc_info_sql_stmt_exec_procedure.
...
Рейтинг: 0 / 0
PDO Firebird bugs
    #39367638
Павел Ишенин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов ДенисПавел Ишенин,

запросы с returning возвращают isc_info_sql_stmt_exec_procedure

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

Код: php
1.
2.
3.
$S = $D->prepare('update ta_test set name = :name where id = :id returning id');
$S->execute(['id' => 1, 'name' => 'AAA']);
$S->execute(['id' => 1, 'name' => 'BBB']);


Курсор не открывается.
...
Рейтинг: 0 / 0
PDO Firebird bugs
    #39367670
Dorin Marcoci
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Денис, вчерашняя статья на хабре учетная, поздравляю!
Кстати, нужно добавить доддержку файра и для Doctrine.
Очень многие фрэймворки используют ее, и следовательно будет и продвижение.
Вот в phpbb3,4 выкинули поддержку :(
Получается DBMS хорошая, а продвижение и маркетинг - почти ноль.
А то, будет медленно умирать как десктопная дб для делфи...
Или может нанять маркетолога. Еще и сайт файра на бутстрапе чтоб респонсив был.
Заодно и где-то и список сайтов, built with Firebird :) У нас есть кучка.
Вот такой вот маленький оффтоп.
...
Рейтинг: 0 / 0
PDO Firebird bugs
    #39367693
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dorin Marcoci,

Спасибо. Как только исправление по returning попадёт в драйвер PDO, выпилю кусок гавнокода из моего драйвера Laravel, а то там для тройки прыжки в ширину приходилось делать.
...
Рейтинг: 0 / 0
PDO Firebird bugs
    #39378944
Dorin Marcoci
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хэллоу! Все проснулись? С праздником!
Я пилил в своем брэнче фичу чтоб целые типы (SMALLINT, INTEGER, BIGINT) возвращались как целые в PHP а не как щас - строки.
Если кому-то интересно протестировать, буду очень рад, так как не хочется сломать что-то другое, особенно на x86.
Исходники: https://github.com/madorin/php-src/tree/fb_native
...
Рейтинг: 0 / 0
PDO Firebird bugs
    #39379252
Фотография Gallemar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dorin MarcociХэллоу! Все проснулись? С праздником!
Привет. Я и не ложился. С праздником тебя!!!
...
Рейтинг: 0 / 0
PDO Firebird bugs
    #39387844
Dorin Marcoci
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Денис, сегодня вышел 7.0.15 и 7.1.1 с
* Fixed bug #72931 (PDO_FIREBIRD with Firebird 3.0 not work on returning statement).
...
Рейтинг: 0 / 0
PDO Firebird bugs
    #39387857
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dorin Marcoci,

отлично. Спасибо. Подкручу свой модуль для Laravel
...
Рейтинг: 0 / 0
PDO Firebird bugs
    #39452596
Dorin Marcoci
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добавил поддержку булеан полей: https://github.com/php/php-src/pull/2522
Testers are welcome :)
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
PDO Firebird bugs
    #39650673
Павел Ишенин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Заметил утечку памяти при работе с blob-полями (тестировалось на Yii). Сделаю на днях тест на чистом pdo_firebird.
...
Рейтинг: 0 / 0
PDO Firebird bugs
    #39650721
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Павел Ишенин,

с этим не сюда, а в Yii. Если бы утечка была в ФБ, об этом давно было бы известно и исправлено. А так - хрен знает что компонентописатели пишут. Может и с утечкой. Но исправлять-то тогда Yii надо.
...
Рейтинг: 0 / 0
PDO Firebird bugs
    #39650734
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv,

не в fb и не Yii, а в pdo драйвере. Раз уж Dorin Marcoci взялся в нём ошибки править, то логично к нему постучаться. Само сообщество PHP довольно вялое. По крайней мере баги в PDO драйвере для Firebird них не в приоритете, вот если в mysql-ом драйвере ошибку нашли то реагируют значительно быстрее.
...
Рейтинг: 0 / 0
PDO Firebird bugs
    #39650816
Павел Ишенин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yii тут не причем.

Вот код на чистом php:
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
<?php

$dbh = new PDO('firebird:dbname=...;role=...;charset=UTF8', "...", "...") or die;

$limit = 250;
$offset = 0;

while (true) {
   $start = $offset + 1;
   $stop = $offset + $limit;

   $sql = "SELECT * FROM tablename ROWS {$start} TO {$stop}";
   $stmt = $dbh->prepare($sql);
   $stmt->execute();
   $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
   if (count($rows) < $limit) {
     return;
   }
   unset($stmt);
   $rows = null;
   $offset += $limit;
   echo "used: " . memory_get_usage(true) . "\r\n";
}
unset($dbh);



Вот итоги использования памяти:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
used: 10485760
used: 16777216
used: 20971520
used: 27262976
used: 33554432
used: 37748736
used: 41943040
used: 46137344
used: 52428800
used: 58720256
used: 62914560
used: 69206016
used: 75497472
...
Рейтинг: 0 / 0
PDO Firebird bugs
    #39650817
Павел Ишенин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Забыл добавить, что тестировалось на php 7.1.18 windows. В таблице 2 блоб поля для которых используется следующий домен:
Код: plsql
1.
CREATE DOMAIN T_MEMO AS BLOB SUB_TYPE 1 CHARACTER SET UTF8
...
Рейтинг: 0 / 0
PDO Firebird bugs
    #39650828
Павел Ишенин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
При анализе кода pdo_firebird вот первое за что цепляется глаз:
Код: plaintext
1.
*ptr = S->fetch_buf[colno] = erealloc(*ptr, *len+1);



Зачем там erealloc? Разве где-то память выделяется ранее? И если нет, то всегда ли там null?

Под все остальные типы используется следующая конструкция:
Код: plaintext
1.
*ptr = FETCH_BUF(S->fetch_buf[colno], char, *len, NULL);
...
Рейтинг: 0 / 0
PDO Firebird bugs
    #39650849
Фотография Дегтярев Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денисkdv,

не в fb и не Yii, а в pdo драйвере. Раз уж Dorin Marcoci взялся в нём ошибки править, то логично к нему постучаться. Само сообщество PHP довольно вялое. По крайней мере баги в PDO драйвере для Firebird них не в приоритете, вот если в mysql-ом драйвере ошибку нашли то реагируют значительно быстрее.

самым правильным вариантом будет найти утечку, исправить и сделать пул реквест
...
Рейтинг: 0 / 0
PDO Firebird bugs
    #39650850
Фотография Дегтярев Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
как минимум зарепортить, если такого тикета еще нет
...
Рейтинг: 0 / 0
PDO Firebird bugs
    #39650854
Павел Ишенин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дегтярев Евгений,

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

не факт что утечка есть. Менеджер памяти PHP не обязан моментально освобождать память.
Ну и не плохо бы проверить разные варианты, когда есть BLOB поле и когда его нет.

Павел ИшенинЗачем там erealloc? Разве где-то память выделяется ранее? И если нет, то всегда ли там null?

я не слишком разбираюсь во внутренностях PHP, но для BLOB заранее память может быть выделена разве что для ISC_QUAD и Null флага. А вот с самим содержимым BLOB намного сложнее, там как раз память должна выделяться если блоб не пустой. А вот когда оно должно освобождаться хз, по идее по правилам PHP
...
Рейтинг: 0 / 0
PDO Firebird bugs
    #39650865
Фотография Дегтярев Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Павел Ишенин,

а как тестируете?
консольно вряд ли получится
имеет смысл сделать скрипт, например test.php, в той же папке запустить php в режиме девсервера, дать нагрузку и смотреть за расходом памяти
Код: sql
1.
2.
> php -S localhost:8000
> ab -n 10000 http://localhost:8000/test.php


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

зы
проверьте тот же сценарий с расширением interbase (ibx_)
...
Рейтинг: 0 / 0
PDO Firebird bugs
    #39650931
Павел Ишенин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дегтярев Евгений,

Тестирую именно консолью. Обратите внимание на скрипт - это просто последовательный запрос таблицы по 250 строк. На моей таблице > 200 тысяч строк я получаю превышение памяти в php. Я пробовал этот скрипт и с принудительной сборкой мусора и без.

Если вдаваться в логику, то statement при смерти должен удалять буферы, и как следствие память не должна расти при запросе очередной порции строк. Более того, я проверил этот скрипт на postgres и там действительно нет роста памяти.
...
Рейтинг: 0 / 0
PDO Firebird bugs
    #39650942
Фотография Дегтярев Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Павел Ишенин,

а что с ibase_?
извиняюсь, в пред сообщении написал ibx
...
Рейтинг: 0 / 0
PDO Firebird bugs
    #39650952
Павел Ишенин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дегтярев Евгенийа что с ibase_?
извиняюсь, в пред сообщении написал ibx

Может ли это помочь проблеме? И если да, то как?
...
Рейтинг: 0 / 0
PDO Firebird bugs
    #39650955
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дегтярев Евгений,

в ibase_ работа с BLOB реализована чуток иначе. Там есть два режима вычитки блобов.

1. При фетче читается только blob_id из которого ibase_ функциями можно прочитать содержимое
2. Читается всё содержимое блоба при фетче (при соответствующем флаге)

Я так понимаю эти два случая надо рассматривать отдельно. Скорее всего 1-ый случай работает без косяков, так как управление хендлами отдаётся на откуп пользователю (см. ibase_blob_close).
...
Рейтинг: 0 / 0
25 сообщений из 222, страница 5 из 9
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / PDO Firebird bugs
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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