PostgreSQL Source Code  git master
makefuncs.c File Reference
#include "postgres.h"
#include "catalog/pg_class.h"
#include "catalog/pg_type.h"
#include "fmgr.h"
#include "nodes/makefuncs.h"
#include "nodes/nodeFuncs.h"
#include "utils/lsyscache.h"
Include dependency graph for makefuncs.c:

Go to the source code of this file.

Functions

A_ExprmakeA_Expr (A_Expr_Kind kind, List *name, Node *lexpr, Node *rexpr, int location)
 
A_ExprmakeSimpleA_Expr (A_Expr_Kind kind, char *name, Node *lexpr, Node *rexpr, int location)
 
VarmakeVar (Index varno, AttrNumber varattno, Oid vartype, int32 vartypmod, Oid varcollid, Index varlevelsup)
 
VarmakeVarFromTargetEntry (Index varno, TargetEntry *tle)
 
VarmakeWholeRowVar (RangeTblEntry *rte, Index varno, Index varlevelsup, bool allowScalar)
 
TargetEntrymakeTargetEntry (Expr *expr, AttrNumber resno, char *resname, bool resjunk)
 
TargetEntryflatCopyTargetEntry (TargetEntry *src_tle)
 
FromExprmakeFromExpr (List *fromlist, Node *quals)
 
ConstmakeConst (Oid consttype, int32 consttypmod, Oid constcollid, int constlen, Datum constvalue, bool constisnull, bool constbyval)
 
ConstmakeNullConst (Oid consttype, int32 consttypmod, Oid constcollid)
 
NodemakeBoolConst (bool value, bool isnull)
 
ExprmakeBoolExpr (BoolExprType boolop, List *args, int location)
 
AliasmakeAlias (const char *aliasname, List *colnames)
 
RelabelTypemakeRelabelType (Expr *arg, Oid rtype, int32 rtypmod, Oid rcollid, CoercionForm rformat)
 
RangeVarmakeRangeVar (char *schemaname, char *relname, int location)
 
TypeNamemakeTypeName (char *typnam)
 
TypeNamemakeTypeNameFromNameList (List *names)
 
TypeNamemakeTypeNameFromOid (Oid typeOid, int32 typmod)
 
ColumnDefmakeColumnDef (const char *colname, Oid typeOid, int32 typmod, Oid collOid)
 
FuncExprmakeFuncExpr (Oid funcid, Oid rettype, List *args, Oid funccollid, Oid inputcollid, CoercionForm fformat)
 
DefElemmakeDefElem (char *name, Node *arg, int location)
 
DefElemmakeDefElemExtended (char *nameSpace, char *name, Node *arg, DefElemAction defaction, int location)
 
FuncCallmakeFuncCall (List *name, List *args, int location)
 
GroupingSetmakeGroupingSet (GroupingSetKind kind, List *content, int location)
 
VacuumRelationmakeVacuumRelation (RangeVar *relation, Oid oid, List *va_cols)
 

Function Documentation

◆ flatCopyTargetEntry()

TargetEntry* flatCopyTargetEntry ( TargetEntry src_tle)

Definition at line 270 of file makefuncs.c.

References Assert, IsA, and makeNode.

Referenced by ExecInitAgg(), expand_targetlist(), process_matched_tle(), rewriteTargetListIU(), set_dummy_tlist_references(), and set_upper_references().

271 {
273 
274  Assert(IsA(src_tle, TargetEntry));
275  memcpy(tle, src_tle, sizeof(TargetEntry));
276  return tle;
277 }
#define IsA(nodeptr, _type_)
Definition: nodes.h:563
#define makeNode(_type_)
Definition: nodes.h:560
#define Assert(condition)
Definition: c.h:670

◆ makeA_Expr()

A_Expr* makeA_Expr ( A_Expr_Kind  kind,
List name,
Node lexpr,
Node rexpr,
int  location 
)

Definition at line 31 of file makefuncs.c.

References A_Expr::kind, A_Expr::lexpr, A_Expr::location, makeNode, A_Expr::name, name, and A_Expr::rexpr.

Referenced by transformAExprBetween().

33 {
34  A_Expr *a = makeNode(A_Expr);
35 
36  a->kind = kind;
37  a->name = name;
38  a->lexpr = lexpr;
39  a->rexpr = rexpr;
40  a->location = location;
41  return a;
42 }
A_Expr_Kind kind
Definition: parsenodes.h:274
Node * rexpr
Definition: parsenodes.h:277
int location
Definition: parsenodes.h:278
Node * lexpr
Definition: parsenodes.h:276
#define makeNode(_type_)
Definition: nodes.h:560
List * name
Definition: parsenodes.h:275
const char * name
Definition: encode.c:521

◆ makeAlias()

◆ makeBoolConst()

Node* makeBoolConst ( bool  value,
bool  isnull 
)

Definition at line 356 of file makefuncs.c.

References BoolGetDatum, BOOLOID, InvalidOid, and makeConst().

Referenced by create_append_plan(), eval_const_expressions_mutator(), expand_boolean_index_clause(), find_duplicate_ors(), get_qual_for_range(), make_ands_explicit(), make_row_distinct_op(), negate_clause(), process_duplicate_ors(), and transformAExprOf().

357 {
358  /* note that pg_type.h hardwires size of bool as 1 ... duplicate it */
359  return (Node *) makeConst(BOOLOID, -1, InvalidOid, 1,
360  BoolGetDatum(value), isnull, true);
361 }
Definition: nodes.h:512
Const * makeConst(Oid consttype, int32 consttypmod, Oid constcollid, int constlen, Datum constvalue, bool constisnull, bool constbyval)
Definition: makefuncs.c:298
static struct @121 value
#define BoolGetDatum(X)
Definition: postgres.h:408
#define InvalidOid
Definition: postgres_ext.h:36
#define BOOLOID
Definition: pg_type.h:288

◆ makeBoolExpr()

Expr* makeBoolExpr ( BoolExprType  boolop,
List args,
int  location 
)

◆ makeColumnDef()

ColumnDef* makeColumnDef ( const char *  colname,
Oid  typeOid,
int32  typmod,
Oid  collOid 
)

Definition at line 489 of file makefuncs.c.

References ColumnDef::collClause, ColumnDef::collOid, ColumnDef::colname, ColumnDef::constraints, ColumnDef::cooked_default, ColumnDef::fdwoptions, ColumnDef::inhcount, ColumnDef::is_from_parent, ColumnDef::is_from_type, ColumnDef::is_local, ColumnDef::is_not_null, ColumnDef::location, makeNode, makeTypeNameFromOid(), NIL, pstrdup(), ColumnDef::raw_default, ColumnDef::storage, and ColumnDef::typeName.

Referenced by create_ctas_nodata(), DefineVirtualRelation(), and intorel_startup().

490 {
492 
493  n->colname = pstrdup(colname);
494  n->typeName = makeTypeNameFromOid(typeOid, typmod);
495  n->inhcount = 0;
496  n->is_local = true;
497  n->is_not_null = false;
498  n->is_from_type = false;
499  n->is_from_parent = false;
500  n->storage = 0;
501  n->raw_default = NULL;
502  n->cooked_default = NULL;
503  n->collClause = NULL;
504  n->collOid = collOid;
505  n->constraints = NIL;
506  n->fdwoptions = NIL;
507  n->location = -1;
508 
509  return n;
510 }
#define NIL
Definition: pg_list.h:69
char storage
Definition: parsenodes.h:646
bool is_local
Definition: parsenodes.h:642
List * constraints
Definition: parsenodes.h:652
char * pstrdup(const char *in)
Definition: mcxt.c:1076
bool is_from_parent
Definition: parsenodes.h:645
bool is_not_null
Definition: parsenodes.h:643
Node * cooked_default
Definition: parsenodes.h:648
Oid collOid
Definition: parsenodes.h:651
List * fdwoptions
Definition: parsenodes.h:653
int location
Definition: parsenodes.h:654
Node * raw_default
Definition: parsenodes.h:647
TypeName * makeTypeNameFromOid(Oid typeOid, int32 typmod)
Definition: makefuncs.c:471
bool is_from_type
Definition: parsenodes.h:644
#define makeNode(_type_)
Definition: nodes.h:560
TypeName * typeName
Definition: parsenodes.h:640
CollateClause * collClause
Definition: parsenodes.h:650
int inhcount
Definition: parsenodes.h:641
char * colname
Definition: parsenodes.h:639

◆ makeConst()

Const* makeConst ( Oid  consttype,
int32  consttypmod,
Oid  constcollid,
int  constlen,
Datum  constvalue,
bool  constisnull,
bool  constbyval 
)

Definition at line 298 of file makefuncs.c.

References Const::constbyval, Const::constcollid, Const::constisnull, Const::constlen, Const::consttype, Const::consttypmod, Const::constvalue, Const::location, makeNode, PG_DETOAST_DATUM, and PointerGetDatum.

Referenced by add_security_quals(), add_with_check_options(), build_coercion_expression(), build_minmax_path(), check_sql_fn_retval(), eval_const_expressions_mutator(), evaluate_expr(), expand_targetlist(), generate_setop_tlist(), get_qual_for_hash(), get_qual_for_list(), get_typdefault(), make_const(), makeBoolConst(), makeNullConst(), network_prefix_quals(), rewriteTargetListIU(), rewriteValuesRTE(), scalararraysel(), string_to_bytea_const(), string_to_const(), and transformArraySubscripts().

305 {
306  Const *cnst = makeNode(Const);
307 
308  /*
309  * If it's a varlena value, force it to be in non-expanded (non-toasted)
310  * format; this avoids any possible dependency on external values and
311  * improves consistency of representation, which is important for equal().
312  */
313  if (!constisnull && constlen == -1)
314  constvalue = PointerGetDatum(PG_DETOAST_DATUM(constvalue));
315 
316  cnst->consttype = consttype;
317  cnst->consttypmod = consttypmod;
318  cnst->constcollid = constcollid;
319  cnst->constlen = constlen;
320  cnst->constvalue = constvalue;
321  cnst->constisnull = constisnull;
322  cnst->constbyval = constbyval;
323  cnst->location = -1; /* "unknown" */
324 
325  return cnst;
326 }
Datum constvalue
Definition: primnodes.h:196
bool constbyval
Definition: primnodes.h:199
#define PointerGetDatum(X)
Definition: postgres.h:562
int constlen
Definition: primnodes.h:195
Oid consttype
Definition: primnodes.h:192
Oid constcollid
Definition: primnodes.h:194
int location
Definition: primnodes.h:203
#define makeNode(_type_)
Definition: nodes.h:560
int32 consttypmod
Definition: primnodes.h:193
#define PG_DETOAST_DATUM(datum)
Definition: fmgr.h:205
bool constisnull
Definition: primnodes.h:197

◆ makeDefElem()

DefElem* makeDefElem ( char *  name,
Node arg,
int  location 
)

Definition at line 546 of file makefuncs.c.

References arg, DefElem::arg, DefElem::defaction, DEFELEM_UNSPEC, DefElem::defname, DefElem::defnamespace, DefElem::location, makeNode, and name.

Referenced by DefineView(), deserialize_deflist(), fileGetForeignPaths(), generateSerialExtraStmts(), get_file_fdw_attribute_options(), pg_logical_slot_get_changes_guts(), sequence_options(), transformAlterTableStmt(), transformCreateStmt(), and untransformRelOptions().

547 {
548  DefElem *res = makeNode(DefElem);
549 
550  res->defnamespace = NULL;
551  res->defname = name;
552  res->arg = arg;
553  res->defaction = DEFELEM_UNSPEC;
554  res->location = location;
555 
556  return res;
557 }
char * defnamespace
Definition: parsenodes.h:718
DefElemAction defaction
Definition: parsenodes.h:721
int location
Definition: parsenodes.h:722
Node * arg
Definition: parsenodes.h:720
#define makeNode(_type_)
Definition: nodes.h:560
const char * name
Definition: encode.c:521
void * arg
char * defname
Definition: parsenodes.h:719

◆ makeDefElemExtended()

DefElem* makeDefElemExtended ( char *  nameSpace,
char *  name,
Node arg,
DefElemAction  defaction,
int  location 
)

Definition at line 564 of file makefuncs.c.

References arg, DefElem::arg, DefElem::defaction, DefElem::defname, DefElem::defnamespace, DefElem::location, makeNode, and name.

566 {
567  DefElem *res = makeNode(DefElem);
568 
569  res->defnamespace = nameSpace;
570  res->defname = name;
571  res->arg = arg;
572  res->defaction = defaction;
573  res->location = location;
574 
575  return res;
576 }
char * defnamespace
Definition: parsenodes.h:718
DefElemAction defaction
Definition: parsenodes.h:721
int location
Definition: parsenodes.h:722
Node * arg
Definition: parsenodes.h:720
#define makeNode(_type_)
Definition: nodes.h:560
const char * name
Definition: encode.c:521
void * arg
char * defname
Definition: parsenodes.h:719

◆ makeFromExpr()

FromExpr* makeFromExpr ( List fromlist,
Node quals 
)

◆ makeFuncCall()

FuncCall* makeFuncCall ( List name,
List args,
int  location 
)

Definition at line 585 of file makefuncs.c.

References FuncCall::agg_distinct, FuncCall::agg_filter, FuncCall::agg_order, FuncCall::agg_star, FuncCall::agg_within_group, generate_unaccent_rules::args, FuncCall::args, FuncCall::func_variadic, FuncCall::funcname, FuncCall::location, makeNode, name, NIL, and FuncCall::over.

Referenced by test_rls_hooks_permissive(), test_rls_hooks_restrictive(), transformColumnDefinition(), and transformRangeFunction().

586 {
587  FuncCall *n = makeNode(FuncCall);
588 
589  n->funcname = name;
590  n->args = args;
591  n->agg_order = NIL;
592  n->agg_filter = NULL;
593  n->agg_within_group = false;
594  n->agg_star = false;
595  n->agg_distinct = false;
596  n->func_variadic = false;
597  n->over = NULL;
598  n->location = location;
599  return n;
600 }
#define NIL
Definition: pg_list.h:69
Node * agg_filter
Definition: parsenodes.h:352
int location
Definition: parsenodes.h:358
List * agg_order
Definition: parsenodes.h:351
struct WindowDef * over
Definition: parsenodes.h:357
bool func_variadic
Definition: parsenodes.h:356
#define makeNode(_type_)
Definition: nodes.h:560
List * args
Definition: parsenodes.h:350
const char * name
Definition: encode.c:521
List * funcname
Definition: parsenodes.h:349
bool agg_within_group
Definition: parsenodes.h:353
bool agg_distinct
Definition: parsenodes.h:355
bool agg_star
Definition: parsenodes.h:354

◆ makeFuncExpr()

FuncExpr* makeFuncExpr ( Oid  funcid,
Oid  rettype,
List args,
Oid  funccollid,
Oid  inputcollid,
CoercionForm  fformat 
)

Definition at line 519 of file makefuncs.c.

References generate_unaccent_rules::args, FuncExpr::args, FuncExpr::funccollid, FuncExpr::funcformat, FuncExpr::funcid, FuncExpr::funcresulttype, FuncExpr::funcretset, FuncExpr::funcvariadic, FuncExpr::inputcollid, FuncExpr::location, and makeNode.

Referenced by build_aggregate_combinefn_expr(), build_aggregate_deserialfn_expr(), build_aggregate_finalfn_expr(), build_aggregate_serialfn_expr(), build_aggregate_transfn_expr(), build_coercion_expression(), and get_qual_for_hash().

521 {
522  FuncExpr *funcexpr;
523 
524  funcexpr = makeNode(FuncExpr);
525  funcexpr->funcid = funcid;
526  funcexpr->funcresulttype = rettype;
527  funcexpr->funcretset = false; /* only allowed case here */
528  funcexpr->funcvariadic = false; /* only allowed case here */
529  funcexpr->funcformat = fformat;
530  funcexpr->funccollid = funccollid;
531  funcexpr->inputcollid = inputcollid;
532  funcexpr->args = args;
533  funcexpr->location = -1;
534 
535  return funcexpr;
536 }
Oid funcresulttype
Definition: primnodes.h:450
List * args
Definition: primnodes.h:457
Oid funccollid
Definition: primnodes.h:455
bool funcretset
Definition: primnodes.h:451
CoercionForm funcformat
Definition: primnodes.h:454
Oid funcid
Definition: primnodes.h:449
#define makeNode(_type_)
Definition: nodes.h:560
Oid inputcollid
Definition: primnodes.h:456
int location
Definition: primnodes.h:458
bool funcvariadic
Definition: primnodes.h:452

◆ makeGroupingSet()

GroupingSet* makeGroupingSet ( GroupingSetKind  kind,
List content,
int  location 
)

Definition at line 607 of file makefuncs.c.

References GroupingSet::content, GroupingSet::kind, GroupingSet::location, and makeNode.

Referenced by flatten_grouping_sets(), transformGroupClause(), and transformGroupingSet().

608 {
610 
611  n->kind = kind;
612  n->content = content;
613  n->location = location;
614  return n;
615 }
List * content
Definition: parsenodes.h:1266
GroupingSetKind kind
Definition: parsenodes.h:1265
#define makeNode(_type_)
Definition: nodes.h:560

◆ makeNullConst()

Const* makeNullConst ( Oid  consttype,
int32  consttypmod,
Oid  constcollid 
)

Definition at line 336 of file makefuncs.c.

References get_typlenbyval(), and makeConst().

Referenced by ATExecAddColumn(), build_subplan(), coerce_record_to_complex(), eval_const_expressions_mutator(), evaluate_function(), ExecInitExprRec(), expandRTE(), expandTupleDesc(), remove_unused_subquery_outputs(), ReplaceVarsFromTargetList_callback(), transformAssignedExpr(), and transformOnConflictClause().

337 {
338  int16 typLen;
339  bool typByVal;
340 
341  get_typlenbyval(consttype, &typLen, &typByVal);
342  return makeConst(consttype,
343  consttypmod,
344  constcollid,
345  (int) typLen,
346  (Datum) 0,
347  true,
348  typByVal);
349 }
signed short int16
Definition: c.h:283
Const * makeConst(Oid consttype, int32 consttypmod, Oid constcollid, int constlen, Datum constvalue, bool constisnull, bool constbyval)
Definition: makefuncs.c:298
uintptr_t Datum
Definition: postgres.h:372
void get_typlenbyval(Oid typid, int16 *typlen, bool *typbyval)
Definition: lsyscache.c:2020

◆ makeRangeVar()

RangeVar* makeRangeVar ( char *  schemaname,
char *  relname,
int  location 
)

Definition at line 421 of file makefuncs.c.

References RangeVar::alias, RangeVar::catalogname, RangeVar::inh, RangeVar::location, makeNode, RangeVar::relname, RangeVar::relpersistence, RELPERSISTENCE_PERMANENT, and RangeVar::schemaname.

Referenced by AlterTableNamespace(), autovacuum_do_vac_analyze(), boot_openrel(), BootstrapToastTable(), ConvertTriggerToFK(), DoCopy(), ExpandColumnRefStar(), fetch_table_list(), generateSerialExtraStmts(), logicalrep_rel_open(), LookupTypeName(), makeRangeVarFromNameList(), plpgsql_parse_cwordrowtype(), plpgsql_parse_cwordtype(), transformAlterTableStmt(), and transformColumnRef().

422 {
423  RangeVar *r = makeNode(RangeVar);
424 
425  r->catalogname = NULL;
426  r->schemaname = schemaname;
427  r->relname = relname;
428  r->inh = true;
430  r->alias = NULL;
431  r->location = location;
432 
433  return r;
434 }
char * schemaname
Definition: primnodes.h:67
#define RELPERSISTENCE_PERMANENT
Definition: pg_class.h:170
int location
Definition: primnodes.h:73
char * relname
Definition: primnodes.h:68
bool inh
Definition: primnodes.h:69
#define makeNode(_type_)
Definition: nodes.h:560
char relpersistence
Definition: primnodes.h:71
Alias * alias
Definition: primnodes.h:72
char * catalogname
Definition: primnodes.h:66

◆ makeRelabelType()

RelabelType* makeRelabelType ( Expr arg,
Oid  rtype,
int32  rtypmod,
Oid  rcollid,
CoercionForm  rformat 
)

Definition at line 401 of file makefuncs.c.

References arg, RelabelType::arg, RelabelType::location, makeNode, RelabelType::relabelformat, RelabelType::resultcollid, RelabelType::resulttype, and RelabelType::resulttypmod.

Referenced by assign_hypothetical_collations(), buildMergedJoinVar(), canonicalize_ec_expression(), check_sql_fn_retval(), coerce_type(), generate_setop_tlist(), make_partition_op_expr(), and relabel_to_typmod().

403 {
405 
406  r->arg = arg;
407  r->resulttype = rtype;
408  r->resulttypmod = rtypmod;
409  r->resultcollid = rcollid;
410  r->relabelformat = rformat;
411  r->location = -1;
412 
413  return r;
414 }
Expr * arg
Definition: primnodes.h:794
Oid resulttype
Definition: primnodes.h:795
Oid resultcollid
Definition: primnodes.h:797
#define makeNode(_type_)
Definition: nodes.h:560
void * arg
int32 resulttypmod
Definition: primnodes.h:796
CoercionForm relabelformat
Definition: primnodes.h:798
int location
Definition: primnodes.h:799

◆ makeSimpleA_Expr()

A_Expr* makeSimpleA_Expr ( A_Expr_Kind  kind,
char *  name,
Node lexpr,
Node rexpr,
int  location 
)

Definition at line 49 of file makefuncs.c.

References A_Expr::kind, A_Expr::lexpr, list_make1, A_Expr::location, makeNode, makeString(), A_Expr::name, and A_Expr::rexpr.

Referenced by test_rls_hooks_permissive(), test_rls_hooks_restrictive(), transformAExprBetween(), transformCaseExpr(), and transformJoinUsingClause().

51 {
52  A_Expr *a = makeNode(A_Expr);
53 
54  a->kind = kind;
55  a->name = list_make1(makeString((char *) name));
56  a->lexpr = lexpr;
57  a->rexpr = rexpr;
58  a->location = location;
59  return a;
60 }
Value * makeString(char *str)
Definition: value.c:53
A_Expr_Kind kind
Definition: parsenodes.h:274
#define list_make1(x1)
Definition: pg_list.h:139
Node * rexpr
Definition: parsenodes.h:277
int location
Definition: parsenodes.h:278
Node * lexpr
Definition: parsenodes.h:276
#define makeNode(_type_)
Definition: nodes.h:560
List * name
Definition: parsenodes.h:275
const char * name
Definition: encode.c:521

◆ makeTargetEntry()

TargetEntry* makeTargetEntry ( Expr expr,
AttrNumber  resno,
char *  resname,
bool  resjunk 
)

Definition at line 237 of file makefuncs.c.

References TargetEntry::expr, InvalidOid, makeNode, TargetEntry::resjunk, TargetEntry::resname, TargetEntry::resno, TargetEntry::resorigcol, TargetEntry::resorigtbl, and TargetEntry::ressortgroupref.

Referenced by add_to_flat_tlist(), ApplyRetrieveRule(), build_index_tlist(), build_minmax_path(), build_path_tlist(), build_physical_tlist(), check_sql_fn_retval(), convert_combining_aggrefs(), convert_EXISTS_to_ANY(), create_unique_plan(), determineRecursiveColTypes(), ExecInitAgg(), ExecInitSubPlan(), expand_targetlist(), expandRelAttrs(), ExpandRowReference(), generate_append_tlist(), generate_setop_tlist(), make_tlist_from_pathtarget(), postgresAddForeignUpdateTargets(), prepare_sort_from_pathkeys(), preprocess_targetlist(), pull_up_simple_values(), rewriteTargetListIU(), rewriteTargetListUD(), transformAggregateCall(), transformInsertStmt(), transformMultiAssignRef(), transformOnConflictClause(), transformSetOperationStmt(), transformSetOperationTree(), and transformTargetEntry().

241 {
243 
244  tle->expr = expr;
245  tle->resno = resno;
246  tle->resname = resname;
247 
248  /*
249  * We always set these fields to 0. If the caller wants to change them he
250  * must do so explicitly. Few callers do that, so omitting these
251  * arguments reduces the chance of error.
252  */
253  tle->ressortgroupref = 0;
254  tle->resorigtbl = InvalidOid;
255  tle->resorigcol = 0;
256 
257  tle->resjunk = resjunk;
258 
259  return tle;
260 }
Oid resorigtbl
Definition: primnodes.h:1380
char * resname
Definition: primnodes.h:1377
bool resjunk
Definition: primnodes.h:1382
AttrNumber resno
Definition: primnodes.h:1376
#define InvalidOid
Definition: postgres_ext.h:36
#define makeNode(_type_)
Definition: nodes.h:560
Expr * expr
Definition: primnodes.h:1375
AttrNumber resorigcol
Definition: primnodes.h:1381
Index ressortgroupref
Definition: primnodes.h:1378

◆ makeTypeName()

TypeName* makeTypeName ( char *  typnam)

Definition at line 443 of file makefuncs.c.

References list_make1, makeString(), and makeTypeNameFromNameList().

Referenced by plpgsql_parse_wordtype().

444 {
446 }
Value * makeString(char *str)
Definition: value.c:53
#define list_make1(x1)
Definition: pg_list.h:139
TypeName * makeTypeNameFromNameList(List *names)
Definition: makefuncs.c:455

◆ makeTypeNameFromNameList()

TypeName* makeTypeNameFromNameList ( List names)

◆ makeTypeNameFromOid()

TypeName* makeTypeNameFromOid ( Oid  typeOid,
int32  typmod 
)

Definition at line 471 of file makefuncs.c.

References TypeName::location, makeNode, TypeName::typemod, and TypeName::typeOid.

Referenced by ATPrepAddOids(), DefineSequence(), generateSerialExtraStmts(), makeColumnDef(), MergeAttributes(), transformAlterTableStmt(), transformOfType(), and transformTableLikeClause().

472 {
473  TypeName *n = makeNode(TypeName);
474 
475  n->typeOid = typeOid;
476  n->typemod = typmod;
477  n->location = -1;
478  return n;
479 }
Oid typeOid
Definition: parsenodes.h:209
#define makeNode(_type_)
Definition: nodes.h:560
int location
Definition: parsenodes.h:215
int32 typemod
Definition: parsenodes.h:213

◆ makeVacuumRelation()

VacuumRelation* makeVacuumRelation ( RangeVar relation,
Oid  oid,
List va_cols 
)

Definition at line 622 of file makefuncs.c.

References makeNode, VacuumRelation::oid, VacuumRelation::relation, and VacuumRelation::va_cols.

Referenced by autovacuum_do_vac_analyze(), expand_vacuum_rel(), and get_all_vacuum_rels().

623 {
625 
626  v->relation = relation;
627  v->oid = oid;
628  v->va_cols = va_cols;
629  return v;
630 }
RangeVar * relation
Definition: parsenodes.h:3134
#define makeNode(_type_)
Definition: nodes.h:560

◆ makeVar()

Var* makeVar ( Index  varno,
AttrNumber  varattno,
Oid  vartype,
int32  vartypmod,
Oid  varcollid,
Index  varlevelsup 
)

Definition at line 67 of file makefuncs.c.

References Var::location, makeNode, Var::varattno, Var::varcollid, Var::varlevelsup, Var::varno, Var::varnoold, Var::varoattno, Var::vartype, and Var::vartypmod.

Referenced by ATPrepAlterColumnType(), build_index_tlist(), build_physical_tlist(), eval_const_expressions_mutator(), expand_targetlist(), expandRTE(), expandTupleDesc(), fix_indexqual_operand(), generate_append_tlist(), generate_setop_tlist(), get_qual_for_hash(), get_qual_for_list(), get_range_key_properties(), get_range_nulltest(), get_relation_constraints(), make_inh_translation_list(), make_var(), makeVarFromTargetEntry(), makeWholeRowVar(), PartConstraintImpliedByRelConstraint(), postgresAddForeignUpdateTargets(), preprocess_targetlist(), rewriteTargetListIU(), rewriteTargetListUD(), set_baserel_partition_key_exprs(), set_dummy_tlist_references(), transformOnConflictClause(), and transformSetOperationStmt().

73 {
74  Var *var = makeNode(Var);
75 
76  var->varno = varno;
77  var->varattno = varattno;
78  var->vartype = vartype;
79  var->vartypmod = vartypmod;
80  var->varcollid = varcollid;
81  var->varlevelsup = varlevelsup;
82 
83  /*
84  * Since few if any routines ever create Var nodes with varnoold/varoattno
85  * different from varno/varattno, we don't provide separate arguments for
86  * them, but just initialize them to the given varno/varattno. This
87  * reduces code clutter and chance of error for most callers.
88  */
89  var->varnoold = varno;
90  var->varoattno = varattno;
91 
92  /* Likewise, we just set location to "unknown" here */
93  var->location = -1;
94 
95  return var;
96 }
Index varlevelsup
Definition: primnodes.h:173
AttrNumber varattno
Definition: primnodes.h:168
Definition: primnodes.h:163
Index varnoold
Definition: primnodes.h:176
Oid vartype
Definition: primnodes.h:170
int location
Definition: primnodes.h:178
Index varno
Definition: primnodes.h:166
#define makeNode(_type_)
Definition: nodes.h:560
AttrNumber varoattno
Definition: primnodes.h:177
Oid varcollid
Definition: primnodes.h:172
int32 vartypmod
Definition: primnodes.h:171

◆ makeVarFromTargetEntry()

Var* makeVarFromTargetEntry ( Index  varno,
TargetEntry tle 
)

Definition at line 104 of file makefuncs.c.

References TargetEntry::expr, exprCollation(), exprType(), exprTypmod(), makeVar(), and TargetEntry::resno.

Referenced by build_physical_tlist(), convert_subquery_pathkeys(), generate_subquery_vars(), make_setop_translation_list(), search_indexed_tlist_for_non_var(), search_indexed_tlist_for_sortgroupref(), and transformInsertStmt().

106 {
107  return makeVar(varno,
108  tle->resno,
109  exprType((Node *) tle->expr),
110  exprTypmod((Node *) tle->expr),
111  exprCollation((Node *) tle->expr),
112  0);
113 }
int32 exprTypmod(const Node *expr)
Definition: nodeFuncs.c:276
Definition: nodes.h:512
AttrNumber resno
Definition: primnodes.h:1376
Var * makeVar(Index varno, AttrNumber varattno, Oid vartype, int32 vartypmod, Oid varcollid, Index varlevelsup)
Definition: makefuncs.c:67
Expr * expr
Definition: primnodes.h:1375
Oid exprType(const Node *expr)
Definition: nodeFuncs.c:42
Oid exprCollation(const Node *expr)
Definition: nodeFuncs.c:720

◆ makeWholeRowVar()

Var* makeWholeRowVar ( RangeTblEntry rte,
Index  varno,
Index  varlevelsup,
bool  allowScalar 
)

Definition at line 134 of file makefuncs.c.

References elog, ERROR, exprCollation(), exprType(), RangeTblEntry::funcordinality, RangeTblEntry::functions, get_rel_type_id(), InvalidAttrNumber, InvalidOid, linitial, list_length(), makeVar(), OidIsValid, RECORDOID, RangeTblEntry::relid, RTE_FUNCTION, RTE_RELATION, RangeTblEntry::rtekind, and type_is_rowtype().

Referenced by ApplyRetrieveRule(), preprocess_targetlist(), rewriteTargetListUD(), and transformWholeRowRef().

138 {
139  Var *result;
140  Oid toid;
141  Node *fexpr;
142 
143  switch (rte->rtekind)
144  {
145  case RTE_RELATION:
146  /* relation: the rowtype is a named composite type */
147  toid = get_rel_type_id(rte->relid);
148  if (!OidIsValid(toid))
149  elog(ERROR, "could not find type OID for relation %u",
150  rte->relid);
151  result = makeVar(varno,
153  toid,
154  -1,
155  InvalidOid,
156  varlevelsup);
157  break;
158 
159  case RTE_FUNCTION:
160 
161  /*
162  * If there's more than one function, or ordinality is requested,
163  * force a RECORD result, since there's certainly more than one
164  * column involved and it can't be a known named type.
165  */
166  if (rte->funcordinality || list_length(rte->functions) != 1)
167  {
168  /* always produces an anonymous RECORD result */
169  result = makeVar(varno,
171  RECORDOID,
172  -1,
173  InvalidOid,
174  varlevelsup);
175  break;
176  }
177 
178  fexpr = ((RangeTblFunction *) linitial(rte->functions))->funcexpr;
179  toid = exprType(fexpr);
180  if (type_is_rowtype(toid))
181  {
182  /* func returns composite; same as relation case */
183  result = makeVar(varno,
185  toid,
186  -1,
187  InvalidOid,
188  varlevelsup);
189  }
190  else if (allowScalar)
191  {
192  /* func returns scalar; just return its output as-is */
193  result = makeVar(varno,
194  1,
195  toid,
196  -1,
197  exprCollation(fexpr),
198  varlevelsup);
199  }
200  else
201  {
202  /* func returns scalar, but we want a composite result */
203  result = makeVar(varno,
205  RECORDOID,
206  -1,
207  InvalidOid,
208  varlevelsup);
209  }
210  break;
211 
212  default:
213 
214  /*
215  * RTE is a join, subselect, tablefunc, or VALUES. We represent
216  * this as a whole-row Var of RECORD type. (Note that in most
217  * cases the Var will be expanded to a RowExpr during planning,
218  * but that is not our concern here.)
219  */
220  result = makeVar(varno,
222  RECORDOID,
223  -1,
224  InvalidOid,
225  varlevelsup);
226  break;
227  }
228 
229  return result;
230 }
Definition: nodes.h:512
bool funcordinality
Definition: parsenodes.h:1006
unsigned int Oid
Definition: postgres_ext.h:31
Definition: primnodes.h:163
#define OidIsValid(objectId)
Definition: c.h:576
#define linitial(l)
Definition: pg_list.h:111
#define ERROR
Definition: elog.h:43
#define RECORDOID
Definition: pg_type.h:680
bool type_is_rowtype(Oid typid)
Definition: lsyscache.c:2424
Var * makeVar(Index varno, AttrNumber varattno, Oid vartype, int32 vartypmod, Oid varcollid, Index varlevelsup)
Definition: makefuncs.c:67
Oid get_rel_type_id(Oid relid)
Definition: lsyscache.c:1796
#define InvalidOid
Definition: postgres_ext.h:36
List * functions
Definition: parsenodes.h:1005
Oid exprType(const Node *expr)
Definition: nodeFuncs.c:42
static int list_length(const List *l)
Definition: pg_list.h:89
Oid exprCollation(const Node *expr)
Definition: nodeFuncs.c:720
#define InvalidAttrNumber
Definition: attnum.h:23
RTEKind rtekind
Definition: parsenodes.h:951
#define elog
Definition: elog.h:219