pl_gram.c

来自「postgresql8.3.4源码,开源数据库」· C语言 代码 · 共 2,193 行 · 第 1/5 页

C
2,193
字号
						plpgsql_adddatum((PLpgSQL_datum *) new);						yyval.row = new;					}    break;  case 32:#line 479 "gram.y"    {						yyval.list = list_make1(yyvsp[0].variable);					}    break;  case 33:#line 483 "gram.y"    {						yyval.list = lappend(yyvsp[-2].list, yyvsp[0].variable);					}    break;  case 34:#line 489 "gram.y"    {						yyval.variable = plpgsql_build_variable(yyvsp[-1].varname.name, yyvsp[-1].varname.lineno,													yyvsp[0].dtype, true);					}    break;  case 37:#line 499 "gram.y"    {						char	*name;						PLpgSQL_nsitem *nsi;						plpgsql_convert_ident(yytext, &name, 1);						if (name[0] != '$')							yyerror("only positional parameters can be aliased");						plpgsql_ns_setlocal(false);						nsi = plpgsql_ns_lookup(name, NULL, NULL, NULL);						if (nsi == NULL)						{							plpgsql_error_lineno = plpgsql_scanner_lineno();							ereport(ERROR,									(errcode(ERRCODE_UNDEFINED_PARAMETER),									 errmsg("function has no parameter \"%s\"",											name)));						}						plpgsql_ns_setlocal(true);						pfree(name);						yyval.nsitem = nsi;					}    break;  case 38:#line 528 "gram.y"    {						char	*name;						plpgsql_convert_ident(yytext, &name, 1);						yyval.varname.name = name;						yyval.varname.lineno  = plpgsql_scanner_lineno();					}    break;  case 39:#line 538 "gram.y"    {						char	*name;						plpgsql_convert_ident(yytext, &name, 1);						/* the result must be palloc'd, see plpgsql_ns_rename */						yyval.str = name;					}    break;  case 40:#line 548 "gram.y"    { yyval.boolean = false; }    break;  case 41:#line 550 "gram.y"    { yyval.boolean = true; }    break;  case 42:#line 554 "gram.y"    {						/*						 * If there's a lookahead token, read_datatype						 * should consume it.						 */						yyval.dtype = read_datatype(yychar);						yyclearin;					}    break;  case 43:#line 565 "gram.y"    { yyval.boolean = false; }    break;  case 44:#line 567 "gram.y"    { yyval.boolean = true; }    break;  case 45:#line 571 "gram.y"    { yyval.expr = NULL; }    break;  case 46:#line 573 "gram.y"    {						plpgsql_ns_setlocal(false);						yyval.expr = plpgsql_read_expression(';', ";");						plpgsql_ns_setlocal(true);					}    break;  case 49:#line 585 "gram.y"    {						yyval.list = NIL;					}    break;  case 50:#line 589 "gram.y"    { yyval.list = yyvsp[0].list; }    break;  case 51:#line 593 "gram.y"    {							if (yyvsp[0].stmt == NULL)								yyval.list = yyvsp[-1].list;							else								yyval.list = lappend(yyvsp[-1].list, yyvsp[0].stmt);						}    break;  case 52:#line 600 "gram.y"    {							if (yyvsp[0].stmt == NULL)								yyval.list = NULL;							else								yyval.list = list_make1(yyvsp[0].stmt);						}    break;  case 53:#line 609 "gram.y"    { yyval.stmt = yyvsp[-1].stmt; }    break;  case 54:#line 611 "gram.y"    { yyval.stmt = yyvsp[0].stmt; }    break;  case 55:#line 613 "gram.y"    { yyval.stmt = yyvsp[0].stmt; }    break;  case 56:#line 615 "gram.y"    { yyval.stmt = yyvsp[0].stmt; }    break;  case 57:#line 617 "gram.y"    { yyval.stmt = yyvsp[0].stmt; }    break;  case 58:#line 619 "gram.y"    { yyval.stmt = yyvsp[0].stmt; }    break;  case 59:#line 621 "gram.y"    { yyval.stmt = yyvsp[0].stmt; }    break;  case 60:#line 623 "gram.y"    { yyval.stmt = yyvsp[0].stmt; }    break;  case 61:#line 625 "gram.y"    { yyval.stmt = yyvsp[0].stmt; }    break;  case 62:#line 627 "gram.y"    { yyval.stmt = yyvsp[0].stmt; }    break;  case 63:#line 629 "gram.y"    { yyval.stmt = yyvsp[0].stmt; }    break;  case 64:#line 631 "gram.y"    { yyval.stmt = yyvsp[0].stmt; }    break;  case 65:#line 633 "gram.y"    { yyval.stmt = yyvsp[0].stmt; }    break;  case 66:#line 635 "gram.y"    { yyval.stmt = yyvsp[0].stmt; }    break;  case 67:#line 637 "gram.y"    { yyval.stmt = yyvsp[0].stmt; }    break;  case 68:#line 639 "gram.y"    { yyval.stmt = yyvsp[0].stmt; }    break;  case 69:#line 641 "gram.y"    { yyval.stmt = yyvsp[0].stmt; }    break;  case 70:#line 643 "gram.y"    { yyval.stmt = yyvsp[0].stmt; }    break;  case 71:#line 645 "gram.y"    { yyval.stmt = yyvsp[0].stmt; }    break;  case 72:#line 649 "gram.y"    {						PLpgSQL_stmt_perform *new;						new = palloc0(sizeof(PLpgSQL_stmt_perform));						new->cmd_type = PLPGSQL_STMT_PERFORM;						new->lineno   = yyvsp[-1].ival;						new->expr  = yyvsp[0].expr;						yyval.stmt = (PLpgSQL_stmt *)new;					}    break;  case 73:#line 662 "gram.y"    {						PLpgSQL_stmt_assign *new;						new = palloc0(sizeof(PLpgSQL_stmt_assign));						new->cmd_type = PLPGSQL_STMT_ASSIGN;						new->lineno   = yyvsp[-2].ival;						new->varno = yyvsp[-3].ival;						new->expr  = yyvsp[0].expr;						yyval.stmt = (PLpgSQL_stmt *)new;					}    break;  case 74:#line 676 "gram.y"    {						PLpgSQL_stmt_getdiag	 *new;						new = palloc0(sizeof(PLpgSQL_stmt_getdiag));						new->cmd_type = PLPGSQL_STMT_GETDIAG;						new->lineno   = yyvsp[-2].ival;						new->diag_items  = yyvsp[-1].list;						yyval.stmt = (PLpgSQL_stmt *)new;					}    break;  case 75:#line 689 "gram.y"    {						yyval.list = lappend(yyvsp[-2].list, yyvsp[0].diagitem);					}    break;  case 76:#line 693 "gram.y"    {						yyval.list = list_make1(yyvsp[0].diagitem);					}    break;  case 77:#line 699 "gram.y"    {						PLpgSQL_diag_item *new;						new = palloc(sizeof(PLpgSQL_diag_item));						new->target = yyvsp[-2].ival;						new->kind = yyvsp[0].ival;						yyval.diagitem = new;					}    break;  case 78:#line 711 "gram.y"    {						yyval.ival = PLPGSQL_GETDIAG_ROW_COUNT;					}    break;  case 79:#line 715 "gram.y"    {						yyval.ival = PLPGSQL_GETDIAG_RESULT_OID;					}    break;  case 80:#line 721 "gram.y"    {						check_assignable(yylval.scalar);						yyval.ival = yylval.scalar->dno;					}    break;  case 81:#line 729 "gram.y"    {						check_assignable(yylval.scalar);						yyval.ival = yylval.scalar->dno;					}    break;  case 82:#line 734 "gram.y"    {						check_assignable((PLpgSQL_datum *) yylval.row);						yyval.ival = yylval.row->rowno;					}    break;  case 83:#line 739 "gram.y"    {						check_assignable((PLpgSQL_datum *) yylval.rec);						yyval.ival = yylval.rec->recno;					}    break;  case 84:#line 744 "gram.y"    {						PLpgSQL_arrayelem	*new;						new = palloc0(sizeof(PLpgSQL_arrayelem));						new->dtype		= PLPGSQL_DTYPE_ARRAYELEM;						new->subscript	= yyvsp[0].expr;						new->arrayparentno = yyvsp[-2].ival;						plpgsql_adddatum((PLpgSQL_datum *)new);						yyval.ival = new->dno;					}    break;  case 85:#line 759 "gram.y"    {						PLpgSQL_stmt_if *new;						new = palloc0(sizeof(PLpgSQL_stmt_if));						new->cmd_type	= PLPGSQL_STMT_IF;						new->lineno		= yyvsp[-6].ival;						new->cond		= yyvsp[-5].expr;						new->true_body	= yyvsp[-4].list;						new->false_body = yyvsp[-3].list;						yyval.stmt = (PLpgSQL_stmt *)new;					}    break;  case 86:#line 774 "gram.y"    {						yyval.list = NIL;					}    break;  case 87:#line 778 "gram.y"    {						/*						 * Translate the structure:	   into:						 *						 * IF c1 THEN				   IF c1 THEN						 *	 ...						   ...						 * ELSIF c2 THEN			   ELSE						 *								   IF c2 THEN						 *	 ...							   ...						 * ELSE							   ELSE						 *	 ...							   ...						 * END IF						   END IF						 *							   END IF						 */						PLpgSQL_stmt_if *new_if;						/* first create a new if-statement */						new_if = palloc0(sizeof(PLpgSQL_stmt_if));						new_if->cmd_type	= PLPGSQL_STMT_IF;						new_if->lineno		= yyvsp[-3].ival;						new_if->cond		= yyvsp[-2].expr;						new_if->true_body	= yyvsp[-1].list;						new_if->false_body	= yyvsp[0].list;						/* wrap the if-statement in a "container" list */						yyval.list = list_make1(new_if);					} 

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?