public final class IdentifierRules extends Object
定义数据库厂商的标识符大小写规则,区分 quoted 和 unquoted 标识符的处理方式。
设计来源:dbobject_search.md 资深设计师方案
使用示例:
// Oracle: unquoted 折叠为大写且不敏感,quoted 保留原样且敏感 IdentifierRules oracleRules = IdentifierRules.forOracle(); // Couchbase: 全部大小写敏感 IdentifierRules couchbaseRules = IdentifierRules.forCouchbase();
| Modifier and Type | Class and Description |
|---|---|
static class |
IdentifierRules.CaseCompare
大小写比较规则(Case Comparison)
|
static class |
IdentifierRules.CaseFold
大小写折叠规则(Case Folding)
|
| Modifier and Type | Field and Description |
|---|---|
IdentifierRules.CaseCompare |
quotedCompare
Quoted 标识符的大小写比较规则
|
IdentifierRules.CaseFold |
quotedFold
Quoted 标识符的大小写折叠规则(通常为 NONE,保留原样)
|
IdentifierRules.CaseCompare |
unquotedCompare
Unquoted 标识符的大小写比较规则
|
IdentifierRules.CaseFold |
unquotedFold
Unquoted 标识符的大小写折叠规则
|
| Constructor and Description |
|---|
IdentifierRules(IdentifierRules.CaseFold unquotedFold,
IdentifierRules.CaseCompare unquotedCompare,
IdentifierRules.CaseFold quotedFold,
IdentifierRules.CaseCompare quotedCompare)
构造标识符规则
|
| Modifier and Type | Method and Description |
|---|---|
static IdentifierRules |
forAthena()
Athena 标识符规则(与 Presto 相同)
|
static IdentifierRules |
forBigQueryColumn()
BigQuery 列名规则(大小写不敏感)
|
static IdentifierRules |
forBigQueryTable()
BigQuery 表名规则(大小写敏感)
|
static IdentifierRules |
forCouchbase()
Couchbase N1QL 标识符规则
|
static IdentifierRules |
forDatabricks()
Databricks 标识符规则(与 Hive 相同)
|
static IdentifierRules |
forDB2()
DB2 / Netezza / Exasol 标识符规则(与 Oracle 相同)
|
static IdentifierRules |
forDoris()
Apache Doris 标识符规则(默认配置,相当于 lower_case_table_names=1)
|
static IdentifierRules |
forDoris(int lowerCaseTableNames)
Apache Doris 标识符规则(与 MySQL 相同)
|
static IdentifierRules |
forDorisColumn()
Apache Doris 列名规则(与 MySQL 列名相同,始终大小写不敏感)
|
static IdentifierRules |
forFlink()
Apache Flink SQL 的标识符规则(与 Hive/SparkSQL 相同)
|
static IdentifierRules |
forGaussDB()
GaussDB 标识符规则(与 PostgreSQL 相同)
|
static IdentifierRules |
forGeneric()
通用规则(默认:与 PostgreSQL 相同)
|
static IdentifierRules |
forHANA()
SAP HANA 标识符规则(与 Oracle 相同)
|
static IdentifierRules |
forHive()
Hive / SparkSQL / Impala 标识符规则(与 PostgreSQL 相同)
|
static IdentifierRules |
forMySQL(int lowerCaseTableNames)
MySQL 标识符规则(table/schema names)
|
static IdentifierRules |
forMySQLColumn()
MySQL 列名规则(始终大小写不敏感)
|
static IdentifierRules |
forMySQLRoutine()
MySQL 函数名规则(始终大小写不敏感)
|
static IdentifierRules |
forOracle()
Oracle 标识符规则
|
static IdentifierRules |
forPostgreSQL()
PostgreSQL / Redshift / Greenplum 标识符规则
|
static IdentifierRules |
forPresto()
Presto / Trino 标识符规则
|
static IdentifierRules |
forSnowflake()
Snowflake 标识符规则(与 Oracle 相同)
|
static IdentifierRules |
forSqlite()
SQLite 标识符规则(与 PostgreSQL 相同)
|
static IdentifierRules |
forSQLServer()
SQL Server / Azure SQL 标识符规则
|
static IdentifierRules |
forStarrocks()
StarRocks 标识符规则(默认配置,相当于 lower_case_table_names=1)
|
static IdentifierRules |
forStarrocks(int lowerCaseTableNames)
StarRocks 标识符规则(带参数,相当于 MySQL 的 lower_case_table_names)
|
static IdentifierRules |
forStarrocksColumn()
StarRocks 列名规则(与 MySQL 列名相同,始终大小写不敏感)
|
static IdentifierRules |
forTeradata()
Teradata 标识符规则(与 PostgreSQL 相同)
|
static IdentifierRules |
forVertica()
Vertica 标识符规则(与 Presto 相同)
|
String |
toString() |
public final IdentifierRules.CaseFold unquotedFold
public final IdentifierRules.CaseCompare unquotedCompare
public final IdentifierRules.CaseFold quotedFold
public final IdentifierRules.CaseCompare quotedCompare
public IdentifierRules(IdentifierRules.CaseFold unquotedFold, IdentifierRules.CaseCompare unquotedCompare, IdentifierRules.CaseFold quotedFold, IdentifierRules.CaseCompare quotedCompare)
unquotedFold - unquoted 标识符的折叠规则unquotedCompare - unquoted 标识符的比较规则quotedFold - quoted 标识符的折叠规则quotedCompare - quoted 标识符的比较规则public static IdentifierRules forOracle()
实际数据库行为(Oracle 12c+):
与 Legacy TSQLEnv 兼容性:
true → ❌ INCOMPATIBLE (legacy preserved case, new folds to UPPER)
true → ❌ INCOMPATIBLE (legacy preserved case, new folds to UPPER)
true → ❌ INCOMPATIBLE (legacy preserved case, new folds to UPPER)
false → ✅ COMPATIBLE (both fold to UPPER)
测试用例影响:
IdentifierRules 配置:
IdentifierRules.CaseFold.UPPER), 比较不敏感 (IdentifierRules.CaseCompare.INSENSITIVE)
IdentifierRules.CaseFold.NONE), 比较敏感 (IdentifierRules.CaseCompare.SENSITIVE)
public static IdentifierRules forPostgreSQL()
实际数据库行为(PostgreSQL 12+):
与 Legacy TSQLEnv 兼容性:
false → ⚠️ PARTIAL (legacy folded to UPPER, new folds to LOWER)
true → ❌ INCOMPATIBLE (legacy preserved case, new folds to LOWER)
true → ❌ INCOMPATIBLE (legacy preserved case, new folds to LOWER)
true → ❌ INCOMPATIBLE (legacy preserved case, new folds to LOWER)
测试用例影响:
IdentifierRules 配置:
IdentifierRules.CaseFold.LOWER), 比较不敏感 (IdentifierRules.CaseCompare.INSENSITIVE)
IdentifierRules.CaseFold.NONE), 比较敏感 (IdentifierRules.CaseCompare.SENSITIVE)
public static IdentifierRules forCouchbase()
实际数据库行为(Couchbase N1QL):
与 Legacy TSQLEnv 兼容性:
false → ❌ INCOMPATIBLE (legacy folded to UPPER, new preserves case)
IdentifierRules 配置:
IdentifierRules.CaseFold.NONE), 比较敏感 (IdentifierRules.CaseCompare.SENSITIVE)
IdentifierRules.CaseFold.NONE), 比较敏感 (IdentifierRules.CaseCompare.SENSITIVE)
public static IdentifierRules forSQLServer()
实际数据库行为(SQL Server 2019+):
与 Legacy TSQLEnv 兼容性:
false → ❌ INCOMPATIBLE (legacy folded to UPPER, new preserves case)
false → ❌ INCOMPATIBLE (legacy folded to UPPER, new preserves case)
false → ❌ INCOMPATIBLE (legacy folded to UPPER, new preserves case)
false → ❌ INCOMPATIBLE (legacy folded to UPPER, new preserves case)
测试用例影响:
IdentifierRules 配置:
IdentifierRules.CaseFold.NONE), 基于 collation 比较 (IdentifierRules.CaseCompare.COLLATION_BASED)
IdentifierRules.CaseFold.NONE), 基于 collation 比较 (IdentifierRules.CaseCompare.COLLATION_BASED)
CollatorProvider 使用,默认使用 SQL_Latin1_General_CP1_CI_AS (大小写不敏感)
注意:SQL Server 的大小写行为完全由 collation 决定,无法简单折叠。
public static IdentifierRules forMySQL(int lowerCaseTableNames)
实际数据库行为(MySQL 8.0+):
根据 lower_case_table_names 系统变量决定:
与 Legacy TSQLEnv 兼容性:
false → ⚠️ PARTIAL (legacy folded to UPPER, new doesn't fold or folds to LOWER)
false → ⚠️ PARTIAL (legacy folded to UPPER, new doesn't fold)
false → ⚠️ PARTIAL (legacy folded to UPPER, new behavior depends on lower_case_table_names)
true → ⚠️ PARTIAL (legacy preserved case, new is insensitive)
测试用例影响:
IdentifierRules 配置:
IdentifierRules.CaseFold.NONE), 敏感 (IdentifierRules.CaseCompare.SENSITIVE)
IdentifierRules.CaseFold.LOWER), 不敏感 (IdentifierRules.CaseCompare.INSENSITIVE)
IdentifierRules.CaseFold.NONE), 不敏感 (IdentifierRules.CaseCompare.INSENSITIVE)
lowerCaseTableNames - lower_case_table_names 值(0, 1, 2)public static IdentifierRules forMySQLColumn()
实际数据库行为(MySQL 8.0+):
与 Legacy TSQLEnv 兼容性:
false → ⚠️ PARTIAL (legacy folded to UPPER, new preserves case but is INSENSITIVE)
public static IdentifierRules forMySQLRoutine()
实际数据库行为(MySQL 8.0+):
与 Legacy TSQLEnv 兼容性:
false → ⚠️ PARTIAL (legacy folded to UPPER, new preserves case but is INSENSITIVE)
public static IdentifierRules forBigQueryTable()
实际数据库行为(BigQuery Standard SQL):
与 Legacy TSQLEnv 兼容性:
false → ❌ INCOMPATIBLE (legacy folded to UPPER, new preserves case and is SENSITIVE)
false → ❌ INCOMPATIBLE (legacy folded to UPPER, new preserves case and is SENSITIVE)
测试用例影响:
public static IdentifierRules forBigQueryColumn()
实际数据库行为(BigQuery Standard SQL):
与 Legacy TSQLEnv 兼容性:
false → ⚠️ PARTIAL (legacy folded to UPPER, new preserves case but is INSENSITIVE)
测试用例影响:
public static IdentifierRules forDB2()
实际数据库行为(DB2 11+):
与 Legacy TSQLEnv 兼容性:
true → ❌ INCOMPATIBLE (legacy preserved case, new folds to UPPER)
true → ❌ INCOMPATIBLE (legacy preserved case, new folds to UPPER)
forOracle() 的详细说明
public static IdentifierRules forSnowflake()
实际数据库行为(Snowflake):
与 Legacy TSQLEnv 兼容性:
false → ⚠️ PARTIAL (both fold to UPPER, COMPATIBLE)
false → ⚠️ PARTIAL (both fold to UPPER, COMPATIBLE)
forOracle() 的详细说明
public static IdentifierRules forHANA()
实际数据库行为(SAP HANA):
与 Legacy TSQLEnv 兼容性:
false → ⚠️ PARTIAL (both fold to UPPER, COMPATIBLE)
forOracle() 的详细说明
public static IdentifierRules forPresto()
实际数据库行为(Presto/Trino):
与 Legacy TSQLEnv 兼容性:
false → ⚠️ PARTIAL (legacy folded to UPPER, new folds to LOWER)
false → ⚠️ PARTIAL (legacy folded to UPPER, new folds to LOWER)
测试用例影响:
IdentifierRules 配置:
IdentifierRules.CaseFold.LOWER), 不敏感 (IdentifierRules.CaseCompare.INSENSITIVE)
IdentifierRules.CaseFold.NONE), 与 unquoted 一致 (IdentifierRules.CaseCompare.SAME_AS_UNQUOTED)
public static IdentifierRules forVertica()
实际数据库行为(Vertica):
与 Legacy TSQLEnv 兼容性:
false → ⚠️ PARTIAL (legacy folded to UPPER, new folds to LOWER)
forPresto() 的详细说明
public static IdentifierRules forHive()
实际数据库行为(Hive 3+, SparkSQL 3+):
与 Legacy TSQLEnv 兼容性:
false → ⚠️ PARTIAL (legacy folded to UPPER, new folds to LOWER)
forPostgreSQL() 的详细说明
public static IdentifierRules forTeradata()
实际数据库行为(Teradata 16+):
与 Legacy TSQLEnv 兼容性:
false → ⚠️ PARTIAL (legacy folded to UPPER, new folds to LOWER)
forPostgreSQL() 的详细说明
public static IdentifierRules forAthena()
实际数据库行为(AWS Athena):
与 Legacy TSQLEnv 兼容性:
false → ⚠️ PARTIAL (legacy folded to UPPER, new folds to LOWER)
forPresto() 的详细说明
public static IdentifierRules forGaussDB()
实际数据库行为(华为 GaussDB):
与 Legacy TSQLEnv 兼容性:
false → ⚠️ PARTIAL (legacy folded to UPPER, new folds to LOWER)
forPostgreSQL() 的详细说明
public static IdentifierRules forDatabricks()
实际数据库行为(Databricks SQL):
与 Legacy TSQLEnv 兼容性:
false → ⚠️ PARTIAL (legacy folded to UPPER, new folds to LOWER)
forHive() 和 forPostgreSQL() 的详细说明
public static IdentifierRules forFlink()
行为说明:
与 Legacy TSQLEnv 兼容性:
false → ⚠️ PARTIAL
public static IdentifierRules forDoris(int lowerCaseTableNames)
行为说明:
与 Legacy TSQLEnv 兼容性:
false → ⚠️ PARTIAL
true → ✅ COMPATIBLE
lowerCaseTableNames - lower_case_table_names 值(0, 1, 2),默认使用 1public static IdentifierRules forDoris()
行为说明:
public static IdentifierRules forDorisColumn()
public static IdentifierRules forStarrocks(int lowerCaseTableNames)
行为说明:
lowerCaseTableNames - lower_case_table_names 值(0, 1, 2),默认使用 1public static IdentifierRules forStarrocks()
行为说明:
public static IdentifierRules forStarrocksColumn()
public static IdentifierRules forSqlite()
实际数据库行为(SQLite 3.x):
public static IdentifierRules forGeneric()
说明:
与 Legacy TSQLEnv 兼容性:
false → ⚠️ PARTIAL (legacy folded to UPPER, new folds to LOWER)
forPostgreSQL() 的详细说明