如果两个模式相同,可以使用jooq进行比较吗?不是数据,而是表,约束,权限等是相同的?
答案 0 :(得分:1)
不支持的内容(但在jOOQ 3.9中)
...比较H2 PUBLIC
架构的两个版本:
assertEquals(v1.Public.PUBLIC, v2.Public.PUBLIC);
List<Table<?>> tables1 = v1.Public.PUBLIC.getTables();
List<Table<?>> tables2 = v2.Public.PUBLIC.getTables();
assertEquals(tables1, tables2);
for (int i = 0; i < tables1.size(); i++) {
Table<?> table1 = tables1.get(i);
Table<?> table2 = tables2.get(i);
assertArrayEquals(format("Fields differ for %s and %s", table1, table2),
table1.fields(), table2.fields());
assertEquals(format("Primary keys differ for %s and %s", table1, table2),
table1.getPrimaryKey(), table2.getPrimaryKey());
assertEquals(format("Schemas differ for %s and %s", table1, table2),
table1.getSchema(), table2.getSchema());
assertEquals(format("Identities differ for %s and %s", table1, table2),
table1.getIdentity(), table2.getIdentity());
assertEquals(format("Keys differ for %s and %s", table1, table2),
table1.getKeys(), table2.getKeys());
assertEquals(format("References differ for %s and %s", table1, table2),
table1.getReferences(), table2.getReferences());
}
它会变得有点棘手,因为jOOQ QueryPart.equals()
实现通常基于:
toString()
比较由于两个不同的模式具有不同的限定名称,因此您必须调整上述算法并比较每个对象的getName()
结果,而不是整个对象。
也许这对你来说更容易...... jOOQ 3.9使用DSLContext.informationSchema()
引入了#5460方法。这些方法返回带有JAXB注释的类,这些类可以编组为XML字符串:
StringWriter writer = new StringWriter();
JAXB.marshal(ctx.informationSchema(mySchema), writer);
System.out.println(writer.toString());
您可以将这两个版本与任何XML工具进行比较,例如:使用XSLT
如果你有两个版本的生成代码,你可以简单地在两个目录之间创建一个差异,或者使用你的VCS向你显示差异;-)也许这样就足够了。