preproc.c
上传用户:blenddy
上传日期:2007-01-07
资源大小:6495k
文件大小:764k
源码类别:

数据库系统

开发平台:

Unix_Linux

  1. case 963:
  2. #line 4375 "preproc.y"
  3. { yyval.str = make1_str("cache"); ;
  4.     break;}
  5. case 964:
  6. #line 4376 "preproc.y"
  7. { yyval.str = make1_str("committed"); ;
  8.     break;}
  9. case 965:
  10. #line 4377 "preproc.y"
  11. { yyval.str = make1_str("createdb"); ;
  12.     break;}
  13. case 966:
  14. #line 4378 "preproc.y"
  15. { yyval.str = make1_str("createuser"); ;
  16.     break;}
  17. case 967:
  18. #line 4379 "preproc.y"
  19. { yyval.str = make1_str("cycle"); ;
  20.     break;}
  21. case 968:
  22. #line 4380 "preproc.y"
  23. { yyval.str = make1_str("database"); ;
  24.     break;}
  25. case 969:
  26. #line 4381 "preproc.y"
  27. { yyval.str = make1_str("delimiters"); ;
  28.     break;}
  29. case 970:
  30. #line 4382 "preproc.y"
  31. { yyval.str = make1_str("double"); ;
  32.     break;}
  33. case 971:
  34. #line 4383 "preproc.y"
  35. { yyval.str = make1_str("each"); ;
  36.     break;}
  37. case 972:
  38. #line 4384 "preproc.y"
  39. { yyval.str = make1_str("encoding"); ;
  40.     break;}
  41. case 973:
  42. #line 4385 "preproc.y"
  43. { yyval.str = make1_str("exclusive"); ;
  44.     break;}
  45. case 974:
  46. #line 4386 "preproc.y"
  47. { yyval.str = make1_str("forward"); ;
  48.     break;}
  49. case 975:
  50. #line 4387 "preproc.y"
  51. { yyval.str = make1_str("function"); ;
  52.     break;}
  53. case 976:
  54. #line 4388 "preproc.y"
  55. { yyval.str = make1_str("handler"); ;
  56.     break;}
  57. case 977:
  58. #line 4389 "preproc.y"
  59. { yyval.str = make1_str("increment"); ;
  60.     break;}
  61. case 978:
  62. #line 4390 "preproc.y"
  63. { yyval.str = make1_str("index"); ;
  64.     break;}
  65. case 979:
  66. #line 4391 "preproc.y"
  67. { yyval.str = make1_str("inherits"); ;
  68.     break;}
  69. case 980:
  70. #line 4392 "preproc.y"
  71. { yyval.str = make1_str("insensitive"); ;
  72.     break;}
  73. case 981:
  74. #line 4393 "preproc.y"
  75. { yyval.str = make1_str("instead"); ;
  76.     break;}
  77. case 982:
  78. #line 4394 "preproc.y"
  79. { yyval.str = make1_str("isnull"); ;
  80.     break;}
  81. case 983:
  82. #line 4395 "preproc.y"
  83. { yyval.str = make1_str("key"); ;
  84.     break;}
  85. case 984:
  86. #line 4396 "preproc.y"
  87. { yyval.str = make1_str("language"); ;
  88.     break;}
  89. case 985:
  90. #line 4397 "preproc.y"
  91. { yyval.str = make1_str("lancompiler"); ;
  92.     break;}
  93. case 986:
  94. #line 4398 "preproc.y"
  95. { yyval.str = make1_str("location"); ;
  96.     break;}
  97. case 987:
  98. #line 4399 "preproc.y"
  99. { yyval.str = make1_str("match"); ;
  100.     break;}
  101. case 988:
  102. #line 4400 "preproc.y"
  103. { yyval.str = make1_str("maxvalue"); ;
  104.     break;}
  105. case 989:
  106. #line 4401 "preproc.y"
  107. { yyval.str = make1_str("minvalue"); ;
  108.     break;}
  109. case 990:
  110. #line 4402 "preproc.y"
  111. { yyval.str = make1_str("mode"); ;
  112.     break;}
  113. case 991:
  114. #line 4403 "preproc.y"
  115. { yyval.str = make1_str("next"); ;
  116.     break;}
  117. case 992:
  118. #line 4404 "preproc.y"
  119. { yyval.str = make1_str("nocreatedb"); ;
  120.     break;}
  121. case 993:
  122. #line 4405 "preproc.y"
  123. { yyval.str = make1_str("nocreateuser"); ;
  124.     break;}
  125. case 994:
  126. #line 4406 "preproc.y"
  127. { yyval.str = make1_str("nothing"); ;
  128.     break;}
  129. case 995:
  130. #line 4407 "preproc.y"
  131. { yyval.str = make1_str("notnull"); ;
  132.     break;}
  133. case 996:
  134. #line 4408 "preproc.y"
  135. { yyval.str = make1_str("of"); ;
  136.     break;}
  137. case 997:
  138. #line 4409 "preproc.y"
  139. { yyval.str = make1_str("oids"); ;
  140.     break;}
  141. case 998:
  142. #line 4410 "preproc.y"
  143. { yyval.str = make1_str("only"); ;
  144.     break;}
  145. case 999:
  146. #line 4411 "preproc.y"
  147. { yyval.str = make1_str("operator"); ;
  148.     break;}
  149. case 1000:
  150. #line 4412 "preproc.y"
  151. { yyval.str = make1_str("option"); ;
  152.     break;}
  153. case 1001:
  154. #line 4413 "preproc.y"
  155. { yyval.str = make1_str("password"); ;
  156.     break;}
  157. case 1002:
  158. #line 4414 "preproc.y"
  159. { yyval.str = make1_str("prior"); ;
  160.     break;}
  161. case 1003:
  162. #line 4415 "preproc.y"
  163. { yyval.str = make1_str("privileges"); ;
  164.     break;}
  165. case 1004:
  166. #line 4416 "preproc.y"
  167. { yyval.str = make1_str("procedural"); ;
  168.     break;}
  169. case 1005:
  170. #line 4417 "preproc.y"
  171. { yyval.str = make1_str("read"); ;
  172.     break;}
  173. case 1006:
  174. #line 4419 "preproc.y"
  175. { yyval.str = make1_str("relative"); ;
  176.     break;}
  177. case 1007:
  178. #line 4420 "preproc.y"
  179. { yyval.str = make1_str("rename"); ;
  180.     break;}
  181. case 1008:
  182. #line 4421 "preproc.y"
  183. { yyval.str = make1_str("returns"); ;
  184.     break;}
  185. case 1009:
  186. #line 4422 "preproc.y"
  187. { yyval.str = make1_str("row"); ;
  188.     break;}
  189. case 1010:
  190. #line 4423 "preproc.y"
  191. { yyval.str = make1_str("rule"); ;
  192.     break;}
  193. case 1011:
  194. #line 4424 "preproc.y"
  195. { yyval.str = make1_str("scroll"); ;
  196.     break;}
  197. case 1012:
  198. #line 4425 "preproc.y"
  199. { yyval.str = make1_str("sequence"); ;
  200.     break;}
  201. case 1013:
  202. #line 4426 "preproc.y"
  203. { yyval.str = make1_str("serial"); ;
  204.     break;}
  205. case 1014:
  206. #line 4427 "preproc.y"
  207. { yyval.str = make1_str("serializable"); ;
  208.     break;}
  209. case 1015:
  210. #line 4428 "preproc.y"
  211. { yyval.str = make1_str("share"); ;
  212.     break;}
  213. case 1016:
  214. #line 4429 "preproc.y"
  215. { yyval.str = make1_str("start"); ;
  216.     break;}
  217. case 1017:
  218. #line 4430 "preproc.y"
  219. { yyval.str = make1_str("statement"); ;
  220.     break;}
  221. case 1018:
  222. #line 4431 "preproc.y"
  223. { yyval.str = make1_str("stdin"); ;
  224.     break;}
  225. case 1019:
  226. #line 4432 "preproc.y"
  227. { yyval.str = make1_str("stdout"); ;
  228.     break;}
  229. case 1020:
  230. #line 4433 "preproc.y"
  231. { yyval.str = make1_str("time"); ;
  232.     break;}
  233. case 1021:
  234. #line 4434 "preproc.y"
  235. { yyval.str = make1_str("timestamp"); ;
  236.     break;}
  237. case 1022:
  238. #line 4435 "preproc.y"
  239. { yyval.str = make1_str("timezone_hour"); ;
  240.     break;}
  241. case 1023:
  242. #line 4436 "preproc.y"
  243. { yyval.str = make1_str("timezone_minute"); ;
  244.     break;}
  245. case 1024:
  246. #line 4437 "preproc.y"
  247. { yyval.str = make1_str("trigger"); ;
  248.     break;}
  249. case 1025:
  250. #line 4438 "preproc.y"
  251. { yyval.str = make1_str("trusted"); ;
  252.     break;}
  253. case 1026:
  254. #line 4439 "preproc.y"
  255. { yyval.str = make1_str("type"); ;
  256.     break;}
  257. case 1027:
  258. #line 4440 "preproc.y"
  259. { yyval.str = make1_str("valid"); ;
  260.     break;}
  261. case 1028:
  262. #line 4441 "preproc.y"
  263. { yyval.str = make1_str("version"); ;
  264.     break;}
  265. case 1029:
  266. #line 4442 "preproc.y"
  267. { yyval.str = make1_str("zone"); ;
  268.     break;}
  269. case 1030:
  270. #line 4443 "preproc.y"
  271. { yyval.str = make1_str("at"); ;
  272.     break;}
  273. case 1031:
  274. #line 4444 "preproc.y"
  275. { yyval.str = make1_str("bool"); ;
  276.     break;}
  277. case 1032:
  278. #line 4445 "preproc.y"
  279. { yyval.str = make1_str("break"); ;
  280.     break;}
  281. case 1033:
  282. #line 4446 "preproc.y"
  283. { yyval.str = make1_str("call"); ;
  284.     break;}
  285. case 1034:
  286. #line 4447 "preproc.y"
  287. { yyval.str = make1_str("connect"); ;
  288.     break;}
  289. case 1035:
  290. #line 4448 "preproc.y"
  291. { yyval.str = make1_str("continue"); ;
  292.     break;}
  293. case 1036:
  294. #line 4449 "preproc.y"
  295. { yyval.str = make1_str("deallocate"); ;
  296.     break;}
  297. case 1037:
  298. #line 4450 "preproc.y"
  299. { yyval.str = make1_str("disconnect"); ;
  300.     break;}
  301. case 1038:
  302. #line 4451 "preproc.y"
  303. { yyval.str = make1_str("found"); ;
  304.     break;}
  305. case 1039:
  306. #line 4452 "preproc.y"
  307. { yyval.str = make1_str("go"); ;
  308.     break;}
  309. case 1040:
  310. #line 4453 "preproc.y"
  311. { yyval.str = make1_str("goto"); ;
  312.     break;}
  313. case 1041:
  314. #line 4454 "preproc.y"
  315. { yyval.str = make1_str("identified"); ;
  316.     break;}
  317. case 1042:
  318. #line 4455 "preproc.y"
  319. { yyval.str = make1_str("immediate"); ;
  320.     break;}
  321. case 1043:
  322. #line 4456 "preproc.y"
  323. { yyval.str = make1_str("indicator"); ;
  324.     break;}
  325. case 1044:
  326. #line 4457 "preproc.y"
  327. { yyval.str = make1_str("int"); ;
  328.     break;}
  329. case 1045:
  330. #line 4458 "preproc.y"
  331. { yyval.str = make1_str("long"); ;
  332.     break;}
  333. case 1046:
  334. #line 4459 "preproc.y"
  335. { yyval.str = make1_str("off"); ;
  336.     break;}
  337. case 1047:
  338. #line 4460 "preproc.y"
  339. { yyval.str = make1_str("open"); ;
  340.     break;}
  341. case 1048:
  342. #line 4461 "preproc.y"
  343. { yyval.str = make1_str("prepare"); ;
  344.     break;}
  345. case 1049:
  346. #line 4462 "preproc.y"
  347. { yyval.str = make1_str("release"); ;
  348.     break;}
  349. case 1050:
  350. #line 4463 "preproc.y"
  351. { yyval.str = make1_str("section"); ;
  352.     break;}
  353. case 1051:
  354. #line 4464 "preproc.y"
  355. { yyval.str = make1_str("short"); ;
  356.     break;}
  357. case 1052:
  358. #line 4465 "preproc.y"
  359. { yyval.str = make1_str("signed"); ;
  360.     break;}
  361. case 1053:
  362. #line 4466 "preproc.y"
  363. { yyval.str = make1_str("sqlerror"); ;
  364.     break;}
  365. case 1054:
  366. #line 4467 "preproc.y"
  367. { yyval.str = make1_str("sqlprint"); ;
  368.     break;}
  369. case 1055:
  370. #line 4468 "preproc.y"
  371. { yyval.str = make1_str("sqlwarning"); ;
  372.     break;}
  373. case 1056:
  374. #line 4469 "preproc.y"
  375. { yyval.str = make1_str("stop"); ;
  376.     break;}
  377. case 1057:
  378. #line 4470 "preproc.y"
  379. { yyval.str = make1_str("struct"); ;
  380.     break;}
  381. case 1058:
  382. #line 4471 "preproc.y"
  383. { yyval.str = make1_str("unsigned"); ;
  384.     break;}
  385. case 1059:
  386. #line 4472 "preproc.y"
  387. { yyval.str = make1_str("var"); ;
  388.     break;}
  389. case 1060:
  390. #line 4473 "preproc.y"
  391. { yyval.str = make1_str("whenever"); ;
  392.     break;}
  393. case 1061:
  394. #line 4485 "preproc.y"
  395. { yyval.str = yyvsp[0].str; ;
  396.     break;}
  397. case 1062:
  398. #line 4486 "preproc.y"
  399. { yyval.str = make1_str("abort"); ;
  400.     break;}
  401. case 1063:
  402. #line 4487 "preproc.y"
  403. { yyval.str = make1_str("analyze"); ;
  404.     break;}
  405. case 1064:
  406. #line 4488 "preproc.y"
  407. { yyval.str = make1_str("binary"); ;
  408.     break;}
  409. case 1065:
  410. #line 4489 "preproc.y"
  411. { yyval.str = make1_str("case"); ;
  412.     break;}
  413. case 1066:
  414. #line 4490 "preproc.y"
  415. { yyval.str = make1_str("cluster"); ;
  416.     break;}
  417. case 1067:
  418. #line 4491 "preproc.y"
  419. { yyval.str = make1_str("coalesce"); ;
  420.     break;}
  421. case 1068:
  422. #line 4492 "preproc.y"
  423. { yyval.str = make1_str("constraint"); ;
  424.     break;}
  425. case 1069:
  426. #line 4493 "preproc.y"
  427. { yyval.str = make1_str("copy"); ;
  428.     break;}
  429. case 1070:
  430. #line 4494 "preproc.y"
  431. { yyval.str = make1_str("current"); ;
  432.     break;}
  433. case 1071:
  434. #line 4495 "preproc.y"
  435. { yyval.str = make1_str("do"); ;
  436.     break;}
  437. case 1072:
  438. #line 4496 "preproc.y"
  439. { yyval.str = make1_str("else"); ;
  440.     break;}
  441. case 1073:
  442. #line 4497 "preproc.y"
  443. { yyval.str = make1_str("end"); ;
  444.     break;}
  445. case 1074:
  446. #line 4498 "preproc.y"
  447. { yyval.str = make1_str("explain"); ;
  448.     break;}
  449. case 1075:
  450. #line 4499 "preproc.y"
  451. { yyval.str = make1_str("extend"); ;
  452.     break;}
  453. case 1076:
  454. #line 4500 "preproc.y"
  455. { yyval.str = make1_str("false"); ;
  456.     break;}
  457. case 1077:
  458. #line 4501 "preproc.y"
  459. { yyval.str = make1_str("foreign"); ;
  460.     break;}
  461. case 1078:
  462. #line 4502 "preproc.y"
  463. { yyval.str = make1_str("group"); ;
  464.     break;}
  465. case 1079:
  466. #line 4503 "preproc.y"
  467. { yyval.str = make1_str("listen"); ;
  468.     break;}
  469. case 1080:
  470. #line 4504 "preproc.y"
  471. { yyval.str = make1_str("load"); ;
  472.     break;}
  473. case 1081:
  474. #line 4505 "preproc.y"
  475. { yyval.str = make1_str("lock"); ;
  476.     break;}
  477. case 1082:
  478. #line 4506 "preproc.y"
  479. { yyval.str = make1_str("move"); ;
  480.     break;}
  481. case 1083:
  482. #line 4507 "preproc.y"
  483. { yyval.str = make1_str("new"); ;
  484.     break;}
  485. case 1084:
  486. #line 4508 "preproc.y"
  487. { yyval.str = make1_str("none"); ;
  488.     break;}
  489. case 1085:
  490. #line 4509 "preproc.y"
  491. { yyval.str = make1_str("nullif"); ;
  492.     break;}
  493. case 1086:
  494. #line 4510 "preproc.y"
  495. { yyval.str = make1_str("order"); ;
  496.     break;}
  497. case 1087:
  498. #line 4511 "preproc.y"
  499. { yyval.str = make1_str("position"); ;
  500.     break;}
  501. case 1088:
  502. #line 4512 "preproc.y"
  503. { yyval.str = make1_str("precision"); ;
  504.     break;}
  505. case 1089:
  506. #line 4513 "preproc.y"
  507. { yyval.str = make1_str("reset"); ;
  508.     break;}
  509. case 1090:
  510. #line 4514 "preproc.y"
  511. { yyval.str = make1_str("setof"); ;
  512.     break;}
  513. case 1091:
  514. #line 4515 "preproc.y"
  515. { yyval.str = make1_str("show"); ;
  516.     break;}
  517. case 1092:
  518. #line 4516 "preproc.y"
  519. { yyval.str = make1_str("table"); ;
  520.     break;}
  521. case 1093:
  522. #line 4517 "preproc.y"
  523. { yyval.str = make1_str("then"); ;
  524.     break;}
  525. case 1094:
  526. #line 4518 "preproc.y"
  527. { yyval.str = make1_str("transaction"); ;
  528.     break;}
  529. case 1095:
  530. #line 4519 "preproc.y"
  531. { yyval.str = make1_str("true"); ;
  532.     break;}
  533. case 1096:
  534. #line 4520 "preproc.y"
  535. { yyval.str = make1_str("vacuum"); ;
  536.     break;}
  537. case 1097:
  538. #line 4521 "preproc.y"
  539. { yyval.str = make1_str("verbose"); ;
  540.     break;}
  541. case 1098:
  542. #line 4522 "preproc.y"
  543. { yyval.str = make1_str("when"); ;
  544.     break;}
  545. case 1099:
  546. #line 4526 "preproc.y"
  547. {
  548. if (QueryIsRule)
  549. yyval.str = make1_str("current");
  550. else
  551. yyerror("CURRENT used in non-rule query");
  552. ;
  553.     break;}
  554. case 1100:
  555. #line 4533 "preproc.y"
  556. {
  557. if (QueryIsRule)
  558. yyval.str = make1_str("new");
  559. else
  560. yyerror("NEW used in non-rule query");
  561. ;
  562.     break;}
  563. case 1101:
  564. #line 4549 "preproc.y"
  565. {
  566. yyval.str = make5_str(yyvsp[-2].str, make1_str(","), yyvsp[0].str, make1_str(","), yyvsp[-1].str);
  567.                 ;
  568.     break;}
  569. case 1102:
  570. #line 4553 "preproc.y"
  571. {
  572.                  yyval.str = make1_str("NULL,NULL,NULL,"DEFAULT"");
  573.                 ;
  574.     break;}
  575. case 1103:
  576. #line 4558 "preproc.y"
  577. {
  578.        yyval.str = make3_str(make1_str("NULL,"), yyvsp[0].str, make1_str(",NULL"));
  579. ;
  580.     break;}
  581. case 1104:
  582. #line 4563 "preproc.y"
  583. {
  584.   /* old style: dbname[@server][:port] */
  585.   if (strlen(yyvsp[-1].str) > 0 && *(yyvsp[-1].str) != '@')
  586.   {
  587.     sprintf(errortext, "parse error at or near '%s'", yyvsp[-1].str);
  588.     yyerror(errortext);
  589.   }
  590.   yyval.str = make5_str(make1_str("""), yyvsp[-2].str, yyvsp[-1].str, yyvsp[0].str, make1_str("""));
  591. ;
  592.     break;}
  593. case 1105:
  594. #line 4574 "preproc.y"
  595. {
  596.   /* new style: <tcp|unix>:postgresql://server[:port][/dbname] */
  597.                   if (strncmp(yyvsp[-4].str, "://", 3) != 0)
  598.   {
  599.     sprintf(errortext, "parse error at or near '%s'", yyvsp[-4].str);
  600.     yyerror(errortext);
  601.   }
  602.   if (strncmp(yyvsp[-5].str, "unix", 4) == 0 && strncmp(yyvsp[-4].str + 3, "localhost", 9) != 0)
  603.   {
  604.     sprintf(errortext, "unix domain sockets only work on 'localhost' but not on '%9.9s'", yyvsp[-4].str);
  605.                     yyerror(errortext);
  606.   }
  607.   if (strncmp(yyvsp[-5].str, "unix", 4) != 0 && strncmp(yyvsp[-5].str, "tcp", 3) != 0)
  608.   {
  609.     sprintf(errortext, "only protocols 'tcp' and 'unix' are supported");
  610.                     yyerror(errortext);
  611.   }
  612.   yyval.str = make4_str(make5_str(make1_str("""), yyvsp[-5].str, yyvsp[-4].str, yyvsp[-3].str, make1_str("/")), yyvsp[-1].str, yyvsp[0].str, make1_str("""));
  613. ;
  614.     break;}
  615. case 1106:
  616. #line 4597 "preproc.y"
  617. {
  618.   yyval.str = yyvsp[0].str;
  619. ;
  620.     break;}
  621. case 1107:
  622. #line 4601 "preproc.y"
  623. {
  624.   yyval.str = mm_strdup(yyvsp[0].str);
  625.   yyval.str[0] = '"';
  626.   yyval.str[strlen(yyval.str) - 1] = '"';
  627.   free(yyvsp[0].str);
  628. ;
  629.     break;}
  630. case 1108:
  631. #line 4609 "preproc.y"
  632. {
  633.   if (strcmp(yyvsp[0].str, "postgresql") != 0 && strcmp(yyvsp[0].str, "postgres") != 0)
  634.   {
  635.     sprintf(errortext, "parse error at or near '%s'", yyvsp[0].str);
  636.     yyerror(errortext);
  637.   }
  638.   if (strcmp(yyvsp[-1].str, "tcp") != 0 && strcmp(yyvsp[-1].str, "unix") != 0)
  639.   {
  640.     sprintf(errortext, "Illegal connection type %s", yyvsp[-1].str);
  641.     yyerror(errortext);
  642.   }
  643.   yyval.str = make3_str(yyvsp[-1].str, make1_str(":"), yyvsp[0].str);
  644. ;
  645.     break;}
  646. case 1109:
  647. #line 4626 "preproc.y"
  648. {
  649.   if (strcmp(yyvsp[-1].str, "@") != 0 && strcmp(yyvsp[-1].str, "://") != 0)
  650.   {
  651.     sprintf(errortext, "parse error at or near '%s'", yyvsp[-1].str);
  652.     yyerror(errortext);
  653.   }
  654.   yyval.str = make2_str(yyvsp[-1].str, yyvsp[0].str);
  655.         ;
  656.     break;}
  657. case 1110:
  658. #line 4636 "preproc.y"
  659. { yyval.str = yyvsp[0].str; ;
  660.     break;}
  661. case 1111:
  662. #line 4637 "preproc.y"
  663. { yyval.str = make1_str(""); ;
  664.     break;}
  665. case 1112:
  666. #line 4639 "preproc.y"
  667. { yyval.str = yyvsp[0].str; ;
  668.     break;}
  669. case 1113:
  670. #line 4640 "preproc.y"
  671. { yyval.str = make3_str(yyvsp[-2].str, make1_str("."), yyvsp[0].str); ;
  672.     break;}
  673. case 1114:
  674. #line 4642 "preproc.y"
  675. { yyval.str = make2_str(make1_str(":"), yyvsp[0].str); ;
  676.     break;}
  677. case 1115:
  678. #line 4643 "preproc.y"
  679. { yyval.str = make1_str(""); ;
  680.     break;}
  681. case 1116:
  682. #line 4645 "preproc.y"
  683. { yyval.str = yyvsp[0].str; ;
  684.     break;}
  685. case 1117:
  686. #line 4646 "preproc.y"
  687. { yyval.str = make1_str("NULL"); ;
  688.     break;}
  689. case 1118:
  690. #line 4648 "preproc.y"
  691. { yyval.str = yyvsp[0].str; ;
  692.     break;}
  693. case 1119:
  694. #line 4649 "preproc.y"
  695. { yyval.str = make1_str("NULL,NULL"); ;
  696.     break;}
  697. case 1120:
  698. #line 4652 "preproc.y"
  699. {
  700.                         yyval.str = make2_str(yyvsp[0].str, make1_str(",NULL"));
  701.         ;
  702.     break;}
  703. case 1121:
  704. #line 4656 "preproc.y"
  705. {
  706.          yyval.str = make3_str(yyvsp[-2].str, make1_str(","), yyvsp[0].str);
  707.                 ;
  708.     break;}
  709. case 1122:
  710. #line 4660 "preproc.y"
  711. {
  712.          yyval.str = make3_str(yyvsp[-3].str, make1_str(","), yyvsp[0].str);
  713.                 ;
  714.     break;}
  715. case 1123:
  716. #line 4664 "preproc.y"
  717. {
  718.          yyval.str = make3_str(yyvsp[-2].str, make1_str(","), yyvsp[0].str);
  719.                 ;
  720.     break;}
  721. case 1124:
  722. #line 4668 "preproc.y"
  723. { if (yyvsp[0].str[0] == '"')
  724. yyval.str = yyvsp[0].str;
  725.   else
  726. yyval.str = make3_str(make1_str("""), yyvsp[0].str, make1_str("""));
  727. ;
  728.     break;}
  729. case 1125:
  730. #line 4673 "preproc.y"
  731. { yyval.str = yyvsp[0].str; ;
  732.     break;}
  733. case 1126:
  734. #line 4674 "preproc.y"
  735. { yyval.str = make3_str(make1_str("""), yyvsp[0].str, make1_str(""")); ;
  736.     break;}
  737. case 1127:
  738. #line 4677 "preproc.y"
  739. { /* check if we have a char variable */
  740. struct variable *p = find_variable(yyvsp[0].str);
  741. enum ECPGttype typ = p->type->typ;
  742. /* if array see what's inside */
  743. if (typ == ECPGt_array)
  744. typ = p->type->u.element->typ;
  745.                         switch (typ)
  746.                         {
  747.                             case ECPGt_char:
  748.                             case ECPGt_unsigned_char:
  749.                                 yyval.str = yyvsp[0].str;
  750.                                 break;
  751.                             case ECPGt_varchar:
  752.                                 yyval.str = make2_str(yyvsp[0].str, make1_str(".arr"));
  753.                                 break;
  754.                             default:
  755.                                 yyerror("invalid datatype");
  756.                                 break;
  757.                         }
  758. ;
  759.     break;}
  760. case 1128:
  761. #line 4701 "preproc.y"
  762. {
  763. if (strlen(yyvsp[-1].str) == 0)
  764. yyerror("parse error");
  765. if (strcmp(yyvsp[-1].str, "?") != 0)
  766. {
  767. sprintf(errortext, "parse error at or near %s", yyvsp[-1].str);
  768. yyerror(errortext);
  769. }
  770. yyval.str = make2_str(make1_str("?"), yyvsp[0].str);
  771. ;
  772.     break;}
  773. case 1129:
  774. #line 4713 "preproc.y"
  775. { yyval.str = make1_str(""); ;
  776.     break;}
  777. case 1130:
  778. #line 4720 "preproc.y"
  779. {
  780. struct cursor *ptr, *this;
  781. struct variable *thisquery = (struct variable *)mm_alloc(sizeof(struct variable));
  782. for (ptr = cur; ptr != NULL; ptr = ptr->next)
  783. {
  784. if (strcmp(yyvsp[-4].str, ptr->name) == 0)
  785. {
  786.         /* re-definition is a bug */
  787. sprintf(errortext, "cursor %s already defined", yyvsp[-4].str);
  788. yyerror(errortext);
  789.                 }
  790.          }
  791.          this = (struct cursor *) mm_alloc(sizeof(struct cursor));
  792.          /* initial definition */
  793.         this->next = cur;
  794.         this->name = yyvsp[-4].str;
  795. this->connection = connection;
  796.         this->command =  cat4_str(make1_str("declare"), mm_strdup(yyvsp[-4].str), yyvsp[-3].str, make1_str("cursor for ?"));
  797. this->argsresult = NULL;
  798. thisquery->type = &ecpg_query;
  799. thisquery->brace_level = 0;
  800. thisquery->next = NULL;
  801. thisquery->name = (char *) mm_alloc(sizeof("ECPGprepared_statement("")") + strlen(yyvsp[0].str));
  802. sprintf(thisquery->name, "ECPGprepared_statement("%s")", yyvsp[0].str);
  803. this->argsinsert = NULL;
  804. add_variable(&(this->argsinsert), thisquery, &no_indicator); 
  805.          cur = this;
  806. yyval.str = cat3_str(make1_str("/*"), mm_strdup(this->command), make1_str("*/"));
  807. ;
  808.     break;}
  809. case 1131:
  810. #line 4762 "preproc.y"
  811. { yyval.str = make3_str(make1_str("ECPGdeallocate(__LINE__, ""), yyvsp[0].str, make1_str("");")); ;
  812.     break;}
  813. case 1132:
  814. #line 4768 "preproc.y"
  815. {
  816. fputs("/* exec sql begin declare section */", yyout);
  817.         output_line_number();
  818. ;
  819.     break;}
  820. case 1133:
  821. #line 4773 "preproc.y"
  822. {
  823. fprintf(yyout, "%s/* exec sql end declare section */", yyvsp[-1].str);
  824. free(yyvsp[-1].str);
  825. output_line_number();
  826. ;
  827.     break;}
  828. case 1134:
  829. #line 4779 "preproc.y"
  830. {;
  831.     break;}
  832. case 1135:
  833. #line 4781 "preproc.y"
  834. {;
  835.     break;}
  836. case 1136:
  837. #line 4784 "preproc.y"
  838. {
  839. yyval.str = make1_str("");
  840. ;
  841.     break;}
  842. case 1137:
  843. #line 4788 "preproc.y"
  844. {
  845. yyval.str = cat2_str(yyvsp[-1].str, yyvsp[0].str);
  846. ;
  847.     break;}
  848. case 1138:
  849. #line 4793 "preproc.y"
  850. {
  851. actual_storage[struct_level] = mm_strdup(yyvsp[0].str);
  852. ;
  853.     break;}
  854. case 1139:
  855. #line 4797 "preproc.y"
  856. {
  857. actual_type[struct_level].type_enum = yyvsp[0].type.type_enum;
  858. actual_type[struct_level].type_dimension = yyvsp[0].type.type_dimension;
  859. actual_type[struct_level].type_index = yyvsp[0].type.type_index;
  860. ;
  861.     break;}
  862. case 1140:
  863. #line 4803 "preproc.y"
  864. {
  865.   yyval.str = cat4_str(yyvsp[-5].str, yyvsp[-3].type.type_str, yyvsp[-1].str, make1_str(";n"));
  866. ;
  867.     break;}
  868. case 1141:
  869. #line 4807 "preproc.y"
  870. { yyval.str = make1_str("extern"); ;
  871.     break;}
  872. case 1142:
  873. #line 4808 "preproc.y"
  874. { yyval.str = make1_str("static"); ;
  875.     break;}
  876. case 1143:
  877. #line 4809 "preproc.y"
  878. { yyval.str = make1_str("signed"); ;
  879.     break;}
  880. case 1144:
  881. #line 4810 "preproc.y"
  882. { yyval.str = make1_str("const"); ;
  883.     break;}
  884. case 1145:
  885. #line 4811 "preproc.y"
  886. { yyval.str = make1_str("register"); ;
  887.     break;}
  888. case 1146:
  889. #line 4812 "preproc.y"
  890. { yyval.str = make1_str("auto"); ;
  891.     break;}
  892. case 1147:
  893. #line 4813 "preproc.y"
  894. { yyval.str = make1_str(""); ;
  895.     break;}
  896. case 1148:
  897. #line 4816 "preproc.y"
  898. {
  899. yyval.type.type_enum = yyvsp[0].type_enum;
  900. yyval.type.type_str = mm_strdup(ECPGtype_name(yyvsp[0].type_enum));
  901. yyval.type.type_dimension = -1;
  902.    yyval.type.type_index = -1;
  903. ;
  904.     break;}
  905. case 1149:
  906. #line 4823 "preproc.y"
  907. {
  908. yyval.type.type_enum = ECPGt_varchar;
  909. yyval.type.type_str = make1_str("");
  910. yyval.type.type_dimension = -1;
  911.    yyval.type.type_index = -1;
  912. ;
  913.     break;}
  914. case 1150:
  915. #line 4830 "preproc.y"
  916. {
  917. yyval.type.type_enum = ECPGt_struct;
  918. yyval.type.type_str = yyvsp[0].str;
  919. yyval.type.type_dimension = -1;
  920.    yyval.type.type_index = -1;
  921. ;
  922.     break;}
  923. case 1151:
  924. #line 4837 "preproc.y"
  925. {
  926. yyval.type.type_enum = ECPGt_union;
  927. yyval.type.type_str = yyvsp[0].str;
  928. yyval.type.type_dimension = -1;
  929.    yyval.type.type_index = -1;
  930. ;
  931.     break;}
  932. case 1152:
  933. #line 4844 "preproc.y"
  934. {
  935. yyval.type.type_str = yyvsp[0].str;
  936. yyval.type.type_enum = ECPGt_int;
  937. yyval.type.type_dimension = -1;
  938.    yyval.type.type_index = -1;
  939. ;
  940.     break;}
  941. case 1153:
  942. #line 4852 "preproc.y"
  943. {
  944. /* this is for typedef'ed types */
  945. struct typedefs *this = get_typedef(yyvsp[0].str);
  946. yyval.type.type_str = (this->type->type_enum == ECPGt_varchar) ? make1_str("") : mm_strdup(this->name);
  947.                         yyval.type.type_enum = this->type->type_enum;
  948. yyval.type.type_dimension = this->type->type_dimension;
  949.    yyval.type.type_index = this->type->type_index;
  950. struct_member_list[struct_level] = ECPGstruct_member_dup(this->struct_member_list);
  951. ;
  952.     break;}
  953. case 1154:
  954. #line 4864 "preproc.y"
  955. {
  956. yyval.str = cat4_str(yyvsp[-3].str, make1_str("{"), yyvsp[-1].str, make1_str("}"));
  957. ;
  958.     break;}
  959. case 1155:
  960. #line 4868 "preproc.y"
  961. { yyval.str = cat2_str(make1_str("enum"), yyvsp[0].str); ;
  962.     break;}
  963. case 1156:
  964. #line 4871 "preproc.y"
  965. {
  966.     ECPGfree_struct_member(struct_member_list[struct_level]);
  967.     free(actual_storage[struct_level--]);
  968.     yyval.str = cat4_str(yyvsp[-3].str, make1_str("{"), yyvsp[-1].str, make1_str("}"));
  969. ;
  970.     break;}
  971. case 1157:
  972. #line 4878 "preproc.y"
  973. {
  974.     ECPGfree_struct_member(struct_member_list[struct_level]);
  975.     free(actual_storage[struct_level--]);
  976.     yyval.str = cat4_str(yyvsp[-3].str, make1_str("{"), yyvsp[-1].str, make1_str("}"));
  977. ;
  978.     break;}
  979. case 1158:
  980. #line 4885 "preproc.y"
  981. {
  982.             struct_member_list[struct_level++] = NULL;
  983.             if (struct_level >= STRUCT_DEPTH)
  984.                  yyerror("Too many levels in nested structure definition");
  985.     yyval.str = cat2_str(make1_str("struct"), yyvsp[0].str);
  986. ;
  987.     break;}
  988. case 1159:
  989. #line 4893 "preproc.y"
  990. {
  991.             struct_member_list[struct_level++] = NULL;
  992.             if (struct_level >= STRUCT_DEPTH)
  993.                  yyerror("Too many levels in nested structure definition");
  994.     yyval.str = cat2_str(make1_str("union"), yyvsp[0].str);
  995. ;
  996.     break;}
  997. case 1160:
  998. #line 4900 "preproc.y"
  999. { yyval.str = make1_str(""); ;
  1000.     break;}
  1001. case 1161:
  1002. #line 4901 "preproc.y"
  1003. { yyval.str = yyvsp[0].str; ;
  1004.     break;}
  1005. case 1162:
  1006. #line 4903 "preproc.y"
  1007. { yyval.type_enum = ECPGt_short; ;
  1008.     break;}
  1009. case 1163:
  1010. #line 4904 "preproc.y"
  1011. { yyval.type_enum = ECPGt_unsigned_short; ;
  1012.     break;}
  1013. case 1164:
  1014. #line 4905 "preproc.y"
  1015. { yyval.type_enum = ECPGt_int; ;
  1016.     break;}
  1017. case 1165:
  1018. #line 4906 "preproc.y"
  1019. { yyval.type_enum = ECPGt_unsigned_int; ;
  1020.     break;}
  1021. case 1166:
  1022. #line 4907 "preproc.y"
  1023. { yyval.type_enum = ECPGt_long; ;
  1024.     break;}
  1025. case 1167:
  1026. #line 4908 "preproc.y"
  1027. { yyval.type_enum = ECPGt_unsigned_long; ;
  1028.     break;}
  1029. case 1168:
  1030. #line 4909 "preproc.y"
  1031. { yyval.type_enum = ECPGt_float; ;
  1032.     break;}
  1033. case 1169:
  1034. #line 4910 "preproc.y"
  1035. { yyval.type_enum = ECPGt_double; ;
  1036.     break;}
  1037. case 1170:
  1038. #line 4911 "preproc.y"
  1039. { yyval.type_enum = ECPGt_bool; ;
  1040.     break;}
  1041. case 1171:
  1042. #line 4912 "preproc.y"
  1043. { yyval.type_enum = ECPGt_char; ;
  1044.     break;}
  1045. case 1172:
  1046. #line 4913 "preproc.y"
  1047. { yyval.type_enum = ECPGt_unsigned_char; ;
  1048.     break;}
  1049. case 1173:
  1050. #line 4915 "preproc.y"
  1051. { yyval.type_enum = ECPGt_varchar; ;
  1052.     break;}
  1053. case 1174:
  1054. #line 4918 "preproc.y"
  1055. {
  1056. yyval.str = yyvsp[0].str;
  1057. ;
  1058.     break;}
  1059. case 1175:
  1060. #line 4922 "preproc.y"
  1061. {
  1062. yyval.str = cat3_str(yyvsp[-2].str, make1_str(","), yyvsp[0].str);
  1063. ;
  1064.     break;}
  1065. case 1176:
  1066. #line 4927 "preproc.y"
  1067. {
  1068. struct ECPGtype * type;
  1069.                         int dimension = yyvsp[-1].index.index1; /* dimension of array */
  1070.                         int length = yyvsp[-1].index.index2;    /* lenght of string */
  1071.                         char dim[14L], ascii_len[12];
  1072. adjust_array(actual_type[struct_level].type_enum, &dimension, &length, actual_type[struct_level].type_dimension, actual_type[struct_level].type_index, strlen(yyvsp[-3].str));
  1073. switch (actual_type[struct_level].type_enum)
  1074. {
  1075.    case ECPGt_struct:
  1076.    case ECPGt_union:
  1077.                                if (dimension < 0)
  1078.                                    type = ECPGmake_struct_type(struct_member_list[struct_level], actual_type[struct_level].type_enum);
  1079.                                else
  1080.                                    type = ECPGmake_array_type(ECPGmake_struct_type(struct_member_list[struct_level], actual_type[struct_level].type_enum), dimension); 
  1081.                                yyval.str = make4_str(yyvsp[-3].str, mm_strdup(yyvsp[-2].str), yyvsp[-1].index.str, yyvsp[0].str);
  1082.                                break;
  1083.                            case ECPGt_varchar:
  1084.                                if (dimension == -1)
  1085.                                    type = ECPGmake_simple_type(actual_type[struct_level].type_enum, length);
  1086.                                else
  1087.                                    type = ECPGmake_array_type(ECPGmake_simple_type(actual_type[struct_level].type_enum, length), dimension);
  1088.                                switch(dimension)
  1089.                                {
  1090.                                   case 0:
  1091.   case -1:
  1092.                                   case 1:
  1093.                                       *dim = '';
  1094.                                       break;
  1095.                                   default:
  1096.                                       sprintf(dim, "[%d]", dimension);
  1097.                                       break;
  1098.                                }
  1099.        sprintf(ascii_len, "%d", length);
  1100.                                if (length == 0)
  1101.    yyerror ("pointer to varchar are not implemented");
  1102.        if (dimension == 0)
  1103.    yyval.str = make4_str(make5_str(mm_strdup(actual_storage[struct_level]), make1_str(" struct varchar_"), mm_strdup(yyvsp[-2].str), make1_str(" { int len; char arr["), mm_strdup(ascii_len)), make1_str("]; } *"), mm_strdup(yyvsp[-2].str), yyvsp[0].str);
  1104.        else
  1105.                                    yyval.str = make5_str(make5_str(mm_strdup(actual_storage[struct_level]), make1_str(" struct varchar_"), mm_strdup(yyvsp[-2].str), make1_str(" { int len; char arr["), mm_strdup(ascii_len)), make1_str("]; } "), mm_strdup(yyvsp[-2].str), mm_strdup(dim), yyvsp[0].str);
  1106.                                break;
  1107.                            case ECPGt_char:
  1108.                            case ECPGt_unsigned_char:
  1109.                                if (dimension == -1)
  1110.                                    type = ECPGmake_simple_type(actual_type[struct_level].type_enum, length);
  1111.                                else
  1112.                                    type = ECPGmake_array_type(ECPGmake_simple_type(actual_type[struct_level].type_enum, length), dimension);
  1113.        yyval.str = make4_str(yyvsp[-3].str, mm_strdup(yyvsp[-2].str), yyvsp[-1].index.str, yyvsp[0].str);
  1114.                                break;
  1115.                            default:
  1116.                                if (dimension < 0)
  1117.                                    type = ECPGmake_simple_type(actual_type[struct_level].type_enum, 1);
  1118.                                else
  1119.                                    type = ECPGmake_array_type(ECPGmake_simple_type(actual_type[struct_level].type_enum, 1), dimension);
  1120.        yyval.str = make4_str(yyvsp[-3].str, mm_strdup(yyvsp[-2].str), yyvsp[-1].index.str, yyvsp[0].str);
  1121.                                break;
  1122. }
  1123. if (struct_level == 0)
  1124. new_variable(yyvsp[-2].str, type);
  1125. else
  1126. ECPGmake_struct_member(yyvsp[-2].str, type, &(struct_member_list[struct_level - 1]));
  1127. free(yyvsp[-2].str);
  1128. ;
  1129.     break;}
  1130. case 1177:
  1131. #line 5001 "preproc.y"
  1132. { yyval.str = make1_str(""); ;
  1133.     break;}
  1134. case 1178:
  1135. #line 5002 "preproc.y"
  1136. { yyval.str = make2_str(make1_str("="), yyvsp[0].str); ;
  1137.     break;}
  1138. case 1179:
  1139. #line 5004 "preproc.y"
  1140. { yyval.str = make1_str(""); ;
  1141.     break;}
  1142. case 1180:
  1143. #line 5005 "preproc.y"
  1144. { yyval.str = make1_str("*"); ;
  1145.     break;}
  1146. case 1181:
  1147. #line 5012 "preproc.y"
  1148. {
  1149. /* this is only supported for compatibility */
  1150. yyval.str = cat3_str(make1_str("/* declare statement"), yyvsp[0].str, make1_str("*/"));
  1151. ;
  1152.     break;}
  1153. case 1182:
  1154. #line 5019 "preproc.y"
  1155. { yyval.str = yyvsp[0].str; ;
  1156.     break;}
  1157. case 1183:
  1158. #line 5021 "preproc.y"
  1159. { yyval.str = yyvsp[0].str; ;
  1160.     break;}
  1161. case 1184:
  1162. #line 5022 "preproc.y"
  1163. { yyval.str = make1_str("CURRENT"); ;
  1164.     break;}
  1165. case 1185:
  1166. #line 5023 "preproc.y"
  1167. { yyval.str = make1_str("ALL"); ;
  1168.     break;}
  1169. case 1186:
  1170. #line 5024 "preproc.y"
  1171. { yyval.str = make1_str("CURRENT"); ;
  1172.     break;}
  1173. case 1187:
  1174. #line 5026 "preproc.y"
  1175. { yyval.str = yyvsp[0].str; ;
  1176.     break;}
  1177. case 1188:
  1178. #line 5027 "preproc.y"
  1179. { yyval.str = make1_str("DEFAULT"); ;
  1180.     break;}
  1181. case 1189:
  1182. #line 5033 "preproc.y"
  1183. struct variable *thisquery = (struct variable *)mm_alloc(sizeof(struct variable));
  1184. thisquery->type = &ecpg_query;
  1185. thisquery->brace_level = 0;
  1186. thisquery->next = NULL;
  1187. thisquery->name = yyvsp[0].str;
  1188. add_variable(&argsinsert, thisquery, &no_indicator); 
  1189. yyval.str = make1_str("?");
  1190. ;
  1191.     break;}
  1192. case 1190:
  1193. #line 5046 "preproc.y"
  1194. {
  1195. struct variable *thisquery = (struct variable *)mm_alloc(sizeof(struct variable));
  1196. thisquery->type = &ecpg_query;
  1197. thisquery->brace_level = 0;
  1198. thisquery->next = NULL;
  1199. thisquery->name = (char *) mm_alloc(sizeof("ECPGprepared_statement("")") + strlen(yyvsp[0].str));
  1200. sprintf(thisquery->name, "ECPGprepared_statement("%s")", yyvsp[0].str);
  1201. add_variable(&argsinsert, thisquery, &no_indicator); 
  1202. ;
  1203.     break;}
  1204. case 1191:
  1205. #line 5057 "preproc.y"
  1206. {
  1207. yyval.str = make1_str("?");
  1208. ;
  1209.     break;}
  1210. case 1193:
  1211. #line 5062 "preproc.y"
  1212. { yyval.str = make3_str(make1_str("""), yyvsp[0].str, make1_str(""")); ;
  1213.     break;}
  1214. case 1194:
  1215. #line 5068 "preproc.y"
  1216. { yyval.str = yyvsp[0].str; ;
  1217.     break;}
  1218. case 1195:
  1219. #line 5073 "preproc.y"
  1220. {
  1221. yyval.str = yyvsp[-1].str;
  1222. ;
  1223.     break;}
  1224. case 1196:
  1225. #line 5077 "preproc.y"
  1226. { yyval.str = make1_str(""); ;
  1227.     break;}
  1228. case 1197:
  1229. #line 5078 "preproc.y"
  1230. {
  1231. /* yyerror ("open cursor with variables not implemented yet"); */
  1232. yyval.str = make1_str("");
  1233. ;
  1234.     break;}
  1235. case 1200:
  1236. #line 5090 "preproc.y"
  1237. {
  1238. yyval.str = make4_str(make1_str("""), yyvsp[-2].str, make1_str("", "), yyvsp[0].str);
  1239. ;
  1240.     break;}
  1241. case 1201:
  1242. #line 5100 "preproc.y"
  1243. {
  1244. if (strncmp(yyvsp[-1].str, "begin", 5) == 0)
  1245.                         yyerror("RELEASE does not make sense when beginning a transaction");
  1246. fprintf(yyout, "ECPGtrans(__LINE__, %s, "%s");", connection, yyvsp[-1].str);
  1247. whenever_action(0);
  1248. fprintf(yyout, "ECPGdisconnect("");"); 
  1249. whenever_action(0);
  1250. free(yyvsp[-1].str);
  1251. ;
  1252.     break;}
  1253. case 1202:
  1254. #line 5116 "preproc.y"
  1255. {
  1256. yyval.str = yyvsp[0].str;
  1257.                         ;
  1258.     break;}
  1259. case 1203:
  1260. #line 5120 "preproc.y"
  1261. { yyval.str = make1_str("on"); ;
  1262.     break;}
  1263. case 1204:
  1264. #line 5121 "preproc.y"
  1265. { yyval.str = make1_str("off"); ;
  1266.     break;}
  1267. case 1207:
  1268. #line 5130 "preproc.y"
  1269. {
  1270. yyval.str = yyvsp[0].str;
  1271.                         ;
  1272.     break;}
  1273. case 1208:
  1274. #line 5138 "preproc.y"
  1275. {
  1276. /* add entry to list */
  1277. struct typedefs *ptr, *this;
  1278. int dimension = yyvsp[-1].index.index1;
  1279. int length = yyvsp[-1].index.index2;
  1280. for (ptr = types; ptr != NULL; ptr = ptr->next)
  1281. {
  1282. if (strcmp(yyvsp[-4].str, ptr->name) == 0)
  1283. {
  1284.         /* re-definition is a bug */
  1285. sprintf(errortext, "type %s already defined", yyvsp[-4].str);
  1286. yyerror(errortext);
  1287.                 }
  1288. }
  1289. adjust_array(yyvsp[-2].type.type_enum, &dimension, &length, yyvsp[-2].type.type_dimension, yyvsp[-2].type.type_index, strlen(yyvsp[0].str));
  1290.          this = (struct typedefs *) mm_alloc(sizeof(struct typedefs));
  1291.          /* initial definition */
  1292.         this->next = types;
  1293.         this->name = yyvsp[-4].str;
  1294. this->type = (struct this_type *) mm_alloc(sizeof(struct this_type));
  1295. this->type->type_enum = yyvsp[-2].type.type_enum;
  1296. this->type->type_str = mm_strdup(yyvsp[-4].str);
  1297. this->type->type_dimension = dimension; /* dimension of array */
  1298. this->type->type_index = length;    /* lenght of string */
  1299. this->struct_member_list = struct_member_list[struct_level];
  1300. if (yyvsp[-2].type.type_enum != ECPGt_varchar &&
  1301.     yyvsp[-2].type.type_enum != ECPGt_char &&
  1302.             yyvsp[-2].type.type_enum != ECPGt_unsigned_char &&
  1303.     this->type->type_index >= 0)
  1304.                             yyerror("No multi-dimensional array support for simple data types");
  1305.          types = this;
  1306. yyval.str = cat5_str(cat3_str(make1_str("/* exec sql type"), mm_strdup(yyvsp[-4].str), make1_str("is")), mm_strdup(yyvsp[-2].type.type_str), mm_strdup(yyvsp[-1].index.str), yyvsp[0].str, make1_str("*/"));
  1307. ;
  1308.     break;}
  1309. case 1209:
  1310. #line 5180 "preproc.y"
  1311. {
  1312.                             yyval.index.index1 = 0;
  1313.                             yyval.index.index2 = yyvsp[0].index.index1;
  1314.                             yyval.index.str = cat2_str(make1_str("[]"), yyvsp[0].index.str);
  1315.                         ;
  1316.     break;}
  1317. case 1210:
  1318. #line 5186 "preproc.y"
  1319. {
  1320.                             yyval.index.index1 = 0;
  1321.                             yyval.index.index2 = yyvsp[0].index.index1;
  1322.                             yyval.index.str = cat2_str(make1_str("[]"), yyvsp[0].index.str);
  1323.                         ;
  1324.     break;}
  1325. case 1211:
  1326. #line 5192 "preproc.y"
  1327. {
  1328.     char *txt = mm_alloc(20L);
  1329.     sprintf (txt, "%d", yyvsp[-2].ival);
  1330.                             yyval.index.index1 = yyvsp[-2].ival;
  1331.                             yyval.index.index2 = yyvsp[0].index.index1;
  1332.                             yyval.index.str = cat4_str(make1_str("["), txt, make1_str("]"), yyvsp[0].index.str);
  1333.                         ;
  1334.     break;}
  1335. case 1212:
  1336. #line 5201 "preproc.y"
  1337. {
  1338.     char *txt = mm_alloc(20L);
  1339.     sprintf (txt, "%d", yyvsp[-2].ival);
  1340.                             yyval.index.index1 = yyvsp[-2].ival;
  1341.                             yyval.index.index2 = yyvsp[0].index.index1;
  1342.                             yyval.index.str = cat4_str(make1_str("["), txt, make1_str("]"), yyvsp[0].index.str);
  1343.                         ;
  1344.     break;}
  1345. case 1213:
  1346. #line 5210 "preproc.y"
  1347. {
  1348.                             yyval.index.index1 = -1;
  1349.                             yyval.index.index2 = -1;
  1350.                             yyval.index.str= make1_str("");
  1351.                         ;
  1352.     break;}
  1353. case 1214:
  1354. #line 5218 "preproc.y"
  1355. {
  1356.                             yyval.index.index1 = 0;
  1357.                             yyval.index.index2 = yyvsp[0].index.index1;
  1358.                             yyval.index.str = cat2_str(make1_str("[]"), yyvsp[0].index.str);
  1359.                         ;
  1360.     break;}
  1361. case 1215:
  1362. #line 5224 "preproc.y"
  1363. {
  1364.                             yyval.index.index1 = 0;
  1365.                             yyval.index.index2 = yyvsp[0].index.index1;
  1366.                             yyval.index.str = cat2_str(make1_str("[]"), yyvsp[0].index.str);
  1367.                         ;
  1368.     break;}
  1369. case 1216:
  1370. #line 5230 "preproc.y"
  1371. {
  1372.     char *txt = mm_alloc(20L);
  1373.     sprintf (txt, "%d", yyvsp[-2].ival);
  1374.                             yyval.index.index1 = yyvsp[-2].ival;
  1375.                             yyval.index.index2 = yyvsp[0].index.index1;
  1376.                             yyval.index.str = cat4_str(make1_str("["), txt, make1_str("]"), yyvsp[0].index.str);
  1377.                         ;
  1378.     break;}
  1379. case 1217:
  1380. #line 5239 "preproc.y"
  1381. {
  1382.     char *txt = mm_alloc(20L);
  1383.     sprintf (txt, "%d", yyvsp[-2].ival);
  1384.                             yyval.index.index1 = yyvsp[-2].ival;
  1385.                             yyval.index.index2 = yyvsp[0].index.index1;
  1386.                             yyval.index.str = cat4_str(make1_str("["), txt, make1_str("]"), yyvsp[0].index.str);
  1387.                         ;
  1388.     break;}
  1389. case 1218:
  1390. #line 5248 "preproc.y"
  1391. {
  1392.                             yyval.index.index1 = -1;
  1393.                             yyval.index.index2 = -1;
  1394.                             yyval.index.str= make1_str("");
  1395.                         ;
  1396.     break;}
  1397. case 1219:
  1398. #line 5254 "preproc.y"
  1399. { yyval.str = make1_str("reference"); ;
  1400.     break;}
  1401. case 1220:
  1402. #line 5255 "preproc.y"
  1403. { yyval.str = make1_str(""); ;
  1404.     break;}
  1405. case 1221:
  1406. #line 5258 "preproc.y"
  1407. {
  1408. yyval.type.type_str = make1_str("char");
  1409.                 yyval.type.type_enum = ECPGt_char;
  1410. yyval.type.type_index = -1;
  1411. yyval.type.type_dimension = -1;
  1412. ;
  1413.     break;}
  1414. case 1222:
  1415. #line 5265 "preproc.y"
  1416. {
  1417. yyval.type.type_str = make1_str("varchar");
  1418.                 yyval.type.type_enum = ECPGt_varchar;
  1419. yyval.type.type_index = -1;
  1420. yyval.type.type_dimension = -1;
  1421. ;
  1422.     break;}
  1423. case 1223:
  1424. #line 5272 "preproc.y"
  1425. {
  1426. yyval.type.type_str = make1_str("float");
  1427.                 yyval.type.type_enum = ECPGt_float;
  1428. yyval.type.type_index = -1;
  1429. yyval.type.type_dimension = -1;
  1430. ;
  1431.     break;}
  1432. case 1224:
  1433. #line 5279 "preproc.y"
  1434. {
  1435. yyval.type.type_str = make1_str("double");
  1436.                 yyval.type.type_enum = ECPGt_double;
  1437. yyval.type.type_index = -1;
  1438. yyval.type.type_dimension = -1;
  1439. ;
  1440.     break;}
  1441. case 1225:
  1442. #line 5286 "preproc.y"
  1443. {
  1444. yyval.type.type_str = make1_str("int");
  1445.                 yyval.type.type_enum = ECPGt_int;
  1446. yyval.type.type_index = -1;
  1447. yyval.type.type_dimension = -1;
  1448. ;
  1449.     break;}
  1450. case 1226:
  1451. #line 5293 "preproc.y"
  1452. {
  1453. yyval.type.type_str = make1_str("int");
  1454.                 yyval.type.type_enum = ECPGt_int;
  1455. yyval.type.type_index = -1;
  1456. yyval.type.type_dimension = -1;
  1457. ;
  1458.     break;}
  1459. case 1227:
  1460. #line 5300 "preproc.y"
  1461. {
  1462. yyval.type.type_str = make1_str("short");
  1463.                 yyval.type.type_enum = ECPGt_short;
  1464. yyval.type.type_index = -1;
  1465. yyval.type.type_dimension = -1;
  1466. ;
  1467.     break;}
  1468. case 1228:
  1469. #line 5307 "preproc.y"
  1470. {
  1471. yyval.type.type_str = make1_str("long");
  1472.                 yyval.type.type_enum = ECPGt_long;
  1473. yyval.type.type_index = -1;
  1474. yyval.type.type_dimension = -1;
  1475. ;
  1476.     break;}
  1477. case 1229:
  1478. #line 5314 "preproc.y"
  1479. {
  1480. yyval.type.type_str = make1_str("bool");
  1481.                 yyval.type.type_enum = ECPGt_bool;
  1482. yyval.type.type_index = -1;
  1483. yyval.type.type_dimension = -1;
  1484. ;
  1485.     break;}
  1486. case 1230:
  1487. #line 5321 "preproc.y"
  1488. {
  1489. yyval.type.type_str = make1_str("unsigned int");
  1490.                 yyval.type.type_enum = ECPGt_unsigned_int;
  1491. yyval.type.type_index = -1;
  1492. yyval.type.type_dimension = -1;
  1493. ;
  1494.     break;}
  1495. case 1231:
  1496. #line 5328 "preproc.y"
  1497. {
  1498. yyval.type.type_str = make1_str("unsigned short");
  1499.                 yyval.type.type_enum = ECPGt_unsigned_short;
  1500. yyval.type.type_index = -1;
  1501. yyval.type.type_dimension = -1;
  1502. ;
  1503.     break;}
  1504. case 1232:
  1505. #line 5335 "preproc.y"
  1506. {
  1507. yyval.type.type_str = make1_str("unsigned long");
  1508.                 yyval.type.type_enum = ECPGt_unsigned_long;
  1509. yyval.type.type_index = -1;
  1510. yyval.type.type_dimension = -1;
  1511. ;
  1512.     break;}
  1513. case 1233:
  1514. #line 5342 "preproc.y"
  1515. {
  1516. struct_member_list[struct_level++] = NULL;
  1517. if (struct_level >= STRUCT_DEPTH)
  1518.          yyerror("Too many levels in nested structure definition");
  1519. ;
  1520.     break;}
  1521. case 1234:
  1522. #line 5347 "preproc.y"
  1523. {
  1524. ECPGfree_struct_member(struct_member_list[struct_level--]);
  1525. yyval.type.type_str = cat3_str(make1_str("struct {"), yyvsp[-1].str, make1_str("}"));
  1526. yyval.type.type_enum = ECPGt_struct;
  1527.                 yyval.type.type_index = -1;
  1528.                 yyval.type.type_dimension = -1;
  1529. ;
  1530.     break;}
  1531. case 1235:
  1532. #line 5355 "preproc.y"
  1533. {
  1534. struct_member_list[struct_level++] = NULL;
  1535. if (struct_level >= STRUCT_DEPTH)
  1536.          yyerror("Too many levels in nested structure definition");
  1537. ;
  1538.     break;}
  1539. case 1236:
  1540. #line 5360 "preproc.y"
  1541. {
  1542. ECPGfree_struct_member(struct_member_list[struct_level--]);
  1543. yyval.type.type_str = cat3_str(make1_str("union {"), yyvsp[-1].str, make1_str("}"));
  1544. yyval.type.type_enum = ECPGt_union;
  1545.                 yyval.type.type_index = -1;
  1546.                 yyval.type.type_dimension = -1;
  1547. ;
  1548.     break;}
  1549. case 1237:
  1550. #line 5368 "preproc.y"
  1551. {
  1552. struct typedefs *this = get_typedef(yyvsp[0].str);
  1553. yyval.type.type_str = mm_strdup(yyvsp[0].str);
  1554. yyval.type.type_enum = this->type->type_enum;
  1555. yyval.type.type_dimension = this->type->type_dimension;
  1556. yyval.type.type_index = this->type->type_index;
  1557. struct_member_list[struct_level] = this->struct_member_list;
  1558. ;
  1559.     break;}
  1560. case 1240:
  1561. #line 5381 "preproc.y"
  1562. {
  1563. yyval.str = make1_str("");
  1564. ;
  1565.     break;}
  1566. case 1241:
  1567. #line 5385 "preproc.y"
  1568. {
  1569. yyval.str = cat2_str(yyvsp[-1].str, yyvsp[0].str);
  1570. ;
  1571.     break;}
  1572. case 1242:
  1573. #line 5391 "preproc.y"
  1574. {
  1575. actual_type[struct_level].type_enum = yyvsp[0].type.type_enum;
  1576. actual_type[struct_level].type_dimension = yyvsp[0].type.type_dimension;
  1577. actual_type[struct_level].type_index = yyvsp[0].type.type_index;
  1578. ;
  1579.     break;}
  1580. case 1243:
  1581. #line 5397 "preproc.y"
  1582. {
  1583. yyval.str = cat3_str(yyvsp[-3].type.type_str, yyvsp[-1].str, make1_str(";"));
  1584. ;
  1585.     break;}
  1586. case 1244:
  1587. #line 5402 "preproc.y"
  1588. {
  1589. yyval.str = yyvsp[0].str;
  1590. ;
  1591.     break;}
  1592. case 1245:
  1593. #line 5406 "preproc.y"
  1594. {
  1595. yyval.str = make3_str(yyvsp[-2].str, make1_str(","), yyvsp[0].str);
  1596. ;
  1597.     break;}
  1598. case 1246:
  1599. #line 5411 "preproc.y"
  1600. {
  1601. int dimension = yyvsp[0].index.index1;
  1602. int length = yyvsp[0].index.index2;
  1603. struct ECPGtype * type;
  1604.                         char dim[14L];
  1605. adjust_array(actual_type[struct_level].type_enum, &dimension, &length, actual_type[struct_level].type_dimension, actual_type[struct_level].type_index, strlen(yyvsp[-2].str));
  1606. switch (actual_type[struct_level].type_enum)
  1607. {
  1608.    case ECPGt_struct:
  1609.    case ECPGt_union:
  1610.                                if (dimension < 0)
  1611.                                    type = ECPGmake_struct_type(struct_member_list[struct_level], actual_type[struct_level].type_enum);
  1612.                                else
  1613.                                    type = ECPGmake_array_type(ECPGmake_struct_type(struct_member_list[struct_level], actual_type[struct_level].type_enum), dimension); 
  1614.                                break;
  1615.                            case ECPGt_varchar:
  1616.                                if (dimension == -1)
  1617.                                    type = ECPGmake_simple_type(actual_type[struct_level].type_enum, length);
  1618.                                else
  1619.                                    type = ECPGmake_array_type(ECPGmake_simple_type(actual_type[struct_level].type_enum, length), dimension);
  1620.                                switch(dimension)
  1621.                                {
  1622.                                   case 0:
  1623.                                       strcpy(dim, "[]");
  1624.                                       break;
  1625.   case -1:
  1626.                                   case 1:
  1627.                                       *dim = '';
  1628.                                       break;
  1629.                                   default:
  1630.                                       sprintf(dim, "[%d]", dimension);
  1631.                                       break;
  1632.                                 }
  1633.                                break;
  1634.                            case ECPGt_char:
  1635.                            case ECPGt_unsigned_char:
  1636.                                if (dimension == -1)
  1637.                                    type = ECPGmake_simple_type(actual_type[struct_level].type_enum, length);
  1638.                                else
  1639.                                    type = ECPGmake_array_type(ECPGmake_simple_type(actual_type[struct_level].type_enum, length), dimension);
  1640.                                break;
  1641.                            default:
  1642.        if (length >= 0)
  1643.                              yyerror("No multi-dimensional array support for simple data types");
  1644.                                if (dimension < 0)
  1645.                                    type = ECPGmake_simple_type(actual_type[struct_level].type_enum, 1);
  1646.                                else
  1647.                                    type = ECPGmake_array_type(ECPGmake_simple_type(actual_type[struct_level].type_enum, 1), dimension);
  1648.                                break;
  1649. }
  1650. if (struct_level == 0)
  1651. new_variable(yyvsp[-1].str, type);
  1652. else
  1653. ECPGmake_struct_member(yyvsp[-1].str, type, &(struct_member_list[struct_level - 1]));
  1654. yyval.str = cat3_str(yyvsp[-2].str, yyvsp[-1].str, yyvsp[0].index.str);
  1655. ;
  1656.     break;}
  1657. case 1247:
  1658. #line 5482 "preproc.y"
  1659. {
  1660. struct variable *p = find_variable(yyvsp[-4].str);
  1661. int dimension = yyvsp[-1].index.index1;
  1662. int length = yyvsp[-1].index.index2;
  1663. struct ECPGtype * type;
  1664. adjust_array(yyvsp[-2].type.type_enum, &dimension, &length, yyvsp[-2].type.type_dimension, yyvsp[-2].type.type_index, strlen(yyvsp[0].str));
  1665. switch (yyvsp[-2].type.type_enum)
  1666. {
  1667.    case ECPGt_struct:
  1668.    case ECPGt_union:
  1669.                         if (dimension < 0)
  1670.                             type = ECPGmake_struct_type(struct_member_list[struct_level], yyvsp[-2].type.type_enum);
  1671.                         else
  1672.                             type = ECPGmake_array_type(ECPGmake_struct_type(struct_member_list[struct_level], yyvsp[-2].type.type_enum), dimension); 
  1673.                         break;
  1674.                    case ECPGt_varchar:
  1675.                         if (dimension == -1)
  1676.                             type = ECPGmake_simple_type(yyvsp[-2].type.type_enum, length);
  1677.                         else
  1678.                             type = ECPGmake_array_type(ECPGmake_simple_type(yyvsp[-2].type.type_enum, length), dimension);
  1679. break;
  1680.                    case ECPGt_char:
  1681.                    case ECPGt_unsigned_char:
  1682.                         if (dimension == -1)
  1683.                             type = ECPGmake_simple_type(yyvsp[-2].type.type_enum, length);
  1684.                         else
  1685.                             type = ECPGmake_array_type(ECPGmake_simple_type(yyvsp[-2].type.type_enum, length), dimension);
  1686. break;
  1687.    default:
  1688. if (length >= 0)
  1689.                      yyerror("No multi-dimensional array support for simple data types");
  1690.                         if (dimension < 0)
  1691.                             type = ECPGmake_simple_type(yyvsp[-2].type.type_enum, 1);
  1692.                         else
  1693.                             type = ECPGmake_array_type(ECPGmake_simple_type(yyvsp[-2].type.type_enum, 1), dimension);
  1694. break;
  1695. }
  1696. ECPGfree_type(p->type);
  1697. p->type = type;
  1698. yyval.str = cat5_str(cat3_str(make1_str("/* exec sql var"), mm_strdup(yyvsp[-4].str), make1_str("is")), mm_strdup(yyvsp[-2].type.type_str), mm_strdup(yyvsp[-1].index.str), yyvsp[0].str, make1_str("*/"));
  1699. ;
  1700.     break;}
  1701. case 1248:
  1702. #line 5536 "preproc.y"
  1703. {
  1704. when_error.code = yyvsp[0].action.code;
  1705. when_error.command = yyvsp[0].action.command;
  1706. yyval.str = cat3_str(make1_str("/* exec sql whenever sqlerror "), yyvsp[0].action.str, make1_str("; */n"));
  1707. ;
  1708.     break;}
  1709. case 1249:
  1710. #line 5541 "preproc.y"
  1711. {
  1712. when_nf.code = yyvsp[0].action.code;
  1713. when_nf.command = yyvsp[0].action.command;
  1714. yyval.str = cat3_str(make1_str("/* exec sql whenever not found "), yyvsp[0].action.str, make1_str("; */n"));
  1715. ;
  1716.     break;}
  1717. case 1250:
  1718. #line 5546 "preproc.y"
  1719. {
  1720. when_warn.code = yyvsp[0].action.code;
  1721. when_warn.command = yyvsp[0].action.command;
  1722. yyval.str = cat3_str(make1_str("/* exec sql whenever sql_warning "), yyvsp[0].action.str, make1_str("; */n"));
  1723. ;
  1724.     break;}
  1725. case 1251:
  1726. #line 5552 "preproc.y"
  1727. {
  1728. yyval.action.code = W_NOTHING;
  1729. yyval.action.command = NULL;
  1730. yyval.action.str = make1_str("continue");
  1731. ;
  1732.     break;}
  1733. case 1252:
  1734. #line 5557 "preproc.y"
  1735. {
  1736. yyval.action.code = W_SQLPRINT;
  1737. yyval.action.command = NULL;
  1738. yyval.action.str = make1_str("sqlprint");
  1739. ;
  1740.     break;}
  1741. case 1253:
  1742. #line 5562 "preproc.y"
  1743. {
  1744. yyval.action.code = W_STOP;
  1745. yyval.action.command = NULL;
  1746. yyval.action.str = make1_str("stop");
  1747. ;
  1748.     break;}
  1749. case 1254:
  1750. #line 5567 "preproc.y"
  1751. {
  1752.         yyval.action.code = W_GOTO;
  1753.         yyval.action.command = strdup(yyvsp[0].str);
  1754. yyval.action.str = cat2_str(make1_str("goto "), yyvsp[0].str);
  1755. ;
  1756.     break;}
  1757. case 1255:
  1758. #line 5572 "preproc.y"
  1759. {
  1760.         yyval.action.code = W_GOTO;
  1761.         yyval.action.command = strdup(yyvsp[0].str);
  1762. yyval.action.str = cat2_str(make1_str("goto "), yyvsp[0].str);
  1763. ;
  1764.     break;}
  1765. case 1256:
  1766. #line 5577 "preproc.y"
  1767. {
  1768. yyval.action.code = W_DO;
  1769. yyval.action.command = make4_str(yyvsp[-3].str, make1_str("("), yyvsp[-1].str, make1_str(")"));
  1770. yyval.action.str = cat2_str(make1_str("do"), mm_strdup(yyval.action.command));
  1771. ;
  1772.     break;}
  1773. case 1257:
  1774. #line 5582 "preproc.y"
  1775. {
  1776.         yyval.action.code = W_BREAK;
  1777.         yyval.action.command = NULL;
  1778.         yyval.action.str = make1_str("break");
  1779. ;
  1780.     break;}
  1781. case 1258:
  1782. #line 5587 "preproc.y"
  1783. {
  1784. yyval.action.code = W_DO;
  1785. yyval.action.command = make4_str(yyvsp[-3].str, make1_str("("), yyvsp[-1].str, make1_str(")"));
  1786. yyval.action.str = cat2_str(make1_str("call"), mm_strdup(yyval.action.command));
  1787. ;
  1788.     break;}
  1789. case 1259:
  1790. #line 5595 "preproc.y"
  1791. {
  1792. yyval.str = cat2_str(yyvsp[-1].str, yyvsp[0].str);
  1793. ;
  1794.     break;}
  1795. case 1260:
  1796. #line 5599 "preproc.y"
  1797. { yyval.str = yyvsp[0].str;  ;
  1798.     break;}
  1799. case 1261:
  1800. #line 5601 "preproc.y"
  1801. { yyval.str = yyvsp[0].str;  ;
  1802.     break;}
  1803. case 1262:
  1804. #line 5603 "preproc.y"
  1805. {
  1806. yyval.str = yyvsp[0].str;
  1807. ;
  1808.     break;}
  1809. case 1263:
  1810. #line 5607 "preproc.y"
  1811. { yyval.str = cat2_str(make1_str("-"), yyvsp[0].str); ;
  1812.     break;}
  1813. case 1264:
  1814. #line 5609 "preproc.y"
  1815. {       yyval.str = cat2_str(make1_str("%"), yyvsp[0].str); ;
  1816.     break;}
  1817. case 1265:
  1818. #line 5611 "preproc.y"
  1819. {       yyval.str = cat2_str(yyvsp[-1].str, make1_str("%")); ;
  1820.     break;}
  1821. case 1266:
  1822. #line 5613 "preproc.y"
  1823. { yyval.str = cat3_str(yyvsp[-2].str, make1_str("+"), yyvsp[0].str); ;
  1824.     break;}
  1825. case 1267:
  1826. #line 5615 "preproc.y"
  1827. { yyval.str = cat3_str(yyvsp[-2].str, make1_str("-"), yyvsp[0].str); ;
  1828.     break;}
  1829. case 1268:
  1830. #line 5617 "preproc.y"
  1831. { yyval.str = cat3_str(yyvsp[-2].str, make1_str("/"), yyvsp[0].str); ;
  1832.     break;}
  1833. case 1269:
  1834. #line 5619 "preproc.y"
  1835. { yyval.str = cat3_str(yyvsp[-2].str, make1_str("%"), yyvsp[0].str); ;
  1836.     break;}
  1837. case 1270:
  1838. #line 5621 "preproc.y"
  1839. { yyval.str = cat3_str(yyvsp[-2].str, make1_str("*"), yyvsp[0].str); ;
  1840.     break;}
  1841. case 1271:
  1842. #line 5623 "preproc.y"
  1843. { yyval.str = cat3_str(yyvsp[-2].str, make1_str("<"), yyvsp[0].str); ;
  1844.     break;}
  1845. case 1272:
  1846. #line 5625 "preproc.y"
  1847. { yyval.str = cat3_str(yyvsp[-2].str, make1_str(">"), yyvsp[0].str); ;
  1848.     break;}
  1849. case 1273:
  1850. #line 5627 "preproc.y"
  1851. {       yyval.str = cat2_str(yyvsp[-2].str, make1_str("= NULL")); ;
  1852.     break;}
  1853. case 1274:
  1854. #line 5629 "preproc.y"
  1855. {       yyval.str = cat2_str(make1_str("= NULL"), yyvsp[0].str); ;
  1856.     break;}
  1857. case 1275:
  1858. #line 5631 "preproc.y"
  1859. { yyval.str = cat3_str(yyvsp[-2].str, make1_str("="), yyvsp[0].str); ;
  1860.     break;}
  1861. case 1276:
  1862. #line 5635 "preproc.y"
  1863. { yyval.str = cat2_str(make1_str(";"), yyvsp[0].str); ;
  1864.     break;}
  1865. case 1277:
  1866. #line 5637 "preproc.y"
  1867. { yyval.str = cat2_str(make1_str("|"), yyvsp[0].str); ;
  1868.     break;}
  1869. case 1278:
  1870. #line 5639 "preproc.y"
  1871. {
  1872. yyval.str = cat3_str(yyvsp[-2].str, make1_str("::"), yyvsp[0].str);
  1873. ;
  1874.     break;}
  1875. case 1279:
  1876. #line 5643 "preproc.y"
  1877. {
  1878. yyval.str = cat3_str(make2_str(make1_str("cast("), yyvsp[-3].str), make1_str("as"), make2_str(yyvsp[-1].str, make1_str(")")));
  1879. ;
  1880.     break;}
  1881. case 1280:
  1882. #line 5647 "preproc.y"
  1883. { yyval.str = make3_str(make1_str("("), yyvsp[-1].str, make1_str(")")); ;
  1884.     break;}
  1885. case 1281:
  1886. #line 5649 "preproc.y"
  1887. { yyval.str = cat3_str(yyvsp[-2].str, yyvsp[-1].str, yyvsp[0].str); ;
  1888.     break;}
  1889. case 1282:
  1890. #line 5651 "preproc.y"
  1891. { yyval.str = cat3_str(yyvsp[-2].str, make1_str("like"), yyvsp[0].str); ;
  1892.     break;}
  1893. case 1283:
  1894. #line 5653 "preproc.y"
  1895. { yyval.str = cat3_str(yyvsp[-3].str, make1_str("not like"), yyvsp[0].str); ;
  1896.     break;}
  1897. case 1284:
  1898. #line 5655 "preproc.y"
  1899. { yyval.str = cat2_str(yyvsp[-1].str, yyvsp[0].str); ;
  1900.     break;}
  1901. case 1285:
  1902. #line 5657 "preproc.y"
  1903. { yyval.str = cat2_str(yyvsp[-1].str, yyvsp[0].str); ;
  1904.     break;}
  1905. case 1286:
  1906. #line 5659 "preproc.y"
  1907. {
  1908. yyval.str = cat2_str(yyvsp[-3].str, make1_str("(*)")); 
  1909. ;
  1910.     break;}
  1911. case 1287:
  1912. #line 5663 "preproc.y"
  1913. {
  1914. yyval.str = cat2_str(yyvsp[-2].str, make1_str("()")); 
  1915. ;
  1916.     break;}
  1917. case 1288:
  1918. #line 5667 "preproc.y"
  1919. {
  1920. yyval.str = make4_str(yyvsp[-3].str, make1_str("("), yyvsp[-1].str, make1_str(")")); 
  1921. ;
  1922.     break;}
  1923. case 1289:
  1924. #line 5671 "preproc.y"
  1925. {
  1926. yyval.str = make1_str("current_date");
  1927. ;
  1928.     break;}
  1929. case 1290:
  1930. #line 5675 "preproc.y"
  1931. {
  1932. yyval.str = make1_str("current_time");
  1933. ;
  1934.     break;}
  1935. case 1291:
  1936. #line 5679 "preproc.y"
  1937. {
  1938. if (atol(yyvsp[-1].str) != 0)
  1939. fprintf(stderr,"CURRENT_TIME(%s) precision not implemented; zero used instead", yyvsp[-1].str);
  1940. yyval.str = make1_str("current_time");
  1941. ;
  1942.     break;}
  1943. case 1292:
  1944. #line 5685 "preproc.y"
  1945. {
  1946. yyval.str = make1_str("current_timestamp");
  1947. ;
  1948.     break;}
  1949. case 1293:
  1950. #line 5689 "preproc.y"
  1951. {
  1952. if (atol(yyvsp[-1].str) != 0)
  1953. fprintf(stderr,"CURRENT_TIMESTAMP(%s) precision not implemented; zero used instead",yyvsp[-1].str);
  1954. yyval.str = make1_str("current_timestamp");
  1955. ;
  1956.     break;}
  1957. case 1294:
  1958. #line 5695 "preproc.y"
  1959. {
  1960. yyval.str = make1_str("current_user");
  1961. ;
  1962.     break;}
  1963. case 1295:
  1964. #line 5699 "preproc.y"
  1965. {
  1966.                  yyval.str = make1_str("user");
  1967.       ;
  1968.     break;}
  1969. case 1296:
  1970. #line 5703 "preproc.y"
  1971. {
  1972. yyval.str = make3_str(make1_str("exists("), yyvsp[-1].str, make1_str(")"));
  1973. ;
  1974.     break;}
  1975. case 1297:
  1976. #line 5707 "preproc.y"
  1977. {
  1978. yyval.str = make3_str(make1_str("extract("), yyvsp[-1].str, make1_str(")"));
  1979. ;
  1980.     break;}
  1981. case 1298:
  1982. #line 5711 "preproc.y"
  1983. {
  1984. yyval.str = make3_str(make1_str("position("), yyvsp[-1].str, make1_str(")"));
  1985. ;
  1986.     break;}
  1987. case 1299:
  1988. #line 5715 "preproc.y"
  1989. {
  1990. yyval.str = make3_str(make1_str("substring("), yyvsp[-1].str, make1_str(")"));
  1991. ;
  1992.     break;}
  1993. case 1300:
  1994. #line 5720 "preproc.y"
  1995. {
  1996. yyval.str = make3_str(make1_str("trim(both"), yyvsp[-1].str, make1_str(")"));
  1997. ;
  1998.     break;}
  1999. case 1301:
  2000. #line 5724 "preproc.y"
  2001. {
  2002. yyval.str = make3_str(make1_str("trim(leading"), yyvsp[-1].str, make1_str(")"));
  2003. ;
  2004.     break;}
  2005. case 1302:
  2006. #line 5728 "preproc.y"
  2007. {
  2008. yyval.str = make3_str(make1_str("trim(trailing"), yyvsp[-1].str, make1_str(")"));
  2009. ;
  2010.     break;}
  2011. case 1303:
  2012. #line 5732 "preproc.y"
  2013. {
  2014. yyval.str = make3_str(make1_str("trim("), yyvsp[-1].str, make1_str(")"));
  2015. ;
  2016.     break;}
  2017. case 1304:
  2018. #line 5736 "preproc.y"
  2019. { yyval.str = cat2_str(yyvsp[-1].str, make1_str("isnull")); ;
  2020.     break;}
  2021. case 1305:
  2022. #line 5738 "preproc.y"
  2023. { yyval.str = cat2_str(yyvsp[-2].str, make1_str("is null")); ;
  2024.     break;}
  2025. case 1306:
  2026. #line 5740 "preproc.y"
  2027. { yyval.str = cat2_str(yyvsp[-1].str, make1_str("notnull")); ;
  2028.     break;}
  2029. case 1307:
  2030. #line 5742 "preproc.y"
  2031. { yyval.str = cat2_str(yyvsp[-3].str, make1_str("is not null")); ;
  2032.     break;}
  2033. case 1308:
  2034. #line 5749 "preproc.y"
  2035. {
  2036. { yyval.str = cat2_str(yyvsp[-2].str, make1_str("is true")); }
  2037. ;
  2038.     break;}
  2039. case 1309:
  2040. #line 5753 "preproc.y"
  2041. {
  2042. { yyval.str = cat2_str(yyvsp[-3].str, make1_str("is not false")); }
  2043. ;
  2044.     break;}
  2045. case 1310:
  2046. #line 5757 "preproc.y"
  2047. {
  2048. { yyval.str = cat2_str(yyvsp[-2].str, make1_str("is false")); }
  2049. ;
  2050.     break;}
  2051. case 1311:
  2052. #line 5761 "preproc.y"
  2053. {
  2054. { yyval.str = cat2_str(yyvsp[-3].str, make1_str("is not true")); }
  2055. ;
  2056.     break;}
  2057. case 1312:
  2058. #line 5765 "preproc.y"
  2059. {
  2060. yyval.str = cat5_str(yyvsp[-4].str, make1_str("between"), yyvsp[-2].str, make1_str("and"), yyvsp[0].str); 
  2061. ;
  2062.     break;}
  2063. case 1313:
  2064. #line 5769 "preproc.y"
  2065. {
  2066. yyval.str = cat5_str(yyvsp[-5].str, make1_str("not between"), yyvsp[-2].str, make1_str("and"), yyvsp[0].str); 
  2067. ;
  2068.     break;}
  2069. case 1314:
  2070. #line 5773 "preproc.y"
  2071. {
  2072. yyval.str = make4_str(yyvsp[-4].str, make1_str(" in ("), yyvsp[-1].str, make1_str(")")); 
  2073. ;
  2074.     break;}
  2075. case 1315:
  2076. #line 5777 "preproc.y"
  2077. {
  2078. yyval.str = make4_str(yyvsp[-5].str, make1_str(" not in ("), yyvsp[-1].str, make1_str(")")); 
  2079. ;
  2080.     break;}
  2081. case 1316:
  2082. #line 5781 "preproc.y"
  2083. {
  2084. yyval.str = cat3_str(yyvsp[-4].str, yyvsp[-3].str, make3_str(make1_str("("), yyvsp[-1].str, make1_str(")"))); 
  2085. ;
  2086.     break;}
  2087. case 1317:
  2088. #line 5785 "preproc.y"
  2089. {
  2090. yyval.str = make4_str(yyvsp[-4].str, make1_str("+("), yyvsp[-1].str, make1_str(")")); 
  2091. ;
  2092.     break;}
  2093. case 1318:
  2094. #line 5789 "preproc.y"
  2095. {
  2096. yyval.str = make4_str(yyvsp[-4].str, make1_str("-("), yyvsp[-1].str, make1_str(")")); 
  2097. ;
  2098.     break;}
  2099. case 1319:
  2100. #line 5793 "preproc.y"
  2101. {
  2102. yyval.str = make4_str(yyvsp[-4].str, make1_str("/("), yyvsp[-1].str, make1_str(")")); 
  2103. ;
  2104.     break;}
  2105. case 1320:
  2106. #line 5797 "preproc.y"
  2107. {
  2108. yyval.str = make4_str(yyvsp[-4].str, make1_str("%("), yyvsp[-1].str, make1_str(")")); 
  2109. ;
  2110.     break;}
  2111. case 1321:
  2112. #line 5801 "preproc.y"
  2113. {
  2114. yyval.str = make4_str(yyvsp[-4].str, make1_str("*("), yyvsp[-1].str, make1_str(")")); 
  2115. ;
  2116.     break;}
  2117. case 1322:
  2118. #line 5805 "preproc.y"
  2119. {
  2120. yyval.str = make4_str(yyvsp[-4].str, make1_str("<("), yyvsp[-1].str, make1_str(")")); 
  2121. ;
  2122.     break;}
  2123. case 1323:
  2124. #line 5809 "preproc.y"
  2125. {
  2126. yyval.str = make4_str(yyvsp[-4].str, make1_str(">("), yyvsp[-1].str, make1_str(")")); 
  2127. ;
  2128.     break;}
  2129. case 1324:
  2130. #line 5813 "preproc.y"
  2131. {
  2132. yyval.str = make4_str(yyvsp[-4].str, make1_str("=("), yyvsp[-1].str, make1_str(")")); 
  2133. ;
  2134.     break;}
  2135. case 1325:
  2136. #line 5817 "preproc.y"
  2137. {
  2138. yyval.str = cat3_str(yyvsp[-5].str, yyvsp[-4].str, make3_str(make1_str("any ("), yyvsp[-1].str, make1_str(")"))); 
  2139. ;
  2140.     break;}
  2141. case 1326:
  2142. #line 5821 "preproc.y"
  2143. {
  2144. yyval.str = make4_str(yyvsp[-5].str, make1_str("+ any("), yyvsp[-1].str, make1_str(")")); 
  2145. ;
  2146.     break;}
  2147. case 1327:
  2148. #line 5825 "preproc.y"
  2149. {
  2150. yyval.str = make4_str(yyvsp[-5].str, make1_str("- any("), yyvsp[-1].str, make1_str(")")); 
  2151. ;
  2152.     break;}
  2153. case 1328:
  2154. #line 5829 "preproc.y"
  2155. {
  2156. yyval.str = make4_str(yyvsp[-5].str, make1_str("/ any("), yyvsp[-1].str, make1_str(")")); 
  2157. ;
  2158.     break;}
  2159. case 1329:
  2160. #line 5833 "preproc.y"
  2161. {
  2162. yyval.str = make4_str(yyvsp[-5].str, make1_str("% any("), yyvsp[-1].str, make1_str(")")); 
  2163. ;
  2164.     break;}
  2165. case 1330:
  2166. #line 5837 "preproc.y"
  2167. {
  2168. yyval.str = make4_str(yyvsp[-5].str, make1_str("* any("), yyvsp[-1].str, make1_str(")")); 
  2169. ;
  2170.     break;}
  2171. case 1331:
  2172. #line 5841 "preproc.y"
  2173. {
  2174. yyval.str = make4_str(yyvsp[-5].str, make1_str("< any("), yyvsp[-1].str, make1_str(")")); 
  2175. ;
  2176.     break;}
  2177. case 1332:
  2178. #line 5845 "preproc.y"
  2179. {
  2180. yyval.str = make4_str(yyvsp[-5].str, make1_str("> any("), yyvsp[-1].str, make1_str(")")); 
  2181. ;
  2182.     break;}
  2183. case 1333:
  2184. #line 5849 "preproc.y"
  2185. {
  2186. yyval.str = make4_str(yyvsp[-5].str, make1_str("= any("), yyvsp[-1].str, make1_str(")")); 
  2187. ;
  2188.     break;}
  2189. case 1334:
  2190. #line 5853 "preproc.y"
  2191. {
  2192. yyval.str = cat3_str(yyvsp[-5].str, yyvsp[-4].str, make3_str(make1_str("all ("), yyvsp[-1].str, make1_str(")"))); 
  2193. ;
  2194.     break;}
  2195. case 1335:
  2196. #line 5857 "preproc.y"
  2197. {
  2198. yyval.str = make4_str(yyvsp[-5].str, make1_str("+ all("), yyvsp[-1].str, make1_str(")")); 
  2199. ;
  2200.     break;}
  2201. case 1336:
  2202. #line 5861 "preproc.y"
  2203. {
  2204. yyval.str = make4_str(yyvsp[-5].str, make1_str("- all("), yyvsp[-1].str, make1_str(")")); 
  2205. ;
  2206.     break;}
  2207. case 1337:
  2208. #line 5865 "preproc.y"
  2209. {
  2210. yyval.str = make4_str(yyvsp[-5].str, make1_str("/ all("), yyvsp[-1].str, make1_str(")")); 
  2211. ;
  2212.     break;}
  2213. case 1338:
  2214. #line 5869 "preproc.y"
  2215. {
  2216. yyval.str = make4_str(yyvsp[-5].str, make1_str("% all("), yyvsp[-1].str, make1_str(")")); 
  2217. ;
  2218.     break;}
  2219. case 1339:
  2220. #line 5873 "preproc.y"
  2221. {
  2222. yyval.str = make4_str(yyvsp[-5].str, make1_str("* all("), yyvsp[-1].str, make1_str(")")); 
  2223. ;
  2224.     break;}
  2225. case 1340:
  2226. #line 5877 "preproc.y"
  2227. {
  2228. yyval.str = make4_str(yyvsp[-5].str, make1_str("< all("), yyvsp[-1].str, make1_str(")")); 
  2229. ;
  2230.     break;}
  2231. case 1341:
  2232. #line 5881 "preproc.y"
  2233. {
  2234. yyval.str = make4_str(yyvsp[-5].str, make1_str("> all("), yyvsp[-1].str, make1_str(")")); 
  2235. ;
  2236.     break;}
  2237. case 1342:
  2238. #line 5885 "preproc.y"
  2239. {
  2240. yyval.str = make4_str(yyvsp[-5].str, make1_str("=all("), yyvsp[-1].str, make1_str(")")); 
  2241. ;
  2242.     break;}
  2243. case 1343:
  2244. #line 5889 "preproc.y"
  2245. { yyval.str = cat3_str(yyvsp[-2].str, make1_str("and"), yyvsp[0].str); ;
  2246.     break;}
  2247. case 1344:
  2248. #line 5891 "preproc.y"
  2249. { yyval.str = cat3_str(yyvsp[-2].str, make1_str("or"), yyvsp[0].str); ;
  2250.     break;}
  2251. case 1345:
  2252. #line 5893 "preproc.y"
  2253. { yyval.str = cat2_str(make1_str("not"), yyvsp[0].str); ;
  2254.     break;}
  2255. case 1346:
  2256. #line 5895 "preproc.y"
  2257. {       yyval.str = yyvsp[0].str; ;
  2258.     break;}
  2259. case 1347:
  2260. #line 5897 "preproc.y"
  2261. {  yyval.str = yyvsp[0].str; ;
  2262.     break;}
  2263. case 1350:
  2264. #line 5902 "preproc.y"
  2265. { reset_variables();;
  2266.     break;}
  2267. case 1351:
  2268. #line 5904 "preproc.y"
  2269. { yyval.str = make1_str(""); ;
  2270.     break;}
  2271. case 1352:
  2272. #line 5905 "preproc.y"
  2273. { yyval.str = make2_str(yyvsp[-1].str, yyvsp[0].str); ;
  2274.     break;}
  2275. case 1353:
  2276. #line 5907 "preproc.y"
  2277. { yyval.str = yyvsp[0].str; ;
  2278.     break;}
  2279. case 1354:
  2280. #line 5908 "preproc.y"
  2281. { yyval.str = make2_str(yyvsp[-1].str, yyvsp[0].str); ;
  2282.     break;}
  2283. case 1355:
  2284. #line 5910 "preproc.y"
  2285. {
  2286. add_variable(&argsresult, find_variable(yyvsp[-1].str), (yyvsp[0].str == NULL) ? &no_indicator : find_variable(yyvsp[0].str)); 
  2287. ;
  2288.     break;}
  2289. case 1356:
  2290. #line 5914 "preproc.y"
  2291. {
  2292. add_variable(&argsinsert, find_variable(yyvsp[-1].str), (yyvsp[0].str == NULL) ? &no_indicator : find_variable(yyvsp[0].str)); 
  2293. ;
  2294.     break;}
  2295. case 1357:
  2296. #line 5918 "preproc.y"
  2297. {
  2298. add_variable(&argsinsert, find_variable(yyvsp[0].str), &no_indicator); 
  2299. yyval.str = make1_str("?");
  2300. ;
  2301.     break;}
  2302. case 1358:
  2303. #line 5923 "preproc.y"
  2304. { yyval.str = yyvsp[0].str; ;
  2305.     break;}
  2306. case 1359:
  2307. #line 5925 "preproc.y"
  2308. { yyval.str = NULL; ;
  2309.     break;}
  2310. case 1360:
  2311. #line 5926 "preproc.y"
  2312. { check_indicator((find_variable(yyvsp[0].str))->type); yyval.str = yyvsp[0].str; ;
  2313.     break;}
  2314. case 1361:
  2315. #line 5927 "preproc.y"
  2316. { check_indicator((find_variable(yyvsp[0].str))->type); yyval.str = yyvsp[0].str; ;
  2317.     break;}
  2318. case 1362:
  2319. #line 5928 "preproc.y"
  2320. { check_indicator((find_variable(yyvsp[0].str))->type); yyval.str = yyvsp[0].str; ;
  2321.     break;}
  2322. case 1363:
  2323. #line 5930 "preproc.y"
  2324. { yyval.str = yyvsp[0].str; ;
  2325.     break;}
  2326. case 1364:
  2327. #line 5931 "preproc.y"
  2328. { yyval.str = yyvsp[0].str; ;
  2329.     break;}
  2330. case 1365:
  2331. #line 5936 "preproc.y"
  2332. { yyval.str = yyvsp[0].str; ;
  2333.     break;}
  2334. case 1366:
  2335. #line 5938 "preproc.y"
  2336. { yyval.str = yyvsp[0].str; ;
  2337.     break;}
  2338. case 1367:
  2339. #line 5940 "preproc.y"
  2340. { yyval.str = yyvsp[0].str; ;
  2341.     break;}
  2342. case 1368:
  2343. #line 5942 "preproc.y"
  2344. {
  2345. yyval.str = make2_str(yyvsp[-1].str, yyvsp[0].str);
  2346. ;
  2347.     break;}
  2348. case 1370:
  2349. #line 5946 "preproc.y"
  2350. { yyval.str = make1_str(";"); ;
  2351.     break;}
  2352. case 1371:
  2353. #line 5948 "preproc.y"
  2354. { yyval.str = yyvsp[0].str; ;
  2355.     break;}
  2356. case 1372:
  2357. #line 5949 "preproc.y"
  2358. { yyval.str = make3_str(make1_str("""), yyvsp[0].str, make1_str(""")); ;
  2359.     break;}
  2360. case 1373:
  2361. #line 5950 "preproc.y"
  2362. { yyval.str = yyvsp[0].str; ;
  2363.     break;}
  2364. case 1374:
  2365. #line 5951 "preproc.y"
  2366. { yyval.str = yyvsp[0].str; ;
  2367.     break;}
  2368. case 1375:
  2369. #line 5952 "preproc.y"
  2370. { yyval.str = make1_str("*"); ;
  2371.     break;}
  2372. case 1376:
  2373. #line 5953 "preproc.y"
  2374. { yyval.str = make1_str("+"); ;
  2375.     break;}
  2376. case 1377:
  2377. #line 5954 "preproc.y"
  2378. { yyval.str = make1_str("-"); ;
  2379.     break;}
  2380. case 1378:
  2381. #line 5955 "preproc.y"
  2382. { yyval.str = make1_str("/"); ;
  2383.     break;}
  2384. case 1379:
  2385. #line 5956 "preproc.y"
  2386. { yyval.str = make1_str("%"); ;
  2387.     break;}
  2388. case 1380:
  2389. #line 5957 "preproc.y"
  2390. { yyval.str = make1_str("auto"); ;
  2391.     break;}
  2392. case 1381:
  2393. #line 5958 "preproc.y"
  2394. { yyval.str = make1_str("bool"); ;
  2395.     break;}
  2396. case 1382:
  2397. #line 5959 "preproc.y"
  2398. { yyval.str = make1_str("char"); ;
  2399.     break;}
  2400. case 1383:
  2401. #line 5960 "preproc.y"
  2402. { yyval.str = make1_str("const"); ;
  2403.     break;}
  2404. case 1384:
  2405. #line 5961 "preproc.y"
  2406. { yyval.str = make1_str("double"); ;
  2407.     break;}
  2408. case 1385:
  2409. #line 5962 "preproc.y"
  2410. { yyval.str = make1_str("enum"); ;
  2411.     break;}
  2412. case 1386:
  2413. #line 5963 "preproc.y"
  2414. { yyval.str = make1_str("extern"); ;
  2415.     break;}
  2416. case 1387:
  2417. #line 5964 "preproc.y"
  2418. { yyval.str = make1_str("float"); ;
  2419.     break;}
  2420. case 1388:
  2421. #line 5965 "preproc.y"
  2422. { yyval.str = make1_str("int"); ;
  2423.     break;}
  2424. case 1389:
  2425. #line 5966 "preproc.y"
  2426. { yyval.str = make1_str("long"); ;
  2427.     break;}
  2428. case 1390:
  2429. #line 5967 "preproc.y"
  2430. { yyval.str = make1_str("register"); ;
  2431.     break;}
  2432. case 1391:
  2433. #line 5968 "preproc.y"
  2434. { yyval.str = make1_str("short"); ;
  2435.     break;}
  2436. case 1392:
  2437. #line 5969 "preproc.y"
  2438. { yyval.str = make1_str("signed"); ;
  2439.     break;}
  2440. case 1393:
  2441. #line 5970 "preproc.y"
  2442. { yyval.str = make1_str("static"); ;
  2443.     break;}
  2444. case 1394:
  2445. #line 5971 "preproc.y"
  2446. { yyval.str = make1_str("struct"); ;
  2447.     break;}
  2448. case 1395:
  2449. #line 5972 "preproc.y"
  2450. { yyval.str = make1_str("union"); ;
  2451.     break;}
  2452. case 1396:
  2453. #line 5973 "preproc.y"
  2454. { yyval.str = make1_str("unsigned"); ;
  2455.     break;}
  2456. case 1397:
  2457. #line 5974 "preproc.y"
  2458. { yyval.str = make1_str("varchar"); ;
  2459.     break;}
  2460. case 1398:
  2461. #line 5975 "preproc.y"
  2462. { yyval.str = make_name(); ;
  2463.     break;}
  2464. case 1399:
  2465. #line 5976 "preproc.y"
  2466. { yyval.str = make1_str("["); ;
  2467.     break;}
  2468. case 1400:
  2469. #line 5977 "preproc.y"
  2470. { yyval.str = make1_str("]"); ;
  2471.     break;}
  2472. case 1401:
  2473. #line 5978 "preproc.y"
  2474. { yyval.str = make1_str("("); ;
  2475.     break;}
  2476. case 1402:
  2477. #line 5979 "preproc.y"
  2478. { yyval.str = make1_str(")"); ;
  2479.     break;}
  2480. case 1403:
  2481. #line 5980 "preproc.y"
  2482. { yyval.str = make1_str("="); ;
  2483.     break;}
  2484. case 1404:
  2485. #line 5981 "preproc.y"
  2486. { yyval.str = make1_str(","); ;
  2487.     break;}
  2488. case 1405:
  2489. #line 5983 "preproc.y"
  2490. { yyval.str = yyvsp[0].str; ;
  2491.     break;}
  2492. case 1406:
  2493. #line 5984 "preproc.y"
  2494. { yyval.str = make3_str(make1_str("""), yyvsp[0].str, make1_str("""));;
  2495.     break;}
  2496. case 1407:
  2497. #line 5985 "preproc.y"
  2498. { yyval.str = yyvsp[0].str; ;
  2499.     break;}
  2500. case 1408:
  2501. #line 5986 "preproc.y"
  2502. { yyval.str = yyvsp[0].str; ;
  2503.     break;}
  2504. case 1409:
  2505. #line 5987 "preproc.y"
  2506. { yyval.str = make1_str(","); ;
  2507.     break;}
  2508. case 1410:
  2509. #line 5989 "preproc.y"
  2510. { yyval.str = yyvsp[0].str; ;
  2511.     break;}
  2512. case 1411:
  2513. #line 5990 "preproc.y"
  2514. { yyval.str = make3_str(make1_str("""), yyvsp[0].str, make1_str(""")); ;
  2515.     break;}
  2516. case 1412:
  2517. #line 5991 "preproc.y"
  2518. { yyval.str = yyvsp[0].str; ;
  2519.     break;}
  2520. case 1413:
  2521. #line 5992 "preproc.y"
  2522. { yyval.str = yyvsp[0].str; ;
  2523.     break;}
  2524. case 1414:
  2525. #line 5993 "preproc.y"
  2526. { yyval.str = make3_str(make1_str("{"), yyvsp[-1].str, make1_str("}")); ;
  2527.     break;}
  2528. case 1415:
  2529. #line 5995 "preproc.y"
  2530. {
  2531.     braces_open++;
  2532.     yyval.str = make1_str("{");
  2533. ;
  2534.     break;}
  2535. case 1416:
  2536. #line 6000 "preproc.y"
  2537. {
  2538.     remove_variables(braces_open--);
  2539.     yyval.str = make1_str("}");
  2540. ;
  2541.     break;}
  2542. }
  2543.    /* the action file gets copied in in place of this dollarsign */
  2544. #line 543 "/usr/share/misc/bison.simple"
  2545.   yyvsp -= yylen;
  2546.   yyssp -= yylen;
  2547. #ifdef YYLSP_NEEDED
  2548.   yylsp -= yylen;
  2549. #endif
  2550. #if YYDEBUG != 0
  2551.   if (yydebug)
  2552.     {
  2553.       short *ssp1 = yyss - 1;
  2554.       fprintf (stderr, "state stack now");
  2555.       while (ssp1 != yyssp)
  2556. fprintf (stderr, " %d", *++ssp1);
  2557.       fprintf (stderr, "n");
  2558.     }
  2559. #endif
  2560.   *++yyvsp = yyval;
  2561. #ifdef YYLSP_NEEDED
  2562.   yylsp++;
  2563.   if (yylen == 0)
  2564.     {
  2565.       yylsp->first_line = yylloc.first_line;
  2566.       yylsp->first_column = yylloc.first_column;
  2567.       yylsp->last_line = (yylsp-1)->last_line;
  2568.       yylsp->last_column = (yylsp-1)->last_column;
  2569.       yylsp->text = 0;
  2570.     }
  2571.   else
  2572.     {
  2573.       yylsp->last_line = (yylsp+yylen-1)->last_line;
  2574.       yylsp->last_column = (yylsp+yylen-1)->last_column;
  2575.     }
  2576. #endif
  2577.   /* Now "shift" the result of the reduction.
  2578.      Determine what state that goes to,
  2579.      based on the state we popped back to
  2580.      and the rule number reduced by.  */
  2581.   yyn = yyr1[yyn];
  2582.   yystate = yypgoto[yyn - YYNTBASE] + *yyssp;
  2583.   if (yystate >= 0 && yystate <= YYLAST && yycheck[yystate] == *yyssp)
  2584.     yystate = yytable[yystate];
  2585.   else
  2586.     yystate = yydefgoto[yyn - YYNTBASE];
  2587.   goto yynewstate;
  2588. yyerrlab:   /* here on detecting error */
  2589.   if (! yyerrstatus)
  2590.     /* If not already recovering from an error, report this error.  */
  2591.     {
  2592.       ++yynerrs;
  2593. #ifdef YYERROR_VERBOSE
  2594.       yyn = yypact[yystate];
  2595.       if (yyn > YYFLAG && yyn < YYLAST)
  2596. {
  2597.   int size = 0;
  2598.   char *msg;
  2599.   int x, count;
  2600.   count = 0;
  2601.   /* Start X at -yyn if nec to avoid negative indexes in yycheck.  */
  2602.   for (x = (yyn < 0 ? -yyn : 0);
  2603.        x < (sizeof(yytname) / sizeof(char *)); x++)
  2604.     if (yycheck[x + yyn] == x)
  2605.       size += strlen(yytname[x]) + 15, count++;
  2606.   msg = (char *) malloc(size + 15);
  2607.   if (msg != 0)
  2608.     {
  2609.       strcpy(msg, "parse error");
  2610.       if (count < 5)
  2611. {
  2612.   count = 0;
  2613.   for (x = (yyn < 0 ? -yyn : 0);
  2614.        x < (sizeof(yytname) / sizeof(char *)); x++)
  2615.     if (yycheck[x + yyn] == x)
  2616.       {
  2617. strcat(msg, count == 0 ? ", expecting `" : " or `");
  2618. strcat(msg, yytname[x]);
  2619. strcat(msg, "'");
  2620. count++;
  2621.       }
  2622. }
  2623.       yyerror(msg);
  2624.       free(msg);
  2625.     }
  2626.   else
  2627.     yyerror ("parse error; also virtual memory exceeded");
  2628. }
  2629.       else
  2630. #endif /* YYERROR_VERBOSE */
  2631. yyerror("parse error");
  2632.     }
  2633.   goto yyerrlab1;
  2634. yyerrlab1:   /* here on error raised explicitly by an action */
  2635.   if (yyerrstatus == 3)
  2636.     {
  2637.       /* if just tried and failed to reuse lookahead token after an error, discard it.  */
  2638.       /* return failure if at end of input */
  2639.       if (yychar == YYEOF)
  2640. YYABORT;
  2641. #if YYDEBUG != 0
  2642.       if (yydebug)
  2643. fprintf(stderr, "Discarding token %d (%s).n", yychar, yytname[yychar1]);
  2644. #endif
  2645.       yychar = YYEMPTY;
  2646.     }
  2647.   /* Else will try to reuse lookahead token
  2648.      after shifting the error token.  */
  2649.   yyerrstatus = 3; /* Each real token shifted decrements this */
  2650.   goto yyerrhandle;
  2651. yyerrdefault:  /* current state does not do anything special for the error token. */
  2652. #if 0
  2653.   /* This is wrong; only states that explicitly want error tokens
  2654.      should shift them.  */
  2655.   yyn = yydefact[yystate];  /* If its default is to accept any token, ok.  Otherwise pop it.*/
  2656.   if (yyn) goto yydefault;
  2657. #endif
  2658. yyerrpop:   /* pop the current state because it cannot handle the error token */
  2659.   if (yyssp == yyss) YYABORT;
  2660.   yyvsp--;
  2661.   yystate = *--yyssp;
  2662. #ifdef YYLSP_NEEDED
  2663.   yylsp--;
  2664. #endif
  2665. #if YYDEBUG != 0
  2666.   if (yydebug)
  2667.     {
  2668.       short *ssp1 = yyss - 1;
  2669.       fprintf (stderr, "Error: state stack now");
  2670.       while (ssp1 != yyssp)
  2671. fprintf (stderr, " %d", *++ssp1);
  2672.       fprintf (stderr, "n");
  2673.     }
  2674. #endif
  2675. yyerrhandle:
  2676.   yyn = yypact[yystate];
  2677.   if (yyn == YYFLAG)
  2678.     goto yyerrdefault;
  2679.   yyn += YYTERROR;
  2680.   if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != YYTERROR)
  2681.     goto yyerrdefault;
  2682.   yyn = yytable[yyn];
  2683.   if (yyn < 0)
  2684.     {
  2685.       if (yyn == YYFLAG)
  2686. goto yyerrpop;
  2687.       yyn = -yyn;
  2688.       goto yyreduce;
  2689.     }
  2690.   else if (yyn == 0)
  2691.     goto yyerrpop;
  2692.   if (yyn == YYFINAL)
  2693.     YYACCEPT;
  2694. #if YYDEBUG != 0
  2695.   if (yydebug)
  2696.     fprintf(stderr, "Shifting error token, ");
  2697. #endif
  2698.   *++yyvsp = yylval;
  2699. #ifdef YYLSP_NEEDED
  2700.   *++yylsp = yylloc;
  2701. #endif
  2702.   yystate = yyn;
  2703.   goto yynewstate;
  2704.  yyacceptlab:
  2705.   /* YYACCEPT comes here.  */
  2706.   if (yyfree_stacks)
  2707.     {
  2708.       free (yyss);
  2709.       free (yyvs);
  2710. #ifdef YYLSP_NEEDED
  2711.       free (yyls);
  2712. #endif
  2713.     }
  2714.   return 0;
  2715.  yyabortlab:
  2716.   /* YYABORT comes here.  */
  2717.   if (yyfree_stacks)
  2718.     {
  2719.       free (yyss);
  2720.       free (yyvs);
  2721. #ifdef YYLSP_NEEDED
  2722.       free (yyls);
  2723. #endif
  2724.     }
  2725.   return 1;
  2726. }
  2727. #line 6005 "preproc.y"
  2728. void yyerror(char * error)
  2729. {
  2730.     fprintf(stderr, "%s:%d: %sn", input_filename, yylineno, error);
  2731.     exit(PARSE_ERROR);
  2732. }