具体工作的示例
最后更新:2024-09-02 05:30:02
|
状态:未完成
最主要的工作,就是把各个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在这个方法中实现,而不是调用父类