powered by simpleCommunicator - 2.0.44     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / PDO Firebird bugs
25 сообщений из 222, страница 4 из 9
PDO Firebird bugs
    #39362442
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
проверь ещё вариант, когда :параметры и 'квотированные строки' находится внутри комментария.
стандартный парсер IBX криво это обрабатывал.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
PDO Firebird bugs
    #39362470
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий,

там пока обработки комментариев нет.

Dorin Marcoci,

Про строки я проглядел. Там всё нормально. Хотя для комментариев такое простое решение не подойдёт.
...
Рейтинг: 0 / 0
PDO Firebird bugs
    #39362479
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
обработка комментариев ничуть не сложнее строк.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
PDO Firebird bugs
    #39362487
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dorin MarcociНасчет execute block и обработка параметровВозможно, будет полезным посмотреть на аналогичный код из поддержки EXECUTE STATEMENT:

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

см. Statement::preprocess() и getToken() строки с 1001 по 1240
...
Рейтинг: 0 / 0
PDO Firebird bugs
    #39362516
Dorin Marcoci
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Влад, кстати планов поддержки именнованных парамов нету? :)
...
Рейтинг: 0 / 0
PDO Firebird bugs
    #39362569
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dorin MarcociВлад, кстати планов поддержки именнованных парамов нету? :)Никто этого не просил, насколько я помню :)
...
Рейтинг: 0 / 0
PDO Firebird bugs
    #39362636
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvlad,

было такое пожелание, но автора обругали и сказали мол на фиг не надо

http://www.sql.ru/forum/682148/rasshirenie-parsera-fb-obsuzhdenie
...
Рейтинг: 0 / 0
PDO Firebird bugs
    #39362644
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hello, Симонов Денис!
You wrote on 8 декабря 2016 г. 15:18:10:

Симонов Денис> было такое пожелание, но автора обругали и сказали мол на фиг не надоникто его там не ругал.
DS, как обычно, шапками кидался надувая щеки.
а остальным было пофиг.
(и мне тоже)

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
PDO Firebird bugs
    #39362698
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МимопроходящийDS, как обычно, шапками кидался надувая щеки.
а остальным было пофиг.
Ну, тогда я наивно полагал, что если оградить ядерных разработчиков от излишних
фичереквестов, они сделают сервер лучше, надёжнее, быстрее. Сейчас моё мнение изменилось,
но, как ни странно, основные аргументы остались прежними: у ядерных разработчиков нет на
это времени, а остальным, кто теоретически мог бы это сделать, включая меня, оно нафиг не
сдалось.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
PDO Firebird bugs
    #39367304
Павел Ишенин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кто-нибудь пробовал собирать это расширение на linux из исходников? Я правильно понимаю, что нужно будет собирать всё php и одним расширением мне не обойтись?
...
Рейтинг: 0 / 0
PDO Firebird bugs
    #39367305
Павел Ишенин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зря вопрос задал. Оказывается все предельно просто. Если кому вдруг понадобится, то процесс следующий:
git clone репозитория php

идем в каталог расширения pdo_firebird

phpize

./configure

make

sudo make install
...
Рейтинг: 0 / 0
PDO Firebird bugs
    #39367313
Павел Ишенин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Начал тестировать fb3 с поправленным pdo_firebird на своем проекте. Ошибка с RETURNING действительно ушла в большинстве мест.

Но один запрос все еще ругается, правда теперь с другой ошибкой:
General error: -501 Attempt to reclose a closed cursor . The SQL statement executed was:
UPDATE TM_MAIL SET READ_DATE = CURRENT_TIMESTAMP WHERE IDTM_MAIL = :IDTM_MAIL RETURNING READ_DATE
...
Рейтинг: 0 / 0
PDO Firebird bugs
    #39367371
Павел Ишенин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сделал минимальный пример

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
<?php
require 'testdb.inc';
$C = new PDO('firebird:dbname='.$test_base, $user, $password) or die;
$C->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$C->exec('create table test_mail(idtm_mail integer, read_date timestamp)');
$C->exec('insert into test_mail(idtm_mail) values (1)');
$S = $C->prepare('update test_mail set read_date = current_timestamp where idtm_mail = 1 returning read_date');
try{
  $S->execute();
  $D = $S->fetch(PDO::FETCH_NUM);
  echo $D[0];
  $S->closeCursor();
} catch (Exception $e) {
  echo $e->getMessage();
  unset($S);
  unset($C);
}
?>



Комментирование строки "$S->closeCursor();" убирает Exception, но так как pdo_firebird используется в проекте через Yii-фреймворк, то это не устраняет проблем конечного приложения.
...
Рейтинг: 0 / 0
PDO Firebird bugs
    #39367398
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Павел ИшенинКомментирование строки "$S->closeCursor();" убирает Exception, но так как pdo_firebird используется в проекте через Yii-фреймворк, то это не устраняет проблем конечного приложения.Каких проблем?
...
Рейтинг: 0 / 0
PDO Firebird bugs
    #39367402
Dorin Marcoci
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Павел, поведение правильное. В 3.0 "returning" не открывает курсор, так как возвращается ровно одна запись.
Получается уже нечего закрывать.
...
Рейтинг: 0 / 0
PDO Firebird bugs
    #39367423
Павел Ишенин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо. Если поведение правильное, то значит нужно править в приложении или Yii.
...
Рейтинг: 0 / 0
PDO Firebird bugs
    #39367469
Dorin Marcoci
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Павел, спасибо и вам, это наводило ны мысль и поимки бага что два последовательных стэйтментов с "returning" не работали правильно. Уже тестировал и фиксил локально.
...
Рейтинг: 0 / 0
PDO Firebird bugs
    #39367546
Павел Ишенин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dorin Marcoci,

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

Вот код закрытия и он проверяет что S->cursror_open:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
static int firebird_stmt_cursor_closer(pdo_stmt_t *stmt) /* {{{ */
{
	pdo_firebird_stmt *S = (pdo_firebird_stmt*)stmt->driver_data;

	/* close the statement handle */
	if ((*S->name || S->cursor_open) && isc_dsql_free_statement(S->H->isc_status, &S->stmt, DSQL_close)) {
		RECORD_ERROR(stmt);
		return 0;
	}
	*S->name = 0;
	S->cursor_open = 0;
	return 1;
}



А вот кусок кода, который этот cursor_open выставляет:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
static int firebird_stmt_execute(pdo_stmt_t *stmt) /* {{{ */
...
		switch (S->statement_type) {
			case isc_info_sql_stmt_insert:
			case isc_info_sql_stmt_update:
			case isc_info_sql_stmt_delete:
			case isc_info_sql_stmt_exec_procedure:
...
		S->cursor_open = (S->out_sqlda.sqln > 0);	/* A cursor is opened, when more than zero columns returned */



Таким образом firebird_stmt_execute обладая информацией о типе запроса, выставляет флаг опираясь на другие факторы.

Полагаю, что S->cursor_open не нужно выставлять в true для запросов insert, update, delete даже если они возвращают столбец.
...
Рейтинг: 0 / 0
PDO Firebird bugs
    #39367561
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Курсор может быть только для
isc_info_sql_stmt_select и isc_info_sql_stmt_select_for_upd
...
Рейтинг: 0 / 0
PDO Firebird bugs
    #39367569
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladКурсор может быть только для
isc_info_sql_stmt_select и isc_info_sql_stmt_select_for_upd

И то не всегда. Поэтому тщатильнее надо с установкой этого флага.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
PDO Firebird bugs
    #39367576
Павел Ишенин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvlad,

Спасибо, это действительно решает проблему драйвера и Yii без правок последнего.

Вот вся правка:
Код: plaintext
1.
2.
3.
4.
5.
                /* A cursor is opened, when more than zero columns returned.
                 * We must also check the statement type since only SELECT and 
                 * SELECT FOR UPDATE statements open a cursor.
                 */
		S->cursor_open = (S->out_sqlda.sqln > 0) && (S->statement_type == isc_info_sql_stmt_select || S->statement_type == isc_info_sql_stmt_select_for_upd);
...
Рейтинг: 0 / 0
PDO Firebird bugs
    #39367579
Dorin Marcoci
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Павел, код закрытия правильный. Там неправильно инициализировался S->cursor_open в firebird_stmt_execute().
Раньше пологалось что если есть столбцы (out_sqlda.sqln) то это прямо cursor_open.
А при синглетонов получается что столбцы есть, а курсора нету :)

Вот фикс:
https://github.com/php/php-src/pull/2241/commits/6b5dc90efa75c2785d6078b94521ccf1e16ea1c5

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

Код: plaintext
1.
S->cursor_open = S->out_sqlda.sqln && (S->statement_type != isc_info_sql_stmt_exec_procedure);



У меня запрос update, следовательно S->statement_type != isc_info_sql_stmt_exec_procedure. При этом видимо S->out_sqlda.sqln выдает 1.

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

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


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