obkv中为什么单行查询的执行函数中,无需向下一个函数传入主键列名了

在insert.execute()的实现中,调用insertWithResult()前没有对rowkey按某种固定规则排序,也没有将rowkeyName传入其中。在update.execute()也是这样。
那么如果调用接口时传入的rowkey顺序不同,例如:
insert时insert.setRowKey(row(colVal(“c1”, 1), colVal(“c2”, 2)));
而update时update.setRowKey(row(colVal(“c2”, 2), colVal(“c1”, 1)));
如何保证update时的正确性?因为insertWithResult传入的rowkey是1, 2,而updateWithResult传入的rowkey是2, 1,如果按传入顺序对比数值的话并不相同,但如果搭配列名看其实是相同的。
还是说调用接口时必须强制update等操作时传入rowkey的顺序必须和insert时相同,即使已经同时指定了列名?

这里的列名只是用于路由计算,实际上没有传输给observer,也就是我们默认用户输入的是schema的主键序。当主键是c1,c2时,输入是c1-1,c2-2时,我们认为写入的是c1-1,c2-2;输入是c2-1,c1-2时,我们认为写入的是c1-1,c2-2。在第二种情况会出现实际写入和列名不匹配的情况。总的来说,就是限制用户的输入主键顺序是要求和schema主键顺序一致的。

1 个赞