Skip to content

b-xiang/sql_parser-1

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

41 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

说明

该项目为mysql sql解析器,词法分析和语法分析基于oceanbase 0.4版本,语法树解析和 sql语句优化分拆及最终生成执行计划为新写,目前执行计划已支持DML操作,另外支持SET/SHOW操作。

编译: STEP1:$ sh gen_parser.sh STEP2: $ make

执行: $ ./sql_parser

 
当select语句如下时,解析后的语法树:
$ ./sql_parser.exe
<<Part 1 : SQL STRING>>
SELECT id FROM pp UNION distinct SELECT id FROM tt
 
<<Part 2 : PARSE TREE>>
|-T_STMT_LIST
    |-T_SELECT
        |-NULL
        |-NULL
        |-NULL
        |-NULL
        |-NULL
        |-NULL
        |-T_SET_UNION
        |-T_DISTINCT
        |-T_SELECT
            |-NULL
            |-T_PROJECT_LIST
                |-T_PROJECT_STRING
                    |-T_IDENT : id
            |-T_FROM_LIST
                |-T_IDENT : pp
            |-NULL
            |-NULL
            |-NULL
            |-NULL
            |-NULL
            |-NULL
            |-NULL
            |-NULL
            |-NULL
            |-NULL
            |-NULL
        |-T_SELECT
            |-NULL
            |-T_PROJECT_LIST
                |-T_PROJECT_STRING
                    |-T_IDENT : id
            |-T_FROM_LIST
                |-T_IDENT : tt
            |-NULL
            |-NULL
            |-NULL
            |-NULL
            |-NULL
            |-NULL
            |-NULL
            |-NULL
            |-NULL
            |-NULL
            |-NULL
        |-NULL
        |-NULL
        |-NULL
        |-NULL
 
=======================================
 
<<Part 2 : LOGICAL PLAN>>
<LogicalPlan>
    <StmtList>
        ObSelectStmt 0 Begin
        LEFTQUERY ::= <2>
        <UNION DISTINCT>
        RIGHTQUERY ::= <3>
        ObSelectStmt 0 End
        ObSelectStmt 1 Begin
        <TableItemList Begin>
            {Num 0, TableId:2, TableName:pp, AliasName:NULL, Type:BASE_TABLE, RefId: 2}
        <TableItemList End>
        <ColumnItemList Begin>
            {Num 0, ColumnId:2, ColumnName:id, TableRef:2}
        <ColumnItemList End>
        SELECT ::= <1, id>
        FROM ::= <2>
        ObSelectStmt 1 End
        ObSelectStmt 2 Begin
        <TableItemList Begin>
            {Num 0, TableId:1, TableName:tt, AliasName:NULL, Type:BASE_TABLE, RefId: 1}
        <TableItemList End>
        <ColumnItemList Begin>
            {Num 0, ColumnId:1, ColumnName:id, TableRef:1}
        <ColumnItemList End>
        SELECT ::= <2, id>
        FROM ::= <1>
        ObSelectStmt 2 End
    </StmtList>
    <ExprList>
        <ObSqlRawExpr 0 Begin>
        expr_id = 1
        (table_id : column_id) = (NULL : 65519)
        ObBinaryRefRawExpr
        T_REF_COLUMN : [table_id, column_id] = [2, 2]
        <ObSqlRawExpr 0 End>
        <ObSqlRawExpr 1 Begin>
        expr_id = 2
        (table_id : column_id) = (NULL : 65518)
        ObBinaryRefRawExpr
        T_REF_COLUMN : [table_id, column_id] = [1, 1]
        <ObSqlRawExpr 1 End>
    </ExprList>
</LogicalPlan>
LEFTQUERY ::= <2>
<UNION DISTINCT>
RIGHTQUERY ::= <3>
STMT string: SELECT id FROM pp 
STMT string: SELECT id FROM tt 
 
 
生成的执行计划如下:
I0100 00:00:00.000000 11191 jd_exec_plan.cpp:531] RAW: new physical plan, addr=0xb5e8790
exec_plan_unit shard name: pp1
exec_plan_unit SQL name  : SELECT id FROM pp1 
exec_plan_unit shard name: pp2
exec_plan_unit SQL name  : SELECT id FROM pp2 
exec_plan_unit shard name: pp3
exec_plan_unit SQL name  : SELECT id FROM pp3 
exec_plan_unit shard name: pp4
exec_plan_unit SQL name  : SELECT id FROM pp4 
exec_plan_unit shard name: tt1
exec_plan_unit SQL name  : SELECT id FROM tt1 
exec_plan_unit shard name: tt2
exec_plan_unit SQL name  : SELECT id FROM tt2 
exec_plan_unit shard name: tt3
exec_plan_unit SQL name  : SELECT id FROM tt3 
exec_plan_unit shard name: tt4
exec_plan_unit SQL name  : SELECT id FROM tt4 
DATE : 2013.11.15
EMAIL: gqinbo@gmail.com

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C++ 63.1%
  • C 29.7%
  • Yacc 5.7%
  • Lex 1.4%
  • Other 0.1%