Coder Social home page Coder Social logo

sql_parser-1's Introduction

说明

该项目为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

sql_parser-1's People

Contributors

qinbo avatar

Watchers

James Cloos avatar power avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.