calcite sqlNode-->relNode(SqlInsert)

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 这张表

image.png

SqlInsert 的source
也就是我们要插入的数据
source 中的内容仍然以是一个SqlBasicCall , VALUES 是他的oprator 操作符


image.png

对于这个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。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 16宿命:用概率思维提高你的胜算 以前的我是风险厌恶者,不喜欢去冒险,但是人生放弃了冒险,也就放弃了无数的可能。 ...
    yichen大刀阅读 11,284评论 0 4
  • 公元:2019年11月28日19时42分农历:二零一九年 十一月 初三日 戌时干支:己亥乙亥己巳甲戌当月节气:立冬...
    石放阅读 11,810评论 0 2
  • 年纪越大,人的反应就越迟钝,脑子就越不好使,计划稍有变化,就容易手忙脚乱,乱了方寸。 “玩坏了”也是如此,不但会乱...
    玩坏了阅读 6,509评论 2 1
  • 感动 我在你的眼里的样子,就是你的样子。 相互内化 没有绝对的善恶 有因必有果 当你以自己的价值观幸福感去要求其他...
    周粥粥叭阅读 5,563评论 1 5
  • 昨天考过了阿里规范,心里舒坦了好多,敲代码也犹如神助。早早完成工作回家喽
    常亚星阅读 8,133评论 0 1