Skip to content

Commit

Permalink
feat: support INSERT, COMMIT, ROLLBACK in sql parser
Browse files Browse the repository at this point in the history
  • Loading branch information
sinkinben committed Feb 2, 2022
1 parent de32db1 commit 419875f
Show file tree
Hide file tree
Showing 2 changed files with 47 additions and 1 deletion.
15 changes: 15 additions & 0 deletions sql-parser/sqlex.l
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,15 @@
"select" |
"SELECT" { return SELECT; }

"insert" |
"INSERT" { return INSERT; }

"commit" |
"COMMIT" { return COMMIT; }

"rollback" |
"ROLLBACK" { return ROLLBACK; }

"create" |
"CREATE" { return CREATE; }

Expand All @@ -16,6 +25,12 @@
"where" |
"WHERE" { return WHERE; }

"into" |
"INTO" { return INTO; }

"values" |
"VALUES" { return VALUES; }

"TABLE" { return TABLE; }

"int" |
Expand Down
33 changes: 32 additions & 1 deletion sql-parser/sqlparser.y
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,8 @@ void yyerror(const char *msg) { fprintf(stderr, "[tinydb] SQL Parser: %s\n", msg
}

// sql keywords
%token SELECT FROM TABLE CREATE WHERE
%token SELECT INSERT FROM TABLE CREATE WHERE VALUES INTO
%token COMMIT ROLLBACK

// sql operator
%token GREAT GREAT_EQUAL LESS LESS_EQUAL
Expand Down Expand Up @@ -72,6 +73,36 @@ statement:
EOL {}
| selectsql {}
| createsql {}
| insertsql {}
| commitsql {}
| rollbacksql {}
;

commitsql:
COMMIT ';'
{
statement_set(stm_ptr, STATEMENT_COMMIT, NULL, select_list, NULL);
}
;

rollbacksql:
ROLLBACK ';'
{
statement_set(stm_ptr, STATEMENT_ROLLBACK, NULL, select_list, NULL);
}
;

insertsql:
INSERT INTO IDNAME VALUES '(' NUMBER ',' STRING ',' STRING ')' ';'
{
statement_set(stm_ptr, STATEMENT_INSERT, $3, select_list, NULL);
row_t *row = &(stm_ptr->row_value);
row->id = $6;
strcpy(row->username, $8);
strcpy(row->email, $10);
free((void *)($8));
free((void *)($10));
}
;

selectsql:
Expand Down

0 comments on commit 419875f

Please sign in to comment.