Saya porting beberapa kode dari beberapa versi Sybase ke PostgreSQL. Ini adalah aplikasi C yang menggunakan pustaka klien Sybase. Pendekatan saya adalah menulis lapisan terjemahan yang menerjemahkan panggilan dbsqlexec()
ke PQexec()
(misalnya). Bagian itu sebagian besar berfungsi.
Tampaknya basis data Sybase diatur dengan cara case-sensitive (berkenaan dengan nama objek basis data). Misalnya, ada WIDGET
tabel dan widget
tabel. Sepertinya konvensi dalam aplikasi ini adalah bahwa semua huruf besar menunjukkan tabel data aktual, sedangkan nama huruf kecil digunakan sebagai tabel sementara ketika menjalankan beberapa pemrosesan.
Menurut 4.1 Lexical Structure , " Kata-kata kunci dan tanda pengenal yang tidak dikutip tidak peka huruf besar-kecil. " Saya tahu bahwa saya dapat menggandakan tanda kutip pengidentifikasi untuk menonaktifkan lipat otomatis ke huruf kecil, tetapi saya tidak ingin harus melakukannya secara manual melalui zillions garis kode yang menggunakan database ini.
Apakah ada cara untuk mengatur PostgreSQL untuk menonaktifkan lipat kasus otomatis ini untuk pengidentifikasi objek database?
Alternatif saya adalah menulis beberapa kode yang memeriksa setiap pernyataan SQL dan menempatkan tanda kutip ganda di setiap pengidentifikasi (yang bukan kata kunci).
sumber
select * from TaBlEnAmE
akan mereferensikan tabel yang sama denganselect * from tablename
atauselect * from TABLENAME
create table "tableName" (id integer primary key);
, lalucreate table "tablename" (id integer primary key);
permintaan iniselect * from TaBlEnAmE;
akan memilih dari "tablename", bukan dari "tableName". "Nama yang tidak dikutip selalu dilipat menjadi huruf kecil" .Jawaban:
Saya akhirnya menulis beberapa kode yang mengubah SQL yang dihasilkan oleh aplikasi menjadi SQL yang kompatibel dengan PostgreSQL. Cukup mudah:
Saya juga memanfaatkan lapisan ini untuk mengubah panggilan
isnull
menjadicoalesce
. Sejauh ini berhasil dengan cukup baik.sumber
Tidak secara langsung. Anda mungkin dapat membuat perubahan yang relatif kecil ke kode sumber PostgreSQL , dan mengkompilasi ulangnya. (Mulai di src / backend / parser / parser.c?) Tapi saya akan terkejut jika itu sangat sederhana.
sumber