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 + -
显示快捷键?