transformCreateStmt 函数源码分析

函数

transformCreateStmt

功能

在执行器阶段对 create table 命令做一些处理:

  • 列属性处理
  • 条件限制处理
  • likeClause 处理
  • 如果需要,给表名加上当前 schema 的名字
  • 等等。。。

函数签名

List* transformCreateStmt(CreateStmt *stmt, const char *queryString)

输入参数

  • CreateStmt* stmt
    create table 的语法树
  • const char* queryString
    用户输入的 sql 语句

返回值

  • List*
    一组按序要执行的 sql 命令,包括:
    • 在执行 create table 之前要执行的 sql 命令,如:create sequence
    • create table 命令
    • 在执行 create table 之后要执行的 sql 命令,如:create index

比如,下面这条 sql 语句就会导致 postgresql 生成上面所有的 sql 命令:

create table foo(id serial primary key);

代码流程

为简化 transformCreateStmt 函数执行逻辑,此文针对上面的 sql 语句分析 transformCreateStmt 的主要流程。

image

其中,transformColumnDefinition 负责对列定义 id serial primary key 的处理,transformIndexConstraints 负责对索引列的处理。

transformColumnDefinition

image

transformIndexConstraints

image

posted on 2023-06-26 19:21  winter-loo  阅读(11)  评论(0编辑  收藏  举报

导航