Przesyłam trochę kodu z jakiejś wersji Sybase do PostgreSQL. Jest to aplikacja C korzystająca z biblioteki klienta Sybase. Moje podejście polega na napisaniu warstwy tłumaczącej, która tłumaczy wywołania dbsqlexec()
na PQexec()
(na przykład). Ta część w większości działa.
Wygląda na to, że baza danych Sybase jest skonfigurowana z uwzględnieniem wielkości liter (w odniesieniu do nazw obiektów bazy danych). Na przykład istnieje zarówno WIDGET
stół, jak i widget
stół. Wygląda na to, że konwencją w tej aplikacji jest to, że wielkie litery wskazują rzeczywiste tabele danych, podczas gdy małe litery są używane jako tabele tymczasowe podczas wykonywania niektórych operacji.
Zgodnie z 4.1 Struktura leksykalna „ Słowa kluczowe i niecytowane identyfikatory nie uwzględniają wielkości liter. ” Wiem, że mogę cytować identyfikatory, aby wyłączyć automatyczne składanie do małych liter, ale nie chcę tego robić ręcznie przez zilliony linii kodu korzystającego z tej bazy danych.
Czy istnieje sposób skonfigurowania PostgreSQL w celu wyłączenia automatycznego składania spraw w przypadku identyfikatorów obiektów bazy danych?
Moją alternatywą będzie napisanie kodu, który bada każdą instrukcję SQL i umieszcza podwójne cudzysłowy wokół każdego identyfikatora (który nie jest słowem kluczowym).
select * from TaBlEnAmE
będzie odnosić się do tej samej tabeli co select * from tablename
lubselect * from TABLENAME
create table "tableName" (id integer primary key);
, a następnie create table "tablename" (id integer primary key);
to zapytanie select * from TaBlEnAmE;
wybierze z „tablename”, a nie z „tableName”. „Niecytowane nazwiska są zawsze składane na małe litery” .