| Modifier and Type | Class and Description |
|---|---|
static class |
SQLUtil.UnicodeInputStream |
| Constructor and Description |
|---|
SQLUtil() |
| Modifier and Type | Method and Description |
|---|---|
static void |
appendToFile(File file,
String string) |
static boolean |
compareIdentifier(EDbVendor dbVendor,
ESQLDataObjectType sqlDataObjectType,
String identifier1,
String identifier2) |
static void |
deltree(File root) |
static String |
endTrim(String input) |
static void |
endTrim(StringBuilder buffer) |
static String |
formatSql(EDbVendor dbVendor,
String inputQuery) |
static String |
getFileContent(File file) |
static String |
getFileContent(String filePath) |
static String |
getIdentifierNormalColumnName(EDbVendor dbVendor,
String name) |
static String |
getIdentifierNormalName(EDbVendor dbVendor,
String name,
ESQLDataObjectType sqlDataObjectType)
规范化多段限定名(Multi-Segment Qualified Name)并返回规范化后的完整限定名。
|
static String |
getIdentifierNormalTableName(EDbVendor dbVendor,
String name) |
static String |
getIdentifierNormalTableName(String name) |
static String |
getInputStreamContent(InputStream is,
boolean close) |
static InputStream |
getInputStreamWithoutBom(String file) |
static boolean |
isEmpty(String value) |
static boolean |
isTempTable(table table) |
static String |
joinNonEmpty(String... parts) |
static File[] |
listFiles(File sqlFiles) |
static File[] |
listFiles(File sqlFiles,
FileFilter filter) |
static void |
listFiles(File rootFile,
List<File> children) |
static void |
listFiles(File rootFile,
List<File> children,
FileFilter filter) |
static void |
main(String[] args) |
static String |
mergeSegments(List<String> segments,
int index) |
static String |
normalizeIdentifier(EDbVendor dbVendor,
ESQLDataObjectType objectType,
String identifier) |
static List<String> |
parseNames(String nameString) |
static List<String> |
parseNames(String nameString,
EDbVendor vendor)
解析以点号分隔的 SQL 标识符或表达式,并返回各层级片段。
|
protected static List<String> |
putCache(String cacheKey,
List<String> names) |
static String |
readFile(File file) |
static String |
stringToMD5(String plainText) |
static String |
trimColumnStringQuote(String string) |
static String |
trimSingleQuote(String columnAlias) |
static void |
writeToFile(File file,
InputStream source,
boolean close) |
static void |
writeToFile(File file,
String string) |
public SQLUtil()
public static String getFileContent(File file)
public static String getInputStreamContent(InputStream is, boolean close)
public static String getFileContent(String filePath)
public static String trimColumnStringQuote(String string)
public static List<String> parseNames(String nameString)
public static List<String> parseNames(String nameString, EDbVendor vendor)
用途:
"dbo.Employee.Name" -> ["dbo", "Employee", "Name"] "[Sales DB].[Employee].[Name]" -> ["[Sales DB]", "[Employee]", "[Name]"] "\"My.Schema\".\"My.Table\"" -> ["\"My.Schema\"", "\"My.Table\""] "`project.dataset.table`" (BigQuery) -> ["project", "dataset", "table"] "OPENJSON(aptd.test.ActiviteTypeIDs)" -> ["OPENJSON(aptd.test.ActiviteTypeIDs)"]
nameString - 待解析的标识符或表达式字符串vendor - 数据库厂商(用于处理厂商特定定界符,如 BigQuery 的反引号),可为 nullpublic static void writeToFile(File file, InputStream source, boolean close)
public static void writeToFile(File file, String string) throws IOException
IOExceptionpublic static void appendToFile(File file, String string) throws IOException
IOExceptionpublic static InputStream getInputStreamWithoutBom(String file) throws IOException
IOExceptionpublic static boolean compareIdentifier(EDbVendor dbVendor, ESQLDataObjectType sqlDataObjectType, String identifier1, String identifier2)
public static String normalizeIdentifier(EDbVendor dbVendor, ESQLDataObjectType objectType, String identifier)
public static String getIdentifierNormalColumnName(EDbVendor dbVendor, String name)
public static String getIdentifierNormalTableName(String name)
public static String getIdentifierNormalTableName(EDbVendor dbVendor, String name)
public static String getIdentifierNormalName(EDbVendor dbVendor, String name, ESQLDataObjectType sqlDataObjectType)
本方法是 SQL 标识符规范化的多段名处理版本,接受包含多段(catalog.schema.table.column)的限定名, 根据数据库厂商特性、层级支持能力和对象类型,智能解析和规范化每个段,最后返回用点号连接的完整规范化名称。
"db..table" → "db.dbo.table"parseNames(String) 将限定名按点号分割成段列表sqlDataObjectType)normalizeIdentifier(EDbVendor, ESQLDataObjectType, String),
应用厂商特定的大小写规则、引号处理等假设数据库同时支持 catalog 和 schema,目标类型为 dotTable:
"a.b.c" → 解析为 catalog.schema.table"a.b" → 解析为 schema.table"a" → 解析为 table假设数据库仅支持 catalog(如 MySQL),目标类型为 dotTable:
"a.b" → 解析为 catalog.table"a" → 解析为 table假设数据库仅支持 schema(如 PostgreSQL),目标类型为 dotTable:
"a.b" → 解析为 schema.table"a" → 解析为 table列名可能有4段(catalog.schema.table.column),方法会根据实际段数自动调整解析策略:
"db.sch.tbl.col" → catalog.schema.table.column"sch.tbl.col" → schema.table.column"tbl.col" → table.column"col" → column当段数超过标准层级时(如表名有4段或更多),方法会使用 mergeSegments(List, int)
将多余的尾部段合并为单个段(保留点号),然后作为最后一段进行规范化。
示例:5段列名 "db.sch.tbl.nested.col" → 合并后4段处理:
"db.sch.tbl.nested.col" (最后两段合并为 "nested.col")
normalizeIdentifier(EDbVendor, ESQLDataObjectType, String):
单段规范化,不解析限定名,直接处理引号和大小写,返回单段名IdentifierService.keyForMap(String, ESQLDataObjectType):
仅接受单段名,用于生成 Map 的 key,会抛出异常如果输入是多段名IdentifierService.normalizeQualifiedName(String, ESQLDataObjectType):
新架构中的等价方法,提供相同的多段名规范化功能dbVendor - 数据库厂商类型(决定层级支持、引号风格、大小写规则)name - 原始标识符或多段限定名(可能包含引号/反引号;可能包含 catalog/schema 前缀;
可能包含厂商特定语法如 MSSQL 的 "..")sqlDataObjectType - 期望的对象类型(例如 dotTable, dotColumn, dotSchema, dotCatalog),
用于指导段类型推断和规范化规则应用null,返回 null;
如果输入为空字符串或无法解析,返回空字符串单段规范化方法,
多段名解析方法,
段合并工具方法,
TSQLEnv.normalizeIdentifier(EDbVendor, ESQLDataObjectType, String),
Phase 0 新架构中的等价方法public static String mergeSegments(List<String> segments, int index)
public static boolean isTempTable(table table)
public static File[] listFiles(File sqlFiles, FileFilter filter)
public static void listFiles(File rootFile, List<File> children, FileFilter filter)
public static String stringToMD5(String plainText)
public static String trimSingleQuote(String columnAlias)
public static void endTrim(StringBuilder buffer)
public static String joinNonEmpty(String... parts)