sql_parser_tests = [ ("create table asd;", [{"type": "create_stmt", "table_name": "asd", "cols": []}]), ( "create table tb (col1 INT, col2 string, col3 FLOAT);", [ { "type": "create_stmt", "table_name": "tb", "cols": [ { "type": "create_column", "column_name": "col1", "data_type": "INT", "primary_key": False, }, { "type": "create_column", "column_name": "col2", "data_type": "string", "primary_key": False, }, { "type": "create_column", "column_name": "col3", "data_type": "FLOAT", "primary_key": False, }, ], } ], ), ( """ create table tb1 ( col1 int primary key, col2 FLOAT ); """, [ { "type": "create_stmt", "table_name": "tb1", "cols": [ { "type": "create_column", "column_name": "col1", "data_type": "int", "primary_key": True, }, { "type": "create_column", "column_name": "col2", "data_type": "FLOAT", "primary_key": False, }, ], } ], ), ( """ create table tb2 ( x float, y int, z int ); """, [ { "type": "create_stmt", "table_name": "tb2", "cols": [ { "type": "create_column", "column_name": "x", "data_type": "float", "primary_key": False, }, { "type": "create_column", "column_name": "y", "data_type": "int", "primary_key": False, }, { "type": "create_column", "column_name": "z", "data_type": "int", "primary_key": False, }, ], } ], ), ( """insert into tb1 values (1, 'foo');""", [ { "type": "insert_stmt", "table_name": "tb1", "values": [ {"type": "int", "value": 1}, {"type": "string", "value": "'foo'"}, ], } ], ), ( """insert into tb1 values (2, 'foo', 'zxc', 1234.234);""", [ { "type": "insert_stmt", "table_name": "tb1", "values": [ {"type": "int", "value": 2}, {"type": "string", "value": "'foo'"}, {"type": "string", "value": "'zxc'"}, {"type": "float", "value": 1234.234}, ], } ], ), ( "update tb1 set col1=3, col4=4 where col1=2 and col2=4;", [ { "type": "update_stmt", "table_name": "tb1", "set": [ { "type": "assign_const", "left": {"type": "identifier", "value": "col1"}, "right": {"type": "int", "value": 3}, }, { "type": "assign_const", "left": {"type": "identifier", "value": "col4"}, "right": {"type": "int", "value": 4}, }, ], "where": { "type": "且", "left": { "type": "相等", "left": {"type": "identifier", "value": "col1"}, "right": {"type": "int", "value": 2}, "op_type": "bin_cmp_op", }, "right": { "type": "相等", "left": {"type": "identifier", "value": "col2"}, "right": {"type": "int", "value": 4}, "op_type": "bin_cmp_op", }, "op_type": "bin_logical_op", }, } ], ), ( "update tb1 set col1=3, col4=4 where not not not col1=2 and col2=4 or col3=col2;", [ { "type": "update_stmt", "table_name": "tb1", "set": [ { "type": "assign_const", "left": {"type": "identifier", "value": "col1"}, "right": {"type": "int", "value": 3}, }, { "type": "assign_const", "left": {"type": "identifier", "value": "col4"}, "right": {"type": "int", "value": 4}, }, ], "where": { "type": "或", "left": { "type": "且", "left": { "type": "非", "left": { "type": "非", "left": { "type": "非", "left": { "type": "相等", "left": {"type": "identifier", "value": "col1"}, "right": {"type": "int", "value": 2}, "op_type": "bin_cmp_op", }, }, }, }, "right": { "type": "相等", "left": {"type": "identifier", "value": "col2"}, "right": {"type": "int", "value": 4}, "op_type": "bin_cmp_op", }, "op_type": "bin_logical_op", }, "right": { "type": "相等", "left": {"type": "identifier", "value": "col3"}, "right": {"type": "identifier", "value": "col2"}, "op_type": "bin_cmp_op", }, "op_type": "bin_logical_op", }, } ], ), ( "delete from tb1 where c1 = 1 and c2= 3 or c3=3;", [ { "type": "delete_stmt", "table_name": "tb1", "where": { "type": "或", "left": { "type": "且", "left": { "type": "相等", "left": {"type": "identifier", "value": "c1"}, "right": {"type": "int", "value": 1}, "op_type": "bin_cmp_op", }, "right": { "type": "相等", "left": {"type": "identifier", "value": "c2"}, "right": {"type": "int", "value": 3}, "op_type": "bin_cmp_op", }, "op_type": "bin_logical_op", }, "right": { "type": "相等", "left": {"type": "identifier", "value": "c3"}, "right": {"type": "int", "value": 3}, "op_type": "bin_cmp_op", }, "op_type": "bin_logical_op", }, } ], ), ( "delete from tb1 where c1 = 1 and (c2= 3 or c3=3) or (c4='asd');", [ { "type": "delete_stmt", "table_name": "tb1", "where": { "type": "或", "left": { "type": "且", "left": { "type": "相等", "left": {"type": "identifier", "value": "c1"}, "right": {"type": "int", "value": 1}, "op_type": "bin_cmp_op", }, "right": { "type": "或", "left": { "type": "相等", "left": {"type": "identifier", "value": "c2"}, "right": {"type": "int", "value": 3}, "op_type": "bin_cmp_op", }, "right": { "type": "相等", "left": {"type": "identifier", "value": "c3"}, "right": {"type": "int", "value": 3}, "op_type": "bin_cmp_op", }, "op_type": "bin_logical_op", }, "op_type": "bin_logical_op", }, "right": { "type": "相等", "left": {"type": "identifier", "value": "c4"}, "right": {"type": "string", "value": "'asd'"}, "op_type": "bin_cmp_op", }, "op_type": "bin_logical_op", }, } ], ), ( "select * from t2;", [ { "type": "select_stmt", "select_cols": [ { "type": "select_all_column", "target": { "type": "select_all_column", "value": "select_all_column", }, } ], "table_names": ["t2"], "where": {}, } ], ), ( "select c2 as t from t2 where col1>2;", [ { "type": "select_stmt", "select_cols": [ { "type": "select_column", "target": {"type": "identifier", "value": "c2"}, "alias": "t", } ], "table_names": ["t2"], "where": { "type": "大于", "left": {"type": "identifier", "value": "col1"}, "right": {"type": "int", "value": 2}, "op_type": "bin_cmp_op", }, } ], ), ( """SELECT Sname FROM Student WHERE Sno IN (1,2) and c in (3, 4, 5);""", [ { "type": "select_stmt", "select_cols": [ { "type": "select_column", "target": {"type": "identifier", "value": "Sname"}, } ], "table_names": ["Student"], "where": { "type": "且", "left": { "type": "包含于", "left": {"type": "identifier", "value": "Sno"}, "right": [ {"type": "int", "value": 1}, {"type": "int", "value": 2}, ], "op_type": "bin_contains_op", }, "right": { "type": "包含于", "left": {"type": "identifier", "value": "c"}, "right": [ {"type": "int", "value": 3}, {"type": "int", "value": 4}, {"type": "int", "value": 5}, ], "op_type": "bin_contains_op", }, "op_type": "bin_logical_op", }, } ], ), ( """SELECT Student.Sname FROM Student WHERE Sno IN ( SELECT Sno FROM SC WHERE SC.Cno='81003' ); """, [ { "type": "select_stmt", "select_cols": [ { "type": "select_column", "target": { "type": "table_field", "table": "Student", "field": "Sname", }, } ], "table_names": ["Student"], "where": { "type": "包含于", "left": {"type": "identifier", "value": "Sno"}, "right": { "type": "select_stmt", "select_cols": [ { "type": "select_column", "target": {"type": "identifier", "value": "Sno"}, } ], "table_names": ["SC"], "where": { "type": "相等", "left": { "type": "table_field", "table": "SC", "field": "Cno", }, "right": {"type": "string", "value": "'81003'"}, "op_type": "bin_cmp_op", }, }, "op_type": "bin_contains_op", }, } ], ), ( """ select Student.Sname from Student join SC on Student.Sno=SC.Sno where SC.Cno='81003'; """, [ { "type": "select_stmt", "select_cols": [ { "type": "select_column", "target": { "type": "table_field", "table": "Student", "field": "Sname", }, } ], "table_names": ["Student"], "join_options": { "type": "join_options", "join_with": {"type": "identifier", "value": "SC"}, "on": { "type": "相等", "left": { "type": "table_field", "table": "Student", "field": "Sno", }, "right": {"type": "table_field", "table": "SC", "field": "Sno"}, "op_type": "bin_cmp_op", }, }, "where": { "type": "相等", "left": {"type": "table_field", "table": "SC", "field": "Cno"}, "right": {"type": "string", "value": "'81003'"}, "op_type": "bin_cmp_op", }, } ], ), ( """ select Student.Sname from Student join SC on Student.Sno=SC.Sno and SC.Cno='81003'; """, [ { "type": "select_stmt", "select_cols": [ { "type": "select_column", "target": { "type": "table_field", "table": "Student", "field": "Sname", }, } ], "table_names": ["Student"], "join_options": { "type": "join_options", "join_with": {"type": "identifier", "value": "SC"}, "on": { "type": "且", "left": { "type": "相等", "left": { "type": "table_field", "table": "Student", "field": "Sno", }, "right": { "type": "table_field", "table": "SC", "field": "Sno", }, "op_type": "bin_cmp_op", }, "right": { "type": "相等", "left": { "type": "table_field", "table": "SC", "field": "Cno", }, "right": {"type": "string", "value": "'81003'"}, "op_type": "bin_cmp_op", }, "op_type": "bin_logical_op", }, }, "where": {}, } ], ), ("drop table t1;", [{"type": "drop_stmt", "table_name": "t1"}]), ( "select * from tb1, tb2;", [ { "type": "select_stmt", "select_cols": [ { "type": "select_all_column", "target": { "type": "select_all_column", "value": "select_all_column", }, } ], "table_names": ["tb1", "tb2"], "where": {}, } ], ), ]