@@ -136,6 +136,19 @@ UnboundAggregateExpr *create_aggregate_expression(const char *aggregate_name,
136136 float floats;
137137}
138138
139+ %destructor { delete $$; } <condition>
140+ %destructor { delete $$; } <value>
141+ %destructor { delete $$; } <rel_attr>
142+ %destructor { delete $$; } <attr_infos>
143+ %destructor { delete $$; } <attr_info>
144+ %destructor { delete $$; } <expression>
145+ %destructor { delete $$; } <expression_list>
146+ %destructor { delete $$; } <value_list>
147+ %destructor { delete $$; } <condition_list>
148+ // %destructor { delete $$; } <rel_attr_list>
149+ %destructor { delete $$; } <relation_list>
150+ %destructor { delete $$; } <key_list>
151+
139152%token <number> NUMBER
140153%token <floats> FLOAT
141154%token <cstring> ID
@@ -304,45 +317,37 @@ drop_index_stmt: /*drop index 语句的语法解析树*/
304317 }
305318 ;
306319create_table_stmt : /* create table 语句的语法解析树*/
307- CREATE TABLE ID LBRACE attr_def attr_def_list primary_key RBRACE storage_format
320+ CREATE TABLE ID LBRACE attr_def_list primary_key RBRACE storage_format
308321 {
309322 $$ = new ParsedSqlNode(SCF_CREATE_TABLE);
310323 CreateTableSqlNode &create_table = $$ ->create_table;
311324 create_table.relation_name = $3 ;
312325 // free($3);
313326
314- vector<AttrInfoSqlNode> *src_attrs = $6 ;
315-
316- if (src_attrs != nullptr ) {
317- create_table.attr_infos.swap(*src_attrs);
318- delete src_attrs;
319- }
320- create_table.attr_infos.emplace_back(*$5 );
321- reverse (create_table.attr_infos.begin(), create_table.attr_infos.end());
327+ create_table.attr_infos.swap(*$5 );
322328 delete $5 ;
323- if ($7 != nullptr ) {
324- create_table.primary_keys.swap(*$7 );
325- delete $7 ;
329+
330+ if ($6 != nullptr ) {
331+ create_table.primary_keys.swap(*$6 );
332+ delete $6 ;
326333 }
327- if ($9 != nullptr ) {
328- create_table.storage_format = $9 ;
334+ if ($8 != nullptr ) {
335+ create_table.storage_format = $8 ;
329336 }
330337 }
331338 ;
332339
333340attr_def_list :
334- /* empty */
341+ attr_def
335342 {
336- $$ = nullptr ;
343+ $$ = new vector<AttrInfoSqlNode>;
344+ $$ ->emplace_back (*$1 );
345+ delete $1 ;
337346 }
338347 | attr_def_list COMMA attr_def
339348 {
340- if ($1 != nullptr ) {
341- $$ = $1 ;
342- } else {
343- $$ = new vector<AttrInfoSqlNode>;
344- }
345- $$ ->insert ($$->begin (), *$3);
349+ $$ = $1 ;
350+ $$ ->emplace_back (*$3 );
346351 delete $3 ;
347352 }
348353 ;
@@ -400,33 +405,26 @@ attr_list:
400405 ;
401406
402407insert_stmt: /* insert 语句的语法解析树*/
403- INSERT INTO ID VALUES LBRACE value value_list RBRACE
408+ INSERT INTO ID VALUES LBRACE value_list RBRACE
404409 {
405410 $$ = new ParsedSqlNode (SCF_INSERT);
406411 $$->insertion .relation_name = $3 ;
407- if ($7 != nullptr ) {
408- $$->insertion .values .swap (*$7 );
409- delete $7 ;
410- }
411- $$->insertion .values .emplace_back (*$6 );
412- reverse ($$->insertion .values .begin (), $$->insertion .values .end ());
412+ $$->insertion .values .swap (*$6 );
413413 delete $6 ;
414414 }
415415 ;
416416
417417value_list:
418- /* empty */
418+ value
419419 {
420- $$ = nullptr ;
420+ $$ = new vector<Value>;
421+ $$->emplace_back (*$1 );
422+ delete $1 ;
421423 }
422- | COMMA value value_list {
423- if ($3 != nullptr ) {
424- $$ = $3 ;
425- } else {
426- $$ = new vector<Value>;
427- }
428- $$->emplace_back (*$2 );
429- delete $2 ;
424+ | value_list COMMA value {
425+ $$ = $1 ;
426+ $$->emplace_back (*$3 );
427+ delete $3 ;
430428 }
431429 ;
432430value:
0 commit comments