Class CollatorProvider

Object
gudusoft.gsqlparser.sqlenv.CollatorProvider

public class CollatorProvider extends Object
Collator 提供者(SQL Server COLLATION_BASED 专用)

关键设计:

  • Collator 非线程安全,使用 ThreadLocal 缓存
  • 按 collation 名称缓存实例(每个 collation 一个 ThreadLocal)
  • 支持常见 SQL Server collation(CI_AS, CS_AS 等)

使用示例:

 CollatorProvider provider = new CollatorProvider();

 // 获取 Collator(自动 ThreadLocal 缓存)
 Collator collator = provider.getCollator("SQL_Latin1_General_CP1_CI_AS");

 // 比较标识符
 int result = collator.compare("MyTable", "MYTABLE");
 // CI (Case Insensitive): result == 0
 // CS (Case Sensitive): result != 0
 

性能特性:

  • 首次访问:创建 Collator 实例(~100μs)
  • 后续访问:ThreadLocal.get()(~10ns)
  • 内存开销:每线程每 collation 一个实例(~1KB)
Since:
3.1.0.9
  • Constructor Details

  • Method Details

    • getCollator

      public Collator getCollator(String collationName)
      获取 Collator 实例(ThreadLocal 缓存)

      此方法线程安全,每个线程获得独立的 Collator 实例。

      Parameters:
      collationName - SQL Server collation 名称(例如:SQL_Latin1_General_CP1_CI_AS)
      Returns:
      Collator 实例(线程本地)
    • clearCache

      public void clearCache()
      清理缓存(用于测试或内存管理)

      警告:调用此方法后,所有线程的 Collator 实例将失效,下次访问时重新创建。

    • getCacheSize

      public int getCacheSize()
      获取缓存大小(不同 collation 的数量)
      Returns:
      缓存的 collation 数量
    • testCompare

      public int testCompare(String collationName, String str1, String str2)
      测试 collation 比较(用于调试)
      Parameters:
      collationName - collation 名称
      str1 - 字符串 1
      str2 - 字符串 2
      Returns:
      比较结果(0: 相等, <0: str1 < str2, >0: str1 > str2)