引用标识符的大小写转换设计
2. 功能
2.1. 大小写转换的三种模式(默认为interchange)
-
如果 guc参数“identifier_case_switch”值为“interchange”:
1). 如果双引号所引用的标识符中的字母全部为大写,则将大写转换为小写。
2). 如果双引号所引用的标识符中的字母全部为小写,则将小写转换为大写。
3). 如果用双引号引起来的标识符中的字母是大小写混合的,则保持标识符不变。
2.2. 初始化数据库集簇时
-
在initdb程序中加入 -C选项设置大小写转换模式,-C对应的值为:
"normal" ------ "0"同义
"interchange" ------ "1"同义
"lowercase" ------ "2"同义
在初始化数据库集簇的过程中,将大小写转换模式保存到data目录的global/pg_control文件中。
2.3. 测试用例
SET ivorysql.enable_case_switch = true;
SET ivorysql.identifier_case_switch = interchange;
CREATE TABLE "ABC"(c1 int, c2 int);
SELECT relname FROM pg_class WHERE relname = 'ABC';
SELECT relname FROM pg_class WHERE relname = 'abc';
SELECT * FROM "ABC";
SELECT * FROM ABC;
SELECT * FROM abc;
SELECT * FROM Abc;
SELECT * FROM "Abc"; -- ERROR
DROP TABLE abc;
CREATE TABLE "Abc"(c1 int, c2 int);
SELECT relname FROM pg_class WHERE relname = 'ABC';
SELECT relname FROM pg_class WHERE relname = 'abc';
SELECT relname FROM pg_class WHERE relname = 'Abc';
SELECT * FROM "ABC"; -- ERROR
SELECT * FROM ABC; -- ERROR
SELECT * FROM abc; -- ERROR
SELECT * FROM Abc; -- ERROR
SELECT * FROM "Abc";
DROP TABLE "Abc";