具体工作的示例
最后更新:2025-07-24 11:08:52
|
状态:未完成
最主要的工作,就是把各个adapter中与标准SQL不一样的方法实现一下(默认是调用了父类的方法)。
在ddl test中有一段save(Table)的测试
正常情况下在保存时会检测数据库中的主键,与table中的主键是否一致,如果不一致会修改,大部分库是先删除旧的主键,再创建新的主键。
这就涉及到一个查询主键的SQL
如果这个SQL不正确,那当然下一步比较也会出问题。
如kingbase的oracle模式下的adapter是继承自OracleGenusAdapter,因为kingbase adapter里没有实现所以直接调用了父类的方法 ,但kingbase与oracle并不是完全兼容的,所以这个SQL失败了没有查出来主键
我们需要作的是把kingbase里的查询主键的SQL补充上就可以了
原来kingbase adapter里是这样写的
@Override
public List<Run> buildQueryPrimaryRun(DataRuntime runtime, Table table) throws Exception{
return super.buildQueryPrimaryRun(runtime, table);
}
而父类中是这样实现的
@Override
public List<Run> buildQueryPrimaryRun(DataRuntime runtime, Table table) throws Exception{
List<Run> runs = new ArrayList<>();
Run run = new SimpleRun(runtime);
runs.add(run);
StringBuilder builder = run.getBuilder();
builder.append("SELECT COL.* FROM USER_CONSTRAINTS CON ,USER_CONS_COLUMNS COL\n");
builder.append("WHERE CON.CONSTRAINT_NAME = COL.CONSTRAINT_NAME\n");
builder.append("AND CON.CONSTRAINT_TYPE = 'P'\n");
builder.append("AND COL.TABLE_NAME = '").append(table.getName()).append("'\n");
if(BasicUtil.isNotEmpty(table.getSchema())){
builder.append(" AND COL.OWNER = '").append(table.getSchema()).append("'");
}
return runs;
}
要把SQL在这个方法中实现,而不是调用父类