具体工作的示例

最后更新:2024-01-09 10:06:24 | 状态:未完成

最主要的工作,就是把各个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在这个方法中实现,而不是调用父类

最近更新 搜索 提交