# sqlTemplates - SQL模板配置
配置扩展数据库连接器支持的SQL模板。
每一个SQL模板用于在数据库实现一个特定的功能,兼容各个数据库时会对不同的数据库配置一系列的SQL模板。一般可以直接写入SQL,若功能较为复杂,一般通过Freemaker (opens new window)文件实现SQL模板。
"sqlTemplates": {
"getSchemas":"...",
"getProcedures": "...",
"getProcedureMeta": "...",
"dropTableIfExists": "...",
"dropViewIfExists": "...",
"renameTable": "...",
"getTableDDL":"...",
"getViewDDL": "...",
"getProcedureDDL": "...",
"nullFirstDescOrder": "...",
"getTableTriggers": "...",
"getTriggerMeta": "...",
"getTableStorageSpace": "...",
"insertOnDuplicate": "...",
"mergeInto": "...",
"createTable": "...",
"alterTable": "...",
"createView": "..."
}
提示
SQL模板也支持使用sql文件进行
# 配置选项
# getSchemas
查询当前数据库的schema列表。通常查询数据库的schema列表会调用驱动的getSchemas()
函数,有些数据库的驱动没有实现这个方法,或者返回空列时,需要执行一个SQL来获取schema列表。
SQL示例:
SELECT SCHEMA_NAME AS TABLE_SCHEM, CATALOG_NAME AS TABLE_CATALOG FROM INFORMATION_SCHEMA.SCHEMATA;
字段列:
TABLE_SCHEM
:String schema名称。TABLE_CATALOG
:String 列表名称。
# getProcedures
返回查询存储过程列表的SQL。
示例:
SELECT ROUTINE_SCHEMA AS PROCEDURE_SCHEMA,SPECIFIC_NAME AS PROCEDURE_NAME,ROUTINE_DEFINITION AS TEXT FROM information_schema.Routines where ROUTINE_TYPE = 'PROCEDURE' [AND ROUTINE_SCHEMA='?1'] order by ROUTINE_SCHEMA,SPECIFIC_NAME,ROUTINE_DEFINITION;
字段列:
PROCEDURE_SCHEMA
:string 存储过程所在SCHEMA名称PROCEDURE_NAME
:string 存储过程名称TEXT
:string 存储过程内容
SQL模板参数:
storeSchema
:存储过程所在schema,如果是默认schema也会返回默认schema的名字。scheam
:当前schema,如果是默认schema则返回空值。
# getProcedureMeta
返回一个查询存储过程元数据内容的SQL,SQL中也会包括参数信息。
示例:
SELECT ROUTINE_DEFINITION AS TEXT FROM information_schema.Routines where ROUTINE_TYPE = 'PROCEDURE' [AND ROUTINE_SCHEMA='?1'] order by ROUTINE_SCHEMA,SPECIFIC_NAME,ROUTINE_DEFINITION;
SQL模板参数:
procedure
目标存储过程名。schema
当前Schema,如果是默认schema则返回空值。procedureName
不含schema的存储过程名。storeSchema
存储过程所在的schema,如果是默认schema也会返回默认schema的名字。
# dropTableIfExists
删除一个物理表(如果表已存在)。
示例:
DROP TABLE IF EXISTS ?;
SQL模板参数:
table
:目标表名。schema
:当前Schema,如果是默认schema则返回空值。tableName
:不含schema的表名。storeSchema
目标表所在schema,如果是默认schema也会返回默认schema的名字。
# dropViewIfExists
删除一个视图(如果视图已存在)。SQL模板参数参考dropTableIfExists属性。
示例:
DROP VIEW IF EXISTS ?;
# renameTable
将指定schema下的表更名,更名为另一个表名,新的表也在原来的schema下。
RENAME TABLE ? to ?;
SQL模板参数:
- oldTable 目标表表名,见{@link SQLTemplateParam_Identifier}。
- newTable 新表名,见{@link SQLTemplateParam_Identifier}。
- schema 原表所在schema,如果是默认schema则返回空值。
- oldTableName 原表名,表名不包含schema。
- newTableName 新表名,表名不包含schema。
# getTableDDL
返回一个目标表的ddl语句,通常为create table ...
语句。SQL模板参数参考dropTableIfExists属性。
示例:
SHOW CREATE TABLE ?;
提示
- 若配置了此SQL模板,则使用此SQL模板的结果当作ddl。
- 若未配置此SQL模板,会使用createTable模板的返回ddl结果。
# getViewDDL
返回一个目标视图的DDL语句,通常为create view ...
语句。SQL模板参数参考dropTableIfExists属性。
示例:
SHOW CREATE VIEW ?;
# getProcedureDDL
返回一个查询存储过程的DDL的SQL语句。
示例:
SHOW CREATE PROCEDURE ?;
SQL模板参数:
procedure
:目标存储过程名schema
:当前Schema,如果是默认schema则返回空值。procedureName
:不含schema的存储过程名storeSchema
:存储过程所在schema,如果是默认schema也会返回默认schema的名字。
# nullFirstDescOrder
返回一个根据字段排序的sql。
示例:
?1 is null desc, ?1 desc;
SQL模板参数:
column
:排序字段名
# getTableTriggers
返回一个查询触发器信息的SQL。SQL模板参数参考dropTableIfExists属性。
示例:
select TRIGGER_NAME,ACTION_STATEMENT TRIGGER_BODY,EVENT_OBJECT_TABLE TABLE_NAME,TRIGGER_SCHEMA,EVENT_OBJECT_SCHEMA from information_schema.TRIGGERS Where EVENT_OBJECT_SCHEMA='?1' and EVENT_OBJECT_TABLE='?2'
字段列:
TRIGGER_NAME
:String 触发器的名称TRIGGER_BODY
:String 触发器定义的内容TABLE_NAME
:String 表的名称TRIGGER_SCHEMA
:String 触发器所在schema
提示
SQL模板中必须包含TRIGGER_NAME
、TRIGGER_BODY
、TABLE_NAME
此三个字段。
# getTriggerMeta
返回一个用于查询查询触发器信息的SQL。SQL模板参数参考dropTableIfExists属性。
示例:
SELECT TRIGGER_NAME,ACTION_STATEMENT TRIGGER_BODY,EVENT_OBJECT_TABLE TABLE_NAME from information_schema.TRIGGERS Where EVENT_OBJECT_SCHEMA='?4' and EVENT_OBJECT_TABLE='?1'
字段列:
TRIGGER_NAME
:String 触发器的名称TRIGGER_BODY
:String 触发器定义的内容TABLE_NAME
:String 表的名称
提示
查询SQL返回的字段顺序以及字段名称必须和字段列中的字段一致。
# getTableStorageSpace
查询一个表占用的存储空间的大小,返回一个单行单列的查询结果,单位为byte。SQL模板参数参考dropTableIfExists属性。
示例:
SELECT data_length as TABLE_SPACE from information_schema.tables where TABLE_SCHEMA='?4' and TABLE_NAME='?1'
# insertOnDuplicate
保存一行数据,根据主键判断数据是否存在,不存在就执行insert语句,存在执行update语句。
示例:
INSERT INTO ?1 (?2) VALUES (?3) DUPLICATE KEY UPDATE ?5
SQL模板参数:
tableName
:写入的目标表表名。insertFields
:insert写入的字段名列表。insertValues
:insertFields字段列表对应的值。keyFields
:主键列表。updateFields
:当数据已存在时执行的更新。
# mergeInto
构造一个merge into
语句,将表或者SQL查询结果插入到目标表中,此语句较为复杂,一般通过Freemarker文件独立配置,并在这里指定配置文件路径。详细配置参考merge.ftl。
# createTable
构造一个create table
语句,此语句较为复杂,一般通过Freemarker文件独立配置,并在这里指定配置文件路径。详细配置参考create-table.ftl。
# alterTable
构造一个alter table
语句,此语句较为复杂,一般通过Freemarker文件独立配置,并在这里指定配置文件路径。详细配置参考alter-table.ftl。
# createView
构造一个create view
语句,此语句较为复杂,一般通过Freemarker文件独立配置,并在这里指定配置文件路径。详细配置参考create-view.ftl。