Бага вылезла из баги 3166. Коротко: 1. postgres=# CREATE DATABASE VvVv; CREATE DATABASE postgres=# \c VvVv FATAL: база данных "VvVv" не существует Предыдущее соединение сохранено postgres=# \c vvvv You are now connected to database "vvvv". vvvv=# соответственно SELTA создать базу с названием в верхнем регистре не может. Может PgAdmin, 2. Но селта с ней номально не сможет работать, потому что в odbc драйвере повсеместно понатыканы CharLowerBuff, а именно: SC_pos_update column_name SC_pos_add column_name PGAPI_DriverConnect database SQLColumnsW TableName SQLColumnsW ColumnName SQLStatisticsW TableName SQLTablesW TableName SQLProceduresW prName
В SELTA 1.1 Это должно решаться добавлением кавычек к любым названиям.
Тогда бага должна блокировать релиз SELTA 1.1
открываю заново, т.к. пока в новом парсере двойные кавычки к идентификаторам не добавляются.
нужно уточнение: в двойные кавычки брать имена баз или - имена баз и таблиц, либо даже имена полей в таблице? последнее реализовать сложнее. имена функций, представлений, процедур, триггеров,индексов - как быть с ними?
сейчас добавил кавычки только в парсер и только в create/drop database. нужно еще добавить в initdb.cpp, т.к. сельта базу создает напрямую, в обход парсера
попробовал изменить initdb.cpp, база создалась (с правильным именем), но вылезла ошибка sqlstate 42703 'undefined column'. менял PGAPI_DriverConnect(), убирал в нем приведение к нижнему регистру, возможно из-за этого
> вылезла ошибка sqlstate 42703 'undefined column' виноват, выводит просто сообщение о "cannot init database with error"
из-за того, что mssql регистронезависим, и постгри - регистрозависим, 3 строчки приведения к нижнему регистру в initdb.cpp решают вопрос полностью, коммичу. вопрос относительно идентификаторов пока еще не закрыт - надо решить, приводить ли к нижнему регистру идентификаторы вида [This IS THE iDentiFiER]
(В ответ на comment #8) > из-за того, что mssql регистронезависим, и постгри - регистрозависим, 3 строчки > приведения к нижнему регистру в initdb.cpp решают вопрос полностью, коммичу. ветка selta-108lowercase-dbname. в gold-парсере привел идентификаторы к нижнему регистру и взял в кавычки.
> в gold-парсере привел идентификаторы к нижнему регистру и взял в кавычки. проверил в mssql для идентификаторов вида [aA aa AAa] - и все равно регистронезависимо. привел такие строки тоже к нижнему регистру, закоммитил. багу закрываю.
Для тех, кто не пользуется багзиллой или не умеет пользоваться групповым редактированием при поиске, закрываем задачи, которые они должны были принять.