00:00
好的,那咱们继续,刚才我们已经看到了,在原版当中看到了,将ast也就所谓的叫抽象语法数进行了一个生成,对吧?呃,完成了此法语法的解析,最终生成了一个抽象语法数,呃,那么接下来的步骤呢?主要包括几个点,一将我们的抽象语法数。进一步转化啊,转化为operator。操作数啊,那那接下来呢,对操作数进行一个逻辑优化,呃,后面呢,将我们优化后的操作数转化为任务数,以及任务数进行物理优化,那么也就是说接下来我们的步骤当中呢,会包含两大块,这块进一步进行一个。析编译啊,那么同时呢,对我们整个的执行计划进行优化,也就是说此时会包括编辑器和。优化器的工作,那我们接着看,刚才的原码当中,我们看到了真程抽象语法数,在这块我当时也给大家提了,同时在里边呢,还有一步啊,Leer的一个分析,这一步呢,给抽象语法数进行解析,OK,那切回到源码当中,刚才我们是在这个方法里边看完了整个抽象语法数的一个过程,那么接下来呢,我们继续往下游,我们之前就提到了,这里边呢,就是我们的net和。
01:31
优化器的一个工作,哎,那我们点进去,点进去中间呢,我们发现它在初始化一些上下文的操作,那我们并不关心一些内容,我们只需要进入到。CC里边,那进来加好以后呢,发现它是一个抽象的方法,所以呢,我们直接CTRLC,然后呢,CTRL加H,按它的一个集成结构,呃,那我们发现这个里边有很多的类,那么具体用的是哪一个实现类呢?我们可以仔细观察一下啊,比方说这里边第一个是关于export,比方说这个是DDL,然后relic,它是有关于副本的,这是import的,导入数据的,以及function关于函数的,还有一个X explain关于执行计划的,那所以呢,这个里边我们要参与查询语句的一个解析,就是这个类了。
02:26
Seme analyzr OK,点进来,点击好以后呢,继续搜索刚才我们粘贴复制的东西,好,那么用的方法,我们找到具体的方法,这个它会。继续调用another internal,往内部调用OK点进来,那么到这个方法里边,大家呢,就会比较舒服一点了,因为它会将它核心做的步骤呢,给我们用1234的顺序表示出来了,那我们给来看一下第一步。被我们一个除处理的语法数进行一个解析啊,那么在这个当中呢,我们可以看到它获取了是否要进行转换,那这个返回值一般都是数,好,那我们继续看第二步。
03:09
第二步呢,就是说从我们处理完的解析数,也就是说as将我们的内容转化为操作数。Operator tree,好,这是第二步,那么第三步在二部当中operator tree到底长什么样子对吧?我们下面会给大家去介绍,同时,呃,其实我们在直接点进来源码的过程当中并看不了这个内容,所以最后呢,我会带着大家debug我们整个程序。也就是说在。虚拟章当中我们可以输入一个查询语句,最后呢,我们可以一步一步的点到这边来看当前这个对象当中所包含的一些内容啊,那到那个时候呢,我们就可以看到这里边具体它长什么样子,当然我们在文档当中给它画出来是这样这种树结构,嗯,其实在原码看这个对象结构的时候呢,虽然是一个数结构,但并不是我们所看到那种二尔大树一样的,所以我们要自己根据这个对象层级关系将它画出来,OK吧,好,那这是第二步,那么继续切到第三步,它呢,是在处理我们返回值的一个三信息,对吧?啊,第四步。
04:24
非常关键,跟我们后续的操作有关系,很明显能看到这里边在获取我们构建我们的什么解析语法,从哪去获取呢?我们的一个opize以及。Physic。Compare啊,也就是说物理编译器和。优化器是不是,哎,我们可以看到这个点啊,那么第五步是处理视图相关的内容啊,第六步呢,我们来看找到第六步它是获取一些权权限相关的东西啊,那么第七步呢,就真正的去执行我们的物理执行计划了。
05:05
啊,就在这块真正的去优化我们的内容,前面我们说了第四步也是一个非常关键的,它是将我们整体的优化器诶加载进来,那大家可以看到它其实是一个哈塞里边呢,有很多的优化规则,它在这儿构建好整个的一个上下文,那到后面。我们再去具体聊这个事情啊,整个优化的一个过程,呃,那么这个里边呢,我们能看到他会将数据转化为我们的。Operator。对吧?啊,但是operator tree呢,它也是一个对象啊,所以呢,我们现在是没有办法去看到最后我们在第bug的时候带着大家去看当前的对象。
我来说两句