首页 > 编程语言 >transformCreateStmt 函数源码分析

transformCreateStmt 函数源码分析

时间:2023-06-26 19:33:42浏览次数:46  
标签:函数 命令 create transformCreateStmt 源码 sql table

函数

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

标签:函数,命令,create,transformCreateStmt,源码,sql,table
From: https://www.cnblogs.com/lddcool/p/17506549.html

相关文章

  • 二分查找(函数)
    #include<stdio.h>intbinary_search(intarr[],intk,intsz){ intleft=0; intright=sz-1; while(left<=right) { intmid=(left+right)/2; if(arr[mid]>k) { right=right-1; } elseif(arr[mid]<k) { ......
  • 二分查找(函数)
    #include<stdio.h>intbinary_search(intarr[],intk,intsz){ intleft=0; intright=sz-1; while(left<=right) { intmid=(left+right)/2; if(arr[mid]>k) { right=right-1; } elseif(arr[mid]<k) { ......
  • Pytorch | `torch.multiprocessing.spawn` 函数的使用
    torch.multiprocessing.spawn是PyTorch中用于启动多进程的函数,可以用于分布式训练等场景。其函数签名如下:torch.multiprocessing.spawn(fn,args=(),nprocs=1,join=True,daemon=False,start_method='spawn',)参数:fn(function)–函数被称......
  • 素数的判断(函数)
    #include<stdio.h>#include<math.h>intis_prime(intn){ intj=0; for(j=2;j<=sqrt(n);j++) { if(n%j==0) return0; } return1;}intmain(){ inti=0; for(i=101;i<=200;i+=2) { if(is_prime(i)==1)......
  • 【js学习笔记八】如何写一个简单的前端回调函数
     目录前言导语代码部分 运行结果总结前言我是歌谣我有个兄弟巅峰的时候排名c站总榜19叫前端小歌谣曾经我花了三年的时间创作了他现在我要用五年的时间超越他今天又是接近兄弟的一天人生难免坎坷大不了从头再来歌谣的意志是永恒的放弃很容易但是坚持一定很酷导语书写一......
  • 2000-2050的闰年(函数)
    #include<stdio.h>is_leap_year(inty){ if((y%4==0&&y%100!=0)||(y%400==0)) return1; else return0;}intmain(){ intyear=0; printf("2000-2050闰年:"); for(year=2000;year<=2050;year++) { i......
  • python函数的高阶使用
    一:*强制位置传参和/分界线强制位置参数可以使用*进行标记,*后面的参数将成为强制位置参数,它们必须按照位置传递给函数,而不能使用关键字传递。/用于标记位置参数和关键字参数之间的分界线,即/之前的参数只能通过位置传递,/之后的参数可以通过位置或关键字传递。示例1:使......
  • sort函数
    在平常的排序过程中我么或许常常会犯难,遇到普通的数组或许还好,但是像结构体这样的数据多了难免会有些麻烦,我查阅资料之后找到了一个函数这个函数是库里面自带的只需要头文件#include<algorithm>下面讲讲详细用法,首先sort(a,a+n,cmp)它里面有三个变量a代表我们的结构体的简称,这......
  • JavaScript学习 -- 高阶函数
    一、普通函数比较大小写声明函数判断大于或小于数组中的某个数letarr=[1,2,3,4,5,6,7,8,9]functionaiyou(a){for(leti=0;i<arr.length;i++){if(arr[i]>a){console.log(arr[i])}}console.log("****************************")}functionbucuo(a){for(......
  • Bert Pytorch 源码分析:四、编解码器
    #Bert编码器模块#由一个嵌入层和NL个TF层组成classBERT(nn.Module):"""BERTmodel:BidirectionalEncoderRepresentationsfromTransformers."""def__init__(self,vocab_size,hidden=768,n_layers=12,attn_heads=12,d......