You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@calcite.apache.org by "Yang, Alvin" <al...@illinois.edu> on 2021/10/12 11:39:28 UTC

Stack overflow error when trying to insert rows into a JDBC table using TableModify

Hello,

I've got a JdbcTable that I'm trying to insert a row into. I found that I could create a TableModify node by calling the JdbcTable.toModificationRel(...) method. So to test this, I created a LogicalValues node using RelBuilder, called RelRunners.run(rel), and then executed the prepared statement. My code looked something like this:


RelNode values = relBuilder.values(rowType, "4", "D", "d@example.com").build();

TableModify modify = jdbcTable.toModificationRel(cluster, relOptTable, catalogReader, values , TableModify.Operation.INSERT, null, null, true);

PreparedStatement ps = RelRunners.run(modify);

ps.execute();

But I got a stack overflow error when I tried running this. I found it was due to NoneToBindableConverterRule being fired indefinitely. Initially, the TableModify node only had one input, the LogicalValues node. So there were just two vertices in the HepPlanner’s graph:


 1. HepRelVertex@187 "rel#9:HepRelVertex(rel#0:LogicalValues.NONE.[[0, 1, 2], [1, 2] [2]](type=RecordType(INTEGER ID, VARCHAR(50) NAME, VARCHAR(50) EMAIL),tuples=[{ 4, D, d@example.com' }]))"

 2. HepRelVertex@188 "rel#11:HepRelVertex(rel#10:LogicalTableModify.(input=HepRelVertex#9,table=[PUBLIC, EMPLOYEE],operation=INSERT,flattened=true))"

Whenever the NoneToBindableConverterRule was applied onto the LogicalValues vertex, it added an InterpretableConverter vertex above the LogicalValues vertex. This kept repeating every time the rule was recursively applied onto the existing LogicalValues vertex, making a new InterpretableConverter kept getting inserted below the previously created InterpretableConverter and above the LogicalValues vertex. So after a few cycles in, the vertices in the HepPlanner graph looked like this:

1. HepRelVertex@188 "rel#11:HepRelVertex(rel#10:LogicalTableModify.(input=HepRelVertex#15,table=[PUBLIC, EMPLOYEE],operation=INSERT,flattened=true))"
2. HepRelVertex@206 "rel#15:HepRelVertex(rel#14:InterpretableConverter.BINDABLE.[[0, 1, 2], [1, 2], [2]](input=HepRelVertex#19))"
3. HepRelVertex@237 "rel#19:HepRelVertex(rel#18:InterpretableConverter.BINDABLE.[[0, 1, 2], [1, 2], [2]](input=HepRelVertex#23))"
4. HepRelVertex@253 "rel#23:HepRelVertex(rel#22:InterpretableConverter.BINDABLE.[[0, 1, 2], [1, 2], [2]](input=HepRelVertex#27))"
5. HepRelVertex@279 "rel#25:HepRelVertex(rel#0:LogicalValues.NONE.[[0, 1, 2], [1, 2], [2]](type=RecordType(INTEGER ID, VARCHAR(50) NAME, VARCHAR(50) EMAIL),tuples=[{ 4, D, d@example.com' }]))"
6. HepRelVertex@269 "rel#27:HepRelVertex(rel#26:InterpretableConverter.BINDABLE.[[0, 1, 2], [1, 2], [2]](input=HepRelVertex#25))"

Please help, as I’m a beginner and am not sure where the problem lies. Please let me know what I should’ve done. Thank you.

Regards,
Alvin