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.PostgresGenusAdapter 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.PostgresGenusTypeMetadataAlias;
import org.anyline.data.param.ConfigStore;
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.exception.NotSupportException;
import org.anyline.metadata.*;
import org.anyline.metadata.refer.MetadataFieldRefer;
import org.anyline.metadata.refer.MetadataReferHolder;
import org.anyline.metadata.type.TypeMetadata;
import org.anyline.util.BasicUtil;
import org.anyline.util.BeanUtil;
import org.anyline.util.ConfigTable;
import org.anyline.util.LogUtil;
import org.anyline.util.regular.RegularUtil;
import javax.sql.DataSource;
import java.sql.Connection;
import java.util.*;
public abstract class PostgresGenusAdapter extends AbstractJDBCAdapter {
public PostgresGenusAdapter() {
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, 0, 0));
MetadataReferHolder.reg(type(), TypeMetadata.CATEGORY.DATE, new TypeMetadata.Refer("CHARACTER_MAXIMUM_LENGTH", null, "DATETIME_PRECISION", 1, 1, 1));
MetadataReferHolder.reg(type(), TypeMetadata.CATEGORY.TIME, new TypeMetadata.Refer("CHARACTER_MAXIMUM_LENGTH", null, "DATETIME_PRECISION", 1, 1, 2));
MetadataReferHolder.reg(type(), TypeMetadata.CATEGORY.DATETIME, new TypeMetadata.Refer("CHARACTER_MAXIMUM_LENGTH", null, "DATETIME_PRECISION", 1, 1, 2));
MetadataReferHolder.reg(type(), TypeMetadata.CATEGORY.TIMESTAMP, new TypeMetadata.Refer("CHARACTER_MAXIMUM_LENGTH", null, "DATETIME_PRECISION", 1, 1, 2));
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(PostgresGenusTypeMetadataAlias alias: PostgresGenusTypeMetadataAlias.values()) {
reg(alias);
alias(alias.name(), alias.standard());
}
}
@Override
public boolean supportCatalog() {
return super.supportSchema();
}
@Override
public boolean supportSchema() {
return super.supportSchema();
}
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 super.generatedKey();
}
/**
* 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) {
Run run = initQueryRun(runtime, prepare);
run.addCondition(conditions);
if(run.checkValid()) {
fillUpdateContent(runtime, (TableRun) run, data, configs);
}
return run;
}
@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);
builder.append("SET").append(BR);
List keys = data.keys();
boolean first = true;
for(String key:keys) {
if(!first) {
builder.append(", ");
}
first = false;
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);
}
}
RunPrepare master = null;
List joins = prepare.getJoins();
if(null != joins && !joins.isEmpty()) {
master = joins.get(0);
joins.remove(master);
builder.append("\nFROM ");
fillMasterTableContent(runtime, builder, run, master);
for (RunPrepare join:joins) {
fillJoinTableContent(runtime, builder, run, join);
}
}
if(null != master) {
Join join = master.getJoin();
if(master instanceof VirtualTablePrepare) {
join = ((VirtualTablePrepare) master).getPrepare().getJoin();
}
if(null != join) {
String on = join.getConditions().getRunText(runtime, false);
//builder.append(on);
configs.and(on);
}
}
init(runtime, run, configs);
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) {
List runs = new ArrayList<>();
String key = "CURRVAL";
if(next) {
key = "NEXTVAL";
}
if(null != names && names.length>0) {
Run run = new SimpleRun(runtime);
runs.add(run);
StringBuilder builder = run.getBuilder();
builder.append("SELECT ");
boolean first = true;
for (String name : names) {
if(!first) {
builder.append(", ");
}
first = false;
builder.append(key).append("('").append(name).append("') AS ").append(name);
}
}
return runs;
}
/**
* 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) {
RunValue rv = new RunValue();
int code = compare.getCode();
if(code > 100) {
builder.append(" NOT");
code = code - 100;
}
// %A% 50
// A% 51
// %A 52
// NOT %A% 150
// NOT A% 151
// NOT %A 152
String formula = compare.formula();
if(null == value) {
value = "";
}
if(placeholder) {
if(compare == Compare.LIKE_SIMPLE) {
builder.append(formula).append("?");
}else if(code == 50) {
builder.append(formula).append(concat(runtime, "'%'","?","'%'"));
}else if(code == 51) {
builder.append(formula).append(concat(runtime, "?","'%'"));
}else if(code == 52) {
builder.append(formula).append(concat(runtime, "'%'","?"));
}
rv.setValue(value);
}else{
value = BeanUtil.first(value);
rv.setPlaceholder(false);
if(compare == Compare.LIKE_SIMPLE) {
builder.append(formula).append("'").append(value).append("'");
}else if(code == 50) {
builder.append(formula).append("'%").append(value).append("%'");
}else if(code == 51) {
builder.append(formula).append("'").append(value).append("%'");
}else if(code == 52) {
builder.append(formula).append("'%").append(value).append("'");
}
}
return rv;
}
/**
* 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 {
return super.createConditionFindInSet(runtime, builder, column, compare, value, placeholder, unicode);
}
/**
* 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)
* 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)
******************************************************************************************************************/
/**
* database[调用入口]
* 当前数据库
* @param runtime 运行环境主要包含驱动适配器 数据源或客户端
* @param random 用来标记同一组命令
* @return Database
*/
@Override
public Database database(DataRuntime runtime, String random) {
Catalog catalog = catalog(runtime, random);
if(null != catalog) {
return new Database(catalog.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 {
List runs = new ArrayList<>();
Run run = new SimpleRun(runtime);
runs.add(run);
StringBuilder builder = run.getBuilder();
ConfigStore configs = run.getConfigs();
builder.append("SELECT * FROM PG_DATABASE WHERE DATISTEMPLATE=FALSE");
configs.and(Compare.LIKE_SIMPLE,"datname", query.getName());
return runs;
}
/**
* database[结果集封装]
* database 属性与结果集对应关系
* @return MetadataFieldRefer
*/
@Override
public MetadataFieldRefer initDatabaseFieldRefer() {
MetadataFieldRefer refer = new MetadataFieldRefer(Database.class);
refer.map(Database.FIELD_NAME, "DATNAME");
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 {
return super.database(runtime, index, create, meta, set);
}
/**
* 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 {
List runs = new ArrayList<>();
SimpleRun run = new SimpleRun(runtime);
runs.add(run);
StringBuilder builder = run.getBuilder();
ConfigStore configs = run.getConfigs();
builder.append("SELECT * FROM pg_stat_database");
configs.and(Compare.LIKE_SIMPLE,"datname", query.getName());
return runs;
}
/**
* Catalog[结果集封装]
* Catalog 属性与结果集对应关系
* @return MetadataFieldRefer
*/
@Override
public MetadataFieldRefer initCatalogFieldRefer() {
MetadataFieldRefer refer = new MetadataFieldRefer(Catalog.class);
refer.map(Catalog.FIELD_NAME, "datname");
return refer;
}
/**
* 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 {
List runs = new ArrayList<>();
SimpleRun run = new SimpleRun(runtime);
StringBuilder builder = run.getBuilder();
ConfigStore configs = run.getConfigs();
builder.append("SELECT * FROM information_schema.schemata");
configs.and(Compare.LIKE_SIMPLE, "schema_name", query.getName());
configs.and("catalog_name", query.getCatalogName());
runs.add(run);
return runs;
}
/**
* Schema[结果集封装]
* Schema 属性与结果集对应关系
* @return MetadataFieldRefer
*/
@Override
public MetadataFieldRefer initSchemaFieldRefer() {
MetadataFieldRefer refer = new MetadataFieldRefer(Schema.class);
refer.map(Schema.FIELD_NAME, "schema_name");
refer.map(Schema.FIELD_CATALOG, "catalog_name");
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 M.*, obj_description(F.relfilenode,'pg_class') AS TABLE_COMMENT\n");
builder.append("FROM INFORMATION_SCHEMA.TABLES AS M\n");
builder.append("LEFT JOIN pg_namespace AS N ON N.NSPNAME = M.table_schema\n");
builder.append("LEFT JOIN pg_class AS F ON M.TABLE_NAME = F.relname AND N.oid = F.relnamespace\n");
builder.append("LEFT JOIN pg_inherits AS I ON I.inhrelid = F.oid\n");//继承关系
builder.append("WHERE I.inhrelid IS NULL\n"); //GIS中没有f.relpartbound
configs.and("M.table_schema", query.getSchemaName());
configs.and(Compare.LIKE_SIMPLE,"M.table_name", query.getName());
if((types & 2) != 2) {
//不包含视图
configs.and("M.TABLE_TYPE != 'VIEW'");
}
return runs;
}
//与上一个方法的区别是 有些库没有区分 是否分区表 的元数据,不清楚的默认调用上一个方法,确认支持的再调用这个方法
//builder.append("WHERE (I.inhrelid IS NULL OR F.relpartbound IS NULL)\n"); //过滤分区表(没有继承自其他表或 继承自其他表但是子表不是分区表)
protected List buildQueryTablesRunWithPartBound(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 M.*, obj_description(F.relfilenode,'pg_class') AS TABLE_COMMENT\n");
builder.append("FROM INFORMATION_SCHEMA.TABLES AS M\n");
builder.append("LEFT JOIN pg_namespace AS N ON N.NSPNAME = M.table_schema\n");
builder.append("LEFT JOIN pg_class AS F ON M.TABLE_NAME = F.relname AND N.oid = F.relnamespace\n");
builder.append("LEFT JOIN pg_inherits AS I ON I.inhrelid = F.oid\n");//继承关系
builder.append("WHERE (I.inhrelid IS NULL OR F.relpartbound IS NULL)\n"); //过滤分区表(没有继承自其他表或 继承自其他表但是子表不是分区表)
configs.and("M.table_schema", query.getSchemaName());
configs.and(Compare.LIKE_SIMPLE,"M.table_name", query.getName());
if((types & 2) != 2) {
//不包含视图
configs.and("M.TABLE_TYPE != 'VIEW'");
}
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_CATALOG, "TABLE_CATALOG");
refer.map(Table.FIELD_SCHEMA, "TABLE_SCHEMA");
refer.map(Table.FIELD_TYPE, "TABLE_TYPE");
refer.map(Table.FIELD_COMMENT, "TABLE_COMMENT");
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 {
return super.tables(runtime, index, create, previous, query, set);
}
/**
* 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 {
return super.tables(runtime, index, create, previous, query, set);
}
/**
* 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 {
return super.buildQueryDdlRun(runtime, table);
}
/**
* 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) {
return super.ddl(runtime, index, table, ddls, set);
}
/* *****************************************************************************************************************
* 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_CATALOG", query.getCatalogName());
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_CATALOG, "TABLE_CATALOG");
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 previous, View query, int types) throws Exception {
return super.views(runtime, create, previous, query, types);
}
/**
* view[调用入口]
* @param runtime 运行环境主要包含驱动适配器 数据源或客户端
* @param random 用来标记同一组命令
* @param view 视图
* @return List
*/
@Override
public List ddl(DataRuntime runtime, String random, View view, boolean init) {
return super.ddl(runtime, random, view, init);
}
/**
* view[命令合成]