📄 pl_gram.c
字号:
case 8:#line 249 "gram.y" { plpgsql_DumpExecTree = true; } break; case 11:#line 259 "gram.y" { PLpgSQL_stmt_block *new; new = palloc0(sizeof(PLpgSQL_stmt_block)); new->cmd_type = PLPGSQL_STMT_BLOCK; new->lineno = plpgsql_yyvsp[-4].ival; new->label = plpgsql_yyvsp[-6].declhdr.label; new->n_initvars = plpgsql_yyvsp[-6].declhdr.n_initvars; new->initvarnos = plpgsql_yyvsp[-6].declhdr.initvarnos; new->body = plpgsql_yyvsp[-3].list; new->exceptions = plpgsql_yyvsp[-2].exception_block; check_labels(plpgsql_yyvsp[-6].declhdr.label, plpgsql_yyvsp[0].str); plpgsql_ns_pop(); plpgsql_yyval.stmt = (PLpgSQL_stmt *)new; } break; case 12:#line 281 "gram.y" { plpgsql_ns_setlocal(false); plpgsql_yyval.declhdr.label = plpgsql_yyvsp[0].str; plpgsql_yyval.declhdr.n_initvars = 0; plpgsql_yyval.declhdr.initvarnos = NULL; plpgsql_add_initdatums(NULL); } break; case 13:#line 289 "gram.y" { plpgsql_ns_setlocal(false); plpgsql_yyval.declhdr.label = plpgsql_yyvsp[-1].str; plpgsql_yyval.declhdr.n_initvars = 0; plpgsql_yyval.declhdr.initvarnos = NULL; plpgsql_add_initdatums(NULL); } break; case 14:#line 297 "gram.y" { plpgsql_ns_setlocal(false); if (plpgsql_yyvsp[0].str != NULL) plpgsql_yyval.declhdr.label = plpgsql_yyvsp[0].str; else plpgsql_yyval.declhdr.label = plpgsql_yyvsp[-2].str; plpgsql_yyval.declhdr.n_initvars = plpgsql_add_initdatums(&(plpgsql_yyval.declhdr.initvarnos)); } break; case 15:#line 308 "gram.y" { plpgsql_ns_setlocal(true); } break; case 16:#line 314 "gram.y" { plpgsql_yyval.str = plpgsql_yyvsp[0].str; } break; case 17:#line 316 "gram.y" { plpgsql_yyval.str = plpgsql_yyvsp[0].str; } break; case 18:#line 320 "gram.y" { plpgsql_yyval.str = plpgsql_yyvsp[-2].str; } break; case 19:#line 322 "gram.y" { plpgsql_yyval.str = NULL; } break; case 20:#line 324 "gram.y" { plpgsql_yyval.str = NULL; } break; case 21:#line 328 "gram.y" { PLpgSQL_variable *var; var = plpgsql_build_variable(plpgsql_yyvsp[-4].varname.name, plpgsql_yyvsp[-4].varname.lineno, plpgsql_yyvsp[-2].dtype, true); if (plpgsql_yyvsp[-3].boolean) { if (var->dtype == PLPGSQL_DTYPE_VAR) ((PLpgSQL_var *) var)->isconst = plpgsql_yyvsp[-3].boolean; else ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg("row or record variable cannot be CONSTANT"))); } if (plpgsql_yyvsp[-1].boolean) { if (var->dtype == PLPGSQL_DTYPE_VAR) ((PLpgSQL_var *) var)->notnull = plpgsql_yyvsp[-1].boolean; else ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg("row or record variable cannot be NOT NULL"))); } if (plpgsql_yyvsp[0].expr != NULL) { if (var->dtype == PLPGSQL_DTYPE_VAR) ((PLpgSQL_var *) var)->default_val = plpgsql_yyvsp[0].expr; else ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg("default value for row or record variable is not supported"))); } } break; case 22:#line 362 "gram.y" { plpgsql_ns_additem(plpgsql_yyvsp[-1].nsitem->itemtype, plpgsql_yyvsp[-1].nsitem->itemno, plpgsql_yyvsp[-4].varname.name); } break; case 23:#line 367 "gram.y" { plpgsql_ns_rename(plpgsql_yyvsp[-3].str, plpgsql_yyvsp[-1].str); } break; case 24:#line 371 "gram.y" { plpgsql_ns_push(NULL); } break; case 25:#line 373 "gram.y" { PLpgSQL_var *new; PLpgSQL_expr *curname_def; char buf[1024]; char *cp1; char *cp2; /* pop local namespace for cursor args */ plpgsql_ns_pop(); new = (PLpgSQL_var *) plpgsql_build_variable(plpgsql_yyvsp[-5].varname.name, plpgsql_yyvsp[-5].varname.lineno, plpgsql_build_datatype(REFCURSOROID, -1), true); curname_def = palloc0(sizeof(PLpgSQL_expr)); curname_def->dtype = PLPGSQL_DTYPE_EXPR; strcpy(buf, "SELECT "); cp1 = new->refname; cp2 = buf + strlen(buf); if (strchr(cp1, '\\') != NULL) *cp2++ = ESCAPE_STRING_SYNTAX; *cp2++ = '\''; while (*cp1) { if (SQL_STR_DOUBLE(*cp1)) *cp2++ = *cp1; *cp2++ = *cp1++; } strcpy(cp2, "'::refcursor"); curname_def->query = pstrdup(buf); new->default_val = curname_def; new->cursor_explicit_expr = plpgsql_yyvsp[0].expr; if (plpgsql_yyvsp[-2].row == NULL) new->cursor_explicit_argrow = -1; else new->cursor_explicit_argrow = plpgsql_yyvsp[-2].row->rowno; } break; case 26:#line 417 "gram.y" { PLpgSQL_expr *query; plpgsql_ns_setlocal(false); query = read_sql_stmt(""); plpgsql_ns_setlocal(true); plpgsql_yyval.expr = query; } break; case 27:#line 429 "gram.y" { plpgsql_yyval.row = NULL; } break; case 28:#line 433 "gram.y" { PLpgSQL_row *new; int i; ListCell *l; new = palloc0(sizeof(PLpgSQL_row)); new->dtype = PLPGSQL_DTYPE_ROW; new->lineno = plpgsql_scanner_lineno(); new->rowtupdesc = NULL; new->nfields = list_length(plpgsql_yyvsp[-1].list); new->fieldnames = palloc(new->nfields * sizeof(char *)); new->varnos = palloc(new->nfields * sizeof(int)); i = 0; foreach (l, plpgsql_yyvsp[-1].list) { PLpgSQL_variable *arg = (PLpgSQL_variable *) lfirst(l); new->fieldnames[i] = arg->refname; new->varnos[i] = arg->dno; i++; } list_free(plpgsql_yyvsp[-1].list); plpgsql_adddatum((PLpgSQL_datum *) new); plpgsql_yyval.row = new; } break; case 29:#line 462 "gram.y" { plpgsql_yyval.list = list_make1(plpgsql_yyvsp[0].variable); } break; case 30:#line 466 "gram.y" { plpgsql_yyval.list = lappend(plpgsql_yyvsp[-2].list, plpgsql_yyvsp[0].variable); } break; case 31:#line 472 "gram.y" { plpgsql_yyval.variable = plpgsql_build_variable(plpgsql_yyvsp[-1].varname.name, plpgsql_yyvsp[-1].varname.lineno, plpgsql_yyvsp[0].dtype, true); } break; case 34:#line 482 "gram.y" { char *name; PLpgSQL_nsitem *nsi; plpgsql_convert_ident(plpgsql_yytext, &name, 1); if (name[0] != '$') plpgsql_yyerror("only positional parameters may be aliased"); plpgsql_ns_setlocal(false); nsi = plpgsql_ns_lookup(name, 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); plpgsql_yyval.nsitem = nsi; } break; case 35:#line 510 "gram.y" { char *name; plpgsql_convert_ident(plpgsql_yytext, &name, 1); plpgsql_yyval.varname.name = name; plpgsql_yyval.varname.lineno = plpgsql_scanner_lineno(); } break; case 36:#line 520 "gram.y" { char *name; plpgsql_convert_ident(plpgsql_yytext, &name, 1); /* the result must be palloc'd, see plpgsql_ns_rename */ plpgsql_yyval.str = name; } break; case 37:#line 530 "gram.y" { plpgsql_yyval.boolean = false; } break; case 38:#line 532 "gram.y" { plpgsql_yyval.boolean = true; } break; case 39:#line 536 "gram.y" { /* * If there's a lookahead token, read_datatype * should consume it. */ plpgsql_yyval.dtype = read_datatype(plpgsql_yychar); plpgsql_yyclearin; } break; case 40:#line 547 "gram.y" { plpgsql_yyval.boolean = false; } break; case 41:#line 549 "gram.y" { plpgsql_yyval.boolean = true; } break; case 42:#line 553 "gram.y" { plpgsql_yyval.expr = NULL; } break; case 43:#line 555 "gram.y" { plpgsql_ns_setlocal(false); plpgsql_yyval.expr = plpgsql_read_expression(';', ";"); plpgsql_ns_setlocal(true); } break; case 46:#line 567 "gram.y" { plpg
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -