Bug 3565

Summary: Невозможность работы с базами с названиями в верхнем регистре
Product: SELTA@Etersoft Reporter: Станислав Коробейников <stas>
Component: ОбщееAssignee: Калюхович Юрий <goga>
Status: CLOSED FIXED QA Contact: Станислав Коробейников <stas>
Severity: minor    
Priority: P4 CC: goga, lav
Version: 1.0.5   
Target Milestone: версия 1.0.4   
Hardware: PC   
OS: All   
Whiteboard:
Заявки RT: Связано с:
Дата напоминания:
Bug Depends on:    
Bug Blocks: 6158    

Description Станислав Коробейников 2009-02-26 18:12:54 MSK
Бага вылезла из баги 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
Comment 1 Станислав Коробейников 2010-12-20 15:09:18 MSK
В SELTA 1.1 Это должно решаться добавлением кавычек к любым названиям.
Comment 2 Vitaly Lipatov 2010-12-24 21:18:56 MSK
Тогда бага должна блокировать релиз SELTA 1.1
Comment 3 Калюхович Юрий 2010-12-25 12:02:59 MSK
открываю заново, т.к. пока в новом парсере двойные кавычки к идентификаторам не добавляются.
Comment 4 Калюхович Юрий 2010-12-26 20:58:57 MSK
нужно уточнение: в двойные кавычки брать имена баз или - имена баз и таблиц, либо даже имена полей в таблице? последнее реализовать сложнее.
имена функций, представлений, процедур, триггеров,индексов - как быть с ними?
Comment 5 Калюхович Юрий 2010-12-27 11:00:06 MSK
сейчас добавил кавычки только в парсер и только в create/drop database. нужно еще добавить в initdb.cpp, т.к. сельта базу создает напрямую, в обход парсера
Comment 6 Калюхович Юрий 2010-12-27 13:16:59 MSK
попробовал изменить initdb.cpp, база создалась (с правильным именем), но вылезла ошибка sqlstate 42703 'undefined column'.

менял PGAPI_DriverConnect(), убирал в нем приведение к нижнему регистру, возможно из-за этого
Comment 7 Калюхович Юрий 2010-12-27 13:23:20 MSK
> вылезла ошибка sqlstate 42703 'undefined column'

виноват, выводит просто сообщение о "cannot init database with error"
Comment 8 Калюхович Юрий 2010-12-27 19:58:47 MSK
из-за того, что mssql регистронезависим, и постгри - регистрозависим, 3 строчки приведения к нижнему регистру в initdb.cpp решают вопрос полностью, коммичу. 

вопрос относительно идентификаторов пока еще не закрыт - надо решить, приводить ли к нижнему регистру идентификаторы вида [This IS THE iDentiFiER]
Comment 9 Калюхович Юрий 2010-12-27 20:10:44 MSK
(В ответ на comment #8)
> из-за того, что mssql регистронезависим, и постгри - регистрозависим, 3 строчки
> приведения к нижнему регистру в initdb.cpp решают вопрос полностью, коммичу. 

ветка selta-108lowercase-dbname.

в gold-парсере привел идентификаторы к нижнему регистру и взял в кавычки.
Comment 10 Калюхович Юрий 2010-12-28 10:57:13 MSK
> в gold-парсере привел идентификаторы к нижнему регистру и взял в кавычки.

проверил в mssql для идентификаторов вида [aA aa AAa] - и все равно регистронезависимо. привел такие строки тоже к нижнему регистру, закоммитил.
багу закрываю.
Comment 11 Vitaly Lipatov 2014-09-11 18:53:45 MSK
Для тех, кто не пользуется багзиллой или не умеет пользоваться групповым редактированием при поиске, закрываем задачи, которые они должны были принять.