@@ -42,10 +42,6 @@ print_action(struct when *w)
4242{
4343switch (w->code )
4444{
45- case W_CONTINUE:fprintf (yyout," continue;" );
46- break ;
47- case W_BREAK:fprintf (yyout," break;" );
48- break ;
4945case W_SQLPRINT:fprintf (yyout," sqlprint();" );
5046break ;
5147case W_GOTO:fprintf (yyout," goto %s;" , w->str );
@@ -224,12 +220,12 @@ dump_variables(struct arguments * list)
224220struct when action;
225221}
226222
227- %token <tagname> SQL_START SQL_SEMI SQL_STRING SQL_INTO
223+ %token <tagname> SQL_START SQL_SEMI SQL_STRING SQL_INTO SQL_IN
228224%token <tagname> SQL_BEGIN SQL_END SQL_DECLARE SQL_SECTION SQL_INCLUDE
229225%token <tagname> SQL_CONNECT SQL_OPEN SQL_EXECUTE SQL_IMMEDIATE
230226%token <tagname> SQL_COMMIT SQL_ROLLBACK SQL_RELEASE SQL_WORK SQL_WHENEVER
231- %token <tagname> SQL_SQLERROR SQL_NOT_FOUND SQL_CONTINUE
232- %token <tagname> SQL_DO SQL_GOTO SQL_SQLPRINT SQL_STOP
227+ %token <tagname> SQL_SQLERROR SQL_NOT_FOUND SQL_CONTINUE SQL_FROM SQL_FETCH
228+ %token <tagname> SQL_DO SQL_GOTO SQL_SQLPRINT SQL_STOP SQL_CONV
233229
234230%token <tagname> S_SYMBOL S_LENGTH S_ANYTHING S_LABEL
235231%token <tagname> S_VARCHAR S_VARCHAR2
@@ -241,11 +237,11 @@ dump_variables(struct arguments * list)
241237%type <type> type type_detailed varchar_type simple_type struct_type string_type
242238/* % type <type> array_type pointer_type*/
243239%type <symbolname> symbol label
244- %type <tagname> maybe_storage_clause varchar_tag db_name
240+ %type <tagname> maybe_storage_clause varchar_tag db_name cursor
245241%type <type_enum> simple_tag char_tag
246242%type <indexsize> index length
247243%type <action> action
248- %type <tagname> canything sqlanything both_anything vartext commit_release
244+ %type <tagname> canything sqlanything both_anything vartext commit_release sqlcommand
249245
250246%%
251247prog :statements ;
@@ -262,6 +258,7 @@ statement : sqldeclaration
262258| sqlexecute
263259| sqlwhenever
264260| sqlstatement
261+ | sqlfetch
265262| cthing
266263| blockstart
267264| blockend ;
@@ -573,9 +570,30 @@ label : S_LABEL {
573570 $<symbolname>$ = name;
574571}
575572
573+ sqlfetch :SQL_START SQL_FETCH {
574+ reset_variables ();
575+ fprintf (yyout," ECPGdo(__LINE__,\" fetch in" );
576+ }cursor {
577+ fwrite (yytext, yyleng,1 , yyout);
578+ fwrite (" " ,1 ,1 , yyout);
579+ }SQL_INTO into_list SQL_SEMI {
580+ /* Dump*/
581+ fprintf (yyout," \" ," );
582+ dump_variables (argsinsert);
583+ fprintf (yyout," ECPGt_EOIT," );
584+ dump_variables (argsresult);
585+ fprintf (yyout," ECPGt_EORT );" );
586+ whenever_action ();
587+ }
588+
589+ cursor :SQL_IN S_SYMBOL | S_SYMBOL ;
590+
576591sqlstatement :SQL_START {/* Reset stack*/
577592reset_variables ();
578593fprintf (yyout," ECPGdo(__LINE__,\" " );
594+ }sqlcommand {
595+ fwrite (yytext, yyleng,1 , yyout);
596+ fwrite (" " ,1 ,1 , yyout);
579597}sqlstatement_words SQL_SEMI {
580598/* Dump*/
581599fprintf (yyout," \" ," );
@@ -584,7 +602,10 @@ sqlstatement : SQL_START { /* Reset stack */
584602dump_variables (argsresult);
585603fprintf (yyout," ECPGt_EORT );" );
586604whenever_action ();
587- };
605+ }
606+
607+ /* FIXME: instead of S_SYMBOL we should list all possible commands*/
608+ sqlcommand :S_SYMBOL | SQL_DECLARE ;
588609
589610sqlstatement_words :sqlstatement_word
590611| sqlstatement_words sqlstatement_word ;
@@ -594,7 +615,10 @@ sqlstatement_word : ':' symbol
594615add_variable (&argsinsert, find_variable($2 ));
595616fprintf (yyout," ;;" );
596617 }
597- | SQL_INTO into_list { }
618+ | SQL_INTO into_list SQL_FROM {
619+ fwrite (yytext, yyleng,1 , yyout);
620+ fwrite (" " ,1 ,1 , yyout);
621+ }
598622| sqlanything
599623 {
600624fwrite (yytext, yyleng,1 , yyout);
@@ -610,7 +634,7 @@ sqlstatement_word : ':' symbol
610634into_list :' :' symbol {
611635add_variable (&argsresult, find_variable($2 ));
612636}
613- | into_list ' ,' ' :' symbol {
637+ | into_list ' ,' ' :' symbol {
614638add_variable (&argsresult, find_variable($4 ));
615639};
616640
@@ -627,10 +651,10 @@ sqlanything : both_anything;
627651both_anything :S_LENGTH | S_VARCHAR | S_VARCHAR2
628652| S_LONG | S_SHORT | S_INT | S_CHAR | S_FLOAT | S_DOUBLE | S_BOOL
629653| SQL_OPEN | SQL_CONNECT
630- | SQL_STRING
654+ | SQL_STRING | SQL_CONV
631655| SQL_BEGIN | SQL_END
632- | SQL_DECLARE | SQL_SECTION
633- | SQL_INCLUDE
656+ | SQL_DECLARE | SQL_SECTION | SQL_FETCH | SQL_FROM
657+ | SQL_INCLUDE | SQL_IN
634658| S_SYMBOL | S_LABEL
635659| S_STATIC | S_EXTERN | S_AUTO | S_CONST | S_REGISTER | S_STRUCT
636660| ' [' | ' ]' | ' ,' | ' =' | ' *' | ' (' | ' )'