parse.c.preserve
上传用户:dgyhgb
上传日期:2007-01-07
资源大小:676k
文件大小:100k
源码类别:

SQL Server

开发平台:

Unix_Linux

  1. /*  A Bison parser, made from parse.y with Bison version GNU Bison version 1.21
  2.   */
  3. #define YYBISON 1  /* Identify Bison output.  */
  4. #define YYLSP_NEEDED
  5. #define TOK_ALL 258
  6. #define TOK_ALTER 259
  7. #define TOK_ANY 260
  8. #define TOK_AS 261
  9. #define TOK_ASC 262
  10. #define TOK_AUTHORIZATION 263
  11. #define TOK_BEGIN 264
  12. #define TOK_BETWEEN 265
  13. #define TOK_BY 266
  14. #define TOK_CHECK 267
  15. #define TOK_CLOSE 268
  16. #define TOK_COBOL_LANG 269
  17. #define TOK_C_LANG 270
  18. #define TOK_COMMIT 271
  19. #define TOK_CONTINUE 272
  20. #define TOK_CREATE 273
  21. #define TOK_CURRENT 274
  22. #define TOK_CURSOR 275
  23. #define TOK_DECLARE 276
  24. #define TOK_DEFAULT 277
  25. #define TOK_DELETE 278
  26. #define TOK_DESC 279
  27. #define TOK_DISTINCT 280
  28. #define TOK_DROP 281
  29. #define TOK_END 282
  30. #define TOK_ESCAPE 283
  31. #define TOK_EXISTS 284
  32. #define TOK_FETCH 285
  33. #define TOK_FOR 286
  34. #define TOK_FOREIGN 287
  35. #define TOK_FORTRAN_LANG 288
  36. #define TOK_FOUND 289
  37. #define TOK_FROM 290
  38. #define TOK_GOTO 291
  39. #define TOK_GRANT 292
  40. #define TOK_GROUP 293
  41. #define TOK_HAVING 294
  42. #define TOK_IN 295
  43. #define TOK_INDICATOR 296
  44. #define TOK_INSERT 297
  45. #define TOK_INTO 298
  46. #define TOK_IS 299
  47. #define TOK_KEY 300
  48. #define TOK_LANGUAGE 301
  49. #define TOK_LIKE 302
  50. #define TOK_MODULE 303
  51. #define TOK_NULL 304
  52. #define TOK_OF 305
  53. #define TOK_ON 306
  54. #define TOK_OPEN 307
  55. #define TOK_OPTION 308
  56. #define TOK_ORDER 309
  57. #define TOK_PASCAL_LANG 310
  58. #define TOK_PL1_LANG 311
  59. #define TOK_PRIMARY 312
  60. #define TOK_INDEX 313
  61. #define TOK_PRIVILEGES 314
  62. #define TOK_PROCEDURE 315
  63. #define TOK_PUBLIC 316
  64. #define TOK_REFERENCES 317
  65. #define TOK_REVOKE 318
  66. #define TOK_ROLLBACK 319
  67. #define TOK_SCHEMA 320
  68. #define TOK_SECTION 321
  69. #define TOK_SELECT 322
  70. #define TOK_SET 323
  71. #define TOK_SOME 324
  72. #define TOK_SQLCODE 325
  73. #define TOK_SQLERROR 326
  74. #define TOK_TABLE 327
  75. #define TOK_TO 328
  76. #define TOK_UNION 329
  77. #define TOK_UNIQUE 330
  78. #define TOK_UPDATE 331
  79. #define TOK_USER 332
  80. #define TOK_VALUES 333
  81. #define TOK_VIEW 334
  82. #define TOK_WHENEVER 335
  83. #define TOK_WHERE 336
  84. #define TOK_WITH 337
  85. #define TOK_WORK 338
  86. #define TOK_AND 339
  87. #define TOK_OR 340
  88. #define TOK_NOT 341
  89. #define TOK_NE 342
  90. #define TOK_GE 343
  91. #define TOK_LE 344
  92. #define TOK_AVG 345
  93. #define TOK_MAX 346
  94. #define TOK_MIN 347
  95. #define TOK_SUM 348
  96. #define TOK_COUNT 349
  97. #define TOK_IDENTIFIER 350
  98. #define TOK_PARAM 351
  99. #define TOK_INTEGER_CONST 352
  100. #define TOK_NUM_CONST 353
  101. #define TOK_REAL_CONST 354
  102. #define TOK_STRING_CONST 355
  103. #define TOK_T_CHAR 356
  104. #define TOK_T_NUM 357
  105. #define TOK_T_INT 358
  106. #define TOK_T_SINT 359
  107. #define TOK_T_FLT 360
  108. #define TOK_T_DOUBLE 361
  109. #define TOK_T_PRECISION 362
  110. #define TOK_T_REAL 363
  111. #define UNARY 364
  112. #define BRACETS 365
  113. /* 
  114.  *  parse.y   -   SQL grammar (ANSI SQL'89 + some extention) 
  115.  *                of GNU SQL compiler
  116.  *
  117.  *  This file is a part of GNU SQL Server
  118.  *
  119.  *  Copyright (c) 1996, 1997, Free Software Foundation, Inc
  120.  *  Developed at the Institute of System Programming
  121.  *  This file is written by Michael Kimelman.
  122.  * 
  123.  *  This program is free software; you can redistribute it and/or modify
  124.  *  it under the terms of the GNU General Public License as published by
  125.  *  the Free Software Foundation; either version 2 of the License, or
  126.  *  (at your option) any later version.
  127.  *
  128.  *  This program is distributed in the hope that it will be useful,
  129.  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  130.  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  131.  *  GNU General Public License for more details.
  132.  *
  133.  *  You should have received a copy of the GNU General Public License
  134.  *  along with this program; if not, write to the Free Software
  135.  *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  136.  *
  137.  *  Contact:  gss@ispras.ru
  138.  *
  139.  */
  140. /* $Id: parse.y,v 1.245 1997/03/31 03:46:38 kml Exp $ */
  141. #include "trl.h"
  142. #include "tree_gen.h"
  143. #include "cycler.h"
  144. #include "sql_decl.h"
  145. #include "xmem.h"
  146. #include "type_lib.h"
  147. #include "svr_lib.h"
  148. #include <assert.h>
  149. #include "tassert.h"
  150. char *dyn_sql_stmt_name  = NULL;
  151. i4_t   dyn_sql_section_id = 0;
  152. static TN      tblnm;
  153. static i4_t     del_local_vcb    = 0;
  154. static char   *label_nf         = NULL;
  155. static char   *label_er         = NULL;
  156. static i4_t     subquery         = 0;
  157. static TXTREF  new_table        = TNULL;
  158. static i4_t     new_table_col_no = 0;
  159. static call_t  call;
  160. static enum 
  161. {
  162.   Esql,
  163.   Module,
  164.   Schema,
  165.   Dynamic
  166. } parse_mode=Esql;
  167. #ifdef stderr
  168. #  undef stderr
  169. #endif
  170. #ifdef stdout
  171. #  undef stdout
  172. #endif
  173. #define stderr STDERR
  174. #define stdout STDOUT
  175. #define FICTIVE_NODE  (TXTREF)(-1L)
  176. #define FREE_VCB   free_line(LOCAL_VCB_ROOT)
  177. #define YYERROR_VERBOSE
  178. #define YYERROK { new_table = TNULL; yyerrok; }
  179. i4_t yylex (void);
  180. static void   check_not_null __P((TXTREF ind));
  181. static void   free_tail __P((void));
  182. static TXTREF replace_column_holes __P((TXTREF rb,VCBREF tbl));
  183. static void   add_table_column(enum token tbl_code, LTRLREF ltrp,
  184.                                sql_type_t type, TXTREF def,TXTREF constr);
  185. static void   emit_module_proc __P((VCBREF parmlist,LTRLREF procname));
  186. static void   emit_call __P((TXTREF vcb,i4_t object_id, i4_t method_id));
  187. #define add_base_column(ltrp,type,def,constr) 
  188.      add_table_column(TABLE,ltrp,type,def,constr)
  189. #define add_view_column(ltrp,type) 
  190.      add_table_column(VIEW,ltrp,type,TNULL,TNULL)
  191. typedef union {
  192.   LTRLREF  ltrp;
  193.   TXTREF   node;
  194.   i4_t      code;
  195.   sql_type_t     type;
  196.   void     *ptr;
  197. } YYSTYPE;
  198. #ifndef YYLTYPE
  199. typedef
  200.   struct yyltype
  201.     {
  202.       int timestamp;
  203.       int first_line;
  204.       int first_column;
  205.       int last_line;
  206.       int last_column;
  207.       char *text;
  208.    }
  209.   yyltype;
  210. #define YYLTYPE yyltype
  211. #endif
  212. #ifndef YYDEBUG
  213. #define YYDEBUG 1
  214. #endif
  215. #include <stdio.h>
  216. #ifndef __cplusplus
  217. #ifndef __STDC__
  218. #define const
  219. #endif
  220. #endif
  221. #define YYFINAL 482
  222. #define YYFLAG -32768
  223. #define YYNTBASE 123
  224. #define YYTRANSLATE(x) ((unsigned)(x) <= 365 ? yytranslate[x] : 240)
  225. static const char yytranslate[] = {     0,
  226.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  227.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  228.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  229.      2,     2,     2,     2,     2,     2,     2,     2,     2,   117,
  230.    118,   114,   112,   111,   113,   116,   115,     2,     2,     2,
  231.      2,     2,     2,     2,     2,     2,     2,     2,   119,   121,
  232.    120,   122,     2,     2,     2,     2,     2,     2,     2,     2,
  233.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  234.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  235.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  236.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  237.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  238.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  239.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  240.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  241.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  242.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  243.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  244.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  245.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  246.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  247.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  248.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  249.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  250.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  251.      2,     2,     2,     2,     2,     1,     2,     3,     4,     5,
  252.      6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
  253.     16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
  254.     26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
  255.     36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
  256.     46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
  257.     56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
  258.     66,    67,    68,    69,    70,    71,    72,    73,    74,    75,
  259.     76,    77,    78,    79,    80,    81,    82,    83,    84,    85,
  260.     86,    87,    88,    89,    90,    91,    92,    93,    94,    95,
  261.     96,    97,    98,    99,   100,   101,   102,   103,   104,   105,
  262.    106,   107,   108,   109,   110
  263. };
  264. #if YYDEBUG != 0
  265. static const short yyprhs[] = {     0,
  266.      0,     2,     4,     6,     8,    10,    12,    14,    16,    18,
  267.     20,    22,    24,    28,    32,    34,    36,    38,    40,    42,
  268.     45,    51,    53,    57,    59,    61,    66,    67,    70,    72,
  269.     74,    76,    77,    79,    81,    84,    87,    91,    93,    96,
  270.     98,   103,   110,   113,   115,   118,   120,   124,   125,   129,
  271.    131,   135,   138,   145,   146,   150,   152,   154,   162,   163,
  272.    167,   170,   172,   174,   178,   180,   182,   184,   187,   190,
  273.    192,   194,   196,   200,   202,   204,   206,   210,   214,   218,
  274.    221,   223,   225,   228,   232,   235,   238,   240,   243,   246,
  275.    253,   260,   266,   272,   279,   283,   286,   287,   291,   293,
  276.    297,   300,   302,   304,   305,   307,   309,   311,   315,   318,
  277.    320,   322,   324,   326,   328,   330,   332,   334,   336,   338,
  278.    340,   343,   346,   351,   354,   359,   364,   370,   375,   377,
  279.    379,   383,   385,   388,   391,   398,   400,   402,   408,   414,
  280.    416,   420,   424,   426,   428,   430,   432,   437,   439,   443,
  281.    447,   452,   454,   456,   458,   462,   467,   470,   472,   476,
  282.    479,   481,   482,   484,   487,   492,   494,   495,   499,   500,
  283.    503,   505,   509,   513,   517,   520,   523,   526,   530,   533,
  284.    538,   545,   551,   556,   560,   562,   564,   567,   569,   571,
  285.    573,   575,   577,   579,   581,   583,   585,   586,   588,   589,
  286.    592,   594,   598,   602,   604,   608,   615,   620,   622,   624,
  287.    625,   627,   629,   633,   637,   641,   645,   649,   652,   654,
  288.    656,   658,   660,   662,   664,   666,   668,   671,   673,   678,
  289.    684,   690,   696,   698,   700,   702,   704,   706,   708,   710,
  290.    712,   714,   716,   718,   720,   722,   725,   730,   732,   737,
  291.    739,   744,   751,   753,   755,   757,   759,   763,   765,   769,
  292.    771,   775,   781,   783,   787,   789,   791,   793,   797,   800,
  293.    804,   807,   809,   813,   819,   821,   825,   828,   832
  294. };
  295. static const short yyrhs[] = {   126,
  296.      0,   127,     0,   162,     0,   166,     0,   167,     0,   157,
  297.      0,   175,     0,   125,     0,     1,     0,    72,     0,    79,
  298.      0,   194,     0,    26,   124,   231,     0,   128,    65,   165,
  299.      0,   129,     0,   145,     0,   149,     0,    18,     0,     4,
  300.      0,   128,   130,     0,    72,   230,   117,   131,   118,     0,
  301.    132,     0,   131,   111,   132,     0,   133,     0,   139,     0,
  302.     95,   229,   134,   136,     0,     0,    22,   135,     0,    77,
  303.      0,    49,     0,   228,     0,     0,   137,     0,   138,     0,
  304.    137,   138,     0,    86,    49,     0,    86,    49,   141,     0,
  305.    142,     0,    12,   210,     0,   140,     0,   141,   117,   144,
  306.    118,     0,    32,    45,   117,   144,   118,   142,     0,    12,
  307.    210,     0,    75,     0,    57,    45,     0,    58,     0,    62,
  308.    231,   143,     0,     0,   117,   144,   118,     0,    95,     0,
  309.    144,   111,    95,     0,    18,   146,     0,    79,   230,   143,
  310.      6,   196,   147,     0,     0,    82,    12,    53,     0,    37,
  311.      0,    63,     0,   148,   151,    51,   231,    73,   154,   150,
  312.      0,     0,    82,    37,    53,     0,     3,    59,     0,   152,
  313.      0,   153,     0,   152,   111,   153,     0,    67,     0,    42,
  314.      0,    23,     0,    76,   143,     0,    62,   143,     0,   155,
  315.      0,    61,     0,   156,     0,   155,   111,   156,     0,    95,
  316.      0,   158,     0,   159,     0,     9,    21,    66,     0,    27,
  317.     21,    66,     0,    80,   160,   161,     0,    86,    34,     0,
  318.     71,     0,    17,     0,    36,    95,     0,   163,   164,   165,
  319.      0,   163,     1,     0,    48,    95,     0,    48,     0,    46,
  320.     95,     0,     8,    95,     0,    21,    95,    20,    31,   194,
  321.    168,     0,    60,    95,   173,   119,   175,   119,     0,    60,
  322.     95,   119,   175,   119,     0,    60,    95,   119,     1,   119,
  323.      0,    60,    95,   173,   119,     1,   119,     0,    60,     1,
  324.    119,     0,     1,   119,     0,     0,    54,    11,   169,     0,
  325.    170,     0,   169,   111,   170,     0,   171,   172,     0,    97,
  326.      0,   235,     0,     0,     7,     0,    24,     0,   174,     0,
  327.    173,   111,   174,     0,    95,   229,     0,    70,     0,   176,
  328.      0,   177,     0,   178,     0,   179,     0,   180,     0,   181,
  329.      0,   185,     0,   186,     0,   187,     0,   189,     0,    13,
  330.    207,     0,    16,    83,     0,    23,    35,   232,   204,     0,
  331.     23,   206,     0,    23,    35,   232,   206,     0,    30,   207,
  332.     43,   236,     0,    42,    43,   232,   143,   182,     0,    78,
  333.    117,   183,   118,     0,   196,     0,   184,     0,   183,   111,
  334.    184,     0,   193,     0,    52,   207,     0,    64,    83,     0,
  335.     67,   188,   198,    43,   236,   200,     0,   221,     0,    25,
  336.      0,    76,   232,    68,   190,   204,     0,    76,   232,    68,
  337.    190,   206,     0,   191,     0,   190,   111,   191,     0,    95,
  338.    120,   192,     0,   193,     0,   222,     0,    49,     0,   195,
  339.      0,   194,    74,   221,   195,     0,   196,     0,   117,   194,
  340.    118,     0,   117,   197,   118,     0,    67,   188,   198,   200,
  341.      0,   199,     0,   114,     0,   222,     0,   199,   111,   222,
  342.      0,   201,   204,   208,   209,     0,    35,   202,     0,   203,
  343.      0,   202,   111,   203,     0,   231,    95,     0,   231,     0,
  344.      0,   205,     0,    81,   210,     0,    81,    19,    50,   207,
  345.      0,    95,     0,     0,    38,    11,   234,     0,     0,    39,
  346.    210,     0,   211,     0,   117,   210,   118,     0,   210,    85,
  347.    210,     0,   210,    84,   210,     0,    86,   210,     0,     1,
  348.     85,     0,     1,    84,     0,   117,     1,   118,     0,    29,
  349.    219,     0,   235,    44,   215,    49,     0,   222,   215,    10,
  350.    222,    84,   222,     0,   222,   215,    47,   225,   216,     0,
  351.    222,   215,    40,   217,     0,   222,   213,   212,     0,   222,
  352.      0,   219,     0,   214,   219,     0,   120,     0,    87,     0,
  353.    121,     0,   122,     0,    89,     0,    88,     0,     3,     0,
  354.      5,     0,    69,     0,     0,    86,     0,     0,    28,   225,
  355.      0,   219,     0,   117,   218,   118,     0,   117,     1,   118,
  356.      0,   225,     0,   218,   111,   225,     0,   117,    67,   188,
  357.    220,   200,   118,     0,   117,    67,     1,   118,     0,   222,
  358.      0,   114,     0,     0,     3,     0,   224,     0,   117,   222,
  359.    118,     0,   222,   112,   222,     0,   222,   113,   222,     0,
  360.    222,   114,   222,     0,   222,   115,   222,     0,   223,   222,
  361.      0,   112,     0,   113,     0,   239,     0,   228,     0,   226,
  362.      0,    77,     0,   238,     0,   228,     0,   223,   228,     0,
  363.     77,     0,    94,   117,   114,   118,     0,    94,   117,    25,
  364.    235,   118,     0,   227,   117,    25,   235,   118,     0,   227,
  365.    117,   221,   222,   118,     0,    90,     0,    91,     0,    92,
  366.      0,    93,     0,    97,     0,    99,     0,    98,     0,   100,
  367.      0,   101,     0,   104,     0,   103,     0,   108,     0,   106,
  368.      0,   106,   107,     0,   105,   117,    97,   118,     0,   105,
  369.      0,   101,   117,    97,   118,     0,   102,     0,   102,   117,
  370.     97,   118,     0,   102,   117,    97,   111,    97,   118,     0,
  371.    233,     0,   233,     0,   231,     0,    95,     0,    95,   116,
  372.     95,     0,   235,     0,   234,   111,   235,     0,    95,     0,
  373.     95,   116,    95,     0,    95,   116,    95,   116,    95,     0,
  374.    237,     0,   236,   111,   237,     0,   238,     0,    95,     0,
  375.     96,     0,    95,    41,    95,     0,    95,    95,     0,    96,
  376.     41,    96,     0,    96,    96,     0,    95,     0,    95,   116,
  377.     95,     0,    95,   116,    95,   116,    95,     0,    96,     0,
  378.     95,    41,    95,     0,    95,    95,     0,    96,    41,    96,
  379.      0,    96,    96,     0
  380. };
  381. #endif
  382. #if YYDEBUG != 0
  383. static const short yyrline[] = { 0,
  384.    242,   251,   258,   260,   262,   267,   269,   277,   278,   292,
  385.    293,   297,   314,   328,   337,   338,   339,   343,   345,   350,
  386.    360,   380,   382,   387,   388,   392,   401,   402,   407,   412,
  387.    414,   419,   421,   426,   428,   433,   435,   437,   439,   446,
  388.    473,   479,   489,   499,   500,   501,   505,   516,   517,   522,
  389.    526,   533,   544,   599,   600,   604,   606,   611,   647,   648,
  390.    652,   653,   657,   658,   662,   664,   666,   668,   670,   675,
  391.    676,   685,   686,   690,   703,   704,   708,   709,   713,   721,
  392.    722,   726,   727,   736,   738,   747,   749,   754,   768,   788,
  393.    818,   824,   829,   834,   839,   844,   852,   853,   858,   859,
  394.    863,   871,   877,   886,   887,   888,   893,   894,   898,   916,
  395.    943,   970,   971,   972,   973,   974,   975,   976,   977,   978,
  396.    982,   996,  1006,  1013,  1034,  1058,  1082,  1099,  1101,  1106,
  397.   1107,  1111,  1115,  1145,  1155,  1173,  1174,  1178,  1184,  1199,
  398.   1200,  1204,  1213,  1217,  1218,  1226,  1228,  1248,  1249,  1253,
  399.   1257,  1271,  1275,  1282,  1283,  1287,  1305,  1312,  1313,  1317,
  400.   1321,  1328,  1329,  1333,  1340,  1344,  1354,  1355,  1362,  1363,
  401.   1374,  1376,  1378,  1380,  1382,  1390,  1396,  1402,  1411,  1415,
  402.   1420,  1429,  1438,  1446,  1461,  1462,  1463,  1474,  1475,  1476,
  403.   1477,  1478,  1479,  1483,  1484,  1485,  1489,  1490,  1494,  1495,
  404.   1499,  1501,  1503,  1512,  1513,  1517,  1529,  1537,  1541,  1548,
  405.   1549,  1557,  1558,  1559,  1560,  1561,  1562,  1563,  1585,  1586,
  406.   1590,  1591,  1592,  1593,  1598,  1599,  1600,  1619,  1624,  1628,
  407.   1632,  1636,  1643,  1644,  1645,  1646,  1650,  1651,  1652,  1653,
  408.   1657,  1659,  1661,  1663,  1665,  1667,  1669,  1671,  1673,  1675,
  409.   1677,  1679,  1685,  1710,  1727,  1734,  1741,  1751,  1752,  1756,
  410.   1758,  1765,  1775,  1776,  1780,  1791,  1793,  1795,  1799,  1803,
  411.   1807,  1814,  1823,  1830,  1837,  1839,  1843,  1847,  1851
  412. };
  413. static const char * const yytname[] = {   "$","error","$illegal.","TOK_ALL",
  414. "TOK_ALTER","TOK_ANY","TOK_AS","TOK_ASC","TOK_AUTHORIZATION","TOK_BEGIN","TOK_BETWEEN",
  415. "TOK_BY","TOK_CHECK","TOK_CLOSE","TOK_COBOL_LANG","TOK_C_LANG","TOK_COMMIT",
  416. "TOK_CONTINUE","TOK_CREATE","TOK_CURRENT","TOK_CURSOR","TOK_DECLARE","TOK_DEFAULT",
  417. "TOK_DELETE","TOK_DESC","TOK_DISTINCT","TOK_DROP","TOK_END","TOK_ESCAPE","TOK_EXISTS",
  418. "TOK_FETCH","TOK_FOR","TOK_FOREIGN","TOK_FORTRAN_LANG","TOK_FOUND","TOK_FROM",
  419. "TOK_GOTO","TOK_GRANT","TOK_GROUP","TOK_HAVING","TOK_IN","TOK_INDICATOR","TOK_INSERT",
  420. "TOK_INTO","TOK_IS","TOK_KEY","TOK_LANGUAGE","TOK_LIKE","TOK_MODULE","TOK_NULL",
  421. "TOK_OF","TOK_ON","TOK_OPEN","TOK_OPTION","TOK_ORDER","TOK_PASCAL_LANG","TOK_PL1_LANG",
  422. "TOK_PRIMARY","TOK_INDEX","TOK_PRIVILEGES","TOK_PROCEDURE","TOK_PUBLIC","TOK_REFERENCES",
  423. "TOK_REVOKE","TOK_ROLLBACK","TOK_SCHEMA","TOK_SECTION","TOK_SELECT","TOK_SET",
  424. "TOK_SOME","TOK_SQLCODE","TOK_SQLERROR","TOK_TABLE","TOK_TO","TOK_UNION","TOK_UNIQUE",
  425. "TOK_UPDATE","TOK_USER","TOK_VALUES","TOK_VIEW","TOK_WHENEVER","TOK_WHERE","TOK_WITH",
  426. "TOK_WORK","TOK_AND","TOK_OR","TOK_NOT","TOK_NE","TOK_GE","TOK_LE","TOK_AVG",
  427. "TOK_MAX","TOK_MIN","TOK_SUM","TOK_COUNT","TOK_IDENTIFIER","TOK_PARAM","TOK_INTEGER_CONST",
  428. "TOK_NUM_CONST","TOK_REAL_CONST","TOK_STRING_CONST","TOK_T_CHAR","TOK_T_NUM",
  429. "TOK_T_INT","TOK_T_SINT","TOK_T_FLT","TOK_T_DOUBLE","TOK_T_PRECISION","TOK_T_REAL",
  430. "UNARY","BRACETS","','","'+'","'-'","'*'","'/'","'.'","'('","')'","';'","'='",
  431. "'<'","'>'","sql_compiled","tbl_or_view","dynamic","schema_title","schema_element",
  432. "schema_action","basetable","basetable_def","basetableelement_list","basetableelement",
  433. "column_descr","default_clause","def_clause","column_constrts","constr_list",
  434. "column_constr","table_constr","table_constr1","unique_spec","refer_spec","opt_column_name_list",
  435. "column_name_list","view","view_definition","opt_check_option","privilege_action",
  436. "privilege","opt_grant","privileges","operation_list","operation","grantees",
  437. "grantee_list","grantee","embedded_spec","declare_section","exception","exc_cond",
  438. "exc_do","module_header","module_titl","lang_clause","autoriz_clause","cursor",
  439. "procedure","orderby","orderspec_list","orderspec","sort_obj","sort_order","parameter_list",
  440. "parameter","statement","statement_body","close_stmt","commit_stmt","delete_stmt",
  441. "fetch_stmt","insert_stmt","insrt_tail","insertvalue_list","ins_value","open_stmt",
  442. "roll_stmt","select_stmt","select_spec","update_stmt","assignment_list","assignment",
  443. "assign_tail","expr_or_null","queryexpr","queryterm","queryspec","queryspec1",
  444. "selection","expr_list","tableexpr","from","scan_list","scan_desc","where_d",
  445. "where","where_cur","cursor_name","groupby","having","cond","pred","compare_to",
  446. "comp_op","allany","not","esc","inin","atom_list","subquery","result_spec","all",
  447. "expr","sign","prim","atom","funcref","fname","constant","type","table_def",
  448. "table_desc","host_scan","tablename","column_list","column","target_list","target",
  449. "target1","coltar",""
  450. };
  451. #endif
  452. static const short yyr1[] = {     0,
  453.    123,   123,   123,   123,   123,   123,   123,   123,   123,   124,
  454.    124,   125,   125,   126,   127,   127,   127,   128,   128,   129,
  455.    130,   131,   131,   132,   132,   133,   134,   134,   135,   135,
  456.    135,   136,   136,   137,   137,   138,   138,   138,   138,   139,
  457.    140,   140,   140,   141,   141,   141,   142,   143,   143,   144,
  458.    144,   145,   146,   147,   147,   148,   148,   149,   150,   150,
  459.    151,   151,   152,   152,   153,   153,   153,   153,   153,   154,
  460.    154,   155,   155,   156,   157,   157,   158,   158,   159,   160,
  461.    160,   161,   161,   162,   162,   163,   163,   164,   165,   166,
  462.    167,   167,   167,   167,   167,   167,   168,   168,   169,   169,
  463.    170,   171,   171,   172,   172,   172,   173,   173,   174,   174,
  464.    175,   176,   176,   176,   176,   176,   176,   176,   176,   176,
  465.    177,   178,   179,   179,   179,   180,   181,   182,   182,   183,
  466.    183,   184,   185,   186,   187,   188,   188,   189,   189,   190,
  467.    190,   191,   192,   193,   193,   194,   194,   195,   195,   196,
  468.    197,   198,   198,   199,   199,   200,   201,   202,   202,   203,
  469.    203,   204,   204,   205,   206,   207,   208,   208,   209,   209,
  470.    210,   210,   210,   210,   210,   210,   210,   210,   211,   211,
  471.    211,   211,   211,   211,   212,   212,   212,   213,   213,   213,
  472.    213,   213,   213,   214,   214,   214,   215,   215,   216,   216,
  473.    217,   217,   217,   218,   218,   219,   219,   220,   220,   221,
  474.    221,   222,   222,   222,   222,   222,   222,   222,   223,   223,
  475.    224,   224,   224,   224,   225,   225,   225,   225,   226,   226,
  476.    226,   226,   227,   227,   227,   227,   228,   228,   228,   228,
  477.    229,   229,   229,   229,   229,   229,   229,   229,   229,   229,
  478.    229,   229,   230,   231,   232,   233,   233,   234,   234,   235,
  479.    235,   235,   236,   236,   237,   238,   238,   238,   238,   238,
  480.    238,   239,   239,   239,   239,   239,   239,   239,   239
  481. };
  482. static const short yyr2[] = {     0,
  483.      1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
  484.      1,     1,     3,     3,     1,     1,     1,     1,     1,     2,
  485.      5,     1,     3,     1,     1,     4,     0,     2,     1,     1,
  486.      1,     0,     1,     1,     2,     2,     3,     1,     2,     1,
  487.      4,     6,     2,     1,     2,     1,     3,     0,     3,     1,
  488.      3,     2,     6,     0,     3,     1,     1,     7,     0,     3,
  489.      2,     1,     1,     3,     1,     1,     1,     2,     2,     1,
  490.      1,     1,     3,     1,     1,     1,     3,     3,     3,     2,
  491.      1,     1,     2,     3,     2,     2,     1,     2,     2,     6,
  492.      6,     5,     5,     6,     3,     2,     0,     3,     1,     3,
  493.      2,     1,     1,     0,     1,     1,     1,     3,     2,     1,
  494.      1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
  495.      2,     2,     4,     2,     4,     4,     5,     4,     1,     1,
  496.      3,     1,     2,     2,     6,     1,     1,     5,     5,     1,
  497.      3,     3,     1,     1,     1,     1,     4,     1,     3,     3,
  498.      4,     1,     1,     1,     3,     4,     2,     1,     3,     2,
  499.      1,     0,     1,     2,     4,     1,     0,     3,     0,     2,
  500.      1,     3,     3,     3,     2,     2,     2,     3,     2,     4,
  501.      6,     5,     4,     3,     1,     1,     2,     1,     1,     1,
  502.      1,     1,     1,     1,     1,     1,     0,     1,     0,     2,
  503.      1,     3,     3,     1,     3,     6,     4,     1,     1,     0,
  504.      1,     1,     3,     3,     3,     3,     3,     2,     1,     1,
  505.      1,     1,     1,     1,     1,     1,     2,     1,     4,     5,
  506.      5,     5,     1,     1,     1,     1,     1,     1,     1,     1,
  507.      1,     1,     1,     1,     1,     2,     4,     1,     4,     1,
  508.      4,     6,     1,     1,     1,     1,     3,     1,     3,     1,
  509.      3,     5,     1,     3,     1,     1,     1,     3,     2,     3,
  510.      2,     1,     3,     5,     1,     3,     2,     3,     2
  511. };
  512. static const short yydefact[] = {     0,
  513.      9,    19,     0,     0,     0,    18,     0,     0,     0,     0,
  514.      0,    56,     0,    87,     0,     0,    57,     0,   210,     0,
  515.      0,     0,     8,     1,     2,     0,    15,    16,     0,    17,
  516.      6,    75,    76,     3,     0,     4,     5,     7,   111,   112,
  517.    113,   114,   115,   116,   117,   118,   119,   120,    12,   146,
  518.    148,    96,     0,   166,   121,   122,     0,    52,     0,     0,
  519.      0,   124,    10,    11,     0,     0,     0,     0,    86,   133,
  520.      0,     0,   134,   211,   137,     0,   136,   256,   255,     0,
  521.    254,    81,     0,     0,   210,     0,     0,     0,     0,    20,
  522.      0,    67,    66,    48,    65,    48,     0,    62,    63,    85,
  523.      0,     0,   210,    77,    48,   253,     0,   162,     0,    13,
  524.     78,     0,    48,    95,   110,     0,     0,     0,   107,   224,
  525.    233,   234,   235,   236,     0,   272,   275,   237,   239,   238,
  526.    240,   219,   220,   153,     0,     0,   152,   154,     0,   212,
  527.    223,     0,   222,   221,     0,     0,    80,    82,     0,    79,
  528.      0,   149,   150,     0,    14,     0,    61,     0,    69,    68,
  529.      0,     0,    88,    84,     0,     0,     0,     0,   123,   163,
  530.    125,     0,   266,   267,   126,   263,   265,     0,   241,   250,
  531.    243,   242,   248,   245,   244,   109,     0,     0,     0,     0,
  532.      0,     0,   277,     0,     0,   279,     0,     0,     0,     0,
  533.      0,     0,     0,   218,   210,   257,     0,   162,   140,    83,
  534.      0,    89,     0,    50,     0,     0,    64,   147,     0,    97,
  535.      0,     0,     0,   272,     0,   164,   171,   197,     0,   165,
  536.      0,   269,     0,   271,     0,     0,     0,   127,   129,     0,
  537.      0,     0,   246,    93,    92,   108,     0,     0,     0,     0,
  538.    276,   273,   278,   213,     0,   155,   214,   215,   216,   217,
  539.      0,     0,     0,     0,   138,   139,     0,   151,   162,     0,
  540.      0,     0,    46,    44,     0,     0,    22,    24,    25,    40,
  541.      0,     0,    49,     0,    54,     0,    90,   177,   176,     0,
  542.    179,   175,     0,     0,     0,   197,     0,     0,   198,   189,
  543.    193,   192,   188,   190,   191,     0,     0,   197,   268,   270,
  544.    264,     0,     0,     0,     0,    94,    91,   260,     0,   229,
  545.      0,   135,     0,     0,   145,   142,   143,   144,   141,   157,
  546.    158,   161,     0,   167,    43,     0,    45,    27,     0,    21,
  547.      0,    51,    71,    74,    59,    70,    72,     0,    53,     0,
  548.      0,   273,   178,   172,   174,   173,   194,   195,   196,     0,
  549.    184,     0,   186,   185,     0,     0,     0,     0,     0,   130,
  550.    132,   249,     0,   251,   247,     0,   230,   274,   231,   232,
  551.      0,   160,     0,   169,     0,     0,    32,    23,     0,     0,
  552.     58,     0,     0,   102,    98,    99,   104,   103,     0,     0,
  553.      0,   187,     0,     0,   183,   201,   228,     0,   199,   226,
  554.    225,   180,     0,   128,     0,   261,   159,     0,     0,   156,
  555.      0,    30,    29,    28,    31,     0,     0,     0,    26,    33,
  556.     34,    38,    41,     0,    73,    55,     0,   105,   106,   101,
  557.    207,   209,     0,   208,   274,     0,     0,     0,   204,   227,
  558.      0,   182,   131,   252,     0,   168,   258,   170,     0,    39,
  559.     48,    36,    35,    60,   100,     0,   181,   203,     0,   202,
  560.    200,   262,     0,    42,    47,    37,   206,   205,   259,     0,
  561.      0,     0
  562. };
  563. static const short yydefgoto[] = {   480,
  564.     65,    23,    24,    25,    26,    27,    90,   276,   277,   278,
  565.    387,   424,   429,   430,   431,   279,   280,   281,   432,   159,
  566.    215,    28,    58,   349,    29,    30,   391,    97,    98,    99,
  567.    345,   346,   347,    31,    32,    33,    84,   150,    34,    35,
  568.    102,   155,    36,    37,   287,   395,   396,   397,   440,   118,
  569.    119,    38,    39,    40,    41,    42,    43,    44,   238,   369,
  570.    370,    45,    46,    47,    76,    48,   208,   209,   326,   371,
  571.     49,    50,    51,    87,   136,   137,   268,   269,   330,   331,
  572.    169,   170,    62,    55,   384,   420,   226,   227,   361,   306,
  573.    362,   307,   452,   405,   448,   291,   443,    77,   228,   139,
  574.    140,   409,   141,   142,   143,   186,   105,    79,    80,    81,
  575.    456,   229,   175,   176,   411,   144
  576. };
  577. static const short yypact[] = {    24,
  578.    -75,-32768,    35,   -35,    59,    67,    56,    96,   -26,   154,
  579.    -35,-32768,   189,   142,   -35,    37,-32768,   202,   171,   185,
  580.    113,   -36,-32768,-32768,-32768,   170,-32768,-32768,   244,-32768,
  581. -32768,-32768,-32768,-32768,    28,-32768,-32768,-32768,-32768,-32768,
  582. -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,   219,-32768,
  583. -32768,-32768,   248,-32768,-32768,-32768,   185,-32768,   290,   185,
  584.    296,-32768,-32768,-32768,   185,   253,   279,   185,-32768,-32768,
  585.    206,   -27,-32768,-32768,-32768,   372,-32768,   222,-32768,   288,
  586. -32768,-32768,   313,    22,   171,    79,   257,   355,   185,-32768,
  587.    312,-32768,-32768,   262,-32768,   262,   337,   285,-32768,-32768,
  588.    302,   355,   396,-32768,   262,-32768,   369,   320,   362,-32768,
  589. -32768,   155,   262,-32768,-32768,   281,   338,   -62,-32768,-32768,
  590. -32768,-32768,-32768,-32768,   294,    60,     7,-32768,-32768,-32768,
  591. -32768,-32768,-32768,-32768,   411,   370,   305,   317,   411,-32768,
  592. -32768,   333,-32768,-32768,   342,   380,-32768,-32768,   381,-32768,
  593.    372,-32768,-32768,   384,-32768,   363,-32768,   386,-32768,-32768,
  594.    185,   245,-32768,-32768,   365,   477,   365,    66,-32768,-32768,
  595. -32768,   -35,    -6,    23,   376,-32768,-32768,   -48,   398,   399,
  596. -32768,-32768,   405,   418,-32768,-32768,   407,   408,    75,   339,
  597.    -12,   438,-32768,   439,   440,-32768,   280,   155,   411,   411,
  598.    411,   411,   411,-32768,   200,-32768,   419,   -49,-32768,-32768,
  599.    502,-32768,   197,-32768,   135,   465,-32768,-32768,   423,   148,
  600.    224,   424,   121,   -17,   166,   289,-32768,   321,   498,-32768,
  601.    448,-32768,   452,-32768,   155,   434,   482,-32768,-32768,   458,
  602.    459,   460,-32768,-32768,-32768,-32768,   441,   442,   463,   444,
  603. -32768,   443,-32768,-32768,   -21,   317,   263,   263,-32768,-32768,
  604.    463,   411,   327,   380,-32768,-32768,   185,-32768,   483,   121,
  605.    518,   520,-32768,-32768,   281,   177,-32768,-32768,-32768,-32768,
  606.    449,   472,-32768,   111,   486,   558,-32768,-32768,-32768,   503,
  607. -32768,-32768,   476,    63,   164,   432,   121,   121,-32768,-32768,
  608. -32768,-32768,-32768,-32768,-32768,   236,   230,   487,-32768,-32768,
  609. -32768,   327,   454,   179,   456,-32768,-32768,   461,   457,-32768,
  610.    481,-32768,   462,   417,-32768,-32768,-32768,   317,-32768,   467,
  611. -32768,   484,   121,   543,   289,   466,-32768,   560,   197,-32768,
  612.    386,-32768,-32768,-32768,   504,   473,-32768,   573,-32768,   199,
  613.     16,    21,-32768,-32768,-32768,   505,-32768,-32768,-32768,   361,
  614. -32768,   424,-32768,   317,   411,   470,   246,   539,   180,-32768,
  615. -32768,-32768,   493,-32768,-32768,   496,-32768,-32768,-32768,-32768,
  616.    185,-32768,   581,   554,   386,    91,     8,-32768,   239,   557,
  617. -32768,   500,   544,-32768,   485,-32768,   186,-32768,   480,   400,
  618.    506,-32768,   161,   204,-32768,-32768,-32768,   348,   571,-32768,
  619. -32768,-32768,   327,-32768,   488,   489,-32768,   463,   121,-32768,
  620.    249,-32768,-32768,-32768,-32768,   121,   185,   551,-32768,     8,
  621. -32768,-32768,-32768,   549,-32768,-32768,   199,-32768,-32768,-32768,
  622. -32768,-32768,   502,   317,   559,   411,   490,   254,-32768,-32768,
  623.    246,-32768,-32768,-32768,   509,   499,-32768,   289,   545,   289,
  624.    262,   169,-32768,-32768,-32768,   491,   317,-32768,   246,-32768,
  625. -32768,-32768,   463,-32768,-32768,-32768,-32768,-32768,-32768,   611,
  626.    612,-32768
  627. };
  628. static const short yypgoto[] = {-32768,
  629. -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,   274,-32768,
  630. -32768,-32768,-32768,-32768,   184,-32768,-32768,   153,   157,   -95,
  631.   -161,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,   455,
  632. -32768,-32768,   226,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
  633. -32768,   517,-32768,-32768,-32768,-32768,   183,-32768,-32768,-32768,
  634.    433,   -94,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
  635.    208,-32768,-32768,-32768,   -82,-32768,-32768,   359,-32768,   364,
  636.    -13,   464,   -34,-32768,   474,-32768,  -249,-32768,-32768,   243,
  637.   -186,-32768,   -87,    -3,-32768,-32768,  -218,-32768,-32768,-32768,
  638. -32768,   318,-32768,-32768,-32768,  -280,-32768,   -88,   -76,  -333,
  639. -32768,  -269,-32768,-32768,  -331,   353,   541,   -63,   163,    82,
  640. -32768,  -245,   435,   397,  -101,-32768
  641. };
  642. #define YYLAST 633
  643. static const short yytable[] = {   138,
  644.    160,   110,   151,   319,   292,   322,   295,    67,    86,   166,
  645.    177,    70,   249,   267,   165,   323,   399,   178,    74,   426,
  646.    171,   265,   188,   192,     1,   363,  -260,     2,   100,   236,
  647.     85,   168,     3,   408,   231,   410,     4,    71,   148,     5,
  648.     75,     6,   115,    52,     7,    63,     8,   195,   189,     9,
  649.     10,   335,    64,    11,   425,    53,   190,   149,   197,    54,
  650.     12,   264,   204,   233,  -261,    13,   221,   116,   237,   427,
  651.    408,    14,   410,   101,   138,    15,   450,   193,   355,   356,
  652.     22,   402,   334,    16,   109,   406,    17,    18,   232,   235,
  653.     19,   117,  -210,   428,   222,   248,   177,   216,   293,    20,
  654.    192,   250,   196,    21,   398,  -210,  -210,  -210,  -210,  -210,
  655.   -210,  -210,  -210,  -210,  -210,  -210,   262,   408,   234,   410,
  656.    266,   221,   256,   257,   258,   259,   260,  -210,  -210,  -210,
  657.     60,    72,  -210,   177,   449,   408,   401,   410,   106,   422,
  658.     22,    56,   120,   239,   115,    57,   288,   289,   296,   222,
  659.     59,   223,   103,   220,   193,   121,   122,   123,   124,   125,
  660.    224,   127,   128,   129,   130,   131,   294,   423,   230,   116,
  661.    106,   343,   457,    74,    66,   194,    61,   132,   133,   389,
  662.    353,   471,   225,    82,   285,   324,   328,   128,   129,   130,
  663.    131,   398,   438,   466,   222,    75,   152,   120,    83,   478,
  664.    458,   286,    74,   332,   447,   344,   223,   460,   270,   439,
  665.    121,   122,   123,   124,   125,   224,   127,   128,   129,   130,
  666.    131,   103,   108,   421,   261,   272,   273,   479,   271,   364,
  667.    113,    68,   132,   133,    88,   328,    69,   225,   357,   365,
  668.    358,    89,   120,   274,   446,   282,    91,   297,   298,   173,
  669.    174,   223,   283,   272,   273,   121,   122,   123,   124,   125,
  670.    224,   127,   128,   129,   130,   131,    92,    92,   400,   366,
  671.    351,   274,   200,   201,   202,   203,   367,   132,   133,    78,
  672.    407,   354,   225,   197,    73,    93,    93,   339,   403,   373,
  673.    413,   275,   103,   318,   340,   394,   374,   414,   173,   174,
  674.    128,   129,   130,   131,   359,    94,    94,   288,   289,   107,
  675.     95,    95,   120,   104,   109,   132,   133,   332,   111,    96,
  676.     96,   112,   407,   444,   114,   121,   122,   123,   124,   125,
  677.    126,   127,   128,   129,   130,   131,   328,   145,   187,   247,
  678.    173,   174,   128,   129,   130,   131,   147,   132,   133,   282,
  679.      4,     4,   360,     5,     5,   146,   433,   132,   133,   282,
  680.      8,     8,   154,   461,   469,   475,   459,    11,    11,   467,
  681.    157,   470,   297,   298,   153,   325,   202,   203,   158,    13,
  682.     13,   179,   180,   181,   182,   183,   184,   161,   185,    15,
  683.     15,   200,   201,   202,   203,   162,   163,   254,    74,   167,
  684.    168,    18,    18,   120,    19,    19,   299,   300,   301,   302,
  685.    191,   172,   198,    20,    20,   199,   121,   122,   123,   124,
  686.    125,   126,   127,   128,   129,   130,   131,   351,   200,   201,
  687.    202,   203,   200,   201,   202,   203,   206,   120,   132,   133,
  688.    303,   304,   305,   135,   128,   129,   130,   131,   120,   205,
  689.    121,   122,   123,   124,   125,   126,   127,   128,   129,   130,
  690.    131,   121,   122,   123,   124,   125,   126,   127,   128,   129,
  691.    130,   131,   132,   133,   207,   210,   120,   135,   212,   213,
  692.    214,    22,   219,   132,   133,   134,   235,   120,   135,   121,
  693.    122,   123,   124,   125,   126,   127,   128,   129,   130,   131,
  694.    121,   122,   123,   124,   125,   126,   127,   128,   129,   130,
  695.    131,   132,   133,   442,   240,   241,   135,   299,   300,   301,
  696.    302,   242,   132,   133,   243,   244,   245,   135,   200,   201,
  697.    202,   203,   251,   252,   380,   253,   267,   284,   263,   237,
  698.    290,   308,   309,   200,   201,   202,   203,   310,    85,   254,
  699.    312,   303,   304,   305,   313,   314,   315,   318,   321,   316,
  700.    317,   320,   336,   333,   337,   341,   342,   348,   350,   351,
  701.    352,   372,   299,   375,   377,   378,   376,   381,   382,   379,
  702.    383,   386,   385,   392,   393,   390,   404,   412,   297,   415,
  703.    416,   418,   419,   434,   344,   437,   436,   441,   451,   462,
  704.    445,   464,  -262,   472,   455,   454,   427,   468,   477,   473,
  705.    481,   482,   388,   463,   476,   474,   217,   435,   164,   465,
  706.    453,   246,   329,   417,   211,   368,   327,   338,   218,   156,
  707.      0,   311,   255
  708. };
  709. static const short yycheck[] = {    76,
  710.     96,    65,    85,   249,   223,   255,   225,    11,    22,   105,
  711.    112,    15,    25,    35,   103,   261,     1,   113,     3,    12,
  712.    108,   208,   117,    41,     1,   306,    44,     4,     1,    78,
  713.     67,    81,     9,   367,    41,   367,    13,     1,    17,    16,
  714.     25,    18,    70,   119,    21,    72,    23,    41,   111,    26,
  715.     27,   270,    79,    30,   386,    21,   119,    36,   135,    95,
  716.     37,   111,   139,    41,    44,    42,     1,    95,   117,    62,
  717.    404,    48,   404,    46,   151,    52,   408,    95,   297,   298,
  718.    117,   362,   269,    60,    19,   366,    63,    64,    95,   111,
  719.     67,   119,    77,    86,    29,   190,   198,   161,   116,    76,
  720.     41,   114,    96,    80,   350,    90,    91,    92,    93,    94,
  721.     95,    96,    97,    98,    99,   100,   205,   451,    96,   451,
  722.    208,     1,   199,   200,   201,   202,   203,   112,   113,   114,
  723.     35,    95,   117,   235,   404,   469,   116,   469,    57,    49,
  724.    117,    83,    77,   178,    70,    79,    84,    85,   225,    29,
  725.     95,    86,    74,   167,    95,    90,    91,    92,    93,    94,
  726.     95,    96,    97,    98,    99,   100,     1,    77,   172,    95,
  727.     89,    61,   418,     3,    21,   116,    81,   112,   113,   341,
  728.    118,   451,   117,    71,   219,   262,   263,    97,    98,    99,
  729.    100,   437,     7,   443,    29,    25,   118,    77,    86,   469,
  730.    419,    54,     3,   267,     1,    95,    86,   426,    12,    24,
  731.     90,    91,    92,    93,    94,    95,    96,    97,    98,    99,
  732.    100,    74,    60,   385,    25,    57,    58,   473,    32,   306,
  733.     68,    43,   112,   113,    65,   312,    95,   117,     3,    10,
  734.      5,    72,    77,    75,    84,   111,     3,    84,    85,    95,
  735.     96,    86,   118,    57,    58,    90,    91,    92,    93,    94,
  736.     95,    96,    97,    98,    99,   100,    23,    23,   351,    40,
  737.     67,    75,   112,   113,   114,   115,    47,   112,   113,    95,
  738.     77,   118,   117,   360,    83,    42,    42,   111,   365,   111,
  739.    111,    95,    74,    95,   118,    97,   118,   118,    95,    96,
  740.     97,    98,    99,   100,    69,    62,    62,    84,    85,    20,
  741.     67,    67,    77,    66,    19,   112,   113,   381,    66,    76,
  742.     76,    43,    77,   400,   119,    90,    91,    92,    93,    94,
  743.     95,    96,    97,    98,    99,   100,   413,   116,     1,     1,
  744.     95,    96,    97,    98,    99,   100,    34,   112,   113,   111,
  745.     13,    13,   117,    16,    16,    68,   118,   112,   113,   111,
  746.     23,    23,     8,   427,   111,   461,   118,    30,    30,   446,
  747.     59,   118,    84,    85,   118,    49,   114,   115,   117,    42,
  748.     42,   101,   102,   103,   104,   105,   106,    51,   108,    52,
  749.     52,   112,   113,   114,   115,   111,    95,   118,     3,    31,
  750.     81,    64,    64,    77,    67,    67,    86,    87,    88,    89,
  751.    117,    50,    43,    76,    76,   111,    90,    91,    92,    93,
  752.     94,    95,    96,    97,    98,    99,   100,    67,   112,   113,
  753.    114,   115,   112,   113,   114,   115,    95,    77,   112,   113,
  754.    120,   121,   122,   117,    97,    98,    99,   100,    77,   117,
  755.     90,    91,    92,    93,    94,    95,    96,    97,    98,    99,
  756.    100,    90,    91,    92,    93,    94,    95,    96,    97,    98,
  757.     99,   100,   112,   113,    95,    95,    77,   117,    95,   117,
  758.     95,   117,     6,   112,   113,   114,   111,    77,   117,    90,
  759.     91,    92,    93,    94,    95,    96,    97,    98,    99,   100,
  760.     90,    91,    92,    93,    94,    95,    96,    97,    98,    99,
  761.    100,   112,   113,   114,   117,   117,   117,    86,    87,    88,
  762.     89,   117,   112,   113,   107,   119,   119,   117,   112,   113,
  763.    114,   115,    95,    95,   118,    96,    35,    73,   120,   117,
  764.    117,    44,    95,   112,   113,   114,   115,    96,    67,   118,
  765.    117,   120,   121,   122,    97,    97,    97,    95,   116,   119,
  766.    119,   118,    45,    81,    45,   117,    95,    82,    11,    67,
  767.     95,   118,    86,   118,   118,    95,   116,   111,    95,   118,
  768.     38,    22,   117,   111,    12,    82,   117,    49,    84,    97,
  769.     95,    11,    39,    37,    95,   111,    53,   118,    28,    49,
  770.     95,    53,    44,    95,   116,   118,    62,   118,   118,   111,
  771.      0,     0,   339,   430,   462,   459,   162,   392,   102,   437,
  772.    413,   189,   264,   381,   151,   308,   263,   275,   165,    89,
  773.     -1,   235,   198
  774. };
  775. /* -*-C-*-  Note some compilers choke on comments on `
  776. /* Skeleton output parser for bison,
  777.    Copyright (C) 1984, 1989, 1990 Bob Corbett and Richard Stallman
  778.    This program is free software; you can redistribute it and/or modify
  779.    it under the terms of the GNU General Public License as published by
  780.    the Free Software Foundation; either version 1, or (at your option)
  781.    any later version.
  782.    This program is distributed in the hope that it will be useful,
  783.    but WITHOUT ANY WARRANTY; without even the implied warranty of
  784.    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  785.    GNU General Public License for more details.
  786.    You should have received a copy of the GNU General Public License
  787.    along with this program; if not, write to the Free Software
  788.    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
  789. #ifndef alloca
  790. #ifdef __GNUC__
  791. #define alloca __builtin_alloca
  792. #else /* not GNU C.  */
  793. #if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__) || defined (__sparc) || defined (__sgi)
  794. #include <alloca.h>
  795. #else /* not sparc */
  796. #if defined (MSDOS) && !defined (__TURBOC__)
  797. #include <malloc.h>
  798. #else /* not MSDOS, or __TURBOC__ */
  799. #if defined(_AIX)
  800. #include <malloc.h>
  801.  #pragma alloca
  802. #else /* not MSDOS, __TURBOC__, or _AIX */
  803. #ifdef __hpux
  804. #ifdef __cplusplus
  805. extern "C" {
  806. void *alloca (unsigned int);
  807. };
  808. #else /* not __cplusplus */
  809. void *alloca (unsigned int);
  810. #endif /* not __cplusplus */
  811. #endif /* __hpux */
  812. #endif /* not _AIX */
  813. #endif /* not MSDOS, or __TURBOC__ */
  814. #endif /* not sparc.  */
  815. #endif /* not GNU C.  */
  816. #endif /* alloca not defined.  */
  817. /* This is the parser code that is written into each bison parser
  818.   when the %semantic_parser declaration is not specified in the grammar.
  819.   It was written by Richard Stallman by simplifying the hairy parser
  820.   used when %semantic_parser is specified.  */
  821. /* Note: there must be only one dollar sign in this file.
  822.    It is replaced by the list of actions, each action
  823.    as one case of the switch.  */
  824. #define yyerrok (yyerrstatus = 0)
  825. #define yyclearin (yychar = YYEMPTY)
  826. #define YYEMPTY -2
  827. #define YYEOF 0
  828. #define YYACCEPT return(0)
  829. #define YYABORT  return(1)
  830. #define YYERROR goto yyerrlab1
  831. /* Like YYERROR except do call yyerror.
  832.    This remains here temporarily to ease the
  833.    transition to the new meaning of YYERROR, for GCC.
  834.    Once GCC version 2 has supplanted version 1, this can go.  */
  835. #define YYFAIL goto yyerrlab
  836. #define YYRECOVERING()  (!!yyerrstatus)
  837. #define YYBACKUP(token, value) 
  838. do
  839.   if (yychar == YYEMPTY && yylen == 1)
  840.     { yychar = (token), yylval = (value);
  841.       yychar1 = YYTRANSLATE (yychar);
  842.       YYPOPSTACK;
  843.       goto yybackup;
  844.     }
  845.   else
  846.     { yyerror ("syntax error: cannot back up"); YYERROR; }
  847. while (0)
  848. #define YYTERROR 1
  849. #define YYERRCODE 256
  850. #ifndef YYPURE
  851. #define YYLEX yylex()
  852. #endif
  853. #ifdef YYPURE
  854. #ifdef YYLSP_NEEDED
  855. #define YYLEX yylex(&yylval, &yylloc)
  856. #else
  857. #define YYLEX yylex(&yylval)
  858. #endif
  859. #endif
  860. /* If nonreentrant, generate the variables here */
  861. #ifndef YYPURE
  862. int yychar; /*  the lookahead symbol */
  863. YYSTYPE yylval; /*  the semantic value of the */
  864. /*  lookahead symbol */
  865. #ifdef YYLSP_NEEDED
  866. YYLTYPE yylloc; /*  location data for the lookahead */
  867. /*  symbol */
  868. #endif
  869. int yynerrs; /*  number of parse errors so far       */
  870. #endif  /* not YYPURE */
  871. #if YYDEBUG != 0
  872. int yydebug; /*  nonzero means print parse trace */
  873. /* Since this is uninitialized, it does not stop multiple parsers
  874.    from coexisting.  */
  875. #endif
  876. /*  YYINITDEPTH indicates the initial size of the parser's stacks */
  877. #ifndef YYINITDEPTH
  878. #define YYINITDEPTH 200
  879. #endif
  880. /*  YYMAXDEPTH is the maximum size the stacks can grow to
  881.     (effective only if the built-in stack extension method is used).  */
  882. #if YYMAXDEPTH == 0
  883. #undef YYMAXDEPTH
  884. #endif
  885. #ifndef YYMAXDEPTH
  886. #define YYMAXDEPTH 10000
  887. #endif
  888. /* Prevent warning if -Wstrict-prototypes.  */
  889. #ifdef __GNUC__
  890. int yyparse (void);
  891. #endif
  892. #if __GNUC__ > 1 /* GNU C and GNU C++ define this.  */
  893. #define __yy_bcopy(FROM,TO,COUNT) __builtin_memcpy(TO,FROM,COUNT)
  894. #else /* not GNU C or C++ */
  895. #ifndef __cplusplus
  896. /* This is the most reliable way to avoid incompatibilities
  897.    in available built-in functions on various systems.  */
  898. static void
  899. __yy_bcopy (from, to, count)
  900.      char *from;
  901.      char *to;
  902.      int count;
  903. {
  904.   register char *f = from;
  905.   register char *t = to;
  906.   register int i = count;
  907.   while (i-- > 0)
  908.     *t++ = *f++;
  909. }
  910. #else /* __cplusplus */
  911. /* This is the most reliable way to avoid incompatibilities
  912.    in available built-in functions on various systems.  */
  913. static void
  914. __yy_bcopy (char *from, char *to, int count)
  915. {
  916.   register char *f = from;
  917.   register char *t = to;
  918.   register int i = count;
  919.   while (i-- > 0)
  920.     *t++ = *f++;
  921. }
  922. #endif
  923. #endif
  924. int
  925. yyparse()
  926. {
  927.   register int yystate;
  928.   register int yyn;
  929.   register short *yyssp;
  930.   register YYSTYPE *yyvsp;
  931.   int yyerrstatus; /*  number of tokens to shift before error messages enabled */
  932.   int yychar1; /*  lookahead token as an internal (translated) token number */
  933.   short yyssa[YYINITDEPTH]; /*  the state stack */
  934.   YYSTYPE yyvsa[YYINITDEPTH]; /*  the semantic value stack */
  935.   short *yyss = yyssa; /*  refer to the stacks thru separate pointers */
  936.   YYSTYPE *yyvs = yyvsa; /*  to allow yyoverflow to reallocate them elsewhere */
  937. #ifdef YYLSP_NEEDED
  938.   YYLTYPE yylsa[YYINITDEPTH]; /*  the location stack */
  939.   YYLTYPE *yyls = yylsa;
  940.   YYLTYPE *yylsp;
  941. #define YYPOPSTACK   (yyvsp--, yyssp--, yylsp--)
  942. #else
  943. #define YYPOPSTACK   (yyvsp--, yyssp--)
  944. #endif
  945.   int yystacksize = YYINITDEPTH;
  946. #ifdef YYPURE
  947.   int yychar;
  948.   YYSTYPE yylval;
  949.   int yynerrs;
  950. #ifdef YYLSP_NEEDED
  951.   YYLTYPE yylloc;
  952. #endif
  953. #endif
  954.   YYSTYPE yyval; /*  the variable used to return */
  955. /*  semantic values from the action */
  956. /*  routines */
  957.   int yylen;
  958. #if YYDEBUG != 0
  959.   if (yydebug)
  960.     fprintf(stderr, "Starting parsen");
  961. #endif
  962.   yystate = 0;
  963.   yyerrstatus = 0;
  964.   yynerrs = 0;
  965.   yychar = YYEMPTY; /* Cause a token to be read.  */
  966.   /* Initialize stack pointers.
  967.      Waste one element of value and location stack
  968.      so that they stay on the same level as the state stack.
  969.      The wasted elements are never initialized.  */
  970.   yyssp = yyss - 1;
  971.   yyvsp = yyvs;
  972. #ifdef YYLSP_NEEDED
  973.   yylsp = yyls;
  974. #endif
  975. /* Push a new state, which is found in  yystate  .  */
  976. /* In all cases, when you get here, the value and location stacks
  977.    have just been pushed. so pushing a state here evens the stacks.  */
  978. yynewstate:
  979.   *++yyssp = yystate;
  980.   if (yyssp >= yyss + yystacksize - 1)
  981.     {
  982.       /* Give user a chance to reallocate the stack */
  983.       /* Use copies of these so that the &'s don't force the real ones into memory. */
  984.       YYSTYPE *yyvs1 = yyvs;
  985.       short *yyss1 = yyss;
  986. #ifdef YYLSP_NEEDED
  987.       YYLTYPE *yyls1 = yyls;
  988. #endif
  989.       /* Get the current used size of the three stacks, in elements.  */
  990.       int size = yyssp - yyss + 1;
  991. #ifdef yyoverflow
  992.       /* Each stack pointer address is followed by the size of
  993.  the data in use in that stack, in bytes.  */
  994.       yyoverflow("parser stack overflow",
  995.  &yyss1, size * sizeof (*yyssp),
  996.  &yyvs1, size * sizeof (*yyvsp),
  997. #ifdef YYLSP_NEEDED
  998.  &yyls1, size * sizeof (*yylsp),
  999. #endif
  1000.  &yystacksize);
  1001.       yyss = yyss1; yyvs = yyvs1;
  1002. #ifdef YYLSP_NEEDED
  1003.       yyls = yyls1;
  1004. #endif
  1005. #else /* no yyoverflow */
  1006.       /* Extend the stack our own way.  */
  1007.       if (yystacksize >= YYMAXDEPTH)
  1008. {
  1009.   yyerror("parser stack overflow");
  1010.   return 2;
  1011. }
  1012.       yystacksize *= 2;
  1013.       if (yystacksize > YYMAXDEPTH)
  1014. yystacksize = YYMAXDEPTH;
  1015.       yyss = (short *) alloca (yystacksize * sizeof (*yyssp));
  1016.       __yy_bcopy ((char *)yyss1, (char *)yyss, size * sizeof (*yyssp));
  1017.       yyvs = (YYSTYPE *) alloca (yystacksize * sizeof (*yyvsp));
  1018.       __yy_bcopy ((char *)yyvs1, (char *)yyvs, size * sizeof (*yyvsp));
  1019. #ifdef YYLSP_NEEDED
  1020.       yyls = (YYLTYPE *) alloca (yystacksize * sizeof (*yylsp));
  1021.       __yy_bcopy ((char *)yyls1, (char *)yyls, size * sizeof (*yylsp));
  1022. #endif
  1023. #endif /* no yyoverflow */
  1024.       yyssp = yyss + size - 1;
  1025.       yyvsp = yyvs + size - 1;
  1026. #ifdef YYLSP_NEEDED
  1027.       yylsp = yyls + size - 1;
  1028. #endif
  1029. #if YYDEBUG != 0
  1030.       if (yydebug)
  1031. fprintf(stderr, "Stack size increased to %dn", yystacksize);
  1032. #endif
  1033.       if (yyssp >= yyss + yystacksize - 1)
  1034. YYABORT;
  1035.     }
  1036. #if YYDEBUG != 0
  1037.   if (yydebug)
  1038.     fprintf(stderr, "Entering state %dn", yystate);
  1039. #endif
  1040.   goto yybackup;
  1041.  yybackup:
  1042. /* Do appropriate processing given the current state.  */
  1043. /* Read a lookahead token if we need one and don't already have one.  */
  1044. /* yyresume: */
  1045.   /* First try to decide what to do without reference to lookahead token.  */
  1046.   yyn = yypact[yystate];
  1047.   if (yyn == YYFLAG)
  1048.     goto yydefault;
  1049.   /* Not known => get a lookahead token if don't already have one.  */
  1050.   /* yychar is either YYEMPTY or YYEOF
  1051.      or a valid token in external form.  */
  1052.   if (yychar == YYEMPTY)
  1053.     {
  1054. #if YYDEBUG != 0
  1055.       if (yydebug)
  1056. fprintf(stderr, "Reading a token: ");
  1057. #endif
  1058.       yychar = YYLEX;
  1059.     }
  1060.   /* Convert token to internal form (in yychar1) for indexing tables with */
  1061.   if (yychar <= 0) /* This means end of input. */
  1062.     {
  1063.       yychar1 = 0;
  1064.       yychar = YYEOF; /* Don't call YYLEX any more */
  1065. #if YYDEBUG != 0
  1066.       if (yydebug)
  1067. fprintf(stderr, "Now at end of input.n");
  1068. #endif
  1069.     }
  1070.   else
  1071.     {
  1072.       yychar1 = YYTRANSLATE(yychar);
  1073. #if YYDEBUG != 0
  1074.       if (yydebug)
  1075. {
  1076.   fprintf (stderr, "Next token is %d (%s", yychar, yytname[yychar1]);
  1077.   /* Give the individual parser a way to print the precise meaning
  1078.      of a token, for further debugging info.  */
  1079. #ifdef YYPRINT
  1080.   YYPRINT (stderr, yychar, yylval);
  1081. #endif
  1082.   fprintf (stderr, ")n");
  1083. }
  1084. #endif
  1085.     }
  1086.   yyn += yychar1;
  1087.   if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != yychar1)
  1088.     goto yydefault;
  1089.   yyn = yytable[yyn];
  1090.   /* yyn is what to do for this token type in this state.
  1091.      Negative => reduce, -yyn is rule number.
  1092.      Positive => shift, yyn is new state.
  1093.        New state is final state => don't bother to shift,
  1094.        just return success.
  1095.      0, or most negative number => error.  */
  1096.   if (yyn < 0)
  1097.     {
  1098.       if (yyn == YYFLAG)
  1099. goto yyerrlab;
  1100.       yyn = -yyn;
  1101.       goto yyreduce;
  1102.     }
  1103.   else if (yyn == 0)
  1104.     goto yyerrlab;
  1105.   if (yyn == YYFINAL)
  1106.     YYACCEPT;
  1107.   /* Shift the lookahead token.  */
  1108. #if YYDEBUG != 0
  1109.   if (yydebug)
  1110.     fprintf(stderr, "Shifting token %d (%s), ", yychar, yytname[yychar1]);
  1111. #endif
  1112.   /* Discard the token being shifted unless it is eof.  */
  1113.   if (yychar != YYEOF)
  1114.     yychar = YYEMPTY;
  1115.   *++yyvsp = yylval;
  1116. #ifdef YYLSP_NEEDED
  1117.   *++yylsp = yylloc;
  1118. #endif
  1119.   /* count tokens shifted since error; after three, turn off error status.  */
  1120.   if (yyerrstatus) yyerrstatus--;
  1121.   yystate = yyn;
  1122.   goto yynewstate;
  1123. /* Do the default action for the current state.  */
  1124. yydefault:
  1125.   yyn = yydefact[yystate];
  1126.   if (yyn == 0)
  1127.     goto yyerrlab;
  1128. /* Do a reduction.  yyn is the number of a rule to reduce with.  */
  1129. yyreduce:
  1130.   yylen = yyr2[yyn];
  1131.   yyval = yyvsp[1-yylen]; /* implement default value of the action */
  1132. #if YYDEBUG != 0
  1133.   if (yydebug)
  1134.     {
  1135.       int i;
  1136.       fprintf (stderr, "Reducing via rule %d (line %d), ",
  1137.        yyn, yyrline[yyn]);
  1138.       /* Print the symbols being reduced, and their result.  */
  1139.       for (i = yyprhs[yyn]; yyrhs[i] > 0; i++)
  1140. fprintf (stderr, "%s ", yytname[yyrhs[i]]);
  1141.       fprintf (stderr, " -> %sn", yytname[yyr1[yyn]]);
  1142.     }
  1143. #endif
  1144.   switch (yyn) {
  1145. case 1:
  1146.       if (progname && *progname)
  1147.         yyerror ("Unexpected schema operation in static mode compilation ");
  1148.       else if (parse_mode==Module)
  1149.         yyerror ("Unexpected schema operation inside module");
  1150.       if(yyvsp[0].code)
  1151.         parse_mode=Schema;
  1152.     ;
  1153.     break;}
  1154. case 2:
  1155.       if (progname && *progname)
  1156.         yyerror ("Unexpected schema operation in static mode compilation ");
  1157.       else if (parse_mode==Module)
  1158.         yyerror ("Unexpected schema operation inside module");
  1159.     ;
  1160.     break;}
  1161. case 3:
  1162. { if (yyvsp[0].code) parse_mode=Module; ;
  1163.     break;}
  1164. case 4:
  1165. { ; ;
  1166.     break;}
  1167. case 5:
  1168.       if(parse_mode!=Module)
  1169.         yyerror("Unexpected module operation outside module");
  1170.     ;
  1171.     break;}
  1172. case 6:
  1173. { ; ;
  1174.     break;}
  1175. case 7:
  1176. {
  1177.       if(parse_mode==Esql)
  1178.         {
  1179.           free_tail();
  1180.           yyval.code=0;
  1181.         }
  1182.     ;
  1183.     break;}
  1184. case 8:
  1185. {;
  1186.     break;}
  1187. case 9:
  1188. {
  1189.       yyerror("Error: unrecognizable SQL construction in input file");
  1190.       free_tail();
  1191.       YYERROK; yyclearin;
  1192.       YYACCEPT;
  1193.     ;
  1194.     break;}
  1195. case 10:
  1196. { yyval.code = TABLE; ;
  1197.     break;}
  1198. case 11:
  1199. { yyval.code = VIEW;  ;
  1200.     break;}
  1201. case 12:
  1202. {
  1203.       TXTREF c,d = gen_parent(DECL_CURS,yyvsp[0].node);
  1204.       STMT_VCB(d) = LOCAL_VCB_ROOT;
  1205.       SetF_TRN(d,HAS_VCB_F);
  1206.       LOCAL_VCB_ROOT = TNULL;
  1207.       c = gen_parent(CUR_AREA,d);
  1208.       add_statement(c);
  1209.       d = gen_node(CURSOR);
  1210.       if (dyn_sql_stmt_name)
  1211.         CUR_NAME(d) = ltr_rec(dyn_sql_stmt_name);
  1212.       else
  1213.         yyfatal("Attemp to compile unnamed statement");
  1214.       CUR_DECL(d) = c;
  1215.       STMT_VCB(c) = d;
  1216.       yyval.code = 0;
  1217.     ;
  1218.     break;}
  1219. case 13:
  1220. {
  1221.        TXTREF d = gen_object(DROP,yylsp[-2]);
  1222.        CREATE_OBJ(d) = yyvsp[0].node;
  1223.        CODE_TRN(yyvsp[0].node) = yyvsp[-1].code;
  1224.        add_statement(d);
  1225.      ;
  1226.     break;}
  1227. case 14:
  1228. { {
  1229.      add_statement(gen_object(yyvsp[-2].code,yylsp[-1]));
  1230.      yyval.code = 0;
  1231.    } ;
  1232.     break;}
  1233. case 18:
  1234. { yyval.code=CREATE; ;
  1235.     break;}
  1236. case 19:
  1237. { yyval.code=ALTER; ;
  1238.     break;}
  1239. case 20:
  1240. {
  1241.        register TXTREF e=gen_object(yyvsp[-1].code,yylsp[-1]);
  1242.        CREATE_OBJ(e)=yyvsp[0].node;
  1243.        add_statement(e);
  1244.        yyval.code=STMT_UID(e);
  1245.      ;
  1246.     break;}
  1247. case 21:
  1248. {
  1249.       register TXTREF t=yyvsp[-3].node,e=yyvsp[-1].node;
  1250.       if (!t)
  1251.         free_line (e);
  1252.       else if (new_table != t)
  1253.         yyfatal ("Internal error: unexpected 'new_table'");
  1254.       else
  1255.         {
  1256.           CODE_TRN (t) = TABLE;
  1257.   TBL_NCOLS(t) = new_table_col_no;
  1258.           SetF_TRN (t, CHECKED_F);
  1259.           new_table = TNULL;
  1260.         }
  1261.       yyval.node=t;
  1262.     ;
  1263.     break;}
  1264. case 22:
  1265. { yyval.node=yyvsp[0].node;;
  1266.     break;}
  1267. case 23:
  1268. { yyval.node=join_list(yyvsp[-2].node,yyvsp[0].node);;
  1269.     break;}
  1270. case 24:
  1271. { yyval.node=yyvsp[0].node; ;
  1272.     break;}
  1273. case 25:
  1274. { yyval.node=yyvsp[0].node; ;
  1275.     break;}
  1276. case 26:
  1277. {
  1278.       if(new_table)
  1279.         add_base_column(yyvsp[-3].ltrp,yyvsp[-2].type,yyvsp[-1].node,yyvsp[0].node);
  1280.       yyval.node = TNULL;
  1281.     ;
  1282.     break;}
  1283. case 27:
  1284. { yyval.node = TNULL;     ;
  1285.     break;}
  1286. case 28:
  1287. { yyval.node = yyvsp[0].node; ;
  1288.     break;}
  1289. case 29:
  1290. {
  1291.       yyval.node = gen_object (USERNAME, yylsp[0]);
  1292.       USR_NAME (yyval.node) = yyvsp[0].ltrp;
  1293.     ;
  1294.     break;}
  1295. case 30:
  1296. { yyval.node = gen_object (NULL_VL, yylsp[0]); ;
  1297.     break;}
  1298. case 31:
  1299. { yyval.node = yyvsp[0].node; ;
  1300.     break;}
  1301. case 32:
  1302. { yyval.node = TNULL;        ;
  1303.     break;}
  1304. case 33:
  1305. { yyval.node = yyvsp[0].node; ;
  1306.     break;}
  1307. case 34:
  1308. { yyval.node = yyvsp[0].node; ;
  1309.     break;}
  1310. case 35:
  1311. { yyval.node = join_list(yyvsp[-1].node,yyvsp[0].node); ;
  1312.     break;}
  1313. case 36:
  1314. { yyval.node = gen_object (NULL_VL, yylsp[0]); ;
  1315.     break;}
  1316. case 37:
  1317. { yyval.node = gen_object (yyvsp[0].code, yylsp[0]); ;
  1318.     break;}
  1319. case 38:
  1320. { yyval.node = yyvsp[0].node; ;
  1321.     break;}
  1322. case 39:
  1323. {
  1324.       yyval.node = gen_up_node (CHECK, yyvsp[0].node, yylsp[-1]);
  1325.     ;
  1326.     break;}
  1327. case 40:
  1328. {{
  1329.       if(!new_table)
  1330.         yyerror("Unexpected constraints");
  1331.       else
  1332. switch(CODE_TRN(yyvsp[0].node))
  1333.   {
  1334.           case NULL_VL:
  1335.             yyfatal("Unexpected NULL_VL node");
  1336.             break;
  1337.   case PRIMARY:
  1338.   case UNIQUE:
  1339.             check_not_null(yyvsp[0].node);
  1340.   case INDEX:
  1341.     IND_INFO(new_table)=
  1342.       join_list(IND_INFO(new_table),yyvsp[0].node);
  1343.     break;
  1344.   default:
  1345.             RIGHT_TRN(yyvsp[0].node) = TNULL;
  1346.     TBL_CONSTR(new_table)=
  1347.       join_list(TBL_CONSTR(new_table),yyvsp[0].node);
  1348.   }
  1349.       yyval.node = TNULL;
  1350.     };
  1351.     break;}
  1352. case 41:
  1353. {
  1354.       yyval.node=gen_up_node(yyvsp[-3].code,
  1355.                            replace_column_holes(yyvsp[-1].node,new_table),
  1356.                            yylsp[-3]);
  1357.     ;
  1358.     break;}
  1359. case 42:
  1360. {
  1361.       yyval.node=
  1362.         gen_up_node(FOREIGN,
  1363.                     join_list(gen_parent(LOCALLIST,
  1364.                                          replace_column_holes(yyvsp[-2].node,
  1365.                                                               new_table)),
  1366.                               yyvsp[0].node),
  1367.                     yylsp[-5]);
  1368.     ;
  1369.     break;}
  1370. case 43:
  1371. {
  1372.       yyval.node=gen_up_node(CHECK,
  1373.                            replace_column_holes(yyvsp[0].node,
  1374.                                                 new_table),
  1375.                            yylsp[-1]);
  1376.     ;
  1377.     break;}
  1378. case 44:
  1379. { yyval.code=UNIQUE; ;
  1380.     break;}
  1381. case 45:
  1382. { yyval.code=PRIMARY; ;
  1383.     break;}
  1384. case 46:
  1385. { yyval.code=INDEX; ;
  1386.     break;}
  1387. case 47:
  1388. { {
  1389.       TXTREF t = gen_object(OPTR,yylsp[-2]);
  1390.       OBJ_DESC(t)  = yyvsp[-1].node;
  1391.       yyval.node = gen_up_node(REFERENCE,
  1392.                              join_list(t,gen_parent(NOOP,yyvsp[0].node)),
  1393.                              yylsp[-2]);
  1394.     } ;
  1395.     break;}
  1396. case 48:
  1397. { yyval.node=0; ;
  1398.     break;}
  1399. case 49:
  1400. { yyval.node=yyvsp[-1].node;;
  1401.     break;}
  1402. case 50:
  1403. {
  1404.       yyval.node=gen_column(NULL,yyvsp[0].ltrp,yylsp[0]);
  1405.     ;
  1406.     break;}
  1407. case 51:
  1408. {
  1409.       yyval.node=join_list(yyvsp[-2].node,gen_column(NULL,yyvsp[0].ltrp,yylsp[0]));
  1410.     ;
  1411.     break;}
  1412. case 52:
  1413. {
  1414.       register TXTREF e;
  1415.       e=gen_object(CREATE,yylsp[-1]);
  1416.       CREATE_OBJ(e)=yyvsp[0].node;
  1417.       add_statement(e);
  1418.       yyval.code=STMT_UID(e);
  1419.     ;
  1420.     break;}
  1421. case 53:
  1422. {
  1423.       register TXTREF t = yyvsp[-4].node, e= yyvsp[-3].node;
  1424.       if(!t)
  1425.         free_line (e);
  1426.       else
  1427.         {
  1428.           TXTREF     c;
  1429.           sql_type_t type  = pack_type(SQLType_0,0,0);
  1430.           i4_t        e_cnt = count_list (e);
  1431.           
  1432.           TXTREF sel_node = RIGHT_TRN (DOWN_TRN (yyvsp[-1].node));
  1433.           
  1434.           CODE_TRN (t) = VIEW;
  1435.           if (e)
  1436.             if (e_cnt != ARITY_TRN (sel_node))
  1437.               {
  1438.                 yyerror("Incorrect number of columns in VIEW defenition");
  1439.                 free_line(e);
  1440.                 e = TNULL;
  1441.               }
  1442.           if (e)
  1443.             {
  1444.               for ( c = e ; c ; c = RIGHT_TRN(c))
  1445.                 add_view_column(CHOLE_CNAME(OBJ_DESC(c)),type);
  1446.               free_line (e);
  1447.             }
  1448.           else
  1449.             {
  1450.               for ( c = DOWN_TRN(sel_node) ; c ; c = RIGHT_TRN(c))
  1451.                 {
  1452.                   if (CODE_TRN(c) == COLPTR)
  1453.                     add_view_column(CHOLE_CNAME(OBJ_DESC(c)),type);
  1454.                   else
  1455.                     yyerror("Expressions aren't allowed in selection list"
  1456.                             " of anonimous view");
  1457.                 }
  1458.             }
  1459.           /* TASSERT(new_table_col_no == ARITY_TRN(sel_node),sel_node); */
  1460.   TBL_NCOLS(t) = ARITY_TRN(sel_node);
  1461.             
  1462.           VIEW_QUERY (t) = yyvsp[-1].node;
  1463.           if(yyvsp[0].code) SetF_TRN (t, CHECK_OPT_F);
  1464.           SetF_TRN (t, CHECKED_F);
  1465.           VIEW_VCB (t) = LOCAL_VCB_ROOT;
  1466.           LOCAL_VCB_ROOT = TNULL;
  1467.           new_table = TNULL;
  1468.         }
  1469.       yyval.node=t;
  1470.     ;
  1471.     break;}
  1472. case 54:
  1473. { yyval.code=0; ;
  1474.     break;}
  1475. case 55:
  1476. { yyval.code=1; ;
  1477.     break;}
  1478. case 56:
  1479. { yyval.code=GRANT; ;
  1480.     break;}
  1481. case 57:
  1482. { yyval.code=REVOKE; ;
  1483.     break;}
  1484. case 58:
  1485. {
  1486.       register TXTREF p,g;
  1487.       register i4_t    err = errors;
  1488.       
  1489.       p=replace_column_holes(yyvsp[-5].node,yyvsp[-3].node);
  1490.       p = gen_parent(PRIVILEGIES, p);
  1491.       if (errors != err) /* if there was some error in the tree */
  1492.         {
  1493.           g =  gen_parent(GRANTEES, yyvsp[-1].node);
  1494.           debug_trn(p);
  1495.           free_tree(p);
  1496.           debug_trn(g);
  1497.           free_tree(g);
  1498.         }
  1499.       else
  1500.         {
  1501.           g=gen_node(TBLPTR);
  1502.           TABL_DESC(g) = yyvsp[-3].node;
  1503.           g=gen_up_node(yyvsp[-6].code,
  1504.                         join_list(g,       
  1505.                                   join_list(p,
  1506.                                             gen_parent(GRANTEES,
  1507.                                                        yyvsp[-1].node))),
  1508.                         yylsp[-6]);
  1509.           if(yyvsp[0].code)
  1510.             SetF_TRN(g,GRANT_OPT_F);
  1511.           add_statement(g);
  1512.           yyval.code=STMT_UID(g);
  1513.         }
  1514.     ;
  1515.     break;}
  1516. case 59:
  1517. { yyval.code=0; ;
  1518.     break;}
  1519. case 60:
  1520. { yyval.code=1; ;
  1521.     break;}
  1522. case 61:
  1523. { yyval.node=0; ;
  1524.     break;}
  1525. case 62:
  1526. { yyval.node=yyvsp[0].node; ;
  1527.     break;}
  1528. case 63:
  1529. { yyval.node=yyvsp[0].node;;
  1530.     break;}
  1531. case 64:
  1532. { yyval.node=join_list(yyvsp[-2].node,yyvsp[0].node);;
  1533.     break;}
  1534. case 65:
  1535. { yyval.node = gen_object(SELECT,yylsp[0]); ;
  1536.     break;}
  1537. case 66:
  1538. { yyval.node = gen_object(INSERT,yylsp[0]); ;
  1539.     break;}
  1540. case 67:
  1541. { yyval.node = gen_object(DELETE,yylsp[0]); ;
  1542.     break;}
  1543. case 68:
  1544. { yyval.node = gen_up_node(UPDATE,yyvsp[0].node,yylsp[-1]); ;
  1545.     break;}
  1546. case 69:
  1547. { yyval.node = gen_up_node(REFERENCE,yyvsp[0].node,yylsp[-1]); ;
  1548.     break;}
  1549. case 70:
  1550. { yyval.node = yyvsp[0].node;                  ;
  1551.     break;}
  1552. case 71:
  1553. {
  1554.       register TXTREF u=gen_object(USERNAME,yylsp[0]);
  1555.       USR_NAME(u)=ltr_rec("PUBLIC");
  1556.       yyval.node=u;
  1557.     ;
  1558.     break;}
  1559. case 72:
  1560. { yyval.node=yyvsp[0].node;;
  1561.     break;}
  1562. case 73:
  1563. { yyval.node=join_list(yyvsp[-2].node,yyvsp[0].node);;
  1564.     break;}
  1565. case 74:
  1566. {
  1567.       register TXTREF u=gen_object(USERNAME,yylsp[0]);
  1568.       USR_NAME(u)=yyvsp[0].ltrp;
  1569.       yyval.node=u;
  1570.     ;
  1571.     break;}
  1572. case 75:
  1573. { ; ;
  1574.     break;}
  1575. case 76:
  1576. { ; ;
  1577.     break;}
  1578. case 77:
  1579. { yyval.code=1; ;
  1580.     break;}
  1581. case 78:
  1582. { yyval.code=0; ;
  1583.     break;}
  1584. case 79:
  1585. {
  1586.      *( yyvsp[-1].code ? &label_nf : &label_er ) =
  1587.        ( yyvsp[0].ltrp ? (STRING(yyvsp[0].ltrp)) : NULL );
  1588.    ;
  1589.     break;}
  1590. case 80:
  1591. { yyval.code=1; ;
  1592.     break;}
  1593. case 81:
  1594. { yyval.code=0; ;
  1595.     break;}
  1596. case 82:
  1597. { yyval.ltrp=0; ;
  1598.     break;}
  1599. case 83:
  1600. { yyval.ltrp=yyvsp[0].ltrp; ;
  1601.     break;}
  1602. case 84:
  1603. { yyval.code=1; ;
  1604.     break;}
  1605. case 85:
  1606. {
  1607.       YYERROK;
  1608.       yyerror("Error in module title");
  1609.       yyval.code=0;
  1610.     ;
  1611.     break;}
  1612. case 86:
  1613. { yyval.code=0; ;
  1614.     break;}
  1615. case 87:
  1616. { yyval.code=0; ;
  1617.     break;}
  1618. case 88:
  1619. {
  1620.       if (strncmp("C",STRING(yyvsp[0].ltrp),1)==0)
  1621.         yyval.code=0;
  1622.       else
  1623.         {
  1624.           lperror("SQL module for %s program can't be processed yet",
  1625.                   STRING(yyvsp[0].ltrp));
  1626.           YYABORT;
  1627.         }
  1628.     ;
  1629.     break;}
  1630. case 89:
  1631. { {
  1632.      extern char *current_user_login_name;
  1633.      char *s, *s1;
  1634.      s1 = current_user_login_name;
  1635.      current_user_login_name = NULL;
  1636.      s = get_user_name ();
  1637.      current_user_login_name = s1;
  1638.      
  1639.      if(GL_AUTHOR && (GL_AUTHOR!=yyvsp[0].ltrp) && s &&
  1640.         (strcmp(STRING(GL_AUTHOR),s)))
  1641.        yyerror("Incorrect user identifier");
  1642.      else
  1643.        GL_AUTHOR=yyvsp[0].ltrp;
  1644.    } ;
  1645.     break;}
  1646. case 90:
  1647. {
  1648.       register TXTREF c,d;
  1649.       d=gen_up_node(DECL_CURS,join_list(yyvsp[-1].node,yyvsp[0].node),yylsp[-5]);
  1650.       STMT_VCB(d)=LOCAL_VCB_ROOT;
  1651.       SetF_TRN(d,HAS_VCB_F);
  1652.       LOCAL_VCB_ROOT = TNULL;
  1653.       d=gen_up_node(CUR_AREA,d,yylsp[-5]);
  1654.       add_statement(d);
  1655.       c=gen_node(CURSOR);
  1656.       CUR_DECL(c)=d;
  1657.       CUR_NAME(c)=yyvsp[-4].ltrp;
  1658.       STMT_VCB(d)=c;
  1659.       if(find_info(CURSOR,CUR_NAME(c)))
  1660.         {
  1661.           char cn[512];
  1662.           lperror("Static cursor name '%s' redeclaration",STRING(CUR_NAME(c)));
  1663.           sprintf(cn,"%s_1",STRING(CUR_NAME(c)));
  1664.           CUR_NAME(c) = ltr_rec(cn);
  1665.         }
  1666.       add_info(c);
  1667.       yyval.code=0;
  1668.     ;
  1669.     break;}
  1670. case 91:
  1671. {
  1672.       emit_module_proc(yyvsp[-3].node,yyvsp[-4].ltrp);
  1673.       free_line(yyvsp[-3].node);
  1674.       yyval.code=0;
  1675.     ;
  1676.     break;}
  1677. case 92:
  1678. {
  1679.       emit_module_proc(LOCAL_VCB_ROOT,yyvsp[-3].ltrp);
  1680.       yyval.code=0;
  1681.     ;
  1682.     break;}
  1683. case 93:
  1684. {
  1685.       YYERROK;
  1686.       yyerror("Error in procedure's body");
  1687.     ;
  1688.     break;}
  1689. case 94:
  1690. {
  1691.       YYERROK;
  1692.       yyerror("Error in procedure's body");
  1693.     ;
  1694.     break;}
  1695. case 95:
  1696. {
  1697.       YYERROK;
  1698.       yyerror("Error in procedure's title");
  1699.     ;
  1700.     break;}
  1701. case 96:
  1702. {
  1703.       YYERROK;
  1704.       yyerror("Error: unexpected ';' found before procedure title");
  1705.     ;
  1706.     break;}
  1707. case 97:
  1708. { yyval.node = TNULL;;
  1709.     break;}
  1710. case 98:
  1711. { yyval.node = gen_up_node (ORDER, yyvsp[0].node, yylsp[-2]); ;
  1712.     break;}
  1713. case 99:
  1714. { yyval.node=yyvsp[0].node;;
  1715.     break;}
  1716. case 100:
  1717. { yyval.node=join_list(yyvsp[-2].node,yyvsp[0].node);;
  1718.     break;}
  1719. case 101:
  1720. {
  1721.       if(yyvsp[0].code)SetF_TRN(yyvsp[-1].node,DESC_F);
  1722.       yyval.node=yyvsp[-1].node;
  1723.     ;
  1724.     break;}
  1725. case 102:
  1726. { register TXTREF n=gen_object(SORT_POS,yylsp[0]);
  1727.       SORT_IND(n)= atol(STRING(CNST_NAME(yyvsp[0].node))) - 1;
  1728.       free_node(yyvsp[0].node);
  1729.       yyval.node=n;
  1730.     ;
  1731.     break;}
  1732. case 103:
  1733. {
  1734.       register TXTREF s=gen_node(SORT_COL);
  1735.       SORT_CLM(s)=yyvsp[0].node;
  1736.       yyval.node=s;
  1737.     ;
  1738.     break;}
  1739. case 104:
  1740. { yyval.code=0; ;
  1741.     break;}
  1742. case 105:
  1743. { yyval.code=0; ;
  1744.     break;}
  1745. case 106:
  1746. { yyval.code=1; ;
  1747.     break;}
  1748. case 107:
  1749. { yyval.node=yyvsp[0].node;              ;
  1750.     break;}
  1751. case 108:
  1752. { yyval.node=join_list(yyvsp[-2].node,yyvsp[0].node);;
  1753.     break;}
  1754. case 109:
  1755. {
  1756.      register TXTREF n;
  1757.      n=get_param(yyvsp[-1].ltrp,0,yylsp[-1]);
  1758.      if(!n)
  1759.        yyfatal("can`t add parameter");
  1760.      if(TstF_TRN(n,CHECKED_F))
  1761.        yyval.node = TNULL;
  1762.      else
  1763.        {
  1764.          PAR_STYPE(n)=yyvsp[0].type;
  1765.          SetF_TRN(n,CHECKED_F);
  1766.          n=copy_trn(n);
  1767.          RIGHT_TRN(n)=0;
  1768.          ClrF_TRN(n,VCB_F);
  1769.          yyval.node=n;
  1770.        }
  1771.    ;
  1772.     break;}
  1773. case 110:
  1774. {
  1775.      register TXTREF n;
  1776.      n=get_param(ltr_rec("SQLCODEP"),0,yylsp[0]);
  1777.      if(!n)
  1778.        yyfatal("can`t add parameter");
  1779.      if(TstF_TRN(n,CHECKED_F))
  1780.        yyval.node = TNULL;
  1781.      else
  1782.        {
  1783.          PAR_STYPE(n)=pack_type(SQLType_Int,0,0);
  1784.          SetF_TRN(n,CHECKED_F);
  1785.          SetF_TRN(n,OUT_F);
  1786.          n=copy_trn(n);
  1787.          RIGHT_TRN(n)=0;
  1788.          ClrF_TRN(n,VCB_F);
  1789.          yyval.node=n;
  1790.        }
  1791.    ;
  1792.     break;}
  1793. case 111:
  1794. {
  1795.       register TXTREF u=yyvsp[0].node;
  1796.       if(subquery)
  1797.         fprintf(stderr,
  1798.                 "Internal warning parse.y: Subquery flag not processedn");
  1799.       subquery=0;
  1800.       if (u != FICTIVE_NODE)
  1801.         {
  1802.           if (u)
  1803.             {
  1804.               STMT_VCB(u)=LOCAL_VCB_ROOT;
  1805.               add_statement(u);
  1806.               emit_call(LOCAL_VCB_ROOT,STMT_UID(u),0);
  1807.               del_local_vcb=0;
  1808.             }
  1809.           else
  1810.             {
  1811.               yyval.node = TNULL;
  1812.               /* dummy operator */
  1813.             }
  1814.         }
  1815.       yyval.node=yyvsp[0].node;
  1816.     ;
  1817.     break;}
  1818. case 121:
  1819. {
  1820.       if(!yyvsp[0].node)
  1821.         yyval.node = TNULL;
  1822.       else
  1823.         {
  1824.           emit_call (TNULL, STMT_UID(CUR_DECL(yyvsp[0].node)), 2);
  1825.           yyval.node=FICTIVE_NODE;
  1826.           del_local_vcb=1;
  1827.         }
  1828.     ;
  1829.     break;}
  1830. case 122:
  1831. {
  1832.       dyn_sql_section_id = -2; /* !! */
  1833.       del_local_vcb=1;
  1834.       emit_call (TNULL,dyn_sql_section_id,2);
  1835.       yyval.node=FICTIVE_NODE;
  1836.     ;
  1837.     break;}
  1838. case 123:
  1839. {
  1840.       register TXTREF u=yyvsp[-1].node;
  1841.       u=gen_up_node(DELETE,u,yylsp[-3]);
  1842.       add_child(u,yyvsp[0].node);
  1843.       yyval.node=u;
  1844.     ;
  1845.     break;}
  1846. case 124:
  1847. {
  1848.       yyval.node = TNULL;
  1849.       if(yyvsp[0].node)
  1850.         {
  1851.           register TXTREF c,d;
  1852.           c = yyvsp[0].node;
  1853.           emit_call(LOCAL_VCB_ROOT,STMT_UID(CUR_DECL(c)),3);
  1854.           d = gen_up_node (DELETE, TNULL, yylsp[-1]);
  1855.           UPD_CURS(d) = c;
  1856.           STMT_VCB(d) = LOCAL_VCB_ROOT;
  1857.           LOCAL_VCB_ROOT = TNULL;
  1858.           add_statement(d);
  1859.           yyval.node = FICTIVE_NODE;
  1860.         }
  1861.       else
  1862.         {
  1863.           free_tree(yyvsp[0].node);
  1864.           FREE_VCB;
  1865.         }
  1866.     ;
  1867.     break;}
  1868. case 125:
  1869. {
  1870.       yyval.node = TNULL;
  1871.       if(yyvsp[0].node)
  1872.         {
  1873.           register TXTREF c,d;
  1874.           c = yyvsp[0].node;
  1875.           emit_call(LOCAL_VCB_ROOT,STMT_UID(CUR_DECL(c)),3);
  1876.           d = gen_up_node (DELETE, yyvsp[-1].node, yylsp[-3]);
  1877.           UPD_CURS(d) = c;
  1878.           STMT_VCB(d) = LOCAL_VCB_ROOT;
  1879.           LOCAL_VCB_ROOT = TNULL;
  1880.           add_statement(d);
  1881.           yyval.node = FICTIVE_NODE;
  1882.         }
  1883.       else
  1884.         {
  1885.           free_tree(yyvsp[-1].node);
  1886.           FREE_VCB;
  1887.         }
  1888.     ;
  1889.     break;}
  1890. case 126:
  1891. {
  1892.       yyval.node = TNULL;
  1893.       if(yyvsp[-2].node)
  1894.         {
  1895.           register TXTREF u;
  1896.           yyval.node=FICTIVE_NODE;
  1897.           u=gen_object(FETCH,yylsp[-3]);
  1898.           STMT_VCB(u)=LOCAL_VCB_ROOT;
  1899.           SetF_TRN(u,HAS_VCB_F);
  1900.           STMT_UID(u) = ARITY_TRN(CUR_DECL(yyvsp[-2].node));
  1901.           add_child(CUR_DECL(yyvsp[-2].node),u);
  1902.           emit_call(LOCAL_VCB_ROOT,STMT_UID(CUR_DECL(yyvsp[-2].node)),1);
  1903.           LOCAL_VCB_ROOT = TNULL;
  1904.         }
  1905.       free_line(yyvsp[0].node);
  1906.       if (yyval.node == TNULL)
  1907.         {
  1908.           FREE_VCB;
  1909.         }
  1910.     ;
  1911.     break;}
  1912. case 127:
  1913. {
  1914.        register TXTREF i;
  1915.        i=gen_object(INSERT,yylsp[-4]);
  1916.        add_child(i,yyvsp[-2].node);
  1917.        if(yyvsp[-1].node)
  1918.          {
  1919.            add_child(i,gen_parent(INTO,yyvsp[-1].node));
  1920.            SetF_TRN(i,COLUMNS_F);
  1921.          }
  1922.        add_child(i,yyvsp[0].node);
  1923.        if(CODE_TRN(yyvsp[0].node)==QUERY)SetF_TRN(i,QUERY_F);
  1924.        yyval.node=i;
  1925.      ;
  1926.     break;}
  1927. case 128:
  1928. { yyval.node=gen_up_node(IVALUES,yyvsp[-1].node,yylsp[-3]); ;
  1929.     break;}
  1930. case 129:
  1931. { yyval.node=yyvsp[0].node;;
  1932.     break;}
  1933. case 130:
  1934. { yyval.node=yyvsp[0].node;;
  1935.     break;}
  1936. case 131:
  1937. { yyval.node=join_list(yyvsp[-2].node,yyvsp[0].node);;
  1938.     break;}
  1939. case 132:
  1940. { yyval.node=yyvsp[0].node;  ;
  1941.     break;}
  1942. case 133:
  1943. {
  1944.      if(!yyvsp[0].node)
  1945.        yyval.node = TNULL;
  1946.      else
  1947.        {
  1948.          register TXTREF u=yyvsp[0].node,v;
  1949.          register TXTREF vcb=LOCAL_VCB_ROOT;
  1950.          u=STMT_VCB (DOWN_TRN (CUR_DECL(u)));
  1951.          LOCAL_VCB_ROOT=u;
  1952.          for(v=vcb;v;v=RIGHT_TRN(v))
  1953.            if(CODE_TRN(v)==PARAMETER)
  1954.              {
  1955.                u=find_info(PARAMETER,PAR_NAME(v));
  1956.                if(!u)
  1957.                  continue;
  1958.                if(PAR_STYPE(u).code==0)
  1959.                  PAR_STYPE(u)=PAR_STYPE(v);
  1960.                else if (PAR_STYPE(u).code!=PAR_STYPE(v).code)
  1961.                  yyerror("Error: Mismath operand types");
  1962.              }
  1963.          emit_call(LOCAL_VCB_ROOT,STMT_UID(CUR_DECL(yyvsp[0].node)),0);
  1964.          LOCAL_VCB_ROOT=vcb;
  1965.          yyval.node=FICTIVE_NODE;
  1966.          del_local_vcb=1;
  1967.        }
  1968.    ;
  1969.     break;}
  1970. case 134:
  1971. {
  1972.      yyval.node=FICTIVE_NODE;
  1973.      dyn_sql_section_id = -1; /* !! */
  1974.      emit_call (TNULL,dyn_sql_section_id,0);
  1975.      del_local_vcb=1;
  1976.     ;
  1977.     break;}
  1978. case 135:
  1979. {
  1980.       register TXTREF S=gen_object(SELECT,yylsp[-5]),s=yyvsp[-3].node,t;
  1981.       t=gen_up_node(INTO,yyvsp[-1].node,yylsp[-2]);
  1982.       MASK_TRN(S)  = MASK_TRN(yyvsp[0].node);
  1983.       DOWN_TRN(S)  = DOWN_TRN(yyvsp[0].node);
  1984.       ARITY_TRN(S) = ARITY_TRN(yyvsp[0].node);
  1985.       free_node(yyvsp[0].node);
  1986.       if(yyvsp[-4].code)SetF_TRN(S,DISTINCT_F);
  1987.       RIGHT_TRN(t)=RIGHT_TRN(DOWN_TRN(S));      /* insert after from */
  1988.       RIGHT_TRN(s)=t;
  1989.       RIGHT_TRN(DOWN_TRN(S))=s;
  1990.       ARITY_TRN(S)+=2;
  1991.       yyval.node=S;
  1992.     ;
  1993.     break;}
  1994. case 136:
  1995. { yyval.code=0;;
  1996.     break;}
  1997. case 137:
  1998. { yyval.code=1;;
  1999.     break;}
  2000. case 138:
  2001. {
  2002.       register TXTREF u=
  2003.        join_list(join_list(yyvsp[-3].node,gen_parent(ASSLIST,yyvsp[-1].node)),yyvsp[0].node);
  2004.       yyval.node=gen_up_node(UPDATE,u,yylsp[-4]);
  2005.     ;
  2006.     break;}
  2007. case 139:
  2008. {
  2009.       register TXTREF u = TNULL;
  2010.       if (yyvsp[0].node)
  2011.         {
  2012.           u=gen_up_node(UPDATE,join_list(yyvsp[-3].node,
  2013.                                          gen_parent(ASSLIST,yyvsp[-1].node)),yylsp[-4]);
  2014.           UPD_CURS(u)=yyvsp[0].node;
  2015.           SetF_TRN(yyvsp[0].node,CURS_UPD_F);
  2016.         }
  2017.       yyval.node=u;
  2018.     ;
  2019.     break;}
  2020. case 140:
  2021. { yyval.node=yyvsp[0].node;;
  2022.     break;}
  2023. case 141:
  2024. { yyval.node=join_list(yyvsp[-2].node,yyvsp[0].node);;
  2025.     break;}
  2026. case 142:
  2027. {
  2028.       yyval.node=gen_up_node(ASSIGN,
  2029.                   join_list(gen_column(NULL,yyvsp[-2].ltrp,yylsp[-2]),yyvsp[0].node),
  2030.                            yylsp[-1]);
  2031.     ;
  2032.     break;}
  2033. case 143:
  2034. { yyval.node=yyvsp[0].node;  ;
  2035.     break;}
  2036. case 144:
  2037. { yyval.node=yyvsp[0].node;  ;
  2038.     break;}
  2039. case 145:
  2040. { yyval.node=gen_object(NULL_VL,yylsp[0]);  ;
  2041.     break;}
  2042. case 146:
  2043. { yyval.node=yyvsp[0].node; ;
  2044.     break;}
  2045. case 147:
  2046. {
  2047.       register TXTREF n=yyvsp[-3].node;
  2048.       if ( (CODE_TRN(n)==UNION) && ((yyvsp[-1].code==0) || TstF_TRN(n,ALL_F) ))
  2049.         {
  2050.           add_child(n,yyvsp[0].node);
  2051.           if(yyvsp[-1].code==0)
  2052.             ClrF_TRN(n,ALL_F);
  2053.         }
  2054.       else
  2055.         {
  2056.           n=gen_up_node(UNION,join_list(yyvsp[-3].node,yyvsp[0].node),yylsp[-2]);
  2057.           if(yyvsp[-1].code > 0)
  2058.             SetF_TRN(n,ALL_F);
  2059.         }
  2060.       yyval.node=n;
  2061.     ;
  2062.     break;}
  2063. case 148:
  2064. { yyval.node=yyvsp[0].node; ;
  2065.     break;}
  2066. case 149:
  2067. { yyval.node=yyvsp[-1].node; ;
  2068.     break;}
  2069. case 150:
  2070. { yyval.node=yyvsp[-1].node; ;
  2071.     break;}
  2072. case 151:
  2073. {
  2074.       register TXTREF q=yyvsp[0].node,s=yyvsp[-1].node;
  2075.       set_location(q,yylsp[-3]);
  2076.       CODE_TRN(q)=QUERY;
  2077.       if(yyvsp[-2].code)SetF_TRN(q,DISTINCT_F);
  2078.       RIGHT_TRN(s)=RIGHT_TRN(DOWN_TRN(q));     /* insert after from */
  2079.       RIGHT_TRN(DOWN_TRN(q))=s;
  2080.       ARITY_TRN(q)++;
  2081.       yyval.node=q;
  2082.     ;
  2083.     break;}
  2084. case 152:
  2085. {
  2086.       yyval.node=gen_parent(SELECTION,yyvsp[0].node);
  2087.     ;
  2088.     break;}
  2089. case 153:
  2090. {
  2091.       yyval.node=gen_parent(SELECTION,gen_object(STAR,yylsp[0]));
  2092.     ;
  2093.     break;}
  2094. case 154:
  2095. { yyval.node=yyvsp[0].node;;
  2096.     break;}
  2097. case 155:
  2098. { yyval.node=join_list(yyvsp[-2].node,yyvsp[0].node);;
  2099.     break;}
  2100. case 156:
  2101. {
  2102.       register TXTREF tbl;
  2103.       tbl=gen_parent(TBLEXP,join_list(
  2104.                               join_list(
  2105.                                 join_list(yyvsp[-3].node,yyvsp[-2].node),
  2106.                                 yyvsp[-1].node),
  2107.                               yyvsp[0].node));
  2108.       if(yyvsp[-2].node)SetF_TRN(tbl,WHERE_F);
  2109.       if(yyvsp[-1].node)SetF_TRN(tbl,GROUP_F);
  2110.       if(yyvsp[0].node)SetF_TRN(tbl,HAVING_F);
  2111.       if(subquery)SetF_TRN(tbl,SUBQUERY_F);
  2112.       subquery=0;
  2113.       yyval.node=tbl;
  2114.     ;
  2115.     break;}
  2116. case 157:
  2117. {
  2118.       yyval.node=gen_up_node(FROM,yyvsp[0].node,yylsp[-1]);
  2119.     ;
  2120.     break;}
  2121. case 158:
  2122. { yyval.node=yyvsp[0].node;;
  2123.     break;}
  2124. case 159:
  2125. { yyval.node=join_list(yyvsp[-2].node,yyvsp[0].node);;
  2126.     break;}
  2127. case 160:
  2128. {
  2129.       yyval.node = gen_scanptr (yyvsp[-1].node, yyvsp[0].ltrp, yylsp[0]);
  2130.     ;
  2131.     break;}
  2132. case 161:
  2133. {
  2134.       yyval.node = gen_scanptr (yyvsp[0].node, (LTRLREF) NULL, tblnm.p);
  2135.     ;
  2136.     break;}
  2137. case 162:
  2138. { yyval.node = TNULL;    ;
  2139.     break;}
  2140. case 163:
  2141. { yyval.node = yyvsp[0].node;;
  2142.     break;}
  2143. case 164:
  2144. {
  2145.       yyval.node=gen_up_node(WHERE,yyvsp[0].node,yylsp[-1]);
  2146.     ;
  2147.     break;}
  2148. case 165:
  2149. { yyval.node=yyvsp[0].node; ;
  2150.     break;}
  2151. case 166:
  2152. {
  2153.       register TXTREF cursor=find_info(CURSOR,yyvsp[0].ltrp);
  2154.       if(!cursor)
  2155.         lperror("Cursor name '%s' not  found ",STRING(yyvsp[0].ltrp));
  2156.       yyval.node=cursor;
  2157.     ;
  2158.     break;}
  2159. case 167:
  2160. { yyval.node = TNULL;    ;
  2161.     break;}
  2162. case 168:
  2163. {
  2164.       yyval.node = gen_up_node (GROUP, yyvsp[0].node, yylsp[-2]);
  2165.     ;
  2166.     break;}
  2167. case 169:
  2168. { yyval.node = TNULL;    ;
  2169.     break;}
  2170. case 170:
  2171. {
  2172.       yyval.node = gen_up_node (HAVING, yyvsp[0].node, yylsp[-1]);
  2173.     ;
  2174.     break;}
  2175. case 171:
  2176. { yyval.node=yyvsp[0].node; ;
  2177.     break;}
  2178. case 172:
  2179. { yyval.node=yyvsp[-1].node; ;
  2180.     break;}
  2181. case 173:
  2182. { yyval.node=gen_oper(OR,yyvsp[-2].node,yyvsp[0].node,yylsp[-1]); ;
  2183.     break;}
  2184. case 174:
  2185. { yyval.node=gen_oper(AND,yyvsp[-2].node,yyvsp[0].node,yylsp[-1]); ;
  2186.     break;}
  2187. case 175:
  2188. {
  2189.       TXTREF n=gen_node(NOT);
  2190.       set_location(n,yylsp[-1]);
  2191.       FUNC_OBJ(n)=yyvsp[0].node;
  2192.       ARITY_TRN(n)=1;
  2193.       yyval.node=n;
  2194.     ;
  2195.     break;}
  2196. case 176:
  2197. {
  2198.       yyval.node=TNULL;
  2199.       YYERROK;
  2200.       yyerror("error in condition");
  2201.     ;
  2202.     break;}
  2203. case 177:
  2204. {
  2205.       yyval.node=TNULL;
  2206.       YYERROK;
  2207.       yyerror("error in condition");
  2208.     ;
  2209.     break;}
  2210. case 178:
  2211. {
  2212.       yyval.node=TNULL;
  2213.       YYERROK;
  2214.       yyerror("error in condition");
  2215.     ;
  2216.     break;}
  2217. case 179:
  2218. {
  2219.       yyval.node=gen_up_node(EXISTS,yyvsp[0].node,yylsp[-1]);
  2220.     ;
  2221.     break;}
  2222. case 180:
  2223. {
  2224.       yyval.node=gen_up_node((yyvsp[-1].code?ISNOTNULL:ISNULL),
  2225.                            coltar_column(yyvsp[-3].node),yylsp[-2]);
  2226.     ;
  2227.     break;}
  2228. case 181:
  2229. {
  2230.       register TXTREF b;
  2231.       b=gen_up_node(BETWEEN,join_list(join_list(yyvsp[-5].node,yyvsp[-2].node),
  2232.                                       yyvsp[0].node),yylsp[-3]);
  2233.       if (yyvsp[-4].code)
  2234.         b=gen_parent(NOT,b);
  2235.       yyval.node=b;
  2236.     ;
  2237.     break;}
  2238. case 182:
  2239. {
  2240.       register TXTREF l;
  2241.       l=gen_up_node(LIKE,join_list(join_list(coltar_column(yyvsp[-4].node),
  2242.                                              yyvsp[-1].node),yyvsp[0].node),yylsp[-2]);
  2243.       if ( yyvsp[-3].code)
  2244.         l = gen_parent(NOT,l);
  2245.       yyval.node=l;
  2246.     ;
  2247.     break;}
  2248. case 183:
  2249. {
  2250.       register TXTREF i;
  2251.       i = gen_up_node(IN,join_list(yyvsp[-3].node,yyvsp[0].node),yylsp[-1]);
  2252.       if ( yyvsp[-2].code)
  2253.         i = gen_parent(NOT,i);
  2254.       yyval.node=i;
  2255.     ;
  2256.     break;}
  2257. case 184:
  2258. {
  2259.       TXTREF c = yyvsp[0].node;
  2260.       if (CODE_TRN(c) == NE)  /* quantified subquery */
  2261.         {
  2262.           CODE_TRN(c) = yyvsp[-1].code;
  2263.           DOWN_TRN(c) = join_list(yyvsp[-2].node,DOWN_TRN(c));
  2264.           yyval.node = c;
  2265.         }
  2266.       else
  2267.         yyval.node=gen_up_node(yyvsp[-1].code,join_list(yyvsp[-2].node,c),yylsp[-1]);
  2268.     ;
  2269.     break;}
  2270. case 185:
  2271. { yyval.node=yyvsp[0].node; ;
  2272.     break;}
  2273. case 186:
  2274. { yyval.node=yyvsp[0].node; ;
  2275.     break;}
  2276. case 187:
  2277. {
  2278.       register TXTREF c = yyvsp[0].node;
  2279.       c=gen_parent(NE,c);
  2280.       SetF_TRN(c,QUANTIF_F);
  2281.       if(yyvsp[-1].code==2) SetF_TRN(c,SOME_F);
  2282.       yyval.node=c;
  2283.     ;
  2284.     break;}
  2285. case 188:
  2286. { yyval.code=EQU; ;
  2287.     break;}
  2288. case 189:
  2289. { yyval.code=NE;  ;
  2290.     break;}
  2291. case 190:
  2292. { yyval.code=LT;  ;
  2293.     break;}
  2294. case 191:
  2295. { yyval.code=GT;  ;
  2296.     break;}
  2297. case 192:
  2298. { yyval.code=LE;  ;
  2299.     break;}
  2300. case 193:
  2301. { yyval.code=GE;  ;
  2302.     break;}
  2303. case 194:
  2304. { yyval.code=1; ;
  2305.     break;}
  2306. case 195:
  2307. { yyval.code=2; ;
  2308.     break;}
  2309. case 196:
  2310. { yyval.code=2; ;
  2311.     break;}
  2312. case 197:
  2313. { yyval.code=0; ;
  2314.     break;}
  2315. case 198:
  2316. { yyval.code=1; ;
  2317.     break;}
  2318. case 199:
  2319. { yyval.node = TNULL; ;
  2320.     break;}
  2321. case 200:
  2322. { yyval.node = yyvsp[0].node; ;
  2323.     break;}
  2324. case 201:
  2325. { yyval.node=yyvsp[0].node;;
  2326.     break;}
  2327. case 202:
  2328. { yyval.node=gen_parent(VALUES,yyvsp[-1].node); ;
  2329.     break;}
  2330. case 203:
  2331. {
  2332.       yyval.node=TNULL;
  2333.       YYERROK;
  2334.       yyerror("error in IN predicate list" );
  2335.     ;
  2336.     break;}
  2337. case 204:
  2338. { yyval.node=yyvsp[0].node;;
  2339.     break;}
  2340. case 205:
  2341. { yyval.node=join_list(yyvsp[-2].node,yyvsp[0].node);;
  2342.     break;}
  2343. case 206:
  2344. {
  2345.       register TXTREF sq=yyvsp[-1].node,s=yyvsp[-2].node;
  2346.       set_location(sq,yylsp[-5]);
  2347.       CODE_TRN(sq)=SUBQUERY;
  2348.       if(yyvsp[-3].code)SetF_TRN(sq,DISTINCT_F);
  2349.       RIGHT_TRN(s)=RIGHT_TRN(DOWN_TRN(sq));     /* insert after from */
  2350.       RIGHT_TRN(DOWN_TRN(sq))=s;
  2351.       ARITY_TRN(sq)++;
  2352.       subquery=1;
  2353.       yyval.node=sq;
  2354.     ;
  2355.     break;}
  2356. case 207:
  2357.      yyerror("Error in subquery: skipped to ')'");
  2358.      yyval.node = TNULL; 
  2359.    ;
  2360.     break;}
  2361. case 208:
  2362. {
  2363.       yyval.node=gen_parent(RESULT,yyvsp[0].node);
  2364.     ;
  2365.     break;}
  2366. case 209:
  2367. {
  2368.       yyval.node=gen_parent(RESULT,gen_object(STAR,yylsp[0]));
  2369.     ;
  2370.     break;}
  2371. case 210:
  2372. { yyval.code=0; ;
  2373.     break;}
  2374. case 211:
  2375. { yyval.code=1; ;
  2376.     break;}
  2377. case 212:
  2378. { yyval.node=yyvsp[0].node; ;
  2379.     break;}
  2380. case 213:
  2381. { yyval.node=yyvsp[-1].node; ;
  2382.     break;}
  2383. case 214:
  2384. { yyval.node=gen_oper(ADD,yyvsp[-2].node,yyvsp[0].node,yylsp[-1]); ;
  2385.     break;}
  2386. case 215:
  2387. { yyval.node=gen_oper(SUB,yyvsp[-2].node,yyvsp[0].node,yylsp[-1]); ;
  2388.     break;}
  2389. case 216:
  2390. { yyval.node=gen_oper(MULT,yyvsp[-2].node,yyvsp[0].node,yylsp[-1]); ;
  2391.     break;}
  2392. case 217:
  2393. { yyval.node=gen_oper(DIV,yyvsp[-2].node,yyvsp[0].node,yylsp[-1]); ;
  2394.     break;}
  2395. case 218:
  2396. {
  2397.       TXTREF n=yyvsp[-1].node;
  2398.       if(!n)
  2399.         yyval.node=yyvsp[0].node;
  2400.       else
  2401.         if(CODE_TRN(yyvsp[0].node)==UMINUS)
  2402.           {
  2403.             yyval.node=FUNC_OBJ(yyvsp[0].node);
  2404.             free_node(yyvsp[0].node);     /* double minus elimination */
  2405.             free_node(yyvsp[-1].node);
  2406.           }
  2407.         else
  2408.           {
  2409.             FUNC_OBJ(n)=yyvsp[0].node;
  2410.             ARITY_TRN(n)=1;
  2411.             yyval.node=n;
  2412.           }
  2413.     ;
  2414.     break;}
  2415. case 219:
  2416. {   yyval.node = TNULL;           ;
  2417.     break;}
  2418. case 220:
  2419. {   yyval.node = gen_object (UMINUS, yylsp[0]); ;
  2420.     break;}
  2421. case 221:
  2422. { yyval.node=yyvsp[0].node; ;
  2423.     break;}
  2424. case 222:
  2425. { yyval.node=yyvsp[0].node; ;
  2426.     break;}
  2427. case 223:
  2428. { yyval.node=yyvsp[0].node; ;
  2429.     break;}
  2430. case 224:
  2431. {  yyval.node=gen_object(USERNAME,yylsp[0]); ;
  2432.     break;}
  2433. case 225:
  2434. { yyval.node=yyvsp[0].node; ;
  2435.     break;}
  2436. case 226:
  2437. { yyval.node=yyvsp[0].node; ;
  2438.     break;}
  2439. case 227:
  2440. {
  2441.       TXTREF n = yyvsp[-1].node;
  2442.       if ( ! n )
  2443.         yyval.node = yyvsp[0].node;
  2444.       else
  2445.         {
  2446.           char *s;
  2447.           i4_t  l;
  2448.           free_node (n);
  2449.           yyval.node = n = yyvsp[0].node;
  2450.           l = strlen (STRING (CNST_NAME (n))) + 2;
  2451.           s = xmalloc (l);
  2452.           strcpy (s, "-");
  2453.           strcat (s, STRING(CNST_NAME(n)));
  2454.           CNST_NAME (n) = ltr_rec (s);
  2455.           xfree (s);
  2456.         }
  2457.     ;
  2458.     break;}
  2459. case 228:
  2460. {  yyval.node = gen_object(USERNAME,yylsp[0]); ;
  2461.     break;}
  2462. case 229:
  2463. {
  2464.       yyval.node=gen_func(COUNT,yylsp[-3], TNULL,0);
  2465.     ;
  2466.     break;}
  2467. case 230:
  2468. {
  2469.       yyval.node=gen_func(COUNT,yylsp[-4],yyvsp[-1].node,1);
  2470.     ;
  2471.     break;}
  2472. case 231:
  2473. {
  2474.       yyval.node=gen_func(yyvsp[-4].code,yylsp[-4],yyvsp[-1].node,1);
  2475.     ;
  2476.     break;}
  2477. case 232:
  2478. {
  2479.       yyval.node=gen_func(yyvsp[-4].code,yylsp[-4],yyvsp[-1].node,0);
  2480.     ;
  2481.     break;}
  2482. case 233:
  2483. { yyval.code=AVG; ;
  2484.     break;}
  2485. case 234:
  2486. { yyval.code=MAX; ;
  2487.     break;}
  2488. case 235:
  2489. { yyval.code=MIN; ;
  2490.     break;}
  2491. case 236:
  2492. { yyval.code=SUM; ;
  2493.     break;}
  2494. case 237:
  2495. { yyval.node=yyvsp[0].node; ;
  2496.     break;}
  2497. case 238:
  2498. { yyval.node=yyvsp[0].node; ;
  2499.     break;}
  2500. case 239:
  2501. { yyval.node=yyvsp[0].node; ;
  2502.     break;}
  2503. case 240:
  2504. { yyval.node=yyvsp[0].node; ;
  2505.     break;}
  2506. case 241:
  2507. { yyval.type=pack_type(SQLType_Char,1,0);                        ;
  2508.     break;}
  2509. case 242:
  2510. { yyval.type=pack_type(SQLType_Short,5,0);                       ;
  2511.     break;}
  2512. case 243:
  2513. { yyval.type=pack_type(SQLType_Int,10,0);                        ;
  2514.     break;}
  2515. case 244:
  2516. { yyval.type=pack_type(SQLType_Real,0,0);                        ;
  2517.     break;}
  2518. case 245:
  2519. { yyval.type=pack_type(SQLType_Double,0,0);                      ;
  2520.     break;}
  2521. case 246:
  2522. { yyval.type=pack_type(SQLType_Double,0,0);                      ;
  2523.     break;}
  2524. case 247:
  2525. { yyval.type=pack_type(SQLType_Float,atol(STRING(CNST_NAME(yyvsp[-1].node))),0);  ;
  2526.     break;}
  2527. case 248:
  2528. { yyval.type=pack_type(SQLType_Real,0,0);  ;
  2529.     break;}
  2530. case 249:
  2531. { yyval.type=pack_type(SQLType_Char,atol(STRING(CNST_NAME(yyvsp[-1].node))),0);   ;
  2532.     break;}
  2533. case 250:
  2534. { yyval.type=pack_type(SQLType_Int,0,0);    ;
  2535.     break;}
  2536. case 251:
  2537. { yyval.type=pack_type(SQLType_Num,atol(STRING(CNST_NAME(yyvsp[-1].node))),0);    ;
  2538.     break;}
  2539. case 252:
  2540. { yyval.type=pack_type(SQLType_Num,atol(STRING(CNST_NAME(yyvsp[-3].node))),
  2541.                            atol(STRING(CNST_NAME(yyvsp[-1].node))));
  2542.      ;
  2543.     break;}
  2544. case 253:
  2545. {
  2546.        TXTREF n;
  2547.        if(!tblnm.a)
  2548.          tblnm.a=GL_AUTHOR;
  2549.        n = find_table (ANY_TBL, tblnm.a, tblnm.n);
  2550.        if (n)
  2551.          {
  2552.            yyerror ("Error: Duplicate table name definitionn");
  2553.            yyval.node = TNULL;
  2554.          }
  2555.        else
  2556.          {
  2557.            n = gen_node (ANY_TBL);
  2558.            /* SetF_TRN(n,CHECKED_F); */
  2559.            /* table hasn't  not already defined yet */
  2560.            TBL_FNAME (n) = tblnm.a;
  2561.            TBL_NAME (n) = tblnm.n;
  2562.            add_info (n);
  2563.            yyval.node = new_table = n;
  2564.    new_table_col_no = 0;
  2565.          }
  2566.      ;
  2567.     break;}
  2568. case 254:
  2569. {
  2570.        TXTREF n;
  2571.        if (!tblnm.a)
  2572.          tblnm.a=GL_AUTHOR;
  2573.        n = find_table (ANY_TBL, tblnm.a, tblnm.n);
  2574.        if (!n)
  2575.          {
  2576.            n = gen_node (ANY_TBL);
  2577.            TBL_FNAME (n) = tblnm.a;
  2578.            TBL_NAME (n) = tblnm.n;
  2579.            add_info (n);
  2580.          }
  2581.        yyval.node = n;
  2582.      ;
  2583.     break;}
  2584. case 255:
  2585. {
  2586.        yyval.node = gen_scanptr (yyvsp[0].node, (LTRLREF) NULL, tblnm.p);
  2587.      ;
  2588.     break;}
  2589. case 256:
  2590. { /*  user_identifier.tablename  or correlation name */
  2591.       tblnm.a  = (LTRLREF) NULL;
  2592.       tblnm.n  = yyvsp[0].ltrp;
  2593.       tblnm.p  = yylsp[0];
  2594.       yyval.code = 0;
  2595.     ;
  2596.     break;}
  2597. case 257:
  2598. { /* authorization.tablename */
  2599.       tblnm.a  = yyvsp[-2].ltrp;
  2600.       tblnm.n  = yyvsp[0].ltrp;
  2601.       tblnm.p  = yylsp[-2];
  2602.       yyval.code = 0;
  2603.     ;
  2604.     break;}
  2605. case 258:
  2606. { yyval.node = yyvsp[0].node;                     ;
  2607.     break;}
  2608. case 259:
  2609. { yyval.node = join_list(yyvsp[-2].node,yyvsp[0].node); ;
  2610.     break;}
  2611. case 260:
  2612. {  yyval.node=gen_column(NULL,yyvsp[0].ltrp,yylsp[0]);  ;
  2613.     break;}
  2614. case 261:
  2615. { /*  user_identifier.tablename  or correlation name */
  2616.       tblnm.a  = (LTRLREF) NULL;
  2617.       tblnm.n  = yyvsp[-2].ltrp;
  2618.       tblnm.p  = yylsp[-2];
  2619.       yyval.node = gen_column (&tblnm, yyvsp[0].ltrp, yylsp[0]);
  2620.     ;
  2621.     break;}
  2622. case 262:
  2623. { /* authorization.tablename */
  2624.       tblnm.a  = yyvsp[-4].ltrp;
  2625.       tblnm.n  = yyvsp[-2].ltrp;
  2626.       tblnm.p  = yylsp[-4];
  2627.       yyval.node = gen_column (&tblnm, yyvsp[0].ltrp, yylsp[0]);
  2628.     ;
  2629.     break;}
  2630. case 263:
  2631. { yyval.node=yyvsp[0].node;                     ;
  2632.     break;}
  2633. case 264:
  2634. { yyval.node=join_list(yyvsp[-2].node,yyvsp[0].node); ;
  2635.     break;}
  2636. case 265:
  2637. {
  2638.       register TXTREF t=OBJ_DESC(yyvsp[0].node);
  2639.       SetF_TRN(t,OUT_F);
  2640.   if( !TstF_TRN(t,INDICATOR_F) && PAR_INDICATOR(t) != TNULL )
  2641.     SetF_TRN(PAR_INDICATOR(t),OUT_F);
  2642.       yyval.node=yyvsp[0].node;
  2643.     ;
  2644.     break;}
  2645. case 266:
  2646. {  yyval.node=get_parm_node(yyvsp[0].ltrp,yylsp[0],1);  ;
  2647.     break;}
  2648. case 267:
  2649. {  yyval.node=get_parm_node(yyvsp[0].ltrp,yylsp[0],0);  ;
  2650.     break;}
  2651. case 268:
  2652. {
  2653.       yyval.node=get_ind(get_param(yyvsp[-2].ltrp,1,yylsp[-2]),get_param(yyvsp[0].ltrp,1,yylsp[0]),yylsp[-1]);
  2654.     ;
  2655.     break;}
  2656. case 269:
  2657. {
  2658.       yyval.node=get_ind(get_param(yyvsp[-1].ltrp,1,yylsp[-1]),get_param(yyvsp[0].ltrp,1,yylsp[0]),yylsp[0]);
  2659.     ;
  2660.     break;}
  2661. case 270:
  2662. {
  2663.       yyval.node=get_ind(get_param(yyvsp[-2].ltrp,0,yylsp[-2]),get_param(yyvsp[0].ltrp,0,yylsp[0]),yylsp[-1]);
  2664.     ;
  2665.     break;}
  2666. case 271:
  2667. {
  2668.       yyval.node=get_ind(get_param(yyvsp[-1].ltrp,0,yylsp[-1]),get_param(yyvsp[0].ltrp,0,yylsp[0]),yylsp[0]);
  2669.     ;
  2670.     break;}
  2671. case 272:
  2672. {
  2673.        TXTREF n;
  2674.        n=find_info(PARAMETER,yyvsp[0].ltrp);
  2675.        if(n)
  2676.          yyval.node=get_parm_node(yyvsp[0].ltrp,yylsp[0],1);
  2677.        else
  2678.          yyval.node=gen_column(NULL,yyvsp[0].ltrp,yylsp[0]);
  2679.      ;
  2680.     break;}
  2681. case 273:
  2682. { /*  user_identifier.tablename  or correlation name */
  2683.       tblnm.a  = (LTRLREF) NULL;
  2684.       tblnm.n  = yyvsp[-2].ltrp;
  2685.       tblnm.p  = yylsp[-2];
  2686.       yyval.node = gen_column (&tblnm, yyvsp[0].ltrp, yylsp[0]);
  2687.     ;
  2688.     break;}
  2689. case 274:
  2690. { /* authorization.tablename */
  2691.       tblnm.a  = yyvsp[-4].ltrp;
  2692.       tblnm.n  = yyvsp[-2].ltrp;
  2693.       tblnm.p  = yylsp[-4];
  2694.       yyval.node = gen_column (&tblnm, yyvsp[0].ltrp, yylsp[0]);
  2695.     ;
  2696.     break;}
  2697. case 275:
  2698. { yyval.node=get_parm_node(yyvsp[0].ltrp,yylsp[0],0);     ;
  2699.     break;}
  2700. case 276:
  2701. {
  2702.        yyval.node=get_ind(get_param(yyvsp[-2].ltrp,1,yylsp[-2]),get_param(yyvsp[0].ltrp,1,yylsp[0]),yylsp[-1]);
  2703.      ;
  2704.     break;}
  2705. case 277:
  2706. {
  2707.        yyval.node=get_ind(get_param(yyvsp[-1].ltrp,1,yylsp[-1]),get_param(yyvsp[0].ltrp,1,yylsp[0]),yylsp[0]);
  2708.      ;
  2709.     break;}
  2710. case 278:
  2711. {
  2712.        yyval.node=get_ind(get_param(yyvsp[-2].ltrp,0,yylsp[-2]),get_param(yyvsp[0].ltrp,0,yylsp[0]),yylsp[-1]);
  2713.      ;
  2714.     break;}
  2715. case 279:
  2716. {
  2717.        yyval.node=get_ind(get_param(yyvsp[-1].ltrp,0,yylsp[-1]),get_param(yyvsp[0].ltrp,0,yylsp[0]),yylsp[0]);
  2718.      ;
  2719.     break;}
  2720. }
  2721.    /* the action file gets copied in in place of this dollarsign */
  2722.   yyvsp -= yylen;
  2723.   yyssp -= yylen;
  2724. #ifdef YYLSP_NEEDED
  2725.   yylsp -= yylen;
  2726. #endif
  2727. #if YYDEBUG != 0
  2728.   if (yydebug)
  2729.     {
  2730.       short *ssp1 = yyss - 1;
  2731.       fprintf (stderr, "state stack now");
  2732.       while (ssp1 != yyssp)
  2733. fprintf (stderr, " %d", *++ssp1);
  2734.       fprintf (stderr, "n");
  2735.     }
  2736. #endif
  2737.   *++yyvsp = yyval;
  2738. #ifdef YYLSP_NEEDED
  2739.   yylsp++;
  2740.   if (yylen == 0)
  2741.     {
  2742.       yylsp->first_line = yylloc.first_line;
  2743.       yylsp->first_column = yylloc.first_column;
  2744.       yylsp->last_line = (yylsp-1)->last_line;
  2745.       yylsp->last_column = (yylsp-1)->last_column;
  2746.       yylsp->text = 0;
  2747.     }
  2748.   else
  2749.     {
  2750.       yylsp->last_line = (yylsp+yylen-1)->last_line;
  2751.       yylsp->last_column = (yylsp+yylen-1)->last_column;
  2752.     }
  2753. #endif
  2754.   /* Now "shift" the result of the reduction.
  2755.      Determine what state that goes to,
  2756.      based on the state we popped back to
  2757.      and the rule number reduced by.  */
  2758.   yyn = yyr1[yyn];
  2759.   yystate = yypgoto[yyn - YYNTBASE] + *yyssp;
  2760.   if (yystate >= 0 && yystate <= YYLAST && yycheck[yystate] == *yyssp)
  2761.     yystate = yytable[yystate];
  2762.   else
  2763.     yystate = yydefgoto[yyn - YYNTBASE];
  2764.   goto yynewstate;
  2765. yyerrlab:   /* here on detecting error */
  2766.   if (! yyerrstatus)
  2767.     /* If not already recovering from an error, report this error.  */
  2768.     {
  2769.       ++yynerrs;
  2770. #ifdef YYERROR_VERBOSE
  2771.       yyn = yypact[yystate];
  2772.       if (yyn > YYFLAG && yyn < YYLAST)
  2773. {
  2774.   int size = 0;
  2775.   char *msg;
  2776.   int x, count;
  2777.   count = 0;
  2778.   /* Start X at -yyn if nec to avoid negative indexes in yycheck.  */
  2779.   for (x = (yyn < 0 ? -yyn : 0);
  2780.        x < (sizeof(yytname) / sizeof(char *)); x++)
  2781.     if (yycheck[x + yyn] == x)
  2782.       size += strlen(yytname[x]) + 15, count++;
  2783.   msg = (char *) malloc(size + 15);
  2784.   if (msg != 0)
  2785.     {
  2786.       strcpy(msg, "parse error");
  2787.       if (count < 5)
  2788. {
  2789.   count = 0;
  2790.   for (x = (yyn < 0 ? -yyn : 0);
  2791.        x < (sizeof(yytname) / sizeof(char *)); x++)
  2792.     if (yycheck[x + yyn] == x)
  2793.       {
  2794. strcat(msg, count == 0 ? ", expecting `" : " or `");
  2795. strcat(msg, yytname[x]);
  2796. strcat(msg, "'");
  2797. count++;
  2798.       }
  2799. }
  2800.       yyerror(msg);
  2801.       free(msg);
  2802.     }
  2803.   else
  2804.     yyerror ("parse error; also virtual memory exceeded");
  2805. }
  2806.       else
  2807. #endif /* YYERROR_VERBOSE */
  2808. yyerror("parse error");
  2809.     }
  2810.   goto yyerrlab1;
  2811. yyerrlab1:   /* here on error raised explicitly by an action */
  2812.   if (yyerrstatus == 3)
  2813.     {
  2814.       /* if just tried and failed to reuse lookahead token after an error, discard it.  */
  2815.       /* return failure if at end of input */
  2816.       if (yychar == YYEOF)
  2817. YYABORT;
  2818. #if YYDEBUG != 0
  2819.       if (yydebug)
  2820. fprintf(stderr, "Discarding token %d (%s).n", yychar, yytname[yychar1]);
  2821. #endif
  2822.       yychar = YYEMPTY;
  2823.     }
  2824.   /* Else will try to reuse lookahead token
  2825.      after shifting the error token.  */
  2826.   yyerrstatus = 3; /* Each real token shifted decrements this */
  2827.   goto yyerrhandle;
  2828. yyerrdefault:  /* current state does not do anything special for the error token. */
  2829. #if 0
  2830.   /* This is wrong; only states that explicitly want error tokens
  2831.      should shift them.  */
  2832.   yyn = yydefact[yystate];  /* If its default is to accept any token, ok.  Otherwise pop it.*/
  2833.   if (yyn) goto yydefault;
  2834. #endif
  2835. yyerrpop:   /* pop the current state because it cannot handle the error token */
  2836.   if (yyssp == yyss) YYABORT;
  2837.   yyvsp--;
  2838.   yystate = *--yyssp;
  2839. #ifdef YYLSP_NEEDED
  2840.   yylsp--;
  2841. #endif
  2842. #if YYDEBUG != 0
  2843.   if (yydebug)
  2844.     {
  2845.       short *ssp1 = yyss - 1;
  2846.       fprintf (stderr, "Error: state stack now");
  2847.       while (ssp1 != yyssp)
  2848. fprintf (stderr, " %d", *++ssp1);
  2849.       fprintf (stderr, "n");
  2850.     }
  2851. #endif
  2852. yyerrhandle:
  2853.   yyn = yypact[yystate];
  2854.   if (yyn == YYFLAG)
  2855.     goto yyerrdefault;
  2856.   yyn += YYTERROR;
  2857.   if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != YYTERROR)
  2858.     goto yyerrdefault;
  2859.   yyn = yytable[yyn];
  2860.   if (yyn < 0)
  2861.     {
  2862.       if (yyn == YYFLAG)
  2863. goto yyerrpop;
  2864.       yyn = -yyn;
  2865.       goto yyreduce;
  2866.     }
  2867.   else if (yyn == 0)
  2868.     goto yyerrpop;
  2869.   if (yyn == YYFINAL)
  2870.     YYACCEPT;
  2871. #if YYDEBUG != 0
  2872.   if (yydebug)
  2873.     fprintf(stderr, "Shifting error token, ");
  2874. #endif
  2875.   *++yyvsp = yylval;
  2876. #ifdef YYLSP_NEEDED
  2877.   *++yylsp = yylloc;
  2878. #endif
  2879.   yystate = yyn;
  2880.   goto yynewstate;
  2881. }
  2882. static void
  2883. free_tail(void)
  2884. {
  2885.   if (del_local_vcb)
  2886.     FREE_VCB;
  2887.   LOCAL_VCB_ROOT = TNULL;
  2888.   del_local_vcb = 0;
  2889. }
  2890. static TXTREF holes_tbl = TNULL;
  2891. static TXTREF 
  2892. replace_clm_hole(TXTREF clmptr,i4_t f)
  2893. {
  2894.   register TXTREF ptr,clm;
  2895.   register enum token code=CODE_TRN(clmptr);
  2896.   assert(f==CYCLER_LD);
  2897.   if(code!=COLPTR)return clmptr;
  2898.   ptr=OBJ_DESC(clmptr);
  2899.   if(CODE_TRN(ptr)!=COLUMN_HOLE)return clmptr;
  2900.   clm=find_column(holes_tbl,CHOLE_CNAME(ptr));
  2901.   if(!clm)
  2902.     {
  2903.       if (TstF_TRN(holes_tbl,CHECKED_F))
  2904.         lperror("Incorrect column name '%s' used",STRING(CHOLE_CNAME(ptr)));
  2905.       else
  2906.         {
  2907.           add_column(holes_tbl,CHOLE_CNAME(ptr));
  2908.           clm=find_column(holes_tbl,CHOLE_CNAME(ptr));
  2909.         }
  2910.     }
  2911.   free_node(ptr);
  2912.   OBJ_DESC(clmptr)=clm;
  2913.   return clmptr;
  2914. }
  2915. static TXTREF 
  2916. replace_column_holes(TXTREF rb,VCBREF tbl)
  2917. {
  2918.   holes_tbl = tbl;
  2919.   rb=cycler(rb,replace_clm_hole,CYCLER_LD+CYCLER_LN);
  2920.   holes_tbl = TNULL;
  2921.   return rb;
  2922. }
  2923. static void 
  2924. add_table_column(enum token tbl_code,LTRLREF ltrp,sql_type_t type,TXTREF def,TXTREF constr)
  2925. {
  2926.   register TXTREF col;
  2927.   register i4_t    can_be_null = 1;
  2928.   
  2929.   if(!new_table) return;
  2930.   if(CODE_TRN(new_table)==ANY_TBL)
  2931.     CODE_TRN(new_table)=tbl_code;
  2932.   TASSERT(tbl_code == CODE_TRN(new_table),new_table);
  2933.   col = find_column(new_table,ltrp);
  2934.   if (col)
  2935.     {
  2936.       lperror("Duplicate column '%s' definition in table '%s.%s'",STRING(ltrp),
  2937.               STRING(TBL_FNAME(new_table)),STRING(TBL_NAME(new_table)));
  2938.       if(def)
  2939.         free_tree(def);
  2940.       if(constr)
  2941.         free_tree(constr);
  2942.     }
  2943.   else
  2944.     {
  2945.       add_column(new_table,ltrp);
  2946.       col=find_column(new_table,ltrp);
  2947.       COL_TYPE(col)   = type;
  2948.       COL_DEFAULT(col)= def;
  2949.       COL_NO(col) = new_table_col_no++;
  2950.     }
  2951.   while(constr)
  2952.     {
  2953.       register TXTREF c = constr;
  2954.       i4_t             null_vl = 0;
  2955.       constr = RIGHT_TRN(c);
  2956.       RIGHT_TRN(c) = TNULL;
  2957.       switch(CODE_TRN(c))
  2958. {
  2959. case NULL_VL:
  2960.           free_node(c);
  2961.           null_vl=1;
  2962. case PRIMARY:
  2963. case UNIQUE:
  2964.   can_be_null = 0;
  2965. #define P_(code,subtree) gen_parent(code,subtree)
  2966.           TBL_CONSTR(new_table) = 
  2967.     join_list(P_(CHECK,P_(ISNOTNULL,gen_colptr(col))),
  2968.       TBL_CONSTR(new_table));
  2969. #undef P_
  2970.           if(null_vl)
  2971.             break;
  2972. case INDEX:
  2973.   ARITY_TRN(c) = 1;
  2974.   DOWN_TRN(c)  = gen_colptr(col);
  2975.   IND_INFO(new_table)=join_list(c,IND_INFO(new_table));
  2976.   break;
  2977. case CHECK:
  2978.   TBL_CONSTR(new_table) = 
  2979.     join_list (replace_column_holes(c,new_table),
  2980.        TBL_CONSTR(new_table));
  2981.   break;
  2982. case REFERENCE:
  2983.           TBL_CONSTR(new_table)=
  2984.             join_list(gen_parent(FOREIGN,
  2985.                                  join_list(gen_parent(LOCALLIST,gen_colptr(col)),c)),
  2986.                       TBL_CONSTR(new_table));
  2987.           break;
  2988. default:
  2989.   debug_trn(c);
  2990.   yyfatal("Unexpected column constraints found");
  2991.   break;
  2992. }
  2993.     }
  2994.   
  2995.   if (!def && can_be_null)
  2996.     COL_DEFAULT (col) = gen_node (NULL_VL);
  2997.   
  2998.   if(COL_DEFAULT(col) && CODE_TRN(COL_DEFAULT(col))==NULL_VL)
  2999.     {
  3000.       if (can_be_null)
  3001.         NULL_TYPE(COL_DEFAULT (col)) = COL_TYPE(col);
  3002.       else
  3003.         yyerror("Error: ambiguous column description");
  3004.     }
  3005. #if 0
  3006.   {
  3007.     MASKTYPE x = MASK_TRN(new_table);
  3008.     debug_trn(new_table);
  3009.     MASK_TRN(new_table) = x;
  3010.   }
  3011. #endif
  3012. }
  3013. /*
  3014.  * 'check_not_null' check columns in UNIQUE or PRIMARY key definition
  3015.  * for constraints 'not null'.
  3016.  */
  3017. static void
  3018. check_not_null(TXTREF ind)
  3019. {
  3020.   TXTREF tbl = COL_TBL(OBJ_DESC(DOWN_TRN(ind)));
  3021.   TXTREF constr,cp;
  3022.   for ( cp = DOWN_TRN(ind);cp;cp = RIGHT_TRN(cp)) /* check every column */
  3023.     {
  3024.       TXTREF col = OBJ_DESC(cp);
  3025.       for(constr = TBL_CONSTR(tbl);constr;constr = RIGHT_TRN(constr))
  3026.         {
  3027.           /*
  3028.            * if ( constr = (Check (IsNotNull (ColPtr <col>))))
  3029.            */
  3030.           TXTREF pred = DOWN_TRN(constr);
  3031.           if(CODE_TRN(pred) == NOT)
  3032.             {
  3033.               pred = DOWN_TRN(pred);
  3034.               switch(CODE_TRN(pred))
  3035.                 {
  3036.                 case ISNULL:
  3037.                   CODE_TRN(pred)  = ISNOTNULL;
  3038.                   free_node(DOWN_TRN(constr));
  3039.                   DOWN_TRN(constr) = pred;
  3040.                   break;
  3041.                 default: break; 
  3042.                 }
  3043.             }
  3044.           if(CODE_TRN(pred) != ISNOTNULL)
  3045.             continue;
  3046.           pred = DOWN_TRN(pred);
  3047.           if(CODE_TRN(pred) != COLPTR) /* it quite strange */
  3048.             continue;
  3049.           if(OBJ_DESC(pred) == col) /* if there is a constraint on given column */
  3050.             break;
  3051.         }
  3052.       if (constr) /* something was found */
  3053.         continue;
  3054.       /* if we have not found 'not null' constraints on given column */
  3055.       file_pos = LOCATION_TRN(cp);
  3056.       lperror("Warning: primary key column '%s.%s.%s' not restrictedn"
  3057.               "ttby 'not null' qualifier",
  3058.               STRING(TBL_FNAME(tbl)),STRING(TBL_NAME(tbl)),
  3059.               STRING(COL_NAME(col)));
  3060.       errors--; /* clear error flag - translate message as a warning */
  3061.       if (CODE_TRN(COL_DEFAULT(col))==NULL_VL)
  3062.         {
  3063.           free_node(COL_DEFAULT(col));
  3064.           COL_DEFAULT(col) = TNULL;
  3065.         }
  3066.       col = gen_node(COLPTR);
  3067.       OBJ_DESC(col) = OBJ_DESC(cp);
  3068.       TBL_CONSTR(tbl) = 
  3069.         join_list (gen_parent(CHECK,gen_parent(ISNOTNULL,col)),
  3070.                    TBL_CONSTR(new_table));
  3071.     }
  3072. }
  3073. static void
  3074. emit_module_proc(VCBREF parmlist,LTRLREF procname)
  3075. {
  3076.   if (call.subst==NULL)
  3077.     call.subst = (call_subst_t*)xmalloc (sizeof(call_subst_t));
  3078.   call.subst->proc_name = savestring(STRING(procname));
  3079.   describe_stmt(&(call.subst->interface),parmlist,'I');
  3080.   free_tail();
  3081. }
  3082. static void
  3083. emit_call(TXTREF vcb,i4_t object_id, i4_t method_id)
  3084. {
  3085.   if (call.subst==NULL)
  3086.     call.subst = (call_subst_t*)xmalloc ( sizeof(call_subst_t));
  3087.   call.subst->object = object_id;
  3088.   call.subst->method = method_id;
  3089.   describe_stmt(&(call.subst->in_sql_parm),vcb,'>');
  3090.   describe_stmt(&(call.subst->out_sql_parm),vcb,'<');
  3091.   call.subst->jmp_on_eofscan = savestring(label_nf?label_nf:"");
  3092.   call.subst->jmp_on_error   = savestring(label_er?label_er:"");
  3093. }
  3094. call_t *
  3095. prepare_replacement(void)
  3096. {
  3097.   call_t *c;
  3098.   c = (call_t*)xmalloc ( sizeof(call_t));
  3099.   c->subst = call.subst;
  3100.   if(c->subst)  /* preserve NULL string reference */
  3101.     {
  3102.       if (!call.subst->proc_name)
  3103.         call.subst->proc_name      =  savestring("");
  3104.       if (!call.subst->jmp_on_eofscan)
  3105.         call.subst->jmp_on_eofscan =  savestring("");
  3106.       if (!call.subst->jmp_on_error)
  3107.         call.subst->jmp_on_error   =  savestring("");
  3108.     }
  3109.   return c;
  3110. }
  3111. i4_t 
  3112. sql_parse(void)
  3113. {
  3114.   i4_t rc;
  3115.   yydebug=parse_debug;
  3116.   parse_mode=Esql;
  3117.   dyn_sql_section_id = 0;
  3118.   bzero(&call,sizeof(call));
  3119.   rc = yyparse();
  3120.   dyn_sql_stmt_name = NULL;
  3121.   return rc;
  3122. }