Commit a4f9f1d4 authored by osku's avatar osku

Add support for BINARY(n) and BLOB types in the InnoDB SQL parser.

parent ddf4a2a8
#ifndef YYSTYPE /* A Bison parser, made by GNU Bison 1.875d. */
#define YYSTYPE int
/* Skeleton parser for Yacc-like parsing with Bison,
Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
/* As a special exception, when this file is copied by Bison into a
Bison output file, you may use that output file without restriction.
This special exception was added by the Free Software Foundation
in version 1.24 of Bison. */
/* Tokens. */
#ifndef YYTOKENTYPE
# define YYTOKENTYPE
/* Put the tokens into the symbol table, so that GDB and other debuggers
know about them. */
enum yytokentype {
PARS_INT_LIT = 258,
PARS_FLOAT_LIT = 259,
PARS_STR_LIT = 260,
PARS_NULL_LIT = 261,
PARS_ID_TOKEN = 262,
PARS_AND_TOKEN = 263,
PARS_OR_TOKEN = 264,
PARS_NOT_TOKEN = 265,
PARS_GE_TOKEN = 266,
PARS_LE_TOKEN = 267,
PARS_NE_TOKEN = 268,
PARS_PROCEDURE_TOKEN = 269,
PARS_IN_TOKEN = 270,
PARS_OUT_TOKEN = 271,
PARS_BINARY_TOKEN = 272,
PARS_BLOB_TOKEN = 273,
PARS_INT_TOKEN = 274,
PARS_INTEGER_TOKEN = 275,
PARS_FLOAT_TOKEN = 276,
PARS_CHAR_TOKEN = 277,
PARS_IS_TOKEN = 278,
PARS_BEGIN_TOKEN = 279,
PARS_END_TOKEN = 280,
PARS_IF_TOKEN = 281,
PARS_THEN_TOKEN = 282,
PARS_ELSE_TOKEN = 283,
PARS_ELSIF_TOKEN = 284,
PARS_LOOP_TOKEN = 285,
PARS_WHILE_TOKEN = 286,
PARS_RETURN_TOKEN = 287,
PARS_SELECT_TOKEN = 288,
PARS_SUM_TOKEN = 289,
PARS_COUNT_TOKEN = 290,
PARS_DISTINCT_TOKEN = 291,
PARS_FROM_TOKEN = 292,
PARS_WHERE_TOKEN = 293,
PARS_FOR_TOKEN = 294,
PARS_DDOT_TOKEN = 295,
PARS_CONSISTENT_TOKEN = 296,
PARS_READ_TOKEN = 297,
PARS_ORDER_TOKEN = 298,
PARS_BY_TOKEN = 299,
PARS_ASC_TOKEN = 300,
PARS_DESC_TOKEN = 301,
PARS_INSERT_TOKEN = 302,
PARS_INTO_TOKEN = 303,
PARS_VALUES_TOKEN = 304,
PARS_UPDATE_TOKEN = 305,
PARS_SET_TOKEN = 306,
PARS_DELETE_TOKEN = 307,
PARS_CURRENT_TOKEN = 308,
PARS_OF_TOKEN = 309,
PARS_CREATE_TOKEN = 310,
PARS_TABLE_TOKEN = 311,
PARS_INDEX_TOKEN = 312,
PARS_UNIQUE_TOKEN = 313,
PARS_CLUSTERED_TOKEN = 314,
PARS_DOES_NOT_FIT_IN_MEM_TOKEN = 315,
PARS_ON_TOKEN = 316,
PARS_ASSIGN_TOKEN = 317,
PARS_DECLARE_TOKEN = 318,
PARS_CURSOR_TOKEN = 319,
PARS_SQL_TOKEN = 320,
PARS_OPEN_TOKEN = 321,
PARS_FETCH_TOKEN = 322,
PARS_CLOSE_TOKEN = 323,
PARS_NOTFOUND_TOKEN = 324,
PARS_TO_CHAR_TOKEN = 325,
PARS_TO_NUMBER_TOKEN = 326,
PARS_TO_BINARY_TOKEN = 327,
PARS_BINARY_TO_NUMBER_TOKEN = 328,
PARS_SUBSTR_TOKEN = 329,
PARS_REPLSTR_TOKEN = 330,
PARS_CONCAT_TOKEN = 331,
PARS_INSTR_TOKEN = 332,
PARS_LENGTH_TOKEN = 333,
PARS_SYSDATE_TOKEN = 334,
PARS_PRINTF_TOKEN = 335,
PARS_ASSERT_TOKEN = 336,
PARS_RND_TOKEN = 337,
PARS_RND_STR_TOKEN = 338,
PARS_ROW_PRINTF_TOKEN = 339,
PARS_COMMIT_TOKEN = 340,
PARS_ROLLBACK_TOKEN = 341,
PARS_WORK_TOKEN = 342,
NEG = 343
};
#endif #endif
#define PARS_INT_LIT 257 #define PARS_INT_LIT 258
#define PARS_FLOAT_LIT 258 #define PARS_FLOAT_LIT 259
#define PARS_STR_LIT 259 #define PARS_STR_LIT 260
#define PARS_NULL_LIT 260 #define PARS_NULL_LIT 261
#define PARS_ID_TOKEN 261 #define PARS_ID_TOKEN 262
#define PARS_AND_TOKEN 262 #define PARS_AND_TOKEN 263
#define PARS_OR_TOKEN 263 #define PARS_OR_TOKEN 264
#define PARS_NOT_TOKEN 264 #define PARS_NOT_TOKEN 265
#define PARS_GE_TOKEN 265 #define PARS_GE_TOKEN 266
#define PARS_LE_TOKEN 266 #define PARS_LE_TOKEN 267
#define PARS_NE_TOKEN 267 #define PARS_NE_TOKEN 268
#define PARS_PROCEDURE_TOKEN 268 #define PARS_PROCEDURE_TOKEN 269
#define PARS_IN_TOKEN 269 #define PARS_IN_TOKEN 270
#define PARS_OUT_TOKEN 270 #define PARS_OUT_TOKEN 271
#define PARS_INT_TOKEN 271 #define PARS_BINARY_TOKEN 272
#define PARS_INTEGER_TOKEN 272 #define PARS_BLOB_TOKEN 273
#define PARS_FLOAT_TOKEN 273 #define PARS_INT_TOKEN 274
#define PARS_CHAR_TOKEN 274 #define PARS_INTEGER_TOKEN 275
#define PARS_IS_TOKEN 275 #define PARS_FLOAT_TOKEN 276
#define PARS_BEGIN_TOKEN 276 #define PARS_CHAR_TOKEN 277
#define PARS_END_TOKEN 277 #define PARS_IS_TOKEN 278
#define PARS_IF_TOKEN 278 #define PARS_BEGIN_TOKEN 279
#define PARS_THEN_TOKEN 279 #define PARS_END_TOKEN 280
#define PARS_ELSE_TOKEN 280 #define PARS_IF_TOKEN 281
#define PARS_ELSIF_TOKEN 281 #define PARS_THEN_TOKEN 282
#define PARS_LOOP_TOKEN 282 #define PARS_ELSE_TOKEN 283
#define PARS_WHILE_TOKEN 283 #define PARS_ELSIF_TOKEN 284
#define PARS_RETURN_TOKEN 284 #define PARS_LOOP_TOKEN 285
#define PARS_SELECT_TOKEN 285 #define PARS_WHILE_TOKEN 286
#define PARS_SUM_TOKEN 286 #define PARS_RETURN_TOKEN 287
#define PARS_COUNT_TOKEN 287 #define PARS_SELECT_TOKEN 288
#define PARS_DISTINCT_TOKEN 288 #define PARS_SUM_TOKEN 289
#define PARS_FROM_TOKEN 289 #define PARS_COUNT_TOKEN 290
#define PARS_WHERE_TOKEN 290 #define PARS_DISTINCT_TOKEN 291
#define PARS_FOR_TOKEN 291 #define PARS_FROM_TOKEN 292
#define PARS_DDOT_TOKEN 292 #define PARS_WHERE_TOKEN 293
#define PARS_CONSISTENT_TOKEN 293 #define PARS_FOR_TOKEN 294
#define PARS_READ_TOKEN 294 #define PARS_DDOT_TOKEN 295
#define PARS_ORDER_TOKEN 295 #define PARS_CONSISTENT_TOKEN 296
#define PARS_BY_TOKEN 296 #define PARS_READ_TOKEN 297
#define PARS_ASC_TOKEN 297 #define PARS_ORDER_TOKEN 298
#define PARS_DESC_TOKEN 298 #define PARS_BY_TOKEN 299
#define PARS_INSERT_TOKEN 299 #define PARS_ASC_TOKEN 300
#define PARS_INTO_TOKEN 300 #define PARS_DESC_TOKEN 301
#define PARS_VALUES_TOKEN 301 #define PARS_INSERT_TOKEN 302
#define PARS_UPDATE_TOKEN 302 #define PARS_INTO_TOKEN 303
#define PARS_SET_TOKEN 303 #define PARS_VALUES_TOKEN 304
#define PARS_DELETE_TOKEN 304 #define PARS_UPDATE_TOKEN 305
#define PARS_CURRENT_TOKEN 305 #define PARS_SET_TOKEN 306
#define PARS_OF_TOKEN 306 #define PARS_DELETE_TOKEN 307
#define PARS_CREATE_TOKEN 307 #define PARS_CURRENT_TOKEN 308
#define PARS_TABLE_TOKEN 308 #define PARS_OF_TOKEN 309
#define PARS_INDEX_TOKEN 309 #define PARS_CREATE_TOKEN 310
#define PARS_UNIQUE_TOKEN 310 #define PARS_TABLE_TOKEN 311
#define PARS_CLUSTERED_TOKEN 311 #define PARS_INDEX_TOKEN 312
#define PARS_DOES_NOT_FIT_IN_MEM_TOKEN 312 #define PARS_UNIQUE_TOKEN 313
#define PARS_ON_TOKEN 313 #define PARS_CLUSTERED_TOKEN 314
#define PARS_ASSIGN_TOKEN 314 #define PARS_DOES_NOT_FIT_IN_MEM_TOKEN 315
#define PARS_DECLARE_TOKEN 315 #define PARS_ON_TOKEN 316
#define PARS_CURSOR_TOKEN 316 #define PARS_ASSIGN_TOKEN 317
#define PARS_SQL_TOKEN 317 #define PARS_DECLARE_TOKEN 318
#define PARS_OPEN_TOKEN 318 #define PARS_CURSOR_TOKEN 319
#define PARS_FETCH_TOKEN 319 #define PARS_SQL_TOKEN 320
#define PARS_CLOSE_TOKEN 320 #define PARS_OPEN_TOKEN 321
#define PARS_NOTFOUND_TOKEN 321 #define PARS_FETCH_TOKEN 322
#define PARS_TO_CHAR_TOKEN 322 #define PARS_CLOSE_TOKEN 323
#define PARS_TO_NUMBER_TOKEN 323 #define PARS_NOTFOUND_TOKEN 324
#define PARS_TO_BINARY_TOKEN 324 #define PARS_TO_CHAR_TOKEN 325
#define PARS_BINARY_TO_NUMBER_TOKEN 325 #define PARS_TO_NUMBER_TOKEN 326
#define PARS_SUBSTR_TOKEN 326 #define PARS_TO_BINARY_TOKEN 327
#define PARS_REPLSTR_TOKEN 327 #define PARS_BINARY_TO_NUMBER_TOKEN 328
#define PARS_CONCAT_TOKEN 328 #define PARS_SUBSTR_TOKEN 329
#define PARS_INSTR_TOKEN 329 #define PARS_REPLSTR_TOKEN 330
#define PARS_LENGTH_TOKEN 330 #define PARS_CONCAT_TOKEN 331
#define PARS_SYSDATE_TOKEN 331 #define PARS_INSTR_TOKEN 332
#define PARS_PRINTF_TOKEN 332 #define PARS_LENGTH_TOKEN 333
#define PARS_ASSERT_TOKEN 333 #define PARS_SYSDATE_TOKEN 334
#define PARS_RND_TOKEN 334 #define PARS_PRINTF_TOKEN 335
#define PARS_RND_STR_TOKEN 335 #define PARS_ASSERT_TOKEN 336
#define PARS_ROW_PRINTF_TOKEN 336 #define PARS_RND_TOKEN 337
#define PARS_COMMIT_TOKEN 337 #define PARS_RND_STR_TOKEN 338
#define PARS_ROLLBACK_TOKEN 338 #define PARS_ROW_PRINTF_TOKEN 339
#define PARS_WORK_TOKEN 339 #define PARS_COMMIT_TOKEN 340
#define NEG 340 #define PARS_ROLLBACK_TOKEN 341
#define PARS_WORK_TOKEN 342
#define NEG 343
#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
typedef int YYSTYPE;
# define yystype YYSTYPE /* obsolescent; will be withdrawn */
# define YYSTYPE_IS_DECLARED 1
# define YYSTYPE_IS_TRIVIAL 1
#endif
extern YYSTYPE yylval; extern YYSTYPE yylval;
...@@ -46,6 +46,8 @@ extern pars_res_word_t pars_rnd_str_token; ...@@ -46,6 +46,8 @@ extern pars_res_word_t pars_rnd_str_token;
extern pars_res_word_t pars_count_token; extern pars_res_word_t pars_count_token;
extern pars_res_word_t pars_sum_token; extern pars_res_word_t pars_sum_token;
extern pars_res_word_t pars_distinct_token; extern pars_res_word_t pars_distinct_token;
extern pars_res_word_t pars_binary_token;
extern pars_res_word_t pars_blob_token;
extern pars_res_word_t pars_int_token; extern pars_res_word_t pars_int_token;
extern pars_res_word_t pars_char_token; extern pars_res_word_t pars_char_token;
extern pars_res_word_t pars_float_token; extern pars_res_word_t pars_float_token;
...@@ -336,10 +338,13 @@ Parses a column definition at a table creation. */ ...@@ -336,10 +338,13 @@ Parses a column definition at a table creation. */
sym_node_t* sym_node_t*
pars_column_def( pars_column_def(
/*============*/ /*============*/
/* out: column sym table node */ /* out: column sym table
sym_node_t* sym_node, /* in: column node in the symbol node */
table */ sym_node_t* sym_node, /* in: column node in the
pars_res_word_t* type); /* in: data type */ symbol table */
pars_res_word_t* type, /* in: data type */
sym_node_t* len); /* in: length of column, or
NULL */
/************************************************************************* /*************************************************************************
Parses a table creation operation. */ Parses a table creation operation. */
......
This diff is collapsed.
This diff is collapsed.
#ifndef YYSTYPE /* A Bison parser, made by GNU Bison 1.875d. */
#define YYSTYPE int
/* Skeleton parser for Yacc-like parsing with Bison,
Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
/* As a special exception, when this file is copied by Bison into a
Bison output file, you may use that output file without restriction.
This special exception was added by the Free Software Foundation
in version 1.24 of Bison. */
/* Tokens. */
#ifndef YYTOKENTYPE
# define YYTOKENTYPE
/* Put the tokens into the symbol table, so that GDB and other debuggers
know about them. */
enum yytokentype {
PARS_INT_LIT = 258,
PARS_FLOAT_LIT = 259,
PARS_STR_LIT = 260,
PARS_NULL_LIT = 261,
PARS_ID_TOKEN = 262,
PARS_AND_TOKEN = 263,
PARS_OR_TOKEN = 264,
PARS_NOT_TOKEN = 265,
PARS_GE_TOKEN = 266,
PARS_LE_TOKEN = 267,
PARS_NE_TOKEN = 268,
PARS_PROCEDURE_TOKEN = 269,
PARS_IN_TOKEN = 270,
PARS_OUT_TOKEN = 271,
PARS_BINARY_TOKEN = 272,
PARS_BLOB_TOKEN = 273,
PARS_INT_TOKEN = 274,
PARS_INTEGER_TOKEN = 275,
PARS_FLOAT_TOKEN = 276,
PARS_CHAR_TOKEN = 277,
PARS_IS_TOKEN = 278,
PARS_BEGIN_TOKEN = 279,
PARS_END_TOKEN = 280,
PARS_IF_TOKEN = 281,
PARS_THEN_TOKEN = 282,
PARS_ELSE_TOKEN = 283,
PARS_ELSIF_TOKEN = 284,
PARS_LOOP_TOKEN = 285,
PARS_WHILE_TOKEN = 286,
PARS_RETURN_TOKEN = 287,
PARS_SELECT_TOKEN = 288,
PARS_SUM_TOKEN = 289,
PARS_COUNT_TOKEN = 290,
PARS_DISTINCT_TOKEN = 291,
PARS_FROM_TOKEN = 292,
PARS_WHERE_TOKEN = 293,
PARS_FOR_TOKEN = 294,
PARS_DDOT_TOKEN = 295,
PARS_CONSISTENT_TOKEN = 296,
PARS_READ_TOKEN = 297,
PARS_ORDER_TOKEN = 298,
PARS_BY_TOKEN = 299,
PARS_ASC_TOKEN = 300,
PARS_DESC_TOKEN = 301,
PARS_INSERT_TOKEN = 302,
PARS_INTO_TOKEN = 303,
PARS_VALUES_TOKEN = 304,
PARS_UPDATE_TOKEN = 305,
PARS_SET_TOKEN = 306,
PARS_DELETE_TOKEN = 307,
PARS_CURRENT_TOKEN = 308,
PARS_OF_TOKEN = 309,
PARS_CREATE_TOKEN = 310,
PARS_TABLE_TOKEN = 311,
PARS_INDEX_TOKEN = 312,
PARS_UNIQUE_TOKEN = 313,
PARS_CLUSTERED_TOKEN = 314,
PARS_DOES_NOT_FIT_IN_MEM_TOKEN = 315,
PARS_ON_TOKEN = 316,
PARS_ASSIGN_TOKEN = 317,
PARS_DECLARE_TOKEN = 318,
PARS_CURSOR_TOKEN = 319,
PARS_SQL_TOKEN = 320,
PARS_OPEN_TOKEN = 321,
PARS_FETCH_TOKEN = 322,
PARS_CLOSE_TOKEN = 323,
PARS_NOTFOUND_TOKEN = 324,
PARS_TO_CHAR_TOKEN = 325,
PARS_TO_NUMBER_TOKEN = 326,
PARS_TO_BINARY_TOKEN = 327,
PARS_BINARY_TO_NUMBER_TOKEN = 328,
PARS_SUBSTR_TOKEN = 329,
PARS_REPLSTR_TOKEN = 330,
PARS_CONCAT_TOKEN = 331,
PARS_INSTR_TOKEN = 332,
PARS_LENGTH_TOKEN = 333,
PARS_SYSDATE_TOKEN = 334,
PARS_PRINTF_TOKEN = 335,
PARS_ASSERT_TOKEN = 336,
PARS_RND_TOKEN = 337,
PARS_RND_STR_TOKEN = 338,
PARS_ROW_PRINTF_TOKEN = 339,
PARS_COMMIT_TOKEN = 340,
PARS_ROLLBACK_TOKEN = 341,
PARS_WORK_TOKEN = 342,
NEG = 343
};
#endif #endif
#define PARS_INT_LIT 257 #define PARS_INT_LIT 258
#define PARS_FLOAT_LIT 258 #define PARS_FLOAT_LIT 259
#define PARS_STR_LIT 259 #define PARS_STR_LIT 260
#define PARS_NULL_LIT 260 #define PARS_NULL_LIT 261
#define PARS_ID_TOKEN 261 #define PARS_ID_TOKEN 262
#define PARS_AND_TOKEN 262 #define PARS_AND_TOKEN 263
#define PARS_OR_TOKEN 263 #define PARS_OR_TOKEN 264
#define PARS_NOT_TOKEN 264 #define PARS_NOT_TOKEN 265
#define PARS_GE_TOKEN 265 #define PARS_GE_TOKEN 266
#define PARS_LE_TOKEN 266 #define PARS_LE_TOKEN 267
#define PARS_NE_TOKEN 267 #define PARS_NE_TOKEN 268
#define PARS_PROCEDURE_TOKEN 268 #define PARS_PROCEDURE_TOKEN 269
#define PARS_IN_TOKEN 269 #define PARS_IN_TOKEN 270
#define PARS_OUT_TOKEN 270 #define PARS_OUT_TOKEN 271
#define PARS_INT_TOKEN 271 #define PARS_BINARY_TOKEN 272
#define PARS_INTEGER_TOKEN 272 #define PARS_BLOB_TOKEN 273
#define PARS_FLOAT_TOKEN 273 #define PARS_INT_TOKEN 274
#define PARS_CHAR_TOKEN 274 #define PARS_INTEGER_TOKEN 275
#define PARS_IS_TOKEN 275 #define PARS_FLOAT_TOKEN 276
#define PARS_BEGIN_TOKEN 276 #define PARS_CHAR_TOKEN 277
#define PARS_END_TOKEN 277 #define PARS_IS_TOKEN 278
#define PARS_IF_TOKEN 278 #define PARS_BEGIN_TOKEN 279
#define PARS_THEN_TOKEN 279 #define PARS_END_TOKEN 280
#define PARS_ELSE_TOKEN 280 #define PARS_IF_TOKEN 281
#define PARS_ELSIF_TOKEN 281 #define PARS_THEN_TOKEN 282
#define PARS_LOOP_TOKEN 282 #define PARS_ELSE_TOKEN 283
#define PARS_WHILE_TOKEN 283 #define PARS_ELSIF_TOKEN 284
#define PARS_RETURN_TOKEN 284 #define PARS_LOOP_TOKEN 285
#define PARS_SELECT_TOKEN 285 #define PARS_WHILE_TOKEN 286
#define PARS_SUM_TOKEN 286 #define PARS_RETURN_TOKEN 287
#define PARS_COUNT_TOKEN 287 #define PARS_SELECT_TOKEN 288
#define PARS_DISTINCT_TOKEN 288 #define PARS_SUM_TOKEN 289
#define PARS_FROM_TOKEN 289 #define PARS_COUNT_TOKEN 290
#define PARS_WHERE_TOKEN 290 #define PARS_DISTINCT_TOKEN 291
#define PARS_FOR_TOKEN 291 #define PARS_FROM_TOKEN 292
#define PARS_DDOT_TOKEN 292 #define PARS_WHERE_TOKEN 293
#define PARS_CONSISTENT_TOKEN 293 #define PARS_FOR_TOKEN 294
#define PARS_READ_TOKEN 294 #define PARS_DDOT_TOKEN 295
#define PARS_ORDER_TOKEN 295 #define PARS_CONSISTENT_TOKEN 296
#define PARS_BY_TOKEN 296 #define PARS_READ_TOKEN 297
#define PARS_ASC_TOKEN 297 #define PARS_ORDER_TOKEN 298
#define PARS_DESC_TOKEN 298 #define PARS_BY_TOKEN 299
#define PARS_INSERT_TOKEN 299 #define PARS_ASC_TOKEN 300
#define PARS_INTO_TOKEN 300 #define PARS_DESC_TOKEN 301
#define PARS_VALUES_TOKEN 301 #define PARS_INSERT_TOKEN 302
#define PARS_UPDATE_TOKEN 302 #define PARS_INTO_TOKEN 303
#define PARS_SET_TOKEN 303 #define PARS_VALUES_TOKEN 304
#define PARS_DELETE_TOKEN 304 #define PARS_UPDATE_TOKEN 305
#define PARS_CURRENT_TOKEN 305 #define PARS_SET_TOKEN 306
#define PARS_OF_TOKEN 306 #define PARS_DELETE_TOKEN 307
#define PARS_CREATE_TOKEN 307 #define PARS_CURRENT_TOKEN 308
#define PARS_TABLE_TOKEN 308 #define PARS_OF_TOKEN 309
#define PARS_INDEX_TOKEN 309 #define PARS_CREATE_TOKEN 310
#define PARS_UNIQUE_TOKEN 310 #define PARS_TABLE_TOKEN 311
#define PARS_CLUSTERED_TOKEN 311 #define PARS_INDEX_TOKEN 312
#define PARS_DOES_NOT_FIT_IN_MEM_TOKEN 312 #define PARS_UNIQUE_TOKEN 313
#define PARS_ON_TOKEN 313 #define PARS_CLUSTERED_TOKEN 314
#define PARS_ASSIGN_TOKEN 314 #define PARS_DOES_NOT_FIT_IN_MEM_TOKEN 315
#define PARS_DECLARE_TOKEN 315 #define PARS_ON_TOKEN 316
#define PARS_CURSOR_TOKEN 316 #define PARS_ASSIGN_TOKEN 317
#define PARS_SQL_TOKEN 317 #define PARS_DECLARE_TOKEN 318
#define PARS_OPEN_TOKEN 318 #define PARS_CURSOR_TOKEN 319
#define PARS_FETCH_TOKEN 319 #define PARS_SQL_TOKEN 320
#define PARS_CLOSE_TOKEN 320 #define PARS_OPEN_TOKEN 321
#define PARS_NOTFOUND_TOKEN 321 #define PARS_FETCH_TOKEN 322
#define PARS_TO_CHAR_TOKEN 322 #define PARS_CLOSE_TOKEN 323
#define PARS_TO_NUMBER_TOKEN 323 #define PARS_NOTFOUND_TOKEN 324
#define PARS_TO_BINARY_TOKEN 324 #define PARS_TO_CHAR_TOKEN 325
#define PARS_BINARY_TO_NUMBER_TOKEN 325 #define PARS_TO_NUMBER_TOKEN 326
#define PARS_SUBSTR_TOKEN 326 #define PARS_TO_BINARY_TOKEN 327
#define PARS_REPLSTR_TOKEN 327 #define PARS_BINARY_TO_NUMBER_TOKEN 328
#define PARS_CONCAT_TOKEN 328 #define PARS_SUBSTR_TOKEN 329
#define PARS_INSTR_TOKEN 329 #define PARS_REPLSTR_TOKEN 330
#define PARS_LENGTH_TOKEN 330 #define PARS_CONCAT_TOKEN 331
#define PARS_SYSDATE_TOKEN 331 #define PARS_INSTR_TOKEN 332
#define PARS_PRINTF_TOKEN 332 #define PARS_LENGTH_TOKEN 333
#define PARS_ASSERT_TOKEN 333 #define PARS_SYSDATE_TOKEN 334
#define PARS_RND_TOKEN 334 #define PARS_PRINTF_TOKEN 335
#define PARS_RND_STR_TOKEN 335 #define PARS_ASSERT_TOKEN 336
#define PARS_ROW_PRINTF_TOKEN 336 #define PARS_RND_TOKEN 337
#define PARS_COMMIT_TOKEN 337 #define PARS_RND_STR_TOKEN 338
#define PARS_ROLLBACK_TOKEN 338 #define PARS_ROW_PRINTF_TOKEN 339
#define PARS_WORK_TOKEN 339 #define PARS_COMMIT_TOKEN 340
#define NEG 340 #define PARS_ROLLBACK_TOKEN 341
#define PARS_WORK_TOKEN 342
#define NEG 343
#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
typedef int YYSTYPE;
# define yystype YYSTYPE /* obsolescent; will be withdrawn */
# define YYSTYPE_IS_DECLARED 1
# define YYSTYPE_IS_TRIVIAL 1
#endif
extern YYSTYPE yylval; extern YYSTYPE yylval;
...@@ -44,6 +44,8 @@ yylex(void); ...@@ -44,6 +44,8 @@ yylex(void);
%token PARS_PROCEDURE_TOKEN %token PARS_PROCEDURE_TOKEN
%token PARS_IN_TOKEN %token PARS_IN_TOKEN
%token PARS_OUT_TOKEN %token PARS_OUT_TOKEN
%token PARS_BINARY_TOKEN
%token PARS_BLOB_TOKEN
%token PARS_INT_TOKEN %token PARS_INT_TOKEN
%token PARS_INTEGER_TOKEN %token PARS_INTEGER_TOKEN
%token PARS_FLOAT_TOKEN %token PARS_FLOAT_TOKEN
...@@ -448,7 +450,8 @@ fetch_statement: ...@@ -448,7 +450,8 @@ fetch_statement:
; ;
column_def: column_def:
PARS_ID_TOKEN type_name { $$ = pars_column_def($1, $2); } PARS_ID_TOKEN type_name opt_column_len
{ $$ = pars_column_def($1, $2, $3); }
; ;
column_def_list: column_def_list:
...@@ -457,6 +460,11 @@ column_def_list: ...@@ -457,6 +460,11 @@ column_def_list:
{ $$ = que_node_list_add_last($1, $3); } { $$ = que_node_list_add_last($1, $3); }
; ;
opt_column_len:
/* Nothing */ { $$ = NULL; }
| '(' PARS_INT_LIT ')'
{ $$ = $2; }
not_fit_in_memory: not_fit_in_memory:
/* Nothing */ { $$ = NULL; } /* Nothing */ { $$ = NULL; }
| PARS_DOES_NOT_FIT_IN_MEM_TOKEN | PARS_DOES_NOT_FIT_IN_MEM_TOKEN
...@@ -507,6 +515,8 @@ rollback_statement: ...@@ -507,6 +515,8 @@ rollback_statement:
type_name: type_name:
PARS_INT_TOKEN { $$ = &pars_int_token; } PARS_INT_TOKEN { $$ = &pars_int_token; }
| PARS_CHAR_TOKEN { $$ = &pars_char_token; } | PARS_CHAR_TOKEN { $$ = &pars_char_token; }
| PARS_BINARY_TOKEN { $$ = &pars_binary_token; }
| PARS_BLOB_TOKEN { $$ = &pars_blob_token; }
; ;
parameter_declaration: parameter_declaration:
......
...@@ -26,12 +26,10 @@ How to make the InnoDB parser and lexer C files: ...@@ -26,12 +26,10 @@ How to make the InnoDB parser and lexer C files:
5. Rename lex.yy.c to lexyy.c. 5. Rename lex.yy.c to lexyy.c.
6. Remove the #include of unistd.h from about line 2500 of lexyy.c 6. Add '#include "univ.i"' before #include <stdio.h> in lexyy.c
7. Add '#include "univ.i"' before #include <stdio.h> in lexyy.c
(Needed for AIX) (Needed for AIX)
8. Add a type cast to int to the assignment below the comment 7. Add a type cast to int to the assignment below the comment
'need more input.' (Removes a warning on Win64) 'need more input.' (Removes a warning on Win64)
These instructions seem to work at least with bison-1.28 and flex-2.5.4 on These instructions seem to work at least with bison-1.28 and flex-2.5.4 on
...@@ -50,6 +48,7 @@ Linux. ...@@ -50,6 +48,7 @@ Linux.
%option noyy_scan_buffer %option noyy_scan_buffer
%option noyy_scan_bytes %option noyy_scan_bytes
%option noyy_scan_string %option noyy_scan_string
%option nounistd
%{ %{
#define YYSTYPE que_node_t* #define YYSTYPE que_node_t*
...@@ -191,6 +190,14 @@ In the state 'quoted', only two actions are possible (defined below). */ ...@@ -191,6 +190,14 @@ In the state 'quoted', only two actions are possible (defined below). */
return(PARS_OUT_TOKEN); return(PARS_OUT_TOKEN);
} }
"BINARY" {
return(PARS_BINARY_TOKEN);
}
"BLOB" {
return(PARS_BLOB_TOKEN);
}
"INT" { "INT" {
return(PARS_INT_TOKEN); return(PARS_INT_TOKEN);
} }
......
...@@ -62,6 +62,8 @@ pars_res_word_t pars_rnd_str_token = {PARS_RND_STR_TOKEN}; ...@@ -62,6 +62,8 @@ pars_res_word_t pars_rnd_str_token = {PARS_RND_STR_TOKEN};
pars_res_word_t pars_count_token = {PARS_COUNT_TOKEN}; pars_res_word_t pars_count_token = {PARS_COUNT_TOKEN};
pars_res_word_t pars_sum_token = {PARS_SUM_TOKEN}; pars_res_word_t pars_sum_token = {PARS_SUM_TOKEN};
pars_res_word_t pars_distinct_token = {PARS_DISTINCT_TOKEN}; pars_res_word_t pars_distinct_token = {PARS_DISTINCT_TOKEN};
pars_res_word_t pars_binary_token = {PARS_BINARY_TOKEN};
pars_res_word_t pars_blob_token = {PARS_BLOB_TOKEN};
pars_res_word_t pars_int_token = {PARS_INT_TOKEN}; pars_res_word_t pars_int_token = {PARS_INT_TOKEN};
pars_res_word_t pars_char_token = {PARS_CHAR_TOKEN}; pars_res_word_t pars_char_token = {PARS_CHAR_TOKEN};
pars_res_word_t pars_float_token = {PARS_FLOAT_TOKEN}; pars_res_word_t pars_float_token = {PARS_FLOAT_TOKEN};
...@@ -1079,16 +1081,37 @@ void ...@@ -1079,16 +1081,37 @@ void
pars_set_dfield_type( pars_set_dfield_type(
/*=================*/ /*=================*/
dfield_t* dfield, /* in: dfield */ dfield_t* dfield, /* in: dfield */
pars_res_word_t* type) /* in: pointer to a type token */ pars_res_word_t* type, /* in: pointer to a type token */
ulint len) /* in: length, or 0 */
{ {
if (type == &pars_int_token) { if (type == &pars_int_token) {
if (len != 0) {
ut_error;
}
dtype_set(dfield_get_type(dfield), DATA_INT, 0, 4, 0); dtype_set(dfield_get_type(dfield), DATA_INT, 0, 4, 0);
} else if (type == &pars_char_token) { } else if (type == &pars_char_token) {
if (len != 0) {
ut_error;
}
dtype_set(dfield_get_type(dfield), DATA_VARCHAR, dtype_set(dfield_get_type(dfield), DATA_VARCHAR,
DATA_ENGLISH, 0, 0); DATA_ENGLISH, 0, 0);
} else if (type == &pars_binary_token) {
if (len == 0) {
ut_error;
}
dtype_set(dfield_get_type(dfield), DATA_FIXBINARY,
DATA_BINARY_TYPE, len, 0);
} else if (type == &pars_blob_token) {
if (len != 0) {
ut_error;
}
dtype_set(dfield_get_type(dfield), DATA_BLOB,
DATA_BINARY_TYPE, 0, 0);
} else { } else {
ut_error; ut_error;
} }
...@@ -1111,7 +1134,7 @@ pars_variable_declaration( ...@@ -1111,7 +1134,7 @@ pars_variable_declaration(
node->param_type = PARS_NOT_PARAM; node->param_type = PARS_NOT_PARAM;
pars_set_dfield_type(que_node_get_val(node), type); pars_set_dfield_type(que_node_get_val(node), type, 0);
return(node); return(node);
} }
...@@ -1475,12 +1498,23 @@ Parses a column definition at a table creation. */ ...@@ -1475,12 +1498,23 @@ Parses a column definition at a table creation. */
sym_node_t* sym_node_t*
pars_column_def( pars_column_def(
/*============*/ /*============*/
/* out: column sym table node */ /* out: column sym table
sym_node_t* sym_node, /* in: column node in the symbol node */
table */ sym_node_t* sym_node, /* in: column node in the
pars_res_word_t* type) /* in: data type */ symbol table */
pars_res_word_t* type, /* in: data type */
sym_node_t* len) /* in: length of column, or
NULL */
{ {
pars_set_dfield_type(que_node_get_val(sym_node), type); ulint len2;
if (len) {
len2 = eval_node_get_int_val(len);
} else {
len2 = 0;
}
pars_set_dfield_type(que_node_get_val(sym_node), type, len2);
return(sym_node); return(sym_node);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment