-
Notifications
You must be signed in to change notification settings - Fork 52
Диалекты: теперь не синглтоны и менее статичны #135
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
А почему бы просто не добавить в методы, которые требуют подключение к БД дополнительный аргумент? Собственно кроме ескейпа есть еще методы которым нужно подключение к БД? |
@ewgRa А кто будет этот аргумент передавать? |
Подумал и дописал: По коду как таковому диалект, не смотря на то что он синглтон везде используется будто бы он не синглтон. Тут в diff исправления по большему счету это лишь: 1) DB наследники, типа PgSQL 2) Сами диалекты 3) и тесты. |
@AlexeyDsov кто будет escape дергать, тот и будет передавать |
В таком случае нужно поправить все Expression и другие logic'и и по всей цепочке вложенности всяких Expression, Не лучше ли что б под каждое подключение создавался свой личный диалект вместо одного общего синглтона? |
Меня смущает, что линк нужен только mysql, но при этом присутствует во всех. То, что диалекты стали не singleton, заставит нас переписать много кода, но это частности. ) |
@dovg неправда ваша, линк нужен почти во всех диалектах, за исключением Imaginary. |
@AlexeyDsov соглашусь. |
Еще по эскейпингу кину ссылочек :)
Т.е. почти все функции либо желают иметь линк, либо требуют, иначе они могут эскейпить непредсказуемо. |
Извините, был напуган. |
…B for correct quoting
Dialects not Singletons now. Some methods now unstatic and they use DB for correct quoting
Замержил. На страничке 1.0 to 1.1 написал что нужно поменять, что б ничего не сломалось:
|
Так сложилось, что текущие способы работы с базами данных требуют подключения к базе данных, т.к. на основе него определяют как корректно выполнять ту или иную операцию (например, эскейпинг строки). Если в методе не задается соединение к базе, то он использует первое попавшееся. Это касается всех баз - sqlite, postgres, mysql. По этой причине я сделал все диалекты не синглтонами, их пораждает наследник DB (PgSQL, MySQL и т.д.) по требованию getDialect и задаёт себя диалекту, что бы он имел возможность использовать коннект к базе что бы часть методов таких как quoteValue, ставшие не статическими, могли указывать какое соединение к базе данных они используют.
Внешне для обычного использования API измениться не должно было. В коде кроме метода DB::getDialect и различных тестов никто не вызывал статически методы *Dialect::me и другие ставшие не статическими.
Сами тесты были переписаны таким образом, что они получают базу и диалект из тестового конфига.