Changeset: a7b023850288 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=a7b023850288
Added Files:
        sql/server/sql_tokens.h
Modified Files:
        sql/server/Makefile.ag
        sql/server/rel_schema.c
        sql/server/rel_select.c
        sql/server/sql_parser.h
        sql/server/sql_parser.y
        sql/server/sql_symbol.c
        sql/server/sql_symbol.h
Branch: default
Log Message:

Using tokens enum definition in the sql parser. Use C enums whenever possible. 
It helps debugging long switch statements and find missing cases in them.


diffs (truncated from 670 to 300 lines):

diff --git a/sql/server/Makefile.ag b/sql/server/Makefile.ag
--- a/sql/server/Makefile.ag
+++ b/sql/server/Makefile.ag
@@ -59,5 +59,5 @@ lib_sqlserver = {
                rel_updates.h rel_psm.h rel_xml.h sql_atom.h sql_datetime.h \
                sql_decimal.h sql_env.h sql_mvc.h sql_parser.h \
                sql_privileges.h sql_qc.h sql_scan.h \
-               sql_semantic.h sql_symbol.h sql_partition.h
+               sql_semantic.h sql_symbol.h sql_tokens.h sql_partition.h
 }
diff --git a/sql/server/rel_schema.c b/sql/server/rel_schema.c
--- a/sql/server/rel_schema.c
+++ b/sql/server/rel_schema.c
@@ -393,6 +393,9 @@ column_constraint_type(mvc *sql, char *n
                mvc_null(sql, cs, null);
                res = SQL_OK;
        }       break;
+       default:{
+               res = SQL_ERR;
+       }
        }
        if (res == SQL_ERR) {
                (void) sql_error(sql, 02, SQLSTATE(M0M03) "Unknown constraint 
(%p)->token = %s\n", s, token2string(s->token));
@@ -480,6 +483,9 @@ column_option(
                mvc_null(sql, cs, null);
                res = SQL_OK;
        }       break;
+       default:{
+               res = SQL_ERR;
+       }
        }
        if (res == SQL_ERR) {
                (void) sql_error(sql, 02, SQLSTATE(M0M03) "Unknown column 
option (%p)->token = %s\n", s, token2string(s->token));
@@ -617,6 +623,8 @@ table_constraint_type(mvc *sql, char *na
        case SQL_FOREIGN_KEY:
                res = table_foreign_key(sql, name, s, ss, t);
                break;
+       default:
+               res = SQL_ERR;
        }
        if (res != SQL_OK) {
                sql_error(sql, 02, SQLSTATE(M0M03) "Table constraint type: 
wrong token (%p) = %s\n", s, token2string(s->token));
@@ -729,6 +737,9 @@ table_element(mvc *sql, symbol *s, sql_s
                case SQL_DROP_CONSTRAINT:
                        msg = "drop constraint from"; 
                        break;
+               default:
+                       sql_error(sql, 02, SQLSTATE(M0M03) "Unknown table 
element (%p)->token = %s\n", s, token2string(s->token));
+                       return SQL_ERR;
                }
                sql_error(sql, 02, SQLSTATE(42000) "ALTER TABLE: cannot %s %s 
'%s'\n",
                                msg, 
@@ -907,6 +918,8 @@ table_element(mvc *sql, symbol *s, sql_s
        }       break;
        case SQL_DROP_CONSTRAINT:
                assert(0);
+       default:
+               res = SQL_ERR;
        }
        if (res == SQL_ERR) {
                sql_error(sql, 02, SQLSTATE(M0M03) "Unknown table element 
(%p)->token = %s\n", s, token2string(s->token));
@@ -1859,7 +1872,7 @@ rel_grant_privs(mvc *sql, sql_schema *cu
 {
        dlist *obj_privs = privs->h->data.lval;
        symbol *obj = privs->h->next->data.sym;
-       int token = obj->token;
+       tokens token = obj->token;
 
        if (token == SQL_NAME) {
                dlist *qname = obj->data.lval;
@@ -2043,7 +2056,7 @@ rel_revoke_privs(mvc *sql, sql_schema *c
 {
        dlist *obj_privs = privs->h->data.lval;
        symbol *obj = privs->h->next->data.sym;
-       int token = obj->token;
+       tokens token = obj->token;
 
        if (token == SQL_NAME) {
                dlist *qname = obj->data.lval;
diff --git a/sql/server/rel_select.c b/sql/server/rel_select.c
--- a/sql/server/rel_select.c
+++ b/sql/server/rel_select.c
@@ -8,6 +8,7 @@
 
 #include "monetdb_config.h"
 #include "rel_select.h"
+#include "sql_tokens.h"
 #include "sql_semantic.h"      /* TODO this dependency should be removed, move
                                   the dependent code into sql_mvc */
 #include "sql_privileges.h"
@@ -3800,7 +3801,7 @@ rel_aggr(mvc *sql, sql_rel **rel, symbol
 }
 
 static sql_exp *
-rel_case(mvc *sql, sql_rel **rel, int token, symbol *opt_cond, dlist 
*when_search_list, symbol *opt_else, int f)
+rel_case(mvc *sql, sql_rel **rel, tokens token, symbol *opt_cond, dlist 
*when_search_list, symbol *opt_else, int f)
 {
        sql_subtype *tpe = NULL;
        list *conds = new_exp_list(sql->sa);
@@ -4445,7 +4446,7 @@ rel_order_by(mvc *sql, sql_rel **R, symb
 }
 
 static int
-generate_window_bound(int sql_token, bool first_half)
+generate_window_bound(tokens sql_token, bool first_half)
 {
        switch(sql_token) {
                case SQL_PRECEDING:
@@ -4507,7 +4508,7 @@ generate_window_bound_call(mvc *sql, sql
 }
 
 static sql_exp*
-calculate_window_bound(mvc *sql, sql_rel *p, int token, symbol *bound, sql_exp 
*ie, int frame_type, int f)
+calculate_window_bound(mvc *sql, sql_rel *p, tokens token, symbol *bound, 
sql_exp *ie, int frame_type, int f)
 {
        sql_subtype *bt, *it = sql_bind_localtype("int"), *lon = 
sql_bind_localtype("lng"), *iet;
        unsigned char bclass = 0;
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
@@ -9,6 +9,7 @@
 #ifndef _SQL_PARSER_H_
 #define _SQL_PARSER_H_
 
+#include "sql_tokens.h"
 #include "sql_mvc.h"
 
 /* the next define makes the parser output more specific error messages,
@@ -18,195 +19,8 @@
 #define YYDEBUG 1
 */
 
-typedef enum tokens {
-       SQL_CREATE_SCHEMA,
-       SQL_CREATE_TABLE,
-       SQL_CREATE_VIEW,
-       SQL_CREATE_INDEX,
-       SQL_CREATE_ROLE,
-       SQL_CREATE_USER,
-       SQL_CREATE_TYPE,
-       SQL_CREATE_FUNC,
-       SQL_CREATE_SEQ,
-       SQL_CREATE_TRIGGER,
-       SQL_CREATE_TABLE_LOADER,
-       SQL_DROP_SCHEMA,
-       SQL_DROP_TABLE,
-       SQL_DROP_VIEW,
-       SQL_DROP_INDEX,
-       SQL_DROP_ROLE,
-       SQL_DROP_USER,
-       SQL_DROP_TYPE,
-       SQL_DROP_FUNC,
-       SQL_DROP_SEQ,
-       SQL_DROP_TRIGGER,
-       SQL_ALTER_TABLE,
-       SQL_ALTER_SEQ,
-       SQL_ALTER_USER,
-       SQL_RENAME_USER,
-       SQL_DROP_COLUMN,
-       SQL_DROP_CONSTRAINT,
-       SQL_DROP_DEFAULT,
-       SQL_ANALYZE,
-       SQL_DECLARE,
-       SQL_DECLARE_TABLE,
-       SQL_COMMENT,
-       SQL_SET,
-       SQL_SAMPLE,
-       SQL_CALL,
-       SQL_PREP,
-       SQL_PREPARE,
-       SQL_NAME,
-       SQL_USER,
-       SQL_PATH,
-       SQL_CHARSET,
-       SQL_SCHEMA,
-       SQL_TABLE,
-       SQL_TABLE_OPERATOR,
-       SQL_VIEW,
-       SQL_INDEX,
-       SQL_TYPE,
-       SQL_SEQUENCE,
-       SQL_CASE,
-       SQL_CAST,
-       SQL_RETURN,
-       SQL_IF,
-       SQL_ELSE,
-       SQL_WHILE,
-       SQL_COLUMN,
-       SQL_COLUMN_OPTIONS,
-       SQL_COALESCE,
-       SQL_CONSTRAINT,
-       SQL_CHECK,
-       SQL_DEFAULT,
-       SQL_NOT_NULL,
-       SQL_NULL,
-       SQL_IS_NULL,
-       SQL_IS_NOT_NULL,
-       SQL_NULLIF,
-       SQL_UNIQUE,
-       SQL_PRIMARY_KEY,
-       SQL_FOREIGN_KEY,
-       SQL_BEGIN,
-       TR_COMMIT,
-       TR_ROLLBACK,
-       TR_SAVEPOINT,
-       TR_RELEASE,
-       TR_START,
-       TR_MODE,
-       SQL_INSERT,
-       SQL_DELETE,
-       SQL_TRUNCATE,
-       SQL_UPDATE,
-       SQL_STORAGE,
-       SQL_CROSS,
-       SQL_JOIN,
-       SQL_SELECT,
-       SQL_CONNECT,
-       SQL_DISCONNECT,
-       SQL_DATABASE,
-       SQL_PORT,
-       SQL_WHERE,
-       SQL_FROM,
-       SQL_UNIONJOIN,
-       SQL_UNION,
-       SQL_EXCEPT,
-       SQL_INTERSECT,
-       SQL_VALUES,
-       SQL_ASSIGN,
-       SQL_ORDERBY,
-       SQL_GROUPBY,
-       SQL_DESC,
-       SQL_AND,
-       SQL_OR,
-       SQL_NOT,
-       SQL_EXISTS,
-       SQL_NOT_EXISTS,
-       SQL_OP,
-       SQL_UNOP,
-       SQL_BINOP,
-       SQL_NOP,
-       SQL_BETWEEN,
-       SQL_NOT_BETWEEN,
-       SQL_LIKE,
-       SQL_NOT_LIKE,
-       SQL_IN,
-       SQL_NOT_IN,
-       SQL_GRANT,
-       SQL_GRANT_ROLES,
-       SQL_REVOKE,
-       SQL_REVOKE_ROLES,
-       SQL_EXEC,
-       SQL_EXECUTE,
-       SQL_PRIVILEGES,
-       SQL_ROLE,
-       SQL_PW_UNENCRYPTED,
-       SQL_PW_ENCRYPTED,
-       SQL_PARAMETER,
-       SQL_FUNC,
-       SQL_AGGR,
-       SQL_RANK,
-       SQL_FRAME,
-       SQL_COMPARE,
-       SQL_FILTER,
-       SQL_ROUTINE,
-       SQL_TEMP_LOCAL,
-       SQL_TEMP_GLOBAL,
-       SQL_INT_VALUE,
-       SQL_ATOM,
-       SQL_USING,
-       SQL_WHEN,
-       SQL_ESCAPE,
-       SQL_COPYFROM,
-       SQL_BINCOPYFROM,
-       SQL_COPYLOADER,
-       SQL_COPYTO,
-       SQL_EXPORT,
-       SQL_NEXT,
-       SQL_MULSTMT,
-       SQL_WITH,
-       SQL_START,
-       SQL_INC,
-       SQL_MINVALUE,
-       SQL_MAXVALUE,
-       SQL_CACHE,
-       SQL_CYCLE,
-       SQL_XMLCOMMENT,
-       SQL_XMLCONCAT,
-       SQL_XMLDOCUMENT,
-       SQL_XMLELEMENT,
-       SQL_XMLATTRIBUTE,
-       SQL_XMLFOREST,
-       SQL_XMLPARSE,
-       SQL_XMLPI,
-       SQL_XMLQUERY,
-       SQL_XMLTEXT,
-       SQL_XMLVALIDATE,
-       SQL_XMLNAMESPACES,
-       SQL_MERGE_PARTITION,
-       SQL_PARTITION_LIST,
-       SQL_PARTITION_RANGE,
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to