Postgresql, разный эскейпинг в разных системах
Closed this issue · 3 comments
Возникла не ловящаяся бага, видимо, после начала использования Postgres 9.1. На разных системах по разному эскейпятся данные и подчас не корректно. Речь о функциях в PostgresDialect - pg_escape_string и pg_escape_bytea. Сталкивался ли кто-нибудь с подобным?
Если решение не найдется от чего зависит различное поведение этих функций, то, думаю возьмусь переписать PgSQL на использование PDO адаптера. Помимо этого попробую сделать все диалекты не синглтонами и что бы в их методы эскейпинга передовался текущий ресурс соединения для явного использования, т.к. например pg_escape_string на деле использует последний коннект к базе, но не явно.
Для чего нужно "сделать все диалекты не синглтонами" ? подразумевается что одновременно могут быть несколько диалектов одного класса но с разным состоянием?
Хочется на каждое DB по экземпляру диалекта, т.к. в общем случае может оказаться что есть два PgSQL, которые смотрят на базы разных версий.
Сделал легкий "компромисный вариант" патча для примера: https://github.com/AlexeyDsov/onphp-framework/compare/dialects
Тут диалекты все так же синглтоны, но при этом все DB при вызове getDialect теперь сетят себя в этот диалект. Так же часть DB методов перестают быть статическими.
Что вы думаете об этом?