# 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模板参数:

  1. storeSchema:存储过程所在schema,如果是默认schema也会返回默认schema的名字。
  2. 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模板参数:

  1. procedure 目标存储过程名。
  2. schema 当前Schema,如果是默认schema则返回空值。
  3. procedureName 不含schema的存储过程名。
  4. storeSchema 存储过程所在的schema,如果是默认schema也会返回默认schema的名字。

# dropTableIfExists

删除一个物理表(如果表已存在)。

示例:

DROP TABLE IF EXISTS ?;

SQL模板参数:

  1. table:目标表名。
  2. schema:当前Schema,如果是默认schema则返回空值。
  3. tableName:不含schema的表名。
  4. storeSchema 目标表所在schema,如果是默认schema也会返回默认schema的名字。

# dropViewIfExists

删除一个视图(如果视图已存在)。SQL模板参数参考dropTableIfExists属性。

示例:

DROP VIEW IF EXISTS ?;

# renameTable

将指定schema下的表更名,更名为另一个表名,新的表也在原来的schema下。

RENAME TABLE ? to ?;

SQL模板参数:

  1. oldTable 目标表表名,见{@link SQLTemplateParam_Identifier}。
  2. newTable 新表名,见{@link SQLTemplateParam_Identifier}。
  3. schema 原表所在schema,如果是默认schema则返回空值。
  4. oldTableName 原表名,表名不包含schema。
  5. newTableName 新表名,表名不包含schema。

# getTableDDL

返回一个目标表的ddl语句,通常为create table ...语句。SQL模板参数参考dropTableIfExists属性。

示例:

SHOW CREATE TABLE ?;

提示

  1. 若配置了此SQL模板,则使用此SQL模板的结果当作ddl。
  2. 若未配置此SQL模板,会使用createTable模板的返回ddl结果。

# getViewDDL

返回一个目标视图的DDL语句,通常为create view ...语句。SQL模板参数参考dropTableIfExists属性。

示例:

SHOW CREATE VIEW ?;

# getProcedureDDL

返回一个查询存储过程的DDL的SQL语句。

示例:

SHOW CREATE PROCEDURE ?;

SQL模板参数:

  1. procedure:目标存储过程名
  2. schema:当前Schema,如果是默认schema则返回空值。
  3. procedureName:不含schema的存储过程名
  4. 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_NAMETRIGGER_BODYTABLE_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模板参数:

  1. tableName:写入的目标表表名。
  2. insertFields:insert写入的字段名列表。
  3. insertValues:insertFields字段列表对应的值。
  4. keyFields:主键列表。
  5. 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

是否有帮助?
0条评论
评论