diff options
Diffstat (limited to 'src/test/isolation/specparse.y')
-rw-r--r-- | src/test/isolation/specparse.y | 28 |
1 files changed, 25 insertions, 3 deletions
diff --git a/src/test/isolation/specparse.y b/src/test/isolation/specparse.y index 9d2b1a277f0..bf3a9f3b505 100644 --- a/src/test/isolation/specparse.y +++ b/src/test/isolation/specparse.y @@ -35,7 +35,9 @@ TestSpec parseresult; /* result of parsing is left here */ } ptr_list; } +%type <ptr_list> setup_list %type <str> opt_setup opt_teardown +%type <str> setup %type <ptr_list> step_list session_list permutation_list opt_permutation_list %type <ptr_list> string_list %type <session> session @@ -48,12 +50,13 @@ TestSpec parseresult; /* result of parsing is left here */ %% TestSpec: - opt_setup + setup_list opt_teardown session_list opt_permutation_list { - parseresult.setupsql = $1; + parseresult.setupsqls = (char **) $1.elements; + parseresult.nsetupsqls = $1.nelements; parseresult.teardownsql = $2; parseresult.sessions = (Session **) $3.elements; parseresult.nsessions = $3.nelements; @@ -62,9 +65,28 @@ TestSpec: } ; +setup_list: + /* EMPTY */ + { + $$.elements = NULL; + $$.nelements = 0; + } + | setup_list setup + { + $$.elements = realloc($1.elements, + ($1.nelements + 1) * sizeof(void *)); + $$.elements[$1.nelements] = $2; + $$.nelements = $1.nelements + 1; + } + ; + opt_setup: /* EMPTY */ { $$ = NULL; } - | SETUP sqlblock { $$ = $2; } + | setup { $$ = $1; } + ; + +setup: + SETUP sqlblock { $$ = $2; } ; opt_teardown: |