String sql = "insert into users (id,names) values ('3', 'gaowei')";
// 一条插入语句
DEBUG 过程
SqlInsert有以下几个属性
SqlNodeList keywords;
SqlNode targetTable;
SqlNode source;
SqlNodeList columnList;
SqlInsert 的 targetTable 是users
也就是一开始注册进入rootSchema 中的users 这张表
SqlInsert 的source
也就是我们要插入的数据
source 中的内容仍然以是一个SqlBasicCall , VALUES 是他的oprator 操作符
对于这个Insert 的targetNameSpace 是一个tableNameSpace
nameSpace 是一个点前的操作的上下文,也就是他可以看到的一个空间,和scope 一样, 是在特定的操作之下的一个范围的限制。 后面会单独在去做这种解析。
在debug 过程中看到的几个table ,这几个relOptTable 中都最后含有一个table对象,他们的地址都是一样的,是我们最早在test里面注册到meta里面的users 表。 这个表是直接new 出来的,override 了抽象类AbstractTable的getRowType方法,所以在debug过程中是以CalciteProcessTest$1的形式出现。 并在在那个表的实现中没有补足他的任何field, 在debug过程中会显示has no class filed。