Changeset: d3e0e0e7e4f6 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=d3e0e0e7e4f6
Modified Files:
        sql/server/sql_parser.h
        sql/server/sql_parser.y
        sql/server/sql_scan.c
Branch: Jul2012
Log Message:

sql/parser: make compile with bison-2.6

properly type the param carried around by bison, use default error
function from bison to avoid conflicts lateron


diffs (truncated from 677 to 300 lines):

diff --git a/sql/server/sql_parser.h b/sql/server/sql_parser.h
--- a/sql/server/sql_parser.h
+++ b/sql/server/sql_parser.h
@@ -187,8 +187,8 @@ typedef enum jt {
 extern char *token2string(int token);
 extern void *sql_error(mvc *sql, int error_code, _In_z_ _Printf_format_string_ 
char *format, ...)
        __attribute__((__format__(__printf__, 3, 4)));
-extern int parse_error(mvc *sql, const char *s);
-extern int sqlparse(void *);
+extern int sqlerror(mvc *sql, const char *s);
+extern int sqlparse(mvc *m);
 
 #endif /*_SQL_PARSER_H_*/
 
diff --git a/sql/server/sql_parser.y b/sql/server/sql_parser.y
--- a/sql/server/sql_parser.y
+++ b/sql/server/sql_parser.y
@@ -32,7 +32,7 @@
 #include <string.h>
 #include <stdlib.h>
 
-#define SA     (((mvc*)parm)->sa)
+#define SA     m->sa
 #define _symbol_create(t,d)         symbol_create( SA, t, d)
 #define _symbol_create_list(t,d)    symbol_create_list( SA, t, d)
 #define _symbol_create_int(t,d)     symbol_create_int( SA, t, d)
@@ -51,14 +51,6 @@
 #define append_type(l,d)     dlist_append_type( SA, l, d)
 
 #define _atom_string(t, v)   atom_string(SA, t, v)
- 
-#define YYPARSE_PARAM parm
-#define YYLEX_PARAM parm
-#ifdef yyerror
-#undef yyerror
-#endif
-#define yyerror(s) parse_error(YYLEX_PARAM, s)
-#define sqlerror(s) parse_error(YYLEX_PARAM, s)        /* needed for bison++ 
1.21.11-3 */
 
 #define YYMALLOC malloc
 #define YYFREE free
@@ -77,6 +69,10 @@
  * UDT
  */
 
+%define api.pure
+%parse-param { mvc *m }
+%lex-param { void *m }
+
 /* reentrant parser */
 %pure_parser
 %union {
@@ -566,7 +562,6 @@ SQLCODE SQLERROR UNDER WHENEVER
 sqlstmt:
    sql SCOLON
        {
-               mvc *m = (mvc*)parm;
                if (m->sym) {
                        append_symbol(m->sym->data.lval, $$);
                        $$ = m->sym;
@@ -576,12 +571,12 @@ sqlstmt:
                YYACCEPT;
        }
 
- | PREPARE             { mvc *m = (mvc*)parm;
+ | PREPARE             {
                          m->emode = m_prepare; 
                          m->scanner.as = m->scanner.yycur; 
                          m->scanner.key = 0;
                        }
-       sql SCOLON      { mvc *m = (mvc*)parm;
+       sql SCOLON      {
                          if (m->sym) {
                                append_symbol(m->sym->data.lval, $3);
                                $$ = m->sym;
@@ -590,12 +585,12 @@ sqlstmt:
                          }
                          YYACCEPT;
                        }
- | SQL_PLAN            { mvc *m = (mvc*)parm;
+ | SQL_PLAN            {
                          m->emode = m_plan;
                          m->scanner.as = m->scanner.yycur; 
                          m->scanner.key = 0;
                        }
-       sql SCOLON      { mvc *m = (mvc*)parm;
+       sql SCOLON      {
                          if (m->sym) {
                                append_symbol(m->sym->data.lval, $3);
                                $$ = m->sym;
@@ -605,12 +600,12 @@ sqlstmt:
                          YYACCEPT;
                        }
 
- | SQL_EXPLAIN                 { mvc *m = (mvc*)parm;
+ | SQL_EXPLAIN                 {
                          m->emod |= mod_explain;
                          m->scanner.as = m->scanner.yycur; 
                          m->scanner.key = 0;
                        }
-   sql SCOLON          { mvc *m = (mvc*)parm;
+   sql SCOLON          {
                          if (m->sym) {
                                append_symbol(m->sym->data.lval, $3);
                                $$ = m->sym;
@@ -620,12 +615,12 @@ sqlstmt:
                          YYACCEPT;
                        }
 
- | SQL_DOT             { mvc *m = (mvc*)parm;
+ | SQL_DOT             {
                          m->emod |= mod_dot;
                          m->scanner.as = m->scanner.yycur; 
                          m->scanner.key = 0;
                        }
-       sql SCOLON      { mvc *m = (mvc*)parm;
+       sql SCOLON      {
                          if (m->sym) {
                                append_symbol(m->sym->data.lval, $3);
                                $$ = m->sym;
@@ -635,9 +630,9 @@ sqlstmt:
                          YYACCEPT;
                        }
 
- | SQL_DEBUG           { mvc *m = (mvc*)parm;
+ | SQL_DEBUG           {
                          if (m->scanner.mode == LINE_1) {
-                               yyerror("SQL debugging only supported in 
interactive mode");
+                               yyerror(m, "SQL debugging only supported in 
interactive mode");
                                YYABORT;
                          }
                          m->emod |= mod_debug;
@@ -645,22 +640,17 @@ sqlstmt:
                          m->scanner.key = 0;
                        }
    sqlstmt             { $$ = $3; YYACCEPT; }
- | SQL_TRACE           { mvc *m = (mvc*)parm;
+ | SQL_TRACE           {
                          m->emod |= mod_trace;
                          m->scanner.as = m->scanner.yycur; 
                          m->scanner.key = 0;
                        }
    sqlstmt             { $$ = $3; YYACCEPT; }
- | exec SCOLON         { mvc *m = (mvc*)parm;
-                         m->sym = $$ = $1; YYACCEPT; }
- | /*empty*/           { mvc *m = (mvc*)parm;
-                         m->sym = $$ = NULL; YYACCEPT; }
- | SCOLON              { mvc *m = (mvc*)parm;
-                         m->sym = $$ = NULL; YYACCEPT; }
- | error SCOLON                { mvc *m = (mvc*)parm;
-                         m->sym = $$ = NULL; YYACCEPT; }
- | LEX_ERROR           { mvc *m = (mvc*)parm;
-                         m->sym = $$ = NULL; YYABORT; }
+ | exec SCOLON         { m->sym = $$ = $1; YYACCEPT; }
+ | /*empty*/           { m->sym = $$ = NULL; YYACCEPT; }
+ | SCOLON              { m->sym = $$ = NULL; YYACCEPT; }
+ | error SCOLON                { m->sym = $$ = NULL; YYACCEPT; }
+ | LEX_ERROR           { m->sym = $$ = NULL; YYABORT; }
  ;
 
 
@@ -1425,7 +1415,6 @@ column_def:
                        /* handle multi-statements by wrapping them in a list */
                        sql_subtype it;
                        dlist* stmts;
-                       mvc *m = (mvc*)parm;
                        /* note: sql_next_seq_name uses sa_alloc */
                        str sn = sql_next_seq_name(m);
                        dlist *p; /* primary key */
@@ -1535,7 +1524,6 @@ generated_column:
                /* handle multi-statements by wrapping them in a list */
                sql_subtype it;
                dlist* stmts;
-               mvc *m = (mvc*)parm;
                /* note: sql_next_seq_name uses sa_alloc */
                str sn = sql_next_seq_name(m);
                /* sequence generation code */
@@ -1563,7 +1551,6 @@ generated_column:
                /* handle multi-statements by wrapping them in a list */
                sql_subtype it;
                dlist* stmts;
-               mvc *m = (mvc*)parm;
                /* note: sql_next_seq_name uses sa_alloc */
                str sn = sql_next_seq_name(m);
                /* sequence generation code */
@@ -2062,7 +2049,7 @@ while_statement:
                  char *label = $1?$1:$8;
                  if ($1 && $8 && strcmp($1, $8) != 0) {
                        $$ = NULL;
-                       yyerror("WHILE: labels should match");
+                       yyerror(m, "WHILE: labels should match");
                        YYABORT;
                  }
                  l = L();
@@ -2381,7 +2368,7 @@ update_statement:
 
 transaction_statement:
    _transaction_stmt
-       { mvc *m = (mvc*)parm;
+       {
          $$ = $1;
          m->type = Q_TRANS;                                    }
  ;
@@ -2470,7 +2457,7 @@ copyfrom_stmt:
    | COPY opt_nr BINARY INTO qname FROM string_commalist /* binary copy from */
        { dlist *l = L();
          if ($2 != NULL) {
-               yyerror("COPY INTO: cannot pass number of records when using 
binary COPY INTO");
+               yyerror(m, "COPY INTO: cannot pass number of records when using 
binary COPY INTO");
                YYABORT;
          }
          append_list(l, $5);
@@ -2648,8 +2635,6 @@ value_commalist:
 null:
    sqlNULL
         { 
-          mvc *m = (mvc*)parm;
-
          if (m->emode == m_normal && m->caching) {
                /* replace by argument */
                atom *a = atom_general(SA, sql_bind_localtype("void"), NULL);
@@ -2878,7 +2863,7 @@ select_no_parens_orderby:
                                        _symbol_create_list( SQL_FROM, 
append_symbol(L(), $1)), NULL, NULL, NULL, $2, _symbol_create_list(SQL_NAME, 
append_list(append_string(L(),"inner"),NULL)), $3, $4, $5);
                        }
                } else {
-                       yyerror("missing SELECT operator");
+                       yyerror(m, "missing SELECT operator");
                        YYABORT;
                }
         } 
@@ -2999,7 +2984,7 @@ table_ref:
                                }
  |  subquery
                                { $$ = NULL;
-                                 yyerror("subquery table reference needs 
alias, use AS xxx");
+                                 yyerror(m, "subquery table reference needs 
alias, use AS xxx");
                                  YYABORT;
                                }
  |  joined_table               { $$ = $1;
@@ -3012,11 +2997,7 @@ table_ref:
 
 /* Basket expression, TODO window */
  |  '[' 
-       {
-               mvc *m = (mvc*)parm;
-               
-               m->caching = 0;
-       }
+       { m->caching = 0; }
        select_no_parens ']' table_name         
        {
                dlist *op = L();
@@ -3246,7 +3227,7 @@ like_exp:
        { char *s = sql2str($3);
          if (_strlen(s) != 1) {
                char *msg = sql_message("\b22025!ESCAPE must be one character");
-               yyerror(msg);
+               yyerror(m, msg);
                _DELETE(msg);
                $$ = NULL;
                YYABORT;
@@ -3403,7 +3384,7 @@ simple_scalar_exp:
                          $$ = NULL;
                          assert($2->token != SQL_COLUMN || 
$2->data.lval->h->type != type_lng);
                          if ($2->token == SQL_COLUMN && $2->data.lval->h->type 
== type_int) {
-                               atom *a = sql_bind_arg(parm, 
$2->data.lval->h->data.i_val);
+                               atom *a = sql_bind_arg(m, 
$2->data.lval->h->data.i_val);
                                if (!atom_neg(a))
                                        $$ = $2;
                          } 
@@ -3446,7 +3427,6 @@ value_exp:
 param:  
    '?'                 
        { 
-         mvc *m = (mvc*)parm;
          int nr = (m->params)?list_length(m->params):0;
 
          sql_add_param(m, NULL, NULL);
@@ -3773,8 +3753,6 @@ opt_alias_name:
 atom:
     literal
        { 
-         mvc *m = (mvc*)parm;
-       
          if (m->emode == m_normal && m->caching && m->argc < 100) { 
                /* replace by argument */
                AtomNode *an = (AtomNode*)$1;
@@ -3939,12 +3917,11 @@ interval_qualifier:
 interval_type:
     INTERVAL interval_qualifier        {
                int sk, ek, sp, ep;
-               mvc *m = (mvc*)parm;
                int tpe;
 
                $$.type = NULL;
                if ( (tpe = parse_interval_qualifier( m, $2, &sk, &ek, &sp, &ep 
)) < 0){
-                       yyerror("\b22006!incorrect interval");
+                       yyerror(m, "\b22006!incorrect interval");
                        YYABORT;
                } else {
_______________________________________________
Checkin-list mailing list
Checkin-list@monetdb.org
http://mail.monetdb.org/mailman/listinfo/checkin-list

Reply via email to