⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pl_gram.c

📁 PostgreSQL 8.1.4的源码 适用于Linux下的开源数据库系统
💻 C
📖 第 1 页 / 共 5 页
字号:
  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 + -