public abstract class TSQLEnv extends Object
initSQLEnv()
method which should be override
in your own class.
Modifier and Type | Field and Description |
---|---|
static boolean[] |
catalogCollationCaseSensitive |
static boolean[] |
columnCollationCaseSensitive |
static String |
DEFAULT_DB_NAME |
static String |
DEFAULT_SCHEMA_NAME |
static String |
DEFAULT_SERVER_NAME |
static boolean[] |
defaultCollationCaseSensitive |
static boolean[] |
functionCollationCaseSensitive |
static boolean[] |
isAliasReferenceForbidden |
static boolean[] |
tableCollationCaseSensitive |
Constructor and Description |
---|
TSQLEnv(EDbVendor dbVendor)
create a SQL environment.
|
Modifier and Type | Method and Description |
---|---|
TSQLFunction |
addFunction(String qualifiedFunctionName,
boolean fromDDL)
Add a function to SQLEnv, if a function with the same already exists, just return the existing one.
|
TSQLFunction |
addFunction(TObjectName qualifiedFunctionName,
boolean fromDDL) |
TSQLProcedure |
addOraclePackage(String qualifiedProcedureName,
boolean fromDDL) |
TSQLProcedure |
addProcedure(String qualifiedProcedureName,
boolean fromDDL) |
TSQLRoutine |
addSQLRoutine(String qualifiedProcedureName,
boolean fromDDL,
ESQLDataObjectType type) |
TSQLTable |
addTable(String qualifiedTableName,
boolean fromDDL)
Add a new table to the SQLEnv.
|
TSQLTrigger |
addTrigger(String qualifiedTriggerName,
boolean fromDDL) |
TSQLTable |
addView(String qualifiedViewName,
boolean fromDDL) |
boolean |
columnInTable(String qualifiedTablename,
String columnName) |
static boolean |
compareColumn(EDbVendor dbVendor,
TObjectName sourceColumn,
TObjectName targetColumn) |
boolean |
compareColumn(String ident1,
String ident2) |
static boolean |
compareIdentifier(EDbVendor dbVendor,
ESQLDataObjectType objectType,
String ident1,
String ident2) |
static boolean |
compareIdentifier(EDbVendor dbVendor,
ESQLDataObjectType objectType,
TObjectName source,
TObjectName target) |
boolean |
compareIdentifier(ESQLDataObjectType objectType,
String ident1,
String ident2) |
static boolean |
compareQualifiedColumn(EDbVendor dbVendor,
String sourceColumn,
String targetColumn,
String sourceTable,
String targetTable,
String sourceSchema,
String targetSchema,
String sourceDatabase,
String targetDatabase) |
static boolean |
compareQualifiedTable(EDbVendor dbVendor,
String sourceTable,
String targetTable,
String sourceSchema,
String targetSchema,
String sourceDatabase,
String targetDatabase) |
static boolean |
compareTable(EDbVendor dbVendor,
TObjectName sourceTable,
TObjectName targetTable) |
boolean |
compareTable(String ident1,
String ident2) |
TSQLCatalog |
createSQLCatalog(String catalogName)
create a new catalog/database in the SQL environment.
|
TSQLSchema |
createSQLSchema(String qualifiedSchemaName)
create a new schema and add to the catalog
|
static String |
delimitedChar(EDbVendor dbVendor)
used to delimit a database identifier, such as [ used in SQL Server, ` used in MySQL
|
protected boolean |
doAddCatalog(TSQLCatalog sqlCatalog)
add a catalog to the SQL environment, called internally.
|
TSQLSchemaObject |
doAddSchemaObject(String qualifiedObjectName,
ESQLDataObjectType objectType) |
TSQLSchemaObject |
doAddSchemaObject(TObjectName qualifiedObjectName,
ESQLDataObjectType objectType) |
protected TSQLSchemaObject |
doSearchSchemaObject(String catalog,
String schema,
String table,
ESQLDataObjectType objectType) |
static boolean |
endsWithDelimitedIdentifier(EDbVendor dbVendor,
String identifier) |
String |
getAFullQualifiedSchemaObjectName(String schemaObjectName)
If the input name is fully qualified with db and schema, just return it without any modification.
|
List<TSQLCatalog> |
getCatalogList()
a list of catalog/database in this SQL environment.
|
TSQLColumn |
getColumnInTable(String qualifiedTablename,
String columnName) |
ArrayList<String> |
getColumnsInTable(String qualifiedTablename,
boolean columnNameOnly) |
static String |
getDatabaseName(String schemaObjectName) |
static String |
getDatabaseName(TObjectName schemaObjectName) |
EDbVendor |
getDBVendor()
the database vendor where this SQL environment is generated from.
|
String |
getDefaultCatalogName()
the current active catalog/database in the SQL environment.
|
String |
getDefaultSchemaName()
the current schema name in the SQL environment.
|
String |
getDefaultServerName() |
int |
getNumberOfTables() |
static String |
getObjectName(String schemaObjectName) |
static String |
getObjectName(TObjectName schemaObjectName) |
String |
getProcedureParameterValue(String procedureName,
int paramPos) |
static String |
getSchemaName(String schemaObjectName) |
static String |
getSchemaName(TObjectName schemaObjectName) |
TSQLCatalog |
getSQLCatalog(String catalogName,
boolean createIfNotExist)
get a catalog from the SQL environment if already exists, otherwise, create a new catalog.
|
TSQLSchema |
getSQLSchema(String qualifiedSchemaName,
boolean createIfNotExist)
get a schema from the specified catalog, if not exists, create a new schema in the catalog.
|
static String |
getStmtSeparatorChar(EDbVendor dbVendor) |
void |
getVariableValue(String variableName,
String variableValue) |
abstract void |
initSQLEnv()
This method must be override in the subclass to build a SQL environment with real metadata.
|
static boolean |
isDelimitedIdentifier(EDbVendor dbVendor,
String identifier) |
boolean |
isDelimitedIdentifier(String identifier) |
boolean |
isEnableGetMetadataFromDDL()
If this option is enabled, SQLEnv will collect table/view/function/procedure metadata
from the create table/create view/create function/create procedure statement during the parse of the SQL script.
|
static boolean |
isUsedBySqlflow() |
static boolean |
matchSubObjectNameToWhole(EDbVendor dbVendor,
ESQLDataObjectType sqlDataObjectType,
String sub,
String whole)
比较 一个数据库对象名是否等于或者属于另一个对象
等于 就是完全相等(根据不同数据库的比较规则)
属于 表示如下情况:
1.
|
static String |
normalizeIdentifier(EDbVendor dbVendor,
ESQLDataObjectType sqlDataObjectType,
String identifier)
1.
|
protected boolean |
putSchemaObject(String schemaObjectName,
TSQLSchemaObject schemaObject)
put a schema object into the hashmap which can be used to find a schema object in a more efficient way.
|
TSQLCatalog |
searchCatalog(String catalogName)
search catalog in the catalog list, return null if not found.
|
TSQLFunction |
searchFunction(String qualifiedTablename) |
TSQLFunction |
searchFunction(TObjectName qualifiedTablename) |
TSQLSchemaObject |
searchSchemaObject(String qualifiedName,
ESQLDataObjectType objectType) |
protected TSQLSchemaObject |
searchSchemaObject(TObjectName qualifiedName,
ESQLDataObjectType objectType) |
TSQLTable |
searchTable(String qualifiedTablename)
find a table in the SQL environment by using a qualified table name: catalogName.schemaName.tableName
|
TSQLTable |
searchTable(TObjectName tableName) |
void |
setDefaultCatalogName(String defaultCatalogName) |
void |
setDefaultSchemaName(String defaultSchemaName) |
void |
setDefaultServerName(String defaultServerName) |
void |
setEnableGetMetadataFromDDL(boolean enableGetMetadataFromDDL) |
static boolean |
supportCatalog(EDbVendor dbVendor)
Whether this database support catalog or not?
|
static boolean |
supportSchema(EDbVendor dbVendor)
Whether this database support schema or not?
|
String |
toString() |
public static boolean[] columnCollationCaseSensitive
public static boolean[] functionCollationCaseSensitive
public static boolean[] tableCollationCaseSensitive
public static boolean[] catalogCollationCaseSensitive
public static boolean[] defaultCollationCaseSensitive
public static boolean[] isAliasReferenceForbidden
public static final String DEFAULT_SERVER_NAME
public static final String DEFAULT_DB_NAME
public static final String DEFAULT_SCHEMA_NAME
public static String getStmtSeparatorChar(EDbVendor dbVendor)
public static boolean supportSchema(EDbVendor dbVendor)
dbVendor
- public static boolean supportCatalog(EDbVendor dbVendor)
dbVendor
- public static String delimitedChar(EDbVendor dbVendor)
dbVendor
- public static boolean isDelimitedIdentifier(EDbVendor dbVendor, String identifier)
public static boolean endsWithDelimitedIdentifier(EDbVendor dbVendor, String identifier)
public boolean isDelimitedIdentifier(String identifier)
public boolean compareColumn(String ident1, String ident2)
public boolean compareTable(String ident1, String ident2)
public boolean compareIdentifier(ESQLDataObjectType objectType, String ident1, String ident2)
public static boolean compareColumn(EDbVendor dbVendor, TObjectName sourceColumn, TObjectName targetColumn)
public static boolean compareTable(EDbVendor dbVendor, TObjectName sourceTable, TObjectName targetTable)
public static boolean compareQualifiedTable(EDbVendor dbVendor, String sourceTable, String targetTable, String sourceSchema, String targetSchema, String sourceDatabase, String targetDatabase)
public static boolean compareQualifiedColumn(EDbVendor dbVendor, String sourceColumn, String targetColumn, String sourceTable, String targetTable, String sourceSchema, String targetSchema, String sourceDatabase, String targetDatabase)
public static boolean compareIdentifier(EDbVendor dbVendor, ESQLDataObjectType objectType, TObjectName source, TObjectName target)
public static boolean compareIdentifier(EDbVendor dbVendor, ESQLDataObjectType objectType, String ident1, String ident2)
public static String normalizeIdentifier(EDbVendor dbVendor, ESQLDataObjectType sqlDataObjectType, String identifier)
dbVendor
- sqlDataObjectType
- identifier
- public static boolean matchSubObjectNameToWhole(EDbVendor dbVendor, ESQLDataObjectType sqlDataObjectType, String sub, String whole)
sub
- whole
- public void setEnableGetMetadataFromDDL(boolean enableGetMetadataFromDDL)
public boolean isEnableGetMetadataFromDDL()
TGSqlParser
before parsing the SQL script. And this TSQLEnv
instance can be passed to another TGSqlParser
object with the collected database metadata.
public EDbVendor getDBVendor()
public abstract void initSQLEnv()
public List<TSQLCatalog> getCatalogList()
protected boolean doAddCatalog(TSQLCatalog sqlCatalog)
sqlCatalog
- catalogprotected boolean putSchemaObject(String schemaObjectName, TSQLSchemaObject schemaObject)
schemaObjectName
- name of schema objectschemaObject
- instance of a schema objectprotected TSQLSchemaObject doSearchSchemaObject(String catalog, String schema, String table, ESQLDataObjectType objectType)
protected TSQLSchemaObject searchSchemaObject(TObjectName qualifiedName, ESQLDataObjectType objectType)
public TSQLSchemaObject searchSchemaObject(String qualifiedName, ESQLDataObjectType objectType)
public TSQLTable searchTable(String qualifiedTablename)
qualifiedTablename,
- can be catalog.schema.table,
or .schema.table, use currentCatalogName or iterate all catalogs
or catalog..table, use current schema name or iterate all schema under catalog
or ..table, use currentCatalogName or iterate all catalogs, use current schema
or iterate all schemapublic TSQLTable searchTable(TObjectName tableName)
public String getDefaultCatalogName()
public String getDefaultSchemaName()
public void setDefaultCatalogName(String defaultCatalogName)
public void setDefaultSchemaName(String defaultSchemaName)
public String getDefaultServerName()
public void setDefaultServerName(String defaultServerName)
public TSQLCatalog createSQLCatalog(String catalogName)
catalogName
- catalog namepublic TSQLCatalog getSQLCatalog(String catalogName, boolean createIfNotExist)
catalogName
- catalog namecreateIfNotExist
- if this value is true, then create a new catalog if it's not existspublic TSQLCatalog searchCatalog(String catalogName)
catalogName
- catalog namepublic TSQLSchema createSQLSchema(String qualifiedSchemaName)
qualifiedSchemaName
- must be a qualified name like: catalog.schema. Otherwise, a null exception will be raised.public TSQLSchema getSQLSchema(String qualifiedSchemaName, boolean createIfNotExist)
qualifiedSchemaName
- must be a qualified name like: catalog.schema. Otherwise, a null exception will be raised.createIfNotExist
- if this value is true, then create a new schema if it's not existspublic ArrayList<String> getColumnsInTable(String qualifiedTablename, boolean columnNameOnly)
qualifiedTablename
- 需要完整的tablename,例如 catalog.schema.table, 如果仅传入 table name,
需要利用 default catalog, default schema 拼接完整的名称: catalog.schema.tablecolumnNameOnly
- public boolean columnInTable(String qualifiedTablename, String columnName)
public TSQLColumn getColumnInTable(String qualifiedTablename, String columnName)
public TSQLSchemaObject doAddSchemaObject(String qualifiedObjectName, ESQLDataObjectType objectType)
public TSQLSchemaObject doAddSchemaObject(TObjectName qualifiedObjectName, ESQLDataObjectType objectType)
public TSQLFunction addFunction(String qualifiedFunctionName, boolean fromDDL)
qualifiedFunctionName
- public TSQLFunction addFunction(TObjectName qualifiedFunctionName, boolean fromDDL)
public TSQLProcedure addOraclePackage(String qualifiedProcedureName, boolean fromDDL)
public TSQLProcedure addProcedure(String qualifiedProcedureName, boolean fromDDL)
public TSQLRoutine addSQLRoutine(String qualifiedProcedureName, boolean fromDDL, ESQLDataObjectType type)
public TSQLTrigger addTrigger(String qualifiedTriggerName, boolean fromDDL)
public TSQLTable addTable(String qualifiedTableName, boolean fromDDL)
getDefaultCatalogName()
will be used to put this table in.
If schemaName is not specified, getDefaultSchemaName()
will be used to put this table in.
qualifiedTableName
- qualified table namefromDDL
- is this table generated from a create table statementpublic static String getObjectName(TObjectName schemaObjectName)
public static String getObjectName(String schemaObjectName)
public static String getDatabaseName(TObjectName schemaObjectName)
public static String getDatabaseName(String schemaObjectName)
public static String getSchemaName(TObjectName schemaObjectName)
public static String getSchemaName(String schemaObjectName)
public TSQLFunction searchFunction(TObjectName qualifiedTablename)
public TSQLFunction searchFunction(String qualifiedTablename)
public String getAFullQualifiedSchemaObjectName(String schemaObjectName)
getDefaultSchemaName()
instead
If the database name is missed, use getDefaultCatalogName()
instead
some sample result:
getDefaultCatalogName()
is null
..table, both getDefaultCatalogName()
and getDefaultSchemaName()
are null.schemaObjectName
- public int getNumberOfTables()
public String getProcedureParameterValue(String procedureName, int paramPos)
public void getVariableValue(String variableName, String variableValue)
public static boolean isUsedBySqlflow()