Please wait. This can take some minutes ...
Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance.
Project price only 1 $
You can buy this project and download/modify it how often you want.
org.anyline.data.jdbc.adapter.init.MySQLGenusAdapter Maven / Gradle / Ivy
/*
* Copyright 2006-2023 www.anyline.org
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.anyline.data.jdbc.adapter.init;
import org.anyline.data.entity.Join;
import org.anyline.data.jdbc.adapter.init.alias.MySQLGenusTypeMetadataAlias;
import org.anyline.data.param.ConfigStore;
import org.anyline.data.param.init.DefaultConfigStore;
import org.anyline.data.prepare.RunPrepare;
import org.anyline.data.prepare.auto.TablePrepare;
import org.anyline.data.prepare.auto.init.VirtualTablePrepare;
import org.anyline.data.run.*;
import org.anyline.data.runtime.DataRuntime;
import org.anyline.entity.*;
import org.anyline.entity.authorize.Privilege;
import org.anyline.entity.authorize.User;
import org.anyline.exception.NotSupportException;
import org.anyline.metadata.*;
import org.anyline.metadata.refer.*;
import org.anyline.metadata.type.TypeMetadata;
import org.anyline.util.*;
import org.anyline.util.regular.RegularUtil;
import java.lang.reflect.Array;
import java.util.*;
public abstract class MySQLGenusAdapter extends AbstractJDBCAdapter {
public MySQLGenusAdapter() {
super();
MetadataReferHolder.reg(type(), TypeMetadata.CATEGORY.CHAR, new TypeMetadata.Refer("CHARACTER_MAXIMUM_LENGTH", null, null, 0, 1, 1));
MetadataReferHolder.reg(type(), TypeMetadata.CATEGORY.TEXT, new TypeMetadata.Refer("CHARACTER_MAXIMUM_LENGTH", null, null, 1, 1, 1));
MetadataReferHolder.reg(type(), TypeMetadata.CATEGORY.BOOLEAN, new TypeMetadata.Refer("CHARACTER_MAXIMUM_LENGTH", null, null, 1,1, 1));
MetadataReferHolder.reg(type(), TypeMetadata.CATEGORY.BYTES, new TypeMetadata.Refer("CHARACTER_MAXIMUM_LENGTH", null, null, 0, 1, 1));
MetadataReferHolder.reg(type(), TypeMetadata.CATEGORY.BLOB, new TypeMetadata.Refer("CHARACTER_MAXIMUM_LENGTH", null, null, 1,1,1));
MetadataReferHolder.reg(type(), TypeMetadata.CATEGORY.INT, new TypeMetadata.Refer("CHARACTER_MAXIMUM_LENGTH", "NUMERIC_PRECISION", null, 1, 1, 1));
MetadataReferHolder.reg(type(), TypeMetadata.CATEGORY.FLOAT, new TypeMetadata.Refer("CHARACTER_MAXIMUM_LENGTH", "NUMERIC_PRECISION", "NUMERIC_SCALE", 1, 2, 2));
MetadataReferHolder.reg(type(), TypeMetadata.CATEGORY.DATE, new TypeMetadata.Refer("CHARACTER_MAXIMUM_LENGTH", null, null, 1, 1, 1));
MetadataReferHolder.reg(type(), TypeMetadata.CATEGORY.TIME, new TypeMetadata.Refer("CHARACTER_MAXIMUM_LENGTH", null, null, 1, 1, 1));
MetadataReferHolder.reg(type(), TypeMetadata.CATEGORY.DATETIME, new TypeMetadata.Refer("CHARACTER_MAXIMUM_LENGTH", null, null, 1, 1, 1));
MetadataReferHolder.reg(type(), TypeMetadata.CATEGORY.TIMESTAMP, new TypeMetadata.Refer("CHARACTER_MAXIMUM_LENGTH", null, null, 1, 1, 1));
MetadataReferHolder.reg(type(), TypeMetadata.CATEGORY.COLLECTION, new TypeMetadata.Refer("CHARACTER_MAXIMUM_LENGTH", null, null, 1, 1, 1));
MetadataReferHolder.reg(type(), TypeMetadata.CATEGORY.GEOMETRY, new TypeMetadata.Refer("CHARACTER_MAXIMUM_LENGTH", null, null, 1, 1, 1));
MetadataReferHolder.reg(type(), TypeMetadata.CATEGORY.OTHER, new TypeMetadata.Refer("CHARACTER_MAXIMUM_LENGTH", null, null, 1, 1, 1));
for(MySQLGenusTypeMetadataAlias alias:MySQLGenusTypeMetadataAlias.values()) {
reg(alias);
alias(alias.name(), alias.standard());
}
}
@Override
public boolean supportCatalog() {
return false;
}
@Override
public boolean supportSchema() {
return super.supportSchema();
}
@Override
public String columnAliasGuidd() {
return " AS ";
}
@Override
public String tableAliasGuidd() {
return " AS ";
}
private static Map types = new HashMap<>();
static {
types.put(Table.TYPE.NORMAL, "BASE TABLE");
types.put(Table.TYPE.VIEW, "VIEW");
types.put(View.TYPE.NORMAL, "VIEW");
types.put(Metadata.TYPE.TABLE, "BASE TABLE");
types.put(Metadata.TYPE.VIEW, "VIEW");
}
@Override
public String name(Type type) {
return types.get(type);
}
/* *****************************************************************************************************************
*
* DML
*
* =================================================================================================================
* INSERT : 插入
* UPDATE : 更新
* SAVE : 根据情况插入或更新
* QUERY : 查询(RunPrepare/XML/TABLE/VIEW/PROCEDURE)
* EXISTS : 是否存在
* COUNT : 统计
* EXECUTE : 执行(原生SQL及存储过程)
* DELETE : 删除
*
******************************************************************************************************************/
/* *****************************************************************************************************************
* INSERT
* -----------------------------------------------------------------------------------------------------------------
* [调用入口]
* long insert(DataRuntime runtime, String random, int batch, String dest, Object data, ConfigStore configs, List columns)
* [命令合成]
* public Run buildInsertRun(DataRuntime runtime, int batch, Table dest, Object obj, ConfigStore configs, List columns)
* public void fillInsertContent(DataRuntime runtime, Run run, Table dest, DataSet set, ConfigStore configs, LinkedHashMap columns)
* public void fillInsertContent(DataRuntime runtime, Run run, Table dest, Collection list, ConfigStore configs, LinkedHashMap columns)
* public LinkedHashMap confirmInsertColumns(DataRuntime runtime, String dest, Object obj, ConfigStore configs, List columns, boolean batch)
* public String batchInsertSeparator()
* public boolean supportInsertPlaceholder()
* protected Run createInsertRun(DataRuntime runtime, Table dest, Object obj, ConfigStore configs, List columns)
* protected Run createInsertRunFromCollection(DataRuntime runtime, int batch, Table dest, Collection list, ConfigStore configs, List columns)
* public String generatedKey()
* [命令执行]
* long insert(DataRuntime runtime, String random, Object data, ConfigStore configs, Run run, String[] pks);
* long insert(DataRuntime runtime, String random, Object data, ConfigStore configs, Run run);
******************************************************************************************************************/
/**
* insert [调用入口]
* 执行前根据主键生成器补充主键值, 执行完成后会补齐自增主键值
* @param runtime 运行环境主要包含驱动适配器 数据源或客户端
* @param random 用来标记同一组命令
* @param dest 表 如果不提供表名则根据data解析, 表名可以事实前缀<数据源名>表示切换数据源
* @param data 需要插入入的数据
* @param columns 需要插入的列,如果不指定则根据data或configs获取注意会受到ConfigTable中是否插入更新空值的几个配置项影响
* 列可以加前缀
* +:表示必须插入
* -:表示必须不插入
* ?:根据是否有值
*
* 如果没有提供columns, 长度为0也算没有提供
* 则解析obj(遍历所有的属性工Key)获取insert列
*
* 如果提供了columns则根据columns获取insert列
*
* 但是columns中出现了添加前缀列, 则解析完columns后, 继续解析obj
*
* 以上执行完后, 如果开启了ConfigTable.IS_AUTO_CHECK_METADATA=true
* 则把执行结果与表结构对比, 删除表中没有的列
* @return 影响行数
*/
@Override
public long insert(DataRuntime runtime, String random, int batch, Table dest, Object data, ConfigStore configs, List columns) {
return super.insert(runtime, random, batch, dest, data, configs, columns);
}
/**
* insert [命令合成]
* 填充inset命令内容(创建批量INSERT RunPrepare)
* @param runtime 运行环境主要包含驱动适配器 数据源或客户端
* @param dest 表 如果不提供表名则根据data解析, 表名可以事实前缀<数据源名>表示切换数据源
* @param obj 需要插入的数据
* @param columns 需要插入的列,如果不指定则根据data或configs获取注意会受到ConfigTable中是否插入更新空值的几个配置项影响
* @return Run 最终执行命令 如JDBC环境中的 SQL 与 参数值
*/
@Override
public Run buildInsertRun(DataRuntime runtime, int batch, Table dest, Object obj, ConfigStore configs, List columns) {
return super.buildInsertRun(runtime, batch, dest, obj, configs, columns);
}
/**
* insert [命令合成-子流程]
* 填充inset命令内容(创建批量INSERT RunPrepare)
* @param runtime 运行环境主要包含驱动适配器 数据源或客户端
* @param run 最终待执行的命令和参数(如JDBC环境中的SQL)
* @param dest 表 如果不提供表名则根据data解析, 表名可以事实前缀<数据源名>表示切换数据源
* @param set 需要插入的数据集合
* @param columns 需要插入的列,如果不指定则根据data或configs获取注意会受到ConfigTable中是否插入更新空值的几个配置项影响
*/
@Override
public void fillInsertContent(DataRuntime runtime, Run run, Table dest, DataSet set, ConfigStore configs, LinkedHashMap columns) {
super.fillInsertContent(runtime, run, dest, set, configs, columns);
}
/**
* insert [命令合成-子流程]
* 填充inset命令内容(创建批量INSERT RunPrepare)
* @param runtime 运行环境主要包含驱动适配器 数据源或客户端
* @param run 最终待执行的命令和参数(如JDBC环境中的SQL)
* @param dest 表 如果不提供表名则根据data解析, 表名可以事实前缀<数据源名>表示切换数据源
* @param list 需要插入的数据集合
* @param columns 需要插入的列,如果不指定则根据data或configs获取注意会受到ConfigTable中是否插入更新空值的几个配置项影响
*/
@Override
public void fillInsertContent(DataRuntime runtime, Run run, Table dest, Collection list, ConfigStore configs, LinkedHashMap columns) {
super.fillInsertContent(runtime, run, dest, list, configs, columns);
}
/**
* insert [命令合成-子流程]
* 确认需要插入的列
* @param runtime 运行环境主要包含驱动适配器 数据源或客户端
* @param dest 表 如果不提供表名则根据data解析, 表名可以事实前缀<数据源名>表示切换数据源
* @param obj Entity或DataRow
* @param batch 是否批量,批量时不检测值是否为空
* @param columns 需要插入的列,如果不指定则根据data或configs获取注意会受到ConfigTable中是否插入更新空值的几个配置项影响
* 列可以加前缀
* +:表示必须插入
* -:表示必须不插入
* ?:根据是否有值
*
* 如果没有提供columns, 长度为0也算没有提供
* 则解析obj(遍历所有的属性工Key)获取insert列
*
* 如果提供了columns则根据columns获取insert列
*
* 但是columns中出现了添加前缀列, 则解析完columns后, 继续解析obj
*
* 以上执行完后, 如果开启了ConfigTable.IS_AUTO_CHECK_METADATA=true
* 则把执行结果与表结构对比, 删除表中没有的列
* @return List
*/
@Override
public LinkedHashMap confirmInsertColumns(DataRuntime runtime, String dest, Object obj, ConfigStore configs, List columns, boolean batch) {
return super.confirmInsertColumns(runtime, dest, obj, configs, columns, batch);
}
/**
* insert [命令合成-子流程]
* 批量插入数据时, 多行数据之间分隔符
* @return String
*/
@Override
public String batchInsertSeparator() {
return ",";
}
/**
* insert [命令合成-子流程]
* 插入数据时是否支持占位符
* @return boolean
*/
@Override
public boolean supportInsertPlaceholder() {
return true;
}
/**
* insert [命令合成-子流程]
* 设置主键值
* @param obj obj
* @param value value
*/
@Override
protected void setPrimaryValue(Object obj, Object value) {
super.setPrimaryValue(obj, value);
}
/**
* insert [命令合成-子流程]
* 根据entity创建 INSERT RunPrepare由buildInsertRun调用
* @param runtime 运行环境主要包含驱动适配器 数据源或客户端
* @param dest 表 如果不提供表名则根据data解析, 表名可以事实前缀<数据源名>表示切换数据源
* @param obj 数据
* @param columns 需要插入的列,如果不指定则根据data或configs获取注意会受到ConfigTable中是否插入更新空值的几个配置项影响
* @return Run 最终执行命令 如JDBC环境中的 SQL 与 参数值
*/
@Override
protected Run createInsertRun(DataRuntime runtime, Table dest, Object obj, ConfigStore configs, List columns) {
return super.createInsertRun(runtime, dest, obj, configs, columns);
}
/**
* insert [命令合成-子流程]
* 根据collection创建 INSERT RunPrepare由buildInsertRun调用
* @param runtime 运行环境主要包含驱动适配器 数据源或客户端
* @param dest 表 如果不提供表名则根据data解析, 表名可以事实前缀<数据源名>表示切换数据源
* @param list 对象集合
* @param columns 需要插入的列,如果不指定则根据data或configs获取注意会受到ConfigTable中是否插入更新空值的几个配置项影响
* @return Run 最终执行命令 如JDBC环境中的 SQL 与 参数值
*/
@Override
protected Run createInsertRunFromCollection(DataRuntime runtime, int batch, Table dest, Collection list, ConfigStore configs, List columns) {
return super.createInsertRunFromCollection(runtime, batch, dest, list, configs, columns);
}
/**
* insert [after]
* 执行insert后返回自增主键的key
* @return String
*/
@Override
public String generatedKey() {
return "GENERATED_KEY";
}
/**
* insert [命令执行]
*
* 执行完成后会补齐自增主键值
* @param runtime 运行环境主要包含驱动适配器 数据源或客户端
* @param random 用来标记同一组命令
* @param data data
* @param run 最终待执行的命令和参数(如JDBC环境中的SQL)
* @param pks 需要返回的主键
* @return 影响行数
*/
@Override
public long insert(DataRuntime runtime, String random, Object data, ConfigStore configs, Run run, String[] pks) {
return super.insert(runtime, random, data, configs, run, pks);
}
/* *****************************************************************************************************************
* UPDATE
* -----------------------------------------------------------------------------------------------------------------
* [调用入口]
* long update(DataRuntime runtime, String random, int batch, String dest, Object data, ConfigStore configs, List columns)
* [命令合成]
* Run buildUpdateRun(DataRuntime runtime, int batch, String dest, Object obj, ConfigStore configs, List columns)
* Run buildUpdateRunFromEntity(DataRuntime runtime, String dest, Object obj, ConfigStore configs, LinkedHashMap columns)
* Run buildUpdateRunFromDataRow(DataRuntime runtime, String dest, DataRow row, ConfigStore configs, LinkedHashMap columns)
* Run buildUpdateRunFromCollection(DataRuntime runtime, int batch, String dest, Collection list, ConfigStore configs, LinkedHashMap columns)
* LinkedHashMap confirmUpdateColumns(DataRuntime runtime, String dest, DataRow row, ConfigStore configs, List columns)
* LinkedHashMap confirmUpdateColumns(DataRuntime runtime, String dest, Object obj, ConfigStore configs, List columns)
* [命令执行]
* long update(DataRuntime runtime, String random, String dest, Object data, ConfigStore configs, Run run)
******************************************************************************************************************/
/**
* UPDATE [调用入口]
* @param runtime 运行环境主要包含驱动适配器 数据源或客户端
* @param random 用来标记同一组命令
* @param dest 表 如果不提供表名则根据data解析, 表名可以事实前缀<数据源名>表示切换数据源
* @param data 数据
* @param configs 条件
* @param columns 需要插入或更新的列,如果不指定则根据data或configs获取注意会受到ConfigTable中是否插入更新空值的几个配置项影响
* 列可以加前缀
* +:表示必须更新
* -:表示必须不更新
* ?:根据是否有值
*
* 如果没有提供columns, 长度为0也算没有提供
* 则解析obj(遍历所有的属性工Key)获取insert列
*
* 如果提供了columns则根据columns获取insert列
*
* 但是columns中出现了添加前缀列, 则解析完columns后, 继续解析obj
*
* 以上执行完后, 如果开启了ConfigTable.IS_AUTO_CHECK_METADATA=true
* 则把执行结果与表结构对比, 删除表中没有的列
* @return 影响行数
*/
@Override
public long update(DataRuntime runtime, String random, int batch, String dest, Object data, ConfigStore configs, List columns) {
return super.update(runtime, random, batch, dest, data, configs, columns);
}
/**
* update [命令合成]
* @param runtime 运行环境主要包含驱动适配器 数据源或客户端
* @param dest 表 如果不提供表名则根据data解析, 表名可以事实前缀<数据源名>表示切换数据源
* @param obj Entity或DtaRow
* @param configs 更新条件
* @param columns 需要插入或更新的列,如果不指定则根据data或configs获取注意会受到ConfigTable中是否插入更新空值的几个配置项影响
* 列可以加前缀
* +:表示必须更新
* -:表示必须不更新
* ?:根据是否有值
*
* 如果没有提供columns, 长度为0也算没有提供
* 则解析obj(遍历所有的属性工Key)获取insert列
*
* 如果提供了columns则根据columns获取insert列
*
* 但是columns中出现了添加前缀列, 则解析完columns后, 继续解析obj
*
* 以上执行完后, 如果开启了ConfigTable.IS_AUTO_CHECK_METADATA=true
* 则把执行结果与表结构对比, 删除表中没有的列
* @return Run 最终执行命令 如JDBC环境中的 SQL 与 参数值
*/
@Override
public Run buildUpdateRun(DataRuntime runtime, int batch, String dest, Object obj, ConfigStore configs, List columns) {
return super.buildUpdateRun(runtime, batch, dest, obj, configs, columns);
}
@Override
public Run buildUpdateRunFromEntity(DataRuntime runtime, String dest, Object obj, ConfigStore configs, LinkedHashMap columns) {
return super.buildUpdateRunFromEntity(runtime, dest, obj, configs, columns);
}
@Override
public Run buildUpdateRunFromDataRow(DataRuntime runtime, String dest, DataRow row, ConfigStore configs, LinkedHashMap columns) {
return super.buildUpdateRunFromDataRow(runtime, dest, row, configs, columns);
}
@Override
public Run buildUpdateRunFromCollection(DataRuntime runtime, int batch, String dest, Collection list, ConfigStore configs, LinkedHashMap columns) {
return super.buildUpdateRunFromCollection(runtime, batch, dest, list, configs, columns);
}
/**
* 多表关联更新
* @param runtime 运行环境主要包含驱动适配器 数据源或客户端
* @param prepare 一般通过TableBuilder生成
* @param data K-VariableValue 更新值key:需要更新的列 value:通常是关联表的列用VariableValue表示,也可以是常量
* @return 影响行数
*/
@Override
public Run buildUpdateRun(DataRuntime runtime, RunPrepare prepare, DataRow data, ConfigStore configs, String ... conditions) {
return super.buildUpdateRun(runtime, prepare, data, configs, conditions);
}
@Override
public void fillUpdateContent(DataRuntime runtime, TableRun run, StringBuilder builder, DataRow data, ConfigStore configs) {
TablePrepare prepare = (TablePrepare)run.getPrepare();
builder.append("UPDATE ");
name(runtime, builder, prepare.getTable());
String alias = prepare.getAlias();
if(BasicUtil.isNotEmpty(alias)) {
builder.append(tableAliasGuidd());
delimiter(builder, alias);
}
builder.append(BR);
List joins = prepare.getJoins();
if(null != joins) {
for (RunPrepare join:joins) {
fillJoinTableContent(runtime, builder, run, join);
}
}
String master = alias;
if(BasicUtil.isEmpty(master)) {
master = prepare.getTableName();
}
builder.append("SET").append(BR);
List keys = data.keys();
boolean first = true;
for(String key:keys) {
if(!first) {
builder.append(", ");
}
first = false;
if(!key.contains(".")) {
builder.append(master).append(".");
}
builder.append(key).append(" = ");
Object value = data.get(key);
if(value instanceof VariableValue) {
VariableValue var = (VariableValue)value;
delimiter(builder, var.value());
}else{
builder.append("?");
RunValue rv = new RunValue();
rv.setValue(value);
run.addValue(rv);
}
}
run.appendCondition(builder, this, true, true);
}
/**
* update [命令合成-子流程]
* 确认需要更新的列
* @param row DataRow
* @param configs 更新条件
* @param columns 需要插入或更新的列,如果不指定则根据data或configs获取注意会受到ConfigTable中是否插入更新空值的几个配置项影响
* 列可以加前缀
* +:表示必须更新
* -:表示必须不更新
* ?:根据是否有值
*
* 如果没有提供columns, 长度为0也算没有提供
* 则解析obj(遍历所有的属性工Key)获取insert列
*
* 如果提供了columns则根据columns获取insert列
*
* 但是columns中出现了添加前缀列, 则解析完columns后, 继续解析obj
*
* 以上执行完后, 如果开启了ConfigTable.IS_AUTO_CHECK_METADATA=true
* 则把执行结果与表结构对比, 删除表中没有的列
* @return List
*/
@Override
public LinkedHashMap confirmUpdateColumns(DataRuntime runtime, String dest, DataRow row, ConfigStore configs, List columns) {
return super.confirmUpdateColumns(runtime, dest, row, configs, columns);
}
@Override
public LinkedHashMap confirmUpdateColumns(DataRuntime runtime, String dest, Object obj, ConfigStore configs, List columns) {
return super.confirmUpdateColumns(runtime, dest, obj, configs, columns);
}
/**
* update [命令执行]
* @param runtime 运行环境主要包含驱动适配器 数据源或客户端
* @param random 用来标记同一组命令
* @param dest 表 如果不提供表名则根据data解析, 表名可以事实前缀<数据源名>表示切换数据源
* @param data 数据
* @param run 最终待执行的命令和参数(如JDBC环境中的SQL)
* @return 影响行数
*/
@Override
public long update(DataRuntime runtime, String random, String dest, Object data, ConfigStore configs, Run run) {
return super.update(runtime, random, dest, data, configs, run);
}
/**
* save [调用入口]
*
* 根据是否有主键值确认insert | update
* 执行完成后会补齐自增主键值
* @param runtime 运行环境主要包含驱动适配器 数据源或客户端
* @param random 用来标记同一组命令
* @param dest 表 如果不提供表名则根据data解析, 表名可以事实前缀<数据源名>表示切换数据源
* @param data 数据
* @param configs 更新条件
* @param columns 需要插入或更新的列,如果不指定则根据data或configs获取注意会受到ConfigTable中是否插入更新空值的几个配置项影响
* 列可以加前缀
* +:表示必须更新
* -:表示必须不更新
* ?:根据是否有值
*
* 如果没有提供columns, 长度为0也算没有提供
* 则解析obj(遍历所有的属性工Key)获取insert列
*
* 如果提供了columns则根据columns获取insert列
*
* 但是columns中出现了添加前缀列, 则解析完columns后, 继续解析obj
*
* 以上执行完后, 如果开启了ConfigTable.IS_AUTO_CHECK_METADATA=true
* 则把执行结果与表结构对比, 删除表中没有的列
* @return 影响行数
*/
@Override
public long save(DataRuntime runtime, String random, String dest, Object data, ConfigStore configs, List columns) {
return super.save(runtime, random, dest, data, configs, columns);
}
@Override
protected long saveCollection(DataRuntime runtime, String random, Table dest, Collection> data, ConfigStore configs, List columns) {
return super.saveCollection(runtime, random, dest, data, configs, columns);
}
@Override
protected long saveObject(DataRuntime runtime, String random, Table dest, Object data, ConfigStore configs, List columns) {
return super.saveObject(runtime, random, dest, data, configs, columns);
}
@Override
protected Boolean checkOverride(Object obj, ConfigStore configs) {
return super.checkOverride(obj, configs);
}
@Override
protected Boolean checkOverrideSync(Object obj, ConfigStore configs) {
return super.checkOverrideSync(obj, configs);
}
@Override
protected Map checkPv(Object obj) {
return super.checkPv(obj);
}
/**
* 是否是可以接收数组类型的值
* @param run 最终待执行的命令和参数(如JDBC环境中的SQL)
* @param key key
* @return boolean
*/
@Override
protected boolean isMultipleValue(DataRuntime runtime, TableRun run, String key) {
return super.isMultipleValue(runtime, run, key);
}
@Override
protected boolean isMultipleValue(Column column) {
return super.isMultipleValue(column);
}
/**
* 过滤掉表结构中不存在的列
* @param table 表
* @param columns columns
* @return List
*/
@Override
public LinkedHashMap checkMetadata(DataRuntime runtime, Table table, ConfigStore configs, LinkedHashMap columns) {
return super.checkMetadata(runtime, table, configs, columns);
}
/* *****************************************************************************************************************
* QUERY
* -----------------------------------------------------------------------------------------------------------------
* [调用入口]
* DataSet querys(DataRuntime runtime, String random, RunPrepare prepare, ConfigStore configs, String ... conditions)
* DataSet querys(DataRuntime runtime, String random, Procedure procedure, PageNavi navi)
* EntitySet selects(DataRuntime runtime, String random, RunPrepare prepare, Class clazz, ConfigStore configs, String... conditions)
* List> maps(DataRuntime runtime, String random, RunPrepare prepare, ConfigStore configs, String ... conditions)
* [命令合成]
* Run buildQueryRun(DataRuntime runtime, RunPrepare prepare, ConfigStore configs, String ... conditions)
* List buildQuerySequence(DataRuntime runtime, boolean next, String ... names)
* Run fillQueryContent(DataRuntime runtime, Run run)
* String mergeFinalQuery(DataRuntime runtime, Run run)
* RunValue createConditionLike(DataRuntime runtime, StringBuilder builder, Compare compare, Object value, boolean placeholder, boolean unicode)
* Object createConditionFindInSet(DataRuntime runtime, StringBuilder builder, String column, Compare compare, Object value, boolean placeholder, boolean unicode)
* StringBuilder createConditionIn(DataRuntime runtime, StringBuilder builder, Compare compare, Object value, boolean placeholder, boolean unicode)
* [命令执行]
* DataSet select(DataRuntime runtime, String random, boolean system, String table, ConfigStore configs, Run run)
* List> maps(DataRuntime runtime, String random, ConfigStore configs, Run run)
* Map map(DataRuntime runtime, String random, ConfigStore configs, Run run)
* DataRow sequence(DataRuntime runtime, String random, boolean next, String ... names)
* List> process(DataRuntime runtime, List> list)
******************************************************************************************************************/
/**
* query [调用入口]
*
* 返回DataSet中包含元数据信息,如果性能有要求换成maps
* @param runtime 运行环境主要包含驱动适配器 数据源或客户端
* @param random 用来标记同一组命令
* @param prepare 构建最终执行命令的全部参数,包含表(或视图|函数|自定义SQL)查询条件 排序 分页等
* @param configs 过滤条件及相关配置
* @param conditions 查询条件 支持k:v k:v::type 以及原生sql形式(包含ORDER、GROUP、HAVING)默认忽略空值条件
* @return DataSet
*/
@Override
public DataSet querys(DataRuntime runtime, String random, RunPrepare prepare, ConfigStore configs, String ... conditions) {
return super.querys(runtime, random, prepare, configs, conditions);
}
/**
* query procedure [调用入口]
* @param runtime 运行环境主要包含驱动适配器 数据源或客户端
* @param random 用来标记同一组命令
* @param procedure 存储过程
* @param navi 分页
* @return DataSet
*/
@Override
public DataSet querys(DataRuntime runtime, String random, Procedure procedure, PageNavi navi) {
return super.querys(runtime, random, procedure, navi);
}
/**
* query [调用入口]
* @param runtime 运行环境主要包含驱动适配器 数据源或客户端
* @param random 用来标记同一组命令
* @param clazz 类
* @param prepare 构建最终执行命令的全部参数,包含表(或视图|函数|自定义SQL)查询条件 排序 分页等
* @param configs 过滤条件及相关配置
* @param conditions 查询条件 支持k:v k:v::type 以及原生sql形式(包含ORDER、GROUP、HAVING)默认忽略空值条件
* @return EntitySet
* @param Entity
*/
@Override
public EntitySet selects(DataRuntime runtime, String random, RunPrepare prepare, Class clazz, ConfigStore configs, String ... conditions) {
return super.selects(runtime, random, prepare, clazz, configs, conditions);
}
/**
* select [命令执行-子流程]
* DataRow转换成Entity
* @param runtime 运行环境主要包含驱动适配器 数据源或客户端
* @param clazz entity class
* @param table table
* @param run 最终待执行的命令和参数(如JDBC环境中的SQL)
* @return EntitySet
* @param entity.class
*
*/
@Override
protected EntitySet select(DataRuntime runtime, String random, Class clazz, Table table, ConfigStore configs, Run run) {
return super.select(runtime, random, clazz, table, configs, run);
}
/**
* query [调用入口]
*
* 对性能有要求的场景调用,返回java原生map集合, 结果中不包含元数据信息
* @param runtime 运行环境主要包含驱动适配器 数据源或客户端
* @param random 用来标记同一组命令
* @param prepare 构建最终执行命令的全部参数,包含表(或视图|函数|自定义SQL)查询条件 排序 分页等
* @param configs 过滤条件及相关配置
* @param conditions 查询条件 支持k:v k:v::type 以及原生sql形式(包含ORDER、GROUP、HAVING)默认忽略空值条件
* @return maps 返回map集合
*/
@Override
public List> maps(DataRuntime runtime, String random, RunPrepare prepare, ConfigStore configs, String ... conditions) {
return super.maps(runtime, random, prepare, configs, conditions);
}
/**
* select[命令合成] 最终可执行命令
* 创建查询SQL
* @param prepare 构建最终执行命令的全部参数,包含表(或视图|函数|自定义SQL)查询条件 排序 分页等
* @param configs 过滤条件及相关配置
* @param conditions 查询条件 支持k:v k:v::type 以及原生sql形式(包含ORDER、GROUP、HAVING)默认忽略空值条件
* @return Run 最终执行命令 如JDBC环境中的 SQL 与 参数值
*/
@Override
public Run buildQueryRun(DataRuntime runtime, RunPrepare prepare, ConfigStore configs, String ... conditions) {
return super.buildQueryRun(runtime, prepare, configs, conditions);
}
/**
* 查询序列cur 或 next value
* @param next 是否生成返回下一个序列 false:cur true:next
* @param names 序列名
* @return String
*/
@Override
public List buildQuerySequence(DataRuntime runtime, boolean next, String ... names) {
return super.buildQuerySequence(runtime, next, names);
}
/**
* select[命令合成-子流程]
* 构造查询主体
* @param run 最终待执行的命令和参数(如JDBC环境中的SQL)
*/
@Override
public Run fillQueryContent(DataRuntime runtime, Run run) {
return super.fillQueryContent(runtime, run);
}
@Override
protected Run fillQueryContent(DataRuntime runtime, XMLRun run) {
return super.fillQueryContent(runtime, run);
}
@Override
protected Run fillQueryContent(DataRuntime runtime, TextRun run) {
return super.fillQueryContent(runtime, run);
}
@Override
protected Run fillQueryContent(DataRuntime runtime, TableRun run) {
return super.fillQueryContent(runtime, run);
}
/**
* select[命令合成-子流程]
* 合成最终 select 命令 包含分页 排序
* @param runtime 运行环境主要包含驱动适配器 数据源或客户端
* @param run 最终待执行的命令和参数(如JDBC环境中的SQL)
* @return String
*/
@Override
public String mergeFinalQuery(DataRuntime runtime, Run run) {
return super.pageLimitOffset(runtime, run);
}
/**
* select[命令合成-子流程]
* 构造 LIKE 查询条件
* 如果不需要占位符 返回null 否则原样返回value
* @param runtime 运行环境主要包含驱动适配器 数据源或客户端
* @param builder builder
* @param compare 比较方式 默认 equal 多个值默认 in
* @param value value
* @return value 有占位符时返回占位值,没有占位符返回null
*/
@Override
public RunValue createConditionLike(DataRuntime runtime, StringBuilder builder, Compare compare, Object value, boolean placeholder, boolean unicode) {
return super.createConditionLike(runtime, builder, compare, value, placeholder, unicode);
}
/**
* select[命令合成-子流程]
* 构造 FIND_IN_SET 查询条件
* 如果不需要占位符 返回null 否则原样返回value
* @param runtime 运行环境主要包含驱动适配器 数据源或客户端
* @param builder builder
* @param column 列
* @param compare 比较方式 默认 equal 多个值默认 in
* @param value value
* @return value
*/
@Override
public Object createConditionFindInSet(DataRuntime runtime, StringBuilder builder, String column, Compare compare, Object value, boolean placeholder, boolean unicode) throws NotSupportException {
List values = BeanUtil.object2list(value);
if(values.size() > 1) {
builder.append("(");
}
boolean first = true;
String join = " OR ";
if(compare == Compare.FIND_IN_SET_AND) {
join = " AND ";
}
for(Object v:values) {
if(!first) {
builder.append(join);
}
if(placeholder) {
builder.append("FIND_IN_SET(?, ").append(column).append(")");
}else{
builder.append("FIND_IN_SET('").append(v).append("', ").append(column).append(")");
}
first = false;
}
if(values.size() > 1) {
builder.append(")");
}
return value;
}
/**
* select[命令合成-子流程]
* 构造 JSON_CONTAINS 查询条件
* 如果不需要占位符 返回null 否则原样返回value
* @param runtime 运行环境主要包含驱动适配器 数据源或客户端
* @param builder builder
* @param column 列
* @param compare 比较方式 默认 equal 多个值默认 in
* @param value value
* @return value
*/
@Override
public Object createConditionJsonContains(DataRuntime runtime, StringBuilder builder, String column, Compare compare, Object value, boolean placeholder, boolean unicode) {
//json_contains(JSON_COLUMN,'"VIP"','$.name')
List values = BeanUtil.object2list(value);
List returns = new ArrayList<>();
if(values.size() > 1) {
builder.append("(");
}
boolean first = true;
String join = " OR ";
if(compare == Compare.JSON_CONTAINS_AND) {
join = " AND ";
}
String key = null;
if(column.contains(">")) {
String[] ks = column.split(">");
column = ks[0];
key = ks[1];
}
for(Object v:values) {
if(!first) {
builder.append(join);
}
if(BasicUtil.isNumber(v)) {
v = v.toString();
}else{
String str = v.toString();
if(str.startsWith("${") && str.endsWith("}")) {
str = str.substring(2, str.length()-1);
}else if(!str.startsWith("\"")) {
str = "\""+str+"\"";
}
v = str;
}
builder.append("JSON_CONTAINS(").append(column).append(", ");
if(placeholder) {
builder.append("?");
} else {
builder.append(v);
}
if(BasicUtil.isNotEmpty(key)) {
builder.append(",'").append(key).append("'");
}
builder.append(")");
returns.add(v);
first = false;
}
if(values.size() > 1) {
builder.append(")");
}
return returns;
}
/**
* select[命令合成-子流程]
* 构造 JSON_CONTAINS 查询条件
* 如果不需要占位符 返回null 否则原样返回value
* @param runtime 运行环境主要包含驱动适配器 数据源或客户端
* @param builder builder
* @param column 列
* @param compare 比较方式 默认 equal 多个值默认 in
* @param value value
* @return value
*/
@Override
public Object createConditionJsonContainsPath(DataRuntime runtime, StringBuilder builder, String column, Compare compare, Object value, boolean placeholder, boolean unicode) {
//JSON_CONTAINS_PATH(JSON_COLUMN, 'all', '$.A', '$.D')
String scope = "one";
if(compare.getCode() == 76) {
scope = "all";
}
Collection values = new ArrayList<>();
if(value instanceof Collection) {
values = (Collection) value;
}else{
values.add(value);
}
builder.append("JSON_CONTAINS_PATH(").append(column).append(", '").append(scope).append("'");
for(Object v:values) {
builder.append(", ");
if(placeholder) {
builder.append("?");
}else{
builder.append("'").append(v).append("'");
}
}
builder.append(")");
return value;
}
/**
* select[命令合成-子流程]
* 构造 JSON_SEARCH 查询条件(默认 IS NOT NULL)
* 如果不需要占位符 返回null 否则原样返回value
* @param runtime 运行环境主要包含驱动适配器 数据源或客户端
* @param builder builder
* @param column 列
* @param compare 比较方式 默认 equal 多个值默认 in
* @param value value
* @return value
*/
@Override
public Object createConditionJsonSearch(DataRuntime runtime, StringBuilder builder, String column, Compare compare, Object value, boolean placeholder, boolean unicode) throws NotSupportException {
//JSON_SEARCH(JSON_COLUMN, 'one', 'abc') IS NOT NULL
String scope = "one";
if(compare.getCode() == 78) {
scope = "all";
}
Collection values = new ArrayList<>();
if(value instanceof Collection) {
values = (Collection) value;
}else{
values.add(value);
}
builder.append("JSON_SEARCH(").append(column).append(", '").append(scope).append("'");
for(Object v:values) {
builder.append(", ");
if(placeholder) {
builder.append("?");
}else{
builder.append("'").append(v).append("'");
}
}
builder.append(") IS NOT NULL");
return value;
}
/**
* select[命令合成-子流程]
* 构造(NOT) IN 查询条件
* @param runtime 运行环境主要包含驱动适配器 数据源或客户端
* @param builder builder
* @param compare 比较方式 默认 equal 多个值默认 in
* @param value value
* @return builder
*/
@Override
public StringBuilder createConditionIn(DataRuntime runtime, StringBuilder builder, Compare compare, Object value, boolean placeholder, boolean unicode) {
return super.createConditionIn(runtime, builder, compare, value, placeholder, unicode);
}
/**
* select [命令执行]
* @param runtime 运行环境主要包含驱动适配器 数据源或客户端
* @param random 用来标记同一组命令
* @param system 系统表不检测列属性
* @param table 表
* @param run 最终待执行的命令和参数(如JDBC环境中的SQL)
* @return DataSet
*/
@Override
public DataSet select(DataRuntime runtime, String random, boolean system, Table table, ConfigStore configs, Run run) {
return super.select(runtime, random, system, table, configs, run);
}
/**
* select [命令执行]
* @param runtime 运行环境主要包含驱动适配器 数据源或客户端
* @param random 用来标记同一组命令
* @param run 最终待执行的命令和参数(如JDBC环境中的SQL)
* @return maps
*/
@Override
public List> maps(DataRuntime runtime, String random, ConfigStore configs, Run run) {
return super.maps(runtime, random, configs, run);
}
/**
* select [命令执行]
* @param runtime 运行环境主要包含驱动适配器 数据源或客户端
* @param random 用来标记同一组命令
* @param run 最终待执行的命令和参数(如JDBC环境中的SQL)
* @return map
*/
@Override
public Map map(DataRuntime runtime, String random, ConfigStore configs, Run run) {
return super.map(runtime, random, configs, run);
}
/**
* select [命令执行]
* @param runtime 运行环境主要包含驱动适配器 数据源或客户端
* @param random 用来标记同一组命令
* @param next 是否查下一个序列值
* @param names 存储过程名称s
* @return DataRow 保存序列查询结果 以存储过程name作为key
*/
@Override
public DataRow sequence(DataRuntime runtime, String random, boolean next, String ... names) {
return super.sequence(runtime, random, next, names);
}
/**
* select [命令执行-子流程]
* JDBC执行完成后的结果处理
* @param runtime 运行环境主要包含驱动适配器 数据源或客户端
* @param list JDBC执行返回的结果集
* @return maps
*/
@Override
public List> process(DataRuntime runtime, List> list) {
return super.process(runtime, list);
}
/* *****************************************************************************************************************
* COUNT
* -----------------------------------------------------------------------------------------------------------------
* [调用入口]
* long count(DataRuntime runtime, String random, RunPrepare prepare, ConfigStore configs, String ... conditions)
* [命令合成]
* String mergeFinalTotal(DataRuntime runtime, Run run)
* [命令执行]
* long count(DataRuntime runtime, String random, Run run)
******************************************************************************************************************/
/**
* count [调用入口]
* @param runtime 运行环境主要包含驱动适配器 数据源或客户端
* @param random 用来标记同一组命令
* @param prepare 构建最终执行命令的全部参数,包含表(或视图|函数|自定义SQL)查询条件 排序 分页等
* @param configs 过滤条件及相关配置
* @param conditions 查询条件 支持k:v k:v::type 以及原生sql形式(包含ORDER、GROUP、HAVING)默认忽略空值条件
* @return long
*/
@Override
public long count(DataRuntime runtime, String random, RunPrepare prepare, ConfigStore configs, String ... conditions) {
return super.count(runtime, random, prepare, configs, conditions);
}
/**
* count [命令合成]
* 合成最终 select count 命令
* @param runtime 运行环境主要包含驱动适配器 数据源或客户端
* @param run 最终待执行的命令和参数(如JDBC环境中的SQL)
* @return String
*/
@Override
public String mergeFinalTotal(DataRuntime runtime, Run run) {
return super.mergeFinalTotal(runtime, run);
}
/**
* count [命令执行]
* @param runtime 运行环境主要包含驱动适配器 数据源或客户端
* @param random 用来标记同一组命令
* @param run 最终待执行的命令和参数(如JDBC环境中的SQL)
* @return long
*/
@Override
public long count(DataRuntime runtime, String random, Run run) {
return super.count(runtime, random, run);
}
/* *****************************************************************************************************************
* EXISTS
* -----------------------------------------------------------------------------------------------------------------
* boolean exists(DataRuntime runtime, String random, RunPrepare prepare, ConfigStore configs, String ... conditions)
* String mergeFinalExists(DataRuntime runtime, Run run)
******************************************************************************************************************/
/**
* exists [调用入口]
* @param runtime 运行环境主要包含驱动适配器 数据源或客户端
* @param random 用来标记同一组命令
* @param prepare 构建最终执行命令的全部参数,包含表(或视图|函数|自定义SQL)查询条件 排序 分页等
* @param configs 查询条件及相关设置
* @param conditions 查询条件 支持k:v k:v::type 以及原生sql形式(包含ORDER、GROUP、HAVING)默认忽略空值条件
* @return boolean
*/
@Override
public boolean exists(DataRuntime runtime, String random, RunPrepare prepare, ConfigStore configs, String ... conditions) {
return super.exists(runtime, random, prepare, configs, conditions);
}
@Override
public String mergeFinalExists(DataRuntime runtime, Run run) {
return super.mergeFinalExists(runtime, run);
}
/* *****************************************************************************************************************
* EXECUTE
* -----------------------------------------------------------------------------------------------------------------
* [调用入口]
* long execute(DataRuntime runtime, String random, RunPrepare prepare, ConfigStore configs, String ... conditions)
* long execute(DataRuntime runtime, String random, int batch, ConfigStore configs, RunPrepare prepare, Collection values)
* boolean execute(DataRuntime runtime, String random, Procedure procedure)
* [命令合成]
* Run buildExecuteRun(DataRuntime runtime, RunPrepare prepare, ConfigStore configs, String ... conditions)
* void fillExecuteContent(DataRuntime runtime, Run run)
* [命令执行]
* long execute(DataRuntime runtime, String random, ConfigStore configs, Run run)
******************************************************************************************************************/
/**
* execute [调用入口]
* @param runtime 运行环境主要包含驱动适配器 数据源或客户端
* @param random 用来标记同一组命令
* @param prepare 构建最终执行命令的全部参数,包含表(或视图|函数|自定义SQL)查询条件 排序 分页等
* @param configs 查询条件及相关设置
* @param conditions 查询条件 支持k:v k:v::type 以及原生sql形式(包含ORDER、GROUP、HAVING)默认忽略空值条件
* @return 影响行数
*/
@Override
public long execute(DataRuntime runtime, String random, RunPrepare prepare, ConfigStore configs, String ... conditions) {
return super.execute(runtime, random, prepare, configs, conditions);
}
@Override
public long execute(DataRuntime runtime, String random, int batch, ConfigStore configs, RunPrepare prepare, Collection values) {
return super.execute(runtime, random, batch, configs, prepare, values);
}
/**
* procedure [命令执行]
* @param runtime 运行环境主要包含驱动适配器 数据源或客户端
* @param procedure 存储过程
* @param random random
* @return 影响行数
*/
@Override
public boolean execute(DataRuntime runtime, String random, Procedure procedure) {
return super.execute(runtime, random, procedure);
}
/**
* execute [命令合成]
* 创建执行SQL
* @param runtime 运行环境主要包含驱动适配器 数据源或客户端
* @param prepare 构建最终执行命令的全部参数,包含表(或视图|函数|自定义SQL)查询条件 排序 分页等
* @param configs 查询条件及相关设置
* @param conditions 查询条件 支持k:v k:v::type 以及原生sql形式(包含ORDER、GROUP、HAVING)默认忽略空值条件
* @return Run 最终执行命令 如JDBC环境中的 SQL 与 参数值
*/
@Override
public Run buildExecuteRun(DataRuntime runtime, RunPrepare prepare, ConfigStore configs, String ... conditions) {
return super.buildExecuteRun(runtime, prepare, configs, conditions);
}
@Override
protected void fillExecuteContent(DataRuntime runtime, XMLRun run) {
super.fillExecuteContent(runtime, run);
}
@Override
protected void fillExecuteContent(DataRuntime runtime, TextRun run) {
super.fillExecuteContent(runtime, run);
}
@Override
protected void fillExecuteContent(DataRuntime runtime, TableRun run) {
super.fillExecuteContent(runtime, run);
}
/**
* execute [命令合成-子流程]
* 填充 execute 命令内容
* @param runtime 运行环境主要包含驱动适配器 数据源或客户端
* @param run 最终待执行的命令和参数(如JDBC环境中的SQL)
*/
@Override
public void fillExecuteContent(DataRuntime runtime, Run run) {
super.fillExecuteContent(runtime, run);
}
/**
* execute [命令执行]
* @param runtime 运行环境主要包含驱动适配器 数据源或客户端
* @param random 用来标记同一组命令
* @param run 最终待执行的命令和参数(如JDBC环境中的SQL)
* @return 影响行数
*/
@Override
public long execute(DataRuntime runtime, String random, ConfigStore configs, Run run) {
return super.execute(runtime, random, configs, run);
}
/* *****************************************************************************************************************
* DELETE
* -----------------------------------------------------------------------------------------------------------------
* [调用入口]
* long deletes(DataRuntime runtime, String random, int batch, String table, ConfigStore configs, String column, Collection values)
* long delete(DataRuntime runtime, String random, String table, ConfigStore configs, Object obj, String... columns)
* long delete(DataRuntime runtime, String random, String table, ConfigStore configs, String... conditions)
* long truncate(DataRuntime runtime, String random, String table)
* [命令合成]
* List buildDeleteRun(DataRuntime runtime, String table, ConfigStore configs, Object obj, String ... columns)
* List buildDeleteRun(DataRuntime runtime, int batch, String table, ConfigStore configs, String column, Object values)
* List buildTruncateRun(DataRuntime runtime, String table)
* List buildDeleteRunFromTable(DataRuntime runtime, int batch, String table, ConfigStore configs,String column, Object values)
* List buildDeleteRunFromEntity(DataRuntime runtime, String table, ConfigStore configs, Object obj, String ... columns)
* void fillDeleteRunContent(DataRuntime runtime, Run run)
* [命令执行]
* long delete(DataRuntime runtime, String random, ConfigStore configs, Run run)
******************************************************************************************************************/
/**
* delete [调用入口]
*
* 合成 where column in (values)
* @param runtime 运行环境主要包含驱动适配器 数据源或客户端
* @param random 用来标记同一组命令
* @param table 表 如果不提供表名则根据data解析, 表名可以事实前缀<数据源名>表示切换数据源
* @param values 列对应的值
* @return 影响行数
* @param T
*/
@Override
public long deletes(DataRuntime runtime, String random, int batch, String table, ConfigStore configs, String key, Collection values) {
return super.deletes(runtime, random, batch, table, configs, key, values);
}
/**
* delete [调用入口]
*
* 合成 where k1 = v1 and k2 = v2
* @param runtime 运行环境主要包含驱动适配器 数据源或客户端
* @param random 用来标记同一组命令
* @param obj entity或DataRow
* @param columns 删除条件的列或属性,根据columns取obj值并合成删除条件
* @return 影响行数
*/
@Override
public long delete(DataRuntime runtime, String random, String dest, ConfigStore configs, Object obj, String... columns) {
return super.delete(runtime, random, dest, configs, obj, columns);
}
/**
* delete [调用入口]
*
* 根据configs和conditions过滤条件
* @param runtime 运行环境主要包含驱动适配器 数据源或客户端
* @param random 用来标记同一组命令
* @param table 表
* @param configs 查询条件及相关设置
* @param conditions 查询条件 支持k:v k:v::type 以及原生sql形式(包含ORDER、GROUP、HAVING)默认忽略空值条件
* @return 影响行数
*/
@Override
public long delete(DataRuntime runtime, String random, String table, ConfigStore configs, String... conditions) {
return super.delete(runtime, random, table, configs, conditions);
}
/**
* truncate [调用入口]
* @param runtime 运行环境主要包含驱动适配器 数据源或客户端
* @param random 用来标记同一组命令
* @param table 表
* @return 1表示成功执行
*/
@Override
public long truncate(DataRuntime runtime, String random, Table table) {
return super.truncate(runtime, random, table);
}
/**
* delete[命令合成]
* 合成 where k1 = v1 and k2 = v2
* @param runtime 运行环境主要包含驱动适配器 数据源或客户端
* @param dest 表 如果不提供表名则根据data解析, 表名可以事实前缀<数据源名>表示切换数据源
* @param obj entity或DataRow
* @param columns 删除条件的列或属性,根据columns取obj值并合成删除条件
* @return Run 最终执行命令 如JDBC环境中的 SQL 与 参数值
*/
@Override
public List buildDeleteRun(DataRuntime runtime, Table dest, ConfigStore configs, Object obj, String ... columns) {
return super.buildDeleteRun(runtime, dest, configs, obj, columns);
}
/**
* delete[命令合成]
* 合成 where column in (values)
* @param runtime 运行环境主要包含驱动适配器 数据源或客户端
* @param table 表 如果不提供表名则根据data解析, 表名可以事实前缀<数据源名>表示切换数据源
* @param key 根据属性解析出列
* @param values values
* @return Run 最终执行命令 如JDBC环境中的 SQL 与 参数值
*/
@Override
public List buildDeleteRun(DataRuntime runtime, int batch, String table, ConfigStore configs, String key, Object values) {
return super.buildDeleteRun(runtime, batch, table, configs, key, values);
}
@Override
public List buildTruncateRun(DataRuntime runtime, String table) {
return super.buildTruncateRun(runtime, table);
}
/**
* delete[命令合成-子流程]
* 合成 where column in (values)
* @param runtime 运行环境主要包含驱动适配器 数据源或客户端
* @param table 表 如果不提供表名则根据data解析, 表名可以事实前缀<数据源名>表示切换数据源
* @param column 列
* @param values values
* @return Run 最终执行命令 如JDBC环境中的 SQL 与 参数值
*/
@Override
public List buildDeleteRunFromTable(DataRuntime runtime, int batch, Table table, ConfigStore configs, String column, Object values) {
return super.buildDeleteRunFromTable(runtime, batch, table, configs, column, values);
}
/**
* delete[命令合成-子流程]
* 合成 where k1 = v1 and k2 = v2
* @param runtime 运行环境主要包含驱动适配器 数据源或客户端
* @param table 表 如果不提供表名则根据data解析, 表名可以事实前缀<数据源名>表示切换数据源 如果为空 可以根据obj解析
* @param obj entity或DataRow
* @param columns 删除条件的列或属性,根据columns取obj值并合成删除条件
* @return Run 最终执行命令 如JDBC环境中的 SQL 与 参数值
*/
@Override
public List buildDeleteRunFromEntity(DataRuntime runtime, Table table, ConfigStore configs, Object obj, String... columns) {
return super.buildDeleteRunFromEntity(runtime, table, configs, obj, columns);
}
/**
* delete[命令合成-子流程]
* 构造查询主体 拼接where group等(不含分页 ORDER)
* @param run 最终待执行的命令和参数(如JDBC环境中的SQL)
*/
@Override
public void fillDeleteRunContent(DataRuntime runtime, Run run) {
super.fillDeleteRunContent(runtime, run);
}
/**
* delete[命令执行]
* @param runtime 运行环境主要包含驱动适配器 数据源或客户端
* @param random 用来标记同一组命令
* @param configs 查询条件及相关设置
* @param run 最终待执行的命令和参数(如JDBC环境中的SQL)
* @return 影响行数
*/
@Override
public long delete(DataRuntime runtime, String random, ConfigStore configs, Run run) {
return super.delete(runtime, random, configs, run);
}
/* *****************************************************************************************************************
*
* metadata
*
* =================================================================================================================
* database : 数据库(catalog, schema)
* table : 表
* master table : 主表
* partition table : 分区表
* column : 列
* tag : 标签
* primary key : 主键
* foreign key : 外键
* index : 索引
* constraint : 约束
* trigger : 触发器
* procedure : 存储过程
* function : 函数
******************************************************************************************************************/
/* *****************************************************************************************************************
* database
* -----------------------------------------------------------------------------------------------------------------
* [调用入口]
* LinkedHashMap databases(DataRuntime runtime, String random, String name)
* List databases(DataRuntime runtime, String random, boolean greedy, String name)
* Database database(DataRuntime runtime, String random, String name)
* [命令合成]
* List buildQueryDatabasesRun(DataRuntime runtime, boolean greedy, String name)
* [结果集封装]
* LinkedHashMap databases(DataRuntime runtime, int index, boolean create, LinkedHashMap databases, Catalog catalog, Schema schema, DataSet set)
* List databases(DataRuntime runtime, int index, boolean create, List databases, Catalog catalog, Schema schema, DataSet set)
* Database database(DataRuntime runtime, boolean create, Database dataase, DataSet set)
* Database database(DataRuntime runtime, boolean create, Database dataase)
******************************************************************************************************************/
/**
* database[调用入口]
* 当前数据库
* @param runtime 运行环境主要包含驱动适配器 数据源或客户端
* @param random 用来标记同一组命令
* @return Database
*/
@Override
public Database database(DataRuntime runtime, String random) {
Schema schema = schema(runtime, random);
if(null != schema) {
return new Database(schema.getName());
}
return super.database(runtime, random);
}
/**
* database[调用入口]
* 当前数据源 数据库描述(产品名称+版本号)
* @param runtime 运行环境主要包含驱动适配器 数据源或客户端
* @param random 用来标记同一组命令
* @return String
*/
public String product(DataRuntime runtime, String random) {
return super.product(runtime, random);
}
/**
* database[调用入口]
* 当前数据源 数据库类型
* @param runtime 运行环境主要包含驱动适配器 数据源或客户端
* @param random 用来标记同一组命令
* @return String
*/
public String version(DataRuntime runtime, String random) {
return super.version(runtime, random);
}
/**
* database[调用入口]
* @param runtime 运行环境主要包含驱动适配器 数据源或客户端
* @param random 用来标记同一组命令
* @param greedy 贪婪模式 true:查询权限范围内尽可能多的数据 false:只查当前catalog/schema/database范围内数据
* @param query 查询条件 根据metadata属性
* @return LinkedHashMap
*/
@Override
public List databases(DataRuntime runtime, String random, boolean greedy, Database query) {
return super.databases(runtime, random, greedy, query);
}
/**
* database[调用入口]
* @param runtime 运行环境主要包含驱动适配器 数据源或客户端
* @param random 用来标记同一组命令
* @param query 查询条件 根据metadata属性
* @return LinkedHashMap
*/
@Override
public LinkedHashMap databases(DataRuntime runtime, String random, Database query) {
return super.databases(runtime, random, query);
}
/**
* database[命令合成]
* 查询全部数据库
* @param runtime 运行环境主要包含驱动适配器 数据源或客户端
* @param query 查询条件 根据metadata属性
* @param greedy 贪婪模式 true:查询权限范围内尽可能多的数据 false:只查当前catalog/schema/database范围内数据
* @return runs
* @throws Exception 异常
*/
@Override
public List buildQueryDatabasesRun(DataRuntime runtime, boolean greedy, Database query) throws Exception {
String name = query.getName();
List runs = new ArrayList<>();
Run run = new SimpleRun(runtime);
runs.add(run);
StringBuilder builder = run.getBuilder();
builder.append("SHOW DATABASES");
if(BasicUtil.isNotEmpty(name)) {
builder.append(" LIKE '").append(name).append("'");
}
return runs;
}
/**
* database[结果集封装]
* database 属性与结果集对应关系
* @return MetadataFieldRefer
*/
@Override
public MetadataFieldRefer initDatabaseFieldRefer() {
MetadataFieldRefer refer = new MetadataFieldRefer(Database.class);
refer.map(Database.FIELD_NAME, "DATABASE");
return refer;
}
/**
* database[结果集封装]
* @param runtime 运行环境主要包含驱动适配器 数据源或客户端
* @param index 第几条SQL 对照 buildQueryDatabaseRun 返回顺序
* @param create 上一步没有查到的, 这一步是否需要新创建
* @param previous 上一步查询结果
* @param set 查询结果集
* @return LinkedHashMap
* @throws Exception Exception
*/
@Override
public LinkedHashMap databases(DataRuntime runtime, int index, boolean create, LinkedHashMap previous, Database query, DataSet set) throws Exception {
return super.databases(runtime, index, create, previous, query, set);
}
@Override
public List databases(DataRuntime runtime, int index, boolean create, List previous, Database query, DataSet set) throws Exception {
return super.databases(runtime, index, create, previous, query, set);
}
/**
* database[结果集封装]
* 当前database 根据查询结果集
* @param runtime 运行环境主要包含驱动适配器 数据源或客户端
* @param index 第几条SQL 对照 buildQueryDatabaseRun 返回顺序
* @param create 上一步没有查到的, 这一步是否需要新创建
* @param meta 上一步查询结果
* @param set 查询结果集
* @return database
* @throws Exception 异
*/
@Override
public Database database(DataRuntime runtime, int index, boolean create, Database meta, DataSet set) throws Exception {
if(null == meta) {
for (DataRow row : set) {
meta = new Database();
meta.setName(row.getString("DATABASE"));
return meta;
}
}
return meta;
}
/**
* database[结果集封装]
* 当前database 根据驱动内置接口补充
* @param runtime 运行环境主要包含驱动适配器 数据源或客户端
* @param create 上一步没有查到的, 这一步是否需要新创建
* @param meta 上一步查询结果
* @return database
* @throws Exception 异常
*/
@Override
public Database database(DataRuntime runtime, boolean create, Database meta) throws Exception {
return super.database(runtime, create, meta);
}
/**
* database[结果集封装]
* 根据查询结果集构造 product
* @param runtime 运行环境主要包含驱动适配器 数据源或客户端
* @param create 上一步没有查到的, 这一步是否需要新创建
* @param product 上一步查询结果
* @param set 查询结果集
* @return product
* @throws Exception 异常
*/
@Override
public String product(DataRuntime runtime, int index, boolean create, String product, DataSet set) {
return super.product(runtime, index, create, product, set);
}
/**
* database[结果集封装]
* 根据JDBC内置接口 product
* @param runtime 运行环境主要包含驱动适配器 数据源或客户端
* @param create 上一步没有查到的, 这一步是否需要新创建
* @param product 上一步查询结果
* @return product
* @throws Exception 异常
*/
@Override
public String product(DataRuntime runtime, boolean create, String product) {
return super.product(runtime, create, product);
}
/**
* database[结果集封装]
* 根据查询结果集构造 version
* @param runtime 运行环境主要包含驱动适配器 数据源或客户端
* @param create 上一步没有查到的, 这一步是否需要新创建
* @param version 上一步查询结果
* @param set 查询结果集
* @return version
* @throws Exception 异常
*/
@Override
public String version(DataRuntime runtime, int index, boolean create, String version, DataSet set) {
return super.version(runtime, index, create, version, set);
}
/**
* database[结果集封装]
* 根据JDBC内置接口 version
* @param runtime 运行环境主要包含驱动适配器 数据源或客户端
* @param create 上一步没有查到的, 这一步是否需要新创建
* @param version 上一步查询结果
* @return version
* @throws Exception 异常
*/
@Override
public String version(DataRuntime runtime, boolean create, String version) {
return super.version(runtime, create, version);
}
/**
* schema[结果集封装]
* 根据查询结果封装 schema 对象,只封装catalog,schema,name等基础属性
* @param runtime 运行环境主要包含驱动适配器 数据源或客户端
* @param meta 上一步封装结果
* @param query 查询条件 根据metadata属性
* @param row 查询结果集
* @return Database
*/
@Override
public T init(DataRuntime runtime, int index, T meta, Database query, DataRow row) {
return super.init(runtime, index, meta, query, row);
}
/**
* database[结果集封装]
* 根据查询结果封装 database 对象,更多属性
* @param runtime 运行环境主要包含驱动适配器 数据源或客户端
* @param meta 上一步封装结果
* @param row 查询结果集
* @return Table
*/
@Override
public T detail(DataRuntime runtime, int index, T meta, Database query, DataRow row) {
return super.detail(runtime, index, meta, query, row);
}
/* *****************************************************************************************************************
* catalog
* -----------------------------------------------------------------------------------------------------------------
* [调用入口]
* LinkedHashMap catalogs(DataRuntime runtime, String random, String name)
* List catalogs(DataRuntime runtime, String random, boolean greedy, String name)
* [命令合成]
* List buildQueryCatalogsRun(DataRuntime runtime, boolean greedy, String name)
* [结果集封装]
* List catalogs(DataRuntime runtime, int index, boolean create, List catalogs, DataSet set)
* LinkedHashMap catalogs(DataRuntime runtime, int index, boolean create, LinkedHashMap catalogs, DataSet set)
* List catalogs(DataRuntime runtime, boolean create, List catalogs, DataSet set)
* LinkedHashMap catalogs(DataRuntime runtime, boolean create, LinkedHashMap catalogs, DataSet set)
* Catalog catalog(DataRuntime runtime, int index, boolean create, DataSet set)
******************************************************************************************************************/
/**
* catalog[调用入口]
* @param runtime 运行环境主要包含驱动适配器 数据源或客户端
* @param random 用来标记同一组命令
* @param query 查询条件 根据metadata属性
* @return LinkedHashMap
*/
@Override
public LinkedHashMap catalogs(DataRuntime runtime, String random, Catalog query) {
return super.catalogs(runtime, random, query);
}
/**
* catalog[调用入口]
* @param runtime 运行环境主要包含驱动适配器 数据源或客户端
* @param random 用来标记同一组命令
* @param query 查询条件 根据metadata属性
* @return LinkedHashMap
*/
@Override
public List catalogs(DataRuntime runtime, String random, boolean greedy, Catalog query) {
return super.catalogs(runtime, random, greedy, query);
}
/**
* catalog[命令合成]
* 查询全部数据库
* @param runtime 运行环境主要包含驱动适配器 数据源或客户端
* @param query 查询条件 根据metadata属性
* @param greedy 贪婪模式 true:查询权限范围内尽可能多的数据 false:只查当前catalog/schema/database范围内数据
* @return runs
* @throws Exception 异常
*/
@Override
public List buildQueryCatalogsRun(DataRuntime runtime, boolean greedy, Catalog query) throws Exception {
return super.buildQueryCatalogsRun(runtime, greedy, query);
}
/**
* Catalog[结果集封装]
* Catalog 属性与结果集对应关系
* @return MetadataFieldRefer
*/
@Override
public MetadataFieldRefer initCatalogFieldRefer() {
return super.initCatalogFieldRefer();
}
/**
* catalog[结果集封装]
* 根据查询结果集构造 Database
* @param runtime 运行环境主要包含驱动适配器 数据源或客户端
* @param index 第几条SQL 对照 buildQueryDatabaseRun 返回顺序
* @param create 上一步没有查到的, 这一步是否需要新创建
* @param previous 上一步查询结果
* @param set 查询结果集
* @return databases
* @throws Exception 异常
*/
@Override
public LinkedHashMap catalogs(DataRuntime runtime, int index, boolean create, LinkedHashMap previous, Catalog query, DataSet set) throws Exception {
return super.catalogs(runtime, index, create, previous, query, set);
}
/**
* catalog[结果集封装]
* 根据查询结果集构造 Database
* @param runtime 运行环境主要包含驱动适配器 数据源或客户端
* @param index 第几条SQL 对照 buildQueryDatabaseRun 返回顺序
* @param create 上一步没有查到的, 这一步是否需要新创建
* @param previous 上一步查询结果
* @param set 查询结果集
* @return databases
* @throws Exception 异常
*/
@Override
public List catalogs(DataRuntime runtime, int index, boolean create, List previous, Catalog query, DataSet set) throws Exception {
return super.catalogs(runtime, index, create, previous, query, set);
}
/**
* catalog[结果集封装]
* 根据驱动内置接口补充 catalog
* @param runtime 运行环境主要包含驱动适配器 数据源或客户端
* @param create 上一步没有查到的, 这一步是否需要新创建
* @param previous 上一步查询结果
* @return databases
* @throws Exception 异常
*/
@Override
public LinkedHashMap catalogs(DataRuntime runtime, boolean create, LinkedHashMap previous) throws Exception {
return super.catalogs(runtime, create, previous);
}
/**
* catalog[结果集封装]
* 根据驱动内置接口补充 catalog
* @param runtime 运行环境主要包含驱动适配器 数据源或客户端
* @param create 上一步没有查到的, 这一步是否需要新创建
* @param previous 上一步查询结果
* @return databases
* @throws Exception 异常
*/
@Override
public List catalogs(DataRuntime runtime, boolean create, List previous) throws Exception {
return super.catalogs(runtime, create, previous);
}
/**
* catalog[结果集封装]
* 当前catalog 根据查询结果集
* @param runtime 运行环境主要包含驱动适配器 数据源或客户端
* @param index 第几条SQL 对照 buildQueryDatabaseRun 返回顺序
* @param create 上一步没有查到的, 这一步是否需要新创建
* @param meta 上一步查询结果
* @param set 查询结果集
* @return Catalog
* @throws Exception 异常
*/
@Override
public Catalog catalog(DataRuntime runtime, int index, boolean create, Catalog meta, DataSet set) throws Exception {
return super.catalog(runtime, index, create, meta, set);
}
/**
* catalog[结果集封装]
* 当前catalog 根据驱动内置接口补充
* @param runtime 运行环境主要包含驱动适配器 数据源或客户端
* @param create 上一步没有查到的, 这一步是否需要新创建
* @param meta 上一步查询结果
* @return Catalog
* @throws Exception 异常
*/
@Override
public Catalog catalog(DataRuntime runtime, boolean create, Catalog meta) throws Exception {
return super.catalog(runtime, create, meta);
}
/**
* catalog[结果集封装]
* 根据查询结果封装 catalog 对象,只封装catalog,schema,name等基础属性
* @param runtime 运行环境主要包含驱动适配器 数据源或客户端
* @param meta 上一步封装结果
* @param query 查询条件 根据metadata属性
* @param row 查询结果集
* @return Catalog
*/
@Override
public T init(DataRuntime runtime, int index, T meta, Catalog query, DataRow row) {
return super.init(runtime, index, meta, query, row);
}
/**
* catalog[结果集封装]
* 根据查询结果封装 catalog 对象,更多属性
* @param runtime 运行环境主要包含驱动适配器 数据源或客户端
* @param meta 上一步封装结果
* @param row 查询结果集
* @return Table
*/
@Override
public T detail(DataRuntime runtime, int index, T meta, Catalog query, DataRow row) {
return super.detail(runtime, index, meta, query, row);
}
/* *****************************************************************************************************************
* schema
* -----------------------------------------------------------------------------------------------------------------
* [调用入口]
* LinkedHashMap databases(DataRuntime runtime, String random, String name)
* List databases(DataRuntime runtime, String random, boolean greedy, String name)
* Database database(DataRuntime runtime, String random, String name)
* Database database(DataRuntime runtime, String random)
* String String product(DataRuntime runtime, String random);
* String String version(DataRuntime runtime, String random);
* [命令合成]
* List buildQueryDatabasesRun(DataRuntime runtime, boolean greedy, String name)
* List buildQueryDatabaseRun(DataRuntime runtime, boolean greedy, String name)
* List buildQueryProductRun(DataRuntime runtime, boolean greedy, String name)
* List buildQueryVersionRun(DataRuntime runtime, boolean greedy, String name)
* [结果集封装]
* LinkedHashMap databases(DataRuntime runtime, int index, boolean create, LinkedHashMap databases, Catalog catalog, Schema schema, DataSet set)
* List databases(DataRuntime runtime, int index, boolean create, List databases, Catalog catalog, Schema schema, DataSet set)
* Database database(DataRuntime runtime, boolean create, Database dataase, DataSet set)
* Database database(DataRuntime runtime, boolean create, Database dataase)
* String product(DataRuntime runtime, boolean create, Database product, DataSet set)
* String product(DataRuntime runtime, boolean create, String product)
* String version(DataRuntime runtime, int index, boolean create, String version, DataSet set)
* String version(DataRuntime runtime, boolean create, String version)
* Catalog catalog(DataRuntime runtime, boolean create, Catalog catalog, DataSet set)
* Catalog catalog(DataRuntime runtime, boolean create, Catalog catalog)
* Schema schema(DataRuntime runtime, boolean create, Schema schema, DataSet set)
* Schema schema(DataRuntime runtime, boolean create, Schema schema)
* Database database(DataRuntime runtime, boolean create, Database dataase)
******************************************************************************************************************/
/**
* schema[调用入口]
* @param runtime 运行环境主要包含驱动适配器 数据源或客户端
* @param random 用来标记同一组命令
* @param query 查询条件 根据metadata属性
* @return LinkedHashMap
*/
@Override
public LinkedHashMap schemas(DataRuntime runtime, String random, Schema query) {
return super.schemas(runtime, random, query);
}
/**
* schema[调用入口]
* @param runtime 运行环境主要包含驱动适配器 数据源或客户端
* @param random 用来标记同一组命令
* @param query 查询条件 根据metadata属性
* @return LinkedHashMap
*/
@Override
public List schemas(DataRuntime runtime, String random, boolean greedy, Schema query) {
return super.schemas(runtime, random, greedy, query);
}
/**
* catalog[命令合成]
* 查询全部数据库
* @param runtime 运行环境主要包含驱动适配器 数据源或客户端
* @param query 查询条件 根据metadata属性
* @param greedy 贪婪模式 true:查询权限范围内尽可能多的数据 false:只查当前catalog/schema/database范围内数据
* @return runs
* @throws Exception 异常
*/
@Override
public List buildQuerySchemasRun(DataRuntime runtime, boolean greedy, Schema query) throws Exception {
String name = query.getName();
List runs = new ArrayList<>();
Run run = new SimpleRun(runtime);
runs.add(run);
StringBuilder builder = run.getBuilder();
builder.append("SHOW SCHEMAS");
if(BasicUtil.isNotEmpty(name)) {
builder.append(" LIKE '").append(name).append("'");
}
return runs;
}
/**
* Schema[结果集封装]
* Schema 属性与结果集对应关系
* @return MetadataFieldRefer
*/
@Override
public MetadataFieldRefer initSchemaFieldRefer() {
MetadataFieldRefer refer = new MetadataFieldRefer(Schema.class);
refer.map(Schema.FIELD_NAME, "DATABASE");
return refer;
}
/**
* schema[结果集封装]
* 根据查询结果集构造 Database
* @param runtime 运行环境主要包含驱动适配器 数据源或客户端
* @param index 第几条SQL 对照 buildQueryDatabaseRun 返回顺序
* @param create 上一步没有查到的, 这一步是否需要新创建
* @param previous 上一步查询结果
* @param set 查询结果集
* @return databases
* @throws Exception 异常
*/
@Override
public LinkedHashMap schemas(DataRuntime runtime, int index, boolean create, LinkedHashMap previous, Schema query, DataSet set) throws Exception {
return super.schemas(runtime, index, create, previous, query, set);
}
@Override
public List schemas(DataRuntime runtime, int index, boolean create, List previous, Schema query, DataSet set) throws Exception {
return super.schemas(runtime, index, create, previous, query, set);
}
/**
* schema[结果集封装]
* 当前schema 根据查询结果集
* @param runtime 运行环境主要包含驱动适配器 数据源或客户端
* @param index 第几条SQL 对照 buildQuerySchemaRun 返回顺序
* @param create 上一步没有查到的, 这一步是否需要新创建
* @param meta 上一步查询结果
* @param set 查询结果集
* @return schema
* @throws Exception 异常
*/
@Override
public Schema schema(DataRuntime runtime, int index, boolean create, Schema meta, DataSet set) throws Exception {
return super.schema(runtime, index, create, meta, set);
}
/**
* schema[结果集封装]
* 当前schema 根据驱动内置接口补充
* @param runtime 运行环境主要包含驱动适配器 数据源或客户端
* @param create 上一步没有查到的, 这一步是否需要新创建
* @param meta 上一步查询结果
* @return schema
* @throws Exception 异常
*/
@Override
public Schema schema(DataRuntime runtime, boolean create, Schema meta) throws Exception {
return super.schema(runtime, create, meta);
}
/**
* schema[结果集封装]
* 根据查询结果封装 schema 对象,只封装catalog,schema,name等基础属性
* @param runtime 运行环境主要包含驱动适配器 数据源或客户端
* @param meta 上一步封装结果
* @param query 查询条件 根据metadata属性
* @param row 查询结果集
* @return Schema
*/
@Override
public T init(DataRuntime runtime, int index, T meta, Schema query, DataRow row) {
return super.init(runtime, index, meta, query, row);
}
/**
* schema[结果集封装]
* 根据查询结果封装 schema 对象,更多属性
* @param runtime 运行环境主要包含驱动适配器 数据源或客户端
* @param meta 上一步封装结果
* @param row 查询结果集
* @return Table
*/
@Override
public T detail(DataRuntime runtime, int index, T meta, Schema query, DataRow row) {
return super.detail(runtime, index, meta, query, row);
}
/* *****************************************************************************************************************
* table
* -----------------------------------------------------------------------------------------------------------------
* [调用入口]
* List tables(DataRuntime runtime, String random, boolean greedy, Catalog catalog, Schema schema, String pattern, int types, boolean struct)
* LinkedHashMap tables(DataRuntime runtime, String random, Catalog catalog, Schema schema, String pattern, String types, boolean struct)
* [命令合成]
* List buildQueryTablesRun(DataRuntime runtime, boolean greedy, Catalog catalog, Schema schema, String pattern, int types, ConfigStore configs)
* List buildQueryTablesCommentRun(DataRuntime runtime, Catalog catalog, Schema schema, String pattern, int types)
* [结果集封装]
* LinkedHashMap tables(DataRuntime runtime, int index, boolean create, LinkedHashMap tables, Catalog catalog, Schema schema, DataSet set)
* List tables(DataRuntime runtime, int index, boolean create, List tables, Catalog catalog, Schema schema, DataSet set)
* LinkedHashMap tables(DataRuntime runtime, boolean create, LinkedHashMap tables, Catalog catalog, Schema schema, String pattern, int types)
* List tables(DataRuntime runtime, boolean create, List tables, Catalog catalog, Schema schema, String pattern, int types)
* LinkedHashMap comments(DataRuntime runtime, int index, boolean create, LinkedHashMap tables, Catalog catalog, Schema schema, DataSet set)
* [调用入口]
* List ddl(DataRuntime runtime, String random, Table table, boolean init)
* [命令合成]
* List buildQueryDdlRun(DataRuntime runtime, Table table)
* [结果集封装]
* List ddl(DataRuntime runtime, int index, Table table, List ddls, DataSet set)
******************************************************************************************************************/
/**
*
* table[调用入口]
* @param runtime 运行环境主要包含驱动适配器 数据源或客户端
* @param random 用来标记同一组命令
* @param greedy 贪婪模式 true:查询权限范围内尽可能多的数据 false:只查当前catalog/schema/database范围内数据
* @param query 查询条件 根据metadata属性
* @param types 查询的类型 参考 Table.TYPE 多个类型相加算出总和
* @param struct 查询的属性 参考Metadata.TYPE 多个属性相加算出总和 true:表示查询全部
* @return List
* @param Table
*/
@Override
public List tables(DataRuntime runtime, String random, boolean greedy, Table query, int types, int struct, ConfigStore configs) {
return super.tables(runtime, random, greedy, query, types, struct, configs);
}
/**
* table[结果集封装-子流程]
* 查出所有key并以大写缓存 用来实现忽略大小写
* @param runtime 运行环境主要包含驱动适配器 数据源或客户端
* @param random 用来标记同一组命令
* @param query 查询条件 根据metadata属性
*/
@Override
protected void tableMap(DataRuntime runtime, String random, boolean greedy, Table query, ConfigStore configs) {
super.tableMap(runtime, random, greedy, query, configs);
}
@Override
public LinkedHashMap tables(DataRuntime runtime, String random, Table query, int types, int struct, ConfigStore configs) {
return super.tables(runtime, random, query, types, struct, configs);
}
/**
* table[命令合成]
* 查询表,不是查表中的数据
* @param runtime 运行环境主要包含驱动适配器 数据源或客户端
* @param greedy 贪婪模式 true:查询权限范围内尽可能多的数据 false:只查当前catalog/schema/database范围内数据
* @param query 查询条件 根据metadata属性
* @param types 查询的类型 参考 Table.TYPE 多个类型相加算出总和
* @return String
*/
@Override
public List buildQueryTablesRun(DataRuntime runtime, boolean greedy, Table query, int types, ConfigStore configs) throws Exception {
List runs = new ArrayList<>();
Run run = new SimpleRun(runtime, configs);
runs.add(run);
StringBuilder builder = run.getBuilder();
builder.append("SELECT * FROM information_schema.TABLES");
configs.and("TABLE_SCHEMA", query.getSchemaName());
configs.and(Compare.LIKE_SIMPLE,"TABLE_NAME", objectName(runtime, query.getName()));
List tps = names(Table.types(types));
if(tps.isEmpty()) {
tps.add("BASE TABLE");
}
configs.in("TABLE_TYPE", tps);
return runs;
}
/**
* Table[结果集封装]
* Table 属性与结果集对应关系
* @return MetadataFieldRefer
*/
@Override
public MetadataFieldRefer initTableFieldRefer() {
MetadataFieldRefer refer = new MetadataFieldRefer(Table.class);
refer.map(Table.FIELD_NAME, "TABLE_NAME");
refer.map(Table.FIELD_SCHEMA, "TABLE_SCHEMA");
refer.map(Table.FIELD_TYPE, "TABLE_TYPE");
refer.map(Table.FIELD_ENGINE, "ENGINE");
refer.map(Table.FIELD_OBJECT_ID, "OBJECT_ID");
refer.map(Table.FIELD_DATA_ROWS, "TABLE_ROWS");
refer.map(Table.FIELD_COLLATE, "TABLE_COLLATION");
refer.map(Table.FIELD_DATA_LENGTH, "DATA_LENGTH");
refer.map(Table.FIELD_DATA_FREE, "DATA_FREE");
refer.map(Table.FIELD_INCREMENT, "AUTO_INCREMENT");
refer.map(Table.FIELD_INDEX_LENGTH, "INDEX_LENGTH");
refer.map(Table.FIELD_CREATE_TIME, "CREATE_TIME");
refer.map(Table.FIELD_UPDATE_TIME, "UPDATE_TIME");
refer.map(Table.FIELD_TEMPORARY, "IS_TEMPORARY");
refer.map(Table.FIELD_COMMENT, "TABLE_COMMENT");
refer.map(Table.FIELD_MASTER_CHECK, "CREATE_OPTIONS");
refer.map(Table.FIELD_MASTER_CHECK_VALUE, "partitioned");
return refer;
}
/**
* Table[结果集封装]
* TableComment 属性与结果集对应关系
* @return MetadataFieldRefer
*/
@Override
public MetadataFieldRefer initTableCommentFieldRefer() {
MetadataFieldRefer refer = new MetadataFieldRefer(TableComment.class);
refer.map(TableComment.FIELD_VALUE, "TABLE_COMMENT");
refer.map(TableComment.FIELD_TABLE, "TABLE_NAME");
refer.map(TableComment.FIELD_CATALOG, "TABLE_CATALOG");
refer.map(TableComment.FIELD_SCHEMA, "TABLE_SCHEMA");
return refer;
}
/**
* table[命令合成]
* 查询表备注
* @param runtime 运行环境主要包含驱动适配器 数据源或客户端
* @param query 查询条件 根据metadata属性
* @param types 查询的类型 参考 Table.TYPE 多个类型相加算出总和
* @return String
*/
@Override
public List buildQueryTablesCommentRun(DataRuntime runtime, Table query, int types) throws Exception {
return super.buildQueryTablesCommentRun(runtime, query, types);
}
/**
* table[结果集封装]
* 根据查询结果集构造Table
* @param runtime 运行环境主要包含驱动适配器 数据源或客户端
* @param index 第几条SQL 对照buildQueryTablesRun返回顺序
* @param create 上一步没有查到的,这一步是否需要新创建
* @param query 查询条件 根据metadata属性
* @param previous 上一步查询结果
* @param set 查询结果集
* @return tables
* @throws Exception 异常
*/
@Override
public LinkedHashMap tables(DataRuntime runtime, int index, boolean create, LinkedHashMap previous, Table query, DataSet set) throws Exception {
set.removeColumn("TABLE_CATALOG");
previous = super.tables(runtime, index, create, previous,query, set);
return previous;
}
/**
* table[结果集封装]
* 根据查询结果集构造Table
* @param runtime 运行环境主要包含驱动适配器 数据源或客户端
* @param index 第几条SQL 对照buildQueryTablesRun返回顺序
* @param create 上一步没有查到的,这一步是否需要新创建
* @param query 查询条件 根据metadata属性
* @param previous 上一步查询结果
* @param set 查询结果集
* @return tables
* @throws Exception 异常
*/
@Override
public List tables(DataRuntime runtime, int index, boolean create, List previous, Table query, DataSet set) throws Exception {
set.removeColumn("TABLE_CATALOG");
previous = super.tables(runtime, index, create, previous, query, set);
return previous;
}
/**
* table[结果集封装]
* 根据驱动内置方法补充
* @param runtime 运行环境主要包含驱动适配器 数据源或客户端
* @param create 上一步没有查到的,这一步是否需要新创建
* @param previous 上一步查询结果
* @param query 查询条件 根据metadata属性
* @param types 查询的类型 参考 Table.TYPE 多个类型相加算出总和
* @return tables
* @throws Exception 异常
*/
@Override
public LinkedHashMap tables(DataRuntime runtime, boolean create, LinkedHashMap previous, Table query, int types) throws Exception {
return super.tables(runtime, create, previous, query, types);
}
/**
* table[结果集封装]
* 根据驱动内置方法补充
* @param runtime 运行环境主要包含驱动适配器 数据源或客户端
* @param create 上一步没有查到的,这一步是否需要新创建
* @param previous 上一步查询结果
* @param query 查询条件 根据metadata属性
* @param types 查询的类型 参考 Table.TYPE 多个类型相加算出总和
* @return tables
* @throws Exception 异常
*/
@Override
public List tables(DataRuntime runtime, boolean create, List previous, Table query, int types) throws Exception {
return super.tables(runtime, create, previous, query, types);
}
/**
* table[结果集封装]
* 表备注
* @param runtime 运行环境主要包含驱动适配器 数据源或客户端
* @param index 第几条SQL 对照buildQueryTablesRun返回顺序
* @param create 上一步没有查到的,这一步是否需要新创建
* @param query 查询条件 根据metadata属性
* @param previous 上一步查询结果
* @param set 查询结果集
* @return tables
* @throws Exception 异常
*/
@Override
public LinkedHashMap comments(DataRuntime runtime, int index, boolean create, LinkedHashMap previous, Table query, DataSet set) throws Exception {
return super.comments(runtime, index, create, previous, query, set);
}
/**
* table[结果集封装]
* 表备注
* @param runtime 运行环境主要包含驱动适配器 数据源或客户端
* @param index 第几条SQL 对照buildQueryTablesRun返回顺序
* @param create 上一步没有查到的,这一步是否需要新创建
* @param query 查询条件 根据metadata属性
* @param previous 上一步查询结果
* @param set 查询结果集
* @return tables
* @throws Exception 异常
*/
@Override
public List comments(DataRuntime runtime, int index, boolean create, List previous, Table query, DataSet set) throws Exception {
return super.comments(runtime, index, create, previous, query, set);
}
/**
*
* table[调用入口]
* @param runtime 运行环境主要包含驱动适配器 数据源或客户端
* @param random 用来标记同一组命令
* @param table 表
* @param init 是否还原初始状态 如自增状态
* @return List
*/
@Override
public List ddl(DataRuntime runtime, String random, Table table, boolean init) {
return super.ddl(runtime, random, table, init);
}
/**
* table[命令合成]
* 查询表DDL
* @param runtime 运行环境主要包含驱动适配器 数据源或客户端
* @param table 表
* @return List
*/
@Override
public List buildQueryDdlRun(DataRuntime runtime, Table table) throws Exception {
List runs = new ArrayList<>();
Run run = new SimpleRun(runtime);
runs.add(run);
StringBuilder builder = run.getBuilder();
builder.append("show create table ");
name(runtime, builder, table);
return runs;
}
/**
* table[结果集封装]
* 查询表DDL
* @param runtime 运行环境主要包含驱动适配器 数据源或客户端
* @param index 第几条SQL 对照 buildQueryDdlRun 返回顺序
* @param table 表
* @param set sql执行的结果集
* @return List
*/
@Override
public List ddl(DataRuntime runtime, int index, Table table, List ddls, DataSet set) {
if(null == ddls) {
ddls = new ArrayList<>();
}
for(DataRow row:set) {
ddls.add(row.getString("CREATE TABLE"));
}
if(BasicUtil.isEmpty(table.getCharset())) {
for (String item : ddls) {
if (item.contains("CHARSET=")) {
String charset = RegularUtil.cut(item, "CHARSET="," ");
table.setCharset(charset);
}
if(item.contains("ENGINE=")) {
String engine = RegularUtil.cut(item, "ENGINE="," ");
table.setEngine(engine);
}
}
}
return ddls;
}
/* *****************************************************************************************************************
* view
* -----------------------------------------------------------------------------------------------------------------
* [调用入口]
* LinkedHashMap views(DataRuntime runtime, String random, boolean greedy, Catalog catalog, Schema schema, String pattern, int types)
* [命令合成]
* List buildQueryViewsRun(DataRuntime runtime, boolean greedy, Catalog catalog, Schema schema, String pattern, int types)
* [结果集封装]
* LinkedHashMap views(DataRuntime runtime, int index, boolean create, LinkedHashMap views, Catalog catalog, Schema schema, DataSet set)
* LinkedHashMap views(DataRuntime runtime, boolean create, LinkedHashMap views, Catalog catalog, Schema schema, String pattern, int types)
* [调用入口]
* List ddl(DataRuntime runtime, String random, View view)
* [命令合成]
* List buildQueryDdlRun(DataRuntime runtime, View view)
* [结果集封装]
* List ddl(DataRuntime runtime, int index, View view, List ddls, DataSet set)
******************************************************************************************************************/
/**
* view[调用入口]
* 查询视图
* @param runtime 运行环境主要包含驱动适配器 数据源或客户端
* @param random 用来标记同一组命令
* @param query 查询条件 根据metadata属性
* @param types 查询的类型 参考 Table.TYPE 多个类型相加算出总和
* @return List
* @param View
*/
@Override
public LinkedHashMap views(DataRuntime runtime, String random, View query, int types, int struct, ConfigStore configs) {
return super.views(runtime, random, query, types, struct, configs);
}
/**
* view[命令合成]
* 查询视图
* @param runtime 运行环境主要包含驱动适配器 数据源或客户端
* @param greedy 贪婪模式 true:查询权限范围内尽可能多的数据 false:只查当前catalog/schema/database范围内数据
* @param query 查询条件 根据metadata属性
* @param types 查询的类型 参考 Table.TYPE 多个类型相加算出总和
* @return List
*/
@Override
public List buildQueryViewsRun(DataRuntime runtime, boolean greedy, View query, int types, ConfigStore configs) throws Exception {
List runs = new ArrayList<>();
Run run = new SimpleRun(runtime, configs);
runs.add(run);
StringBuilder builder = run.getBuilder();
builder.append("SELECT * FROM information_schema.VIEWS");
configs.and("TABLE_SCHEMA", query.getSchemaName());
configs.and(Compare.LIKE_SIMPLE,"TABLE_NAME", query.getName());
return runs;
}
/**
* View[结果集封装]
* View 属性与结果集对应关系
* @return MetadataFieldRefer
*/
@Override
public MetadataFieldRefer initViewFieldRefer() {
MetadataFieldRefer refer = new MetadataFieldRefer(View.class);
refer.map(View.FIELD_NAME, "TABLE_NAME");
refer.map(View.FIELD_SCHEMA, "TABLE_SCHEMA");
refer.map(View.FIELD_DEFINITION,"VIEW_DEFINITION");
return refer;
}
/**
* view[结果集封装]
* 根据查询结果集构造View
* @param runtime 运行环境主要包含驱动适配器 数据源或客户端
* @param index 第几条SQL 对照buildQueryViewsRun返回顺序
* @param create 上一步没有查到的,这一步是否需要新创建
* @param query 查询条件 根据metadata属性
* @param previous 上一步查询结果
* @param set 查询结果集
* @return views
* @throws Exception 异常
*/
@Override
public LinkedHashMap views(DataRuntime runtime, int index, boolean create, LinkedHashMap previous, View query, DataSet set) throws Exception {
return super.views(runtime, index, create, previous, query, set);
}
/**
* view[结果集封装]
* 根据根据驱动内置接口补充
* @param runtime 运行环境主要包含驱动适配器 数据源或客户端
* @param create 上一步没有查到的,这一步是否需要新创建
* @param previous 上一步查询结果
* @param query 查询条件 根据metadata属性
* @param types 查询的类型 参考 Table.TYPE 多个类型相加算出总和
* @return views
* @throws Exception 异常
*/
@Override
public LinkedHashMap views(DataRuntime runtime, boolean create, LinkedHashMap