Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Firebird, InterBase Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 .. 27 28 29 30 31 32 33 34 35 [36]
 Re: Конкурс идей про Firebird  [new]
Симонов Денис
Member

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

хотя с UTF-16 облом будет, для однобайтных работает
29 апр 19, 16:50    [21874624]     Ответить | Цитировать Сообщить модератору
 Re: Конкурс идей про Firebird  [new]
Basil A. Sidorov
Member

Откуда:
Сообщений: 9160
Симонов Денис
вообще-то не обязан, достаточно задать исходную кодировку клиента в XSQLDA или IMetadataBuilder
Именно это и предлагается изменить.
29 апр 19, 16:53    [21874628]     Ответить | Цитировать Сообщить модератору
 Re: Конкурс идей про Firebird  [new]
Симонов Денис
Member

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

зачем? Это довольно удобно. Вообще преобразование форматов удобная штука
29 апр 19, 16:56    [21874631]     Ответить | Цитировать Сообщить модератору
 Re: Конкурс идей про Firebird  [new]
Basil A. Sidorov
Member

Откуда:
Сообщений: 9160
Симонов Денис
Вообще преобразование форматов удобная штука
Удобная.
Вопрос только в одном: где это самое преобразование делать.
И ответ: на клиенте. А сервер уже хранит всё однозначным и унифицированным образом, оставляя лазейку только для OCTETS.
29 апр 19, 17:06    [21874643]     Ответить | Цитировать Сообщить модератору
 Re: Конкурс идей про Firebird  [new]
Мимопроходящий
Member

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

29.04.2019 17:06, Basil A. Sidorov пишет:
> И ответ: на клиенте. А сервер уже хранит всё однозначным и унифицированным образом, оставляя лазейку только для OCTETS.

а смысл?

Posted via ActualForum NNTP Server 1.5

29 апр 19, 17:08    [21874646]     Ответить | Цитировать Сообщить модератору
 Re: Конкурс идей про Firebird  [new]
Симонов Денис
Member

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

ты лучше подумай о том что не всё лазит через fbclient + вопрос обратной совместимости. Кстати чем именно не устраивает преобразование как оно происходит сейчас?
29 апр 19, 17:11    [21874651]     Ответить | Цитировать Сообщить модератору
 Re: Конкурс идей про Firebird  [new]
Dimitry Sibiryakov
Member

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

Симонов Денис
Кстати чем именно не устраивает преобразование как оно происходит сейчас?

Тем, что оно тормозит сервер и работает криво местами.

PS: Я это предложение вносил ещё лет 10-15 назад.

Posted via ActualForum NNTP Server 1.5

29 апр 19, 17:20    [21874660]     Ответить | Цитировать Сообщить модератору
 Re: Конкурс идей про Firebird  [new]
Basil A. Sidorov
Member

Откуда:
Сообщений: 9160
Отвечаю по пунктам.
1. Новой версии сервера - новый протокол. Всё, что "лазит мимо fbclient" - пойдёт лесом на общих основаниях.
2. Смысл простой - унификация хранения информации. Обратная совместимость, конечно, хорошо, но "Вавилон должен быть разрушен".
29 апр 19, 17:21    [21874662]     Ответить | Цитировать Сообщить модератору
 Re: Конкурс идей про Firebird  [new]
Симонов Денис
Member

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

это предложение поломает как минимум половину драйверов. И дело там не только в кодировке символов сколько в самом принципе преобразования форматов. Вот только недавно посмотрел исходники кривоватого PDO драйвера PHP. Так они там почти все типы принудительно в текст переводят. Думаешь в других такого мало?
29 апр 19, 17:26    [21874666]     Ответить | Цитировать Сообщить модератору
 Re: Конкурс идей про Firebird  [new]
Старый плюшевый мишка
Member

Откуда:
Сообщений: 577
Basil A. Sidorov
Обратная совместимость, конечно, хорошо, но "Вавилон должен быть разрушен".


Всех убью, один останусь (С)?
29 апр 19, 18:10    [21874718]     Ответить | Цитировать Сообщить модератору
 Re: Конкурс идей про Firebird  [new]
Симонов Денис
Member

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

то что лазиет через fbclient тоже само по себе не узнает о твоих нововведениях. См. выше
29 апр 19, 18:12    [21874720]     Ответить | Цитировать Сообщить модератору
 Re: Конкурс идей про Firebird  [new]
Basil A. Sidorov
Member

Откуда:
Сообщений: 9160
Симонов Денис
то что лазиет через fbclient тоже само по себе не узнает о твоих нововведениях
Ему и не надо. Совсем не надо.
29 апр 19, 18:21    [21874731]     Ответить | Цитировать Сообщить модератору
 Re: Конкурс идей про Firebird  [new]
Basil A. Sidorov
Member

Откуда:
Сообщений: 9160
Старый плюшевый мишка
Всех убью, один останусь (С)?
Не тот случай.
Сейчас можно обновить сервер и не обновлять клиента. Но не всегда - даже в тройке требуется обновить клиента в умалчиваемой конфигурации сервера.
Если предложение будет принято, то обновить клиента придётся до обновления сервера. Неприятно, но совсем не смертельно.
29 апр 19, 18:24    [21874737]     Ответить | Цитировать Сообщить модератору
 Re: Конкурс идей про Firebird  [new]
Дегтярев Евгений
Member

Откуда: Барнаул
Сообщений: 1578
Симонов Денис
Вот только недавно посмотрел исходники кривоватого PDO драйвера PHP. Так они там почти все типы принудительно в текст переводят.

это при отправке на сервер?
29 апр 19, 18:30    [21874746]     Ответить | Цитировать Сообщить модератору
 Re: Конкурс идей про Firebird  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 9554
Дегтярев Евгений,

да. Если интересно глянь исходник. Функция firebird_stmt_param_hook
И всё бы хорошо, но с BOOLEAN обломчик вышел
29 апр 19, 20:33    [21874852]     Ответить | Цитировать Сообщить модератору
 Re: Конкурс идей про Firebird  [new]
Дегтярев Евгений
Member

Откуда: Барнаул
Сообщений: 1578
Может не туда смотрел, но не увидел принудительной конвертации параметров в строку

зы
щелчк по номеру строки даст ссылку на нее
30 апр 19, 06:34    [21875099]     Ответить | Цитировать Сообщить модератору
 Re: Конкурс идей про Firebird  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 9554
Дегтярев Евгений,

значит просто не понимаешь что там написано.

+ немного о параметрах в PDO
Сначала напомню как задаются параметры

public PDOStatement::bindParam ( mixed $parameter , mixed &$variable [, int $data_type = PDO::PARAM_STR [, int $length [, mixed $driver_options ]]] ) : bool

или

public PDOStatement::bindValue ( mixed $parameter , mixed $value [, int $data_type = PDO::PARAM_STR ] ) : bool


Обращаем внимание на $datatype

PDO::PARAM_BOOL (integer)
Представляет логический тип данных.

PDO::PARAM_NULL (integer)
Представляет тип данных SQL NULL.

PDO::PARAM_INT (integer)
Представляет тип данных SQL INTEGER.

PDO::PARAM_STR (integer)
Представляет типы данных SQL CHAR, VARCHAR и другие строковые типы.

PDO::PARAM_LOB (integer)
Представляет тип данных больших объектов SQL.


+ принудительная преобразование в bigint
Теперь читаем код. Если тип входного параметра PDO (не Firebird) IS_LONG, то

case IS_LONG:
  /* keep the allow-NULL flag */
  var->sqltype = (sizeof(zend_long) == 8 ? SQL_INT64 : SQL_LONG) | (var->sqltype & 1);
  var->sqldata = (void*)&Z_LVAL_P(parameter);
  var->sqllen = sizeof(zend_long);
  break;


плевать что в SQLVAR было до того как в PDO запихали первый параметр всё равно зададим его SQL_INT64 или SQL_LONG. Ну на сервере всё равно конвертация произойдёт.


читаем дальше

+ преобразование в строку
case IS_STRING:
  force_null = 0;

  /* for these types, an empty string can be handled like a NULL value */
  switch (var->sqltype & ~1) {
    case SQL_SHORT:
    case SQL_LONG:
    case SQL_INT64:
    case SQL_FLOAT:
    case SQL_DOUBLE:
    case SQL_TIMESTAMP:
    case SQL_TYPE_DATE:
    case SQL_TYPE_TIME:
      force_null = (Z_STRLEN_P(parameter) == 0);
  }
  if (!force_null) {
    /* keep the allow-NULL flag */
    var->sqltype = SQL_TEXT | (var->sqltype & 1);
    var->sqldata = Z_STRVAL_P(parameter);
    var->sqllen	 = Z_STRLEN_P(parameter);
    break;
}


если параметр в PHP типа IS_STRING (а это то во что он преобразуется по умолчанию, ибо $data_type = PDO::PARAM_STR), то для некоторых типов считаем пустую строку NULL, а затем в SQLVAR принудительно задаём тип CHAR с размерностью строки.
30 апр 19, 07:07    [21875110]     Ответить | Цитировать Сообщить модератору
 Re: Конкурс идей про Firebird  [new]
Дегтярев Евгений
Member

Откуда: Барнаул
Сообщений: 1578
на сколько я понимаю, switch идет по типу фактической переменной, а не коду, переданному в bindParam
zval *parameter;
...
switch (Z_TYPE_P(parameter)) {
30 апр 19, 09:52    [21875234]     Ответить | Цитировать Сообщить модератору
 Re: Конкурс идей про Firebird  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 9554
Дегтярев Евгений,

он перед firebird_stmt_param_hook преобразуется к тому что задано в bindParam, если делать чистый $stmt->execute($params), то не преобразуется. Но и это не столь важно.

Пых говорит у меня есть строка, а то какого типа параметр в Firebird ему почти всегда по фиг, я (пых) даю строку, а ты (Firebird) сам преобразуй в свой тип. Понял о чём я?
30 апр 19, 10:06    [21875260]     Ответить | Цитировать Сообщить модератору
 Re: Конкурс идей про Firebird  [new]
Дегтярев Евгений
Member

Откуда: Барнаул
Сообщений: 1578
автор
он перед firebird_stmt_param_hook преобразуется к тому что задано в bindParam

так а почему ты сразу не сообщаешь весь контекст?
30 апр 19, 10:16    [21875269]     Ответить | Цитировать Сообщить модератору
 Re: Конкурс идей про Firebird  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 9554
Дегтярев Евгений,

Ладно зря я это затеял. Короче основной мой посыл в том, что PDO отдаёт Firebird данные в том формате, в котором ему удобно, а не в том, что вернул Firebird после prepare.

Напомню я этот разговор затеял только в ответ на желание некоторых отказаться от преобразования чарсетов на сервере, напомнив что в данном случае преобразование кодировок это только одна из частей по преобразованию форматов сообщений.
30 апр 19, 10:25    [21875277]     Ответить | Цитировать Сообщить модератору
 Re: Конкурс идей про Firebird  [new]
Дегтярев Евгений
Member

Откуда: Барнаул
Сообщений: 1578
ну почему же зря ))

автор
он перед firebird_stmt_param_hook преобразуется к тому что задано в bindParam

ок. значит этим занимается php_pdo, а не драйвер (php_pdo_firebird)
и даже в таком случая я не согласен с
автор
Так они там почти все типы принудительно в текст переводят.

получается, что переводится в тот тип, который указал разработчик при вызове bindParam/bindValue

зы
а в чем проблема с boolean была? с тем, что false приводится к пустой строке?
30 апр 19, 10:53    [21875317]     Ответить | Цитировать Сообщить модератору
 Re: Конкурс идей про Firebird  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 9554
Дегтярев Евгений,

нет. Проблема в том, что необходимо обеспечить работоспособность при любом типе заданном в bindParam/bindValue, даже когда он не задан (в этом случае это как раз строка). А в пыхе boolean транслируется в строку как '' или '1', что Firebird не принимает, ему нужен 'true' или 'false'. Плюс требовалось чтобы он и через PDO::PARAM_INT принимал 0 или 1. А ещё проблема в том, что в их реализации пых перетирал сведения об исходном типе.

Если так интересно глянь мой патч https://github.com/php/php-src/pull/4014/files
30 апр 19, 11:26    [21875353]     Ответить | Цитировать Сообщить модератору
 Re: Конкурс идей про Firebird  [new]
X11
Member

Откуда: Kharkiv, Ukraine
Сообщений: 13001
makhaon
1. Иметь возможность работать с json/xml непосредственно. В качестве выходного результата и входного набора, Input и Output. Может быть в некоторых случая полезно.


+1
19 июн 19, 08:44    [21911190]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 .. 27 28 29 30 31 32 33 34 35 [36]
Все форумы / Firebird, InterBase Ответить