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

Откуда:
Сообщений: 269
Поздравляю! :)

Анатолий (weltling) там человек добрый, русский, работает в MS, Германии.
Наверное отвечает за php под windows, во многом помогал при правке багов.
7 июл 18, 19:11    [21552403]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: PDO Firebird bugs  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 10378
Наконец-то в ветку PHP 7.4 приняли мой патч для нативной поддержки типа BOOLEAN во входных параметрах

PDO firebird support type Boolean in input parameters
10 сен 19, 17:31    [21967996]     Ответить | Цитировать Сообщить модератору
 Re: PDO Firebird bugs  [new]
Gallemar
Member

Откуда: г.Иркутск
Сообщений: 5272
Симонов Денис
Наконец-то в ветку PHP 7.4 приняли мой патч для нативной поддержки типа BOOLEAN во входных параметрах

PDO firebird support type Boolean in input parameters

Поздравляю Картинка с другого сайта.
10 сен 19, 18:00    [21968016]     Ответить | Цитировать Сообщить модератору
 Re: PDO Firebird bugs  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 10378
В PHP 7.4 PDO будет поддерживать базы данных в 1 диалекте. Мой патчи применили

Add support for Interbase 1 dialect
29 окт 19, 09:19    [22004739]     Ответить | Цитировать Сообщить модератору
 Re: PDO Firebird bugs  [new]
hvlad
Member

Откуда:
Сообщений: 10765
Очень хорошо!
29 окт 19, 11:46    [22004896]     Ответить | Цитировать Сообщить модератору
 Re: PDO Firebird bugs  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 10378
Dorin Marcoci
Насчет execute block и обработка параметров, вот что есть щас: https://gist.github.com/madorin/83300eaf3d9044bc6e56a710b3700368
new_sql - полученный результат, в хэш списке - именные параметры.
Логика там простая и быстрая, но есть проколы, например не учитывает и комменты (--, /* */).
Супер навороченный парсер/лексер врядли там понадобится но хочется красивое решение.
Нужно в начале определить если "execute block (" и обработать до ")" с существующем алгортиме и все что после передать как есть.
Надо еще учитывать комменты, пробелы, табы и ретурны LF/CRLF.
Все гики и параноики по оптимизации приветствуется :)


hvlad
Dorin Marcoci
Насчет execute block и обработка параметров
Возможно, будет полезным посмотреть на аналогичный код из поддержки EXECUTE STATEMENT:

https://github.com/FirebirdSQL/firebird/blob/master/src/jrd/extds/ExtDS.cpp

см. Statement::preprocess() и getToken() строки с 1001 по 1240


сделал https://github.com/php/php-src/pull/4920
вроде работает. Осталось дождаться ревьювера и оформить по их правилам, и написать тесты. Владу спасибо за подсказку
17 ноя 19, 17:10    [22018244]     Ответить | Цитировать Сообщить модератору
 Re: PDO Firebird bugs  [new]
Dorin Marcoci
Member

Откуда:
Сообщений: 269
;) Денис, это невероятно круто, спасибо за труд!

Есть еще какие-то косяки помню с транзакциями (параметры и несколько паралельных) и вообще получится конфетка.
18 ноя 19, 16:28    [22018926]     Ответить | Цитировать Сообщить модератору
 Re: PDO Firebird bugs  [new]
Симонов Денис
Member

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

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

Если вспомнишь в чём именно косяки посмотрю потом.
18 ноя 19, 16:36    [22018936]     Ответить | Цитировать Сообщить модератору
 Re: PDO Firebird bugs  [new]
Симонов Денис
Member

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

если ты про несколько транзакций внутри соединения, то на это проще забить. PDO архитектурно этого не поддерживает, ибо интерфейс у него обобщённый на разные СУБД. А такое поддерживает только 2 (IB и FB). Впрочем в пыхе оно и не сильно надо
18 ноя 19, 16:41    [22018943]     Ответить | Цитировать Сообщить модератору
 Re: PDO Firebird bugs  [new]
Dorin Marcoci
Member

Откуда:
Сообщений: 269
Симонов Денис
если ты про несколько транзакций внутри соединения, то на это проще забить. PDO архитектурно этого не поддерживает, ибо интерфейс у него обобщённый на разные СУБД. А такое поддерживает только 2 (IB и FB). Впрочем в пыхе оно и не сильно надо

Это я знаю ) но думал теоретически может как в файрдаке добавить какой-то PDOTransaction обьект

Еще параметры транзакций были вшиты как read-commited или точно помню что там было что-то, проверю )
18 ноя 19, 17:00    [22018978]     Ответить | Цитировать Сообщить модератору
 Re: PDO Firebird bugs  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 10378
Dorin Marcoci
Это я знаю ) но думал теоретически может как в файрдаке добавить какой-то PDOTransaction обьект


теоретически можно, но боюсь коммунити такое изменение зарежет на корню. Ибо этот PDOTransaction надо передавать в PDOStatement::execute. А не так как сделали в ibase_ (они к prepare привязали)

Лучше уж тогда написать нормальный нативный драйвер.

Dorin Marcoci
Еще параметры транзакций были вшиты как read-commited или точно помню что там было что-то, проверю )


там SNAPSHOT. Если нужны другие уровни изолированности, то можно стартовать транзакцию через

$dbh->exec('SET TRANSACTION ...')


по идее. Надо проверить кстати работает ли.
18 ноя 19, 17:47    [22019041]     Ответить | Цитировать Сообщить модератору
 Re: PDO Firebird bugs  [new]
Dorin Marcoci
Member

Откуда:
Сообщений: 269
Было бы удобно передать изолированность транзакции в конструкторе PDO обьекта. Другие драйверы делают что-то подобное.

public PDO::__construct ( string $dsn [, string $username [, string $passwd [, array $options ]]] ) << здесь

Кто-то даже начал очень давно такое:
https://github.com/php/php-src/blob/e208d236b3f8af855e219ea3abc796b8dd9d0d5d/ext/pdo_firebird/firebird_driver.c#L276
18 ноя 19, 19:20    [22019141]     Ответить | Цитировать Сообщить модератору
 Re: PDO Firebird bugs  [new]
Dorin Marcoci
Member

Откуда:
Сообщений: 269
Симонов Денис
теоретически можно, но боюсь коммунити такое изменение зарежет на корню. Ибо этот PDOTransaction надо передавать в PDOStatement::execute. А не так как сделали в ibase_ (они к prepare привязали)

Можно же менее хардкорно, например
PDO->transaction(params)  // creates a new PDOTransaction
PDOTransaction->prepare // creates a new PDOStatement

И весь существующий код будет работать и не мешать другим :)
18 ноя 19, 21:37    [22019208]     Ответить | Цитировать Сообщить модератору
 Re: PDO Firebird bugs  [new]
Симонов Денис
Member

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

а толку то? Ещё повторю подготовленные запросы не привязаны к транзакции и далее могут выполняться сколько угодно раз в разных транзакциях
18 ноя 19, 22:19    [22019226]     Ответить | Цитировать Сообщить модератору
 Re: PDO Firebird bugs  [new]
Dorin Marcoci
Member

Откуда:
Сообщений: 269
Симонов Денис
подготовленные запросы не привязаны к транзакции

ок, а так? тоже не ломает совместимость.
$transaction = PDO->transaction(params);
$statement->setTransaction($transaction);
$statement->execute();
19 ноя 19, 11:59    [22019473]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 2 3 4 5 6 [7]      все
Все форумы / Firebird, InterBase Ответить