PostgreSQL Source Code  git master
makefuncs.c File Reference
#include "postgres.h"
#include "catalog/pg_class.h"
#include "catalog/pg_type.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)
 
Exprmake_opclause (Oid opno, Oid opresulttype, bool opretset, Expr *leftop, Expr *rightop, Oid opcollid, Oid inputcollid)
 
Exprmake_andclause (List *andclauses)
 
Exprmake_orclause (List *orclauses)
 
Exprmake_notclause (Expr *notclause)
 
Nodemake_and_qual (Node *qual1, Node *qual2)
 
Exprmake_ands_explicit (List *andclauses)
 
Listmake_ands_implicit (Expr *clause)
 
IndexInfomakeIndexInfo (int numattrs, int numkeyattrs, Oid amoid, List *expressions, List *predicates, bool unique, bool isready, bool concurrent)
 
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 269 of file makefuncs.c.

References Assert, IsA, and makeNode.

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

270 {
272 
273  Assert(IsA(src_tle, TargetEntry));
274  memcpy(tle, src_tle, sizeof(TargetEntry));
275  return tle;
276 }
#define IsA(nodeptr, _type_)
Definition: nodes.h:576
#define makeNode(_type_)
Definition: nodes.h:573
#define Assert(condition)
Definition: c.h:739

◆ make_and_qual()

Node* make_and_qual ( Node qual1,
Node qual2 
)

Definition at line 686 of file makefuncs.c.

References list_make2, and make_andclause().

Referenced by AddQual(), and subquery_push_qual().

687 {
688  if (qual1 == NULL)
689  return qual2;
690  if (qual2 == NULL)
691  return qual1;
692  return (Node *) make_andclause(list_make2(qual1, qual2));
693 }
#define list_make2(x1, x2)
Definition: pg_list.h:229
Definition: nodes.h:525
Expr * make_andclause(List *andclauses)
Definition: makefuncs.c:633

◆ make_andclause()

Expr* make_andclause ( List andclauses)

Definition at line 633 of file makefuncs.c.

References AND_EXPR, BoolExpr::args, BoolExpr::boolop, BoolExpr::location, and makeNode.

Referenced by eval_const_expressions_mutator(), find_duplicate_ors(), make_and_qual(), make_ands_explicit(), make_sub_restrictinfos(), negate_clause(), process_duplicate_ors(), process_sublinks_mutator(), and pull_up_sublinks_qual_recurse().

634 {
635  BoolExpr *expr = makeNode(BoolExpr);
636 
637  expr->boolop = AND_EXPR;
638  expr->args = andclauses;
639  expr->location = -1;
640  return (Expr *) expr;
641 }
int location
Definition: primnodes.h:570
BoolExprType boolop
Definition: primnodes.h:568
#define makeNode(_type_)
Definition: nodes.h:573
List * args
Definition: primnodes.h:569

◆ make_ands_explicit()

Expr* make_ands_explicit ( List andclauses)

Definition at line 705 of file makefuncs.c.

References linitial, list_length(), make_andclause(), makeBoolConst(), and NIL.

Referenced by ATExecAttachPartition(), check_default_partition_contents(), convert_EXISTS_to_ANY(), create_bitmap_subplan(), ExecInitCheck(), extract_or_clause(), get_proposed_default_constraint(), get_qual_for_list(), show_qual(), and UpdateIndexRelation().

706 {
707  if (andclauses == NIL)
708  return (Expr *) makeBoolConst(true, false);
709  else if (list_length(andclauses) == 1)
710  return (Expr *) linitial(andclauses);
711  else
712  return make_andclause(andclauses);
713 }
#define NIL
Definition: pg_list.h:65
#define linitial(l)
Definition: pg_list.h:195
Node * makeBoolConst(bool value, bool isnull)
Definition: makefuncs.c:355
Expr * make_andclause(List *andclauses)
Definition: makefuncs.c:633
static int list_length(const List *l)
Definition: pg_list.h:169

◆ make_ands_implicit()

List* make_ands_implicit ( Expr clause)

Definition at line 716 of file makefuncs.c.

References DatumGetBool, is_andclause(), IsA, list_make1, and NIL.

Referenced by apply_child_basequals(), ConstraintImpliedByRelConstraint(), convert_EXISTS_to_ANY(), cost_subplan(), DefineIndex(), DoCopy(), get_proposed_default_constraint(), get_relation_constraints(), index_concurrently_create_copy(), preprocess_expression(), RelationGetIndexPredicate(), test_predtest(), and TriggerEnabled().

717 {
718  /*
719  * NB: because the parser sets the qual field to NULL in a query that has
720  * no WHERE clause, we must consider a NULL input clause as TRUE, even
721  * though one might more reasonably think it FALSE.
722  */
723  if (clause == NULL)
724  return NIL; /* NULL -> NIL list == TRUE */
725  else if (is_andclause(clause))
726  return ((BoolExpr *) clause)->args;
727  else if (IsA(clause, Const) &&
728  !((Const *) clause)->constisnull &&
729  DatumGetBool(((Const *) clause)->constvalue))
730  return NIL; /* constant TRUE input -> NIL list */
731  else
732  return list_make1(clause);
733 }
#define NIL
Definition: pg_list.h:65
#define IsA(nodeptr, _type_)
Definition: nodes.h:576
static bool is_andclause(const void *clause)
Definition: nodeFuncs.h:94
#define list_make1(x1)
Definition: pg_list.h:227
#define DatumGetBool(X)
Definition: postgres.h:393

◆ make_notclause()

Expr* make_notclause ( Expr notclause)

Definition at line 665 of file makefuncs.c.

References BoolExpr::args, BoolExpr::boolop, list_make1, BoolExpr::location, makeNode, and NOT_EXPR.

Referenced by negate_clause().

666 {
667  BoolExpr *expr = makeNode(BoolExpr);
668 
669  expr->boolop = NOT_EXPR;
670  expr->args = list_make1(notclause);
671  expr->location = -1;
672  return (Expr *) expr;
673 }
int location
Definition: primnodes.h:570
#define list_make1(x1)
Definition: pg_list.h:227
BoolExprType boolop
Definition: primnodes.h:568
#define makeNode(_type_)
Definition: nodes.h:573
List * args
Definition: primnodes.h:569

◆ make_opclause()

Expr* make_opclause ( Oid  opno,
Oid  opresulttype,
bool  opretset,
Expr leftop,
Expr rightop,
Oid  opcollid,
Oid  inputcollid 
)

Definition at line 607 of file makefuncs.c.

References OpExpr::args, OpExpr::inputcollid, InvalidOid, list_make1, list_make2, OpExpr::location, makeNode, OpExpr::opcollid, OpExpr::opfuncid, OpExpr::opno, OpExpr::opresulttype, and OpExpr::opretset.

Referenced by build_implied_join_equality(), convert_EXISTS_to_ANY(), expand_indexqual_rowcompare(), make_partition_op_expr(), match_boolean_index_clause(), match_clause_to_partition_key(), match_network_subset(), match_pattern_prefix(), operator_predicate_proof(), and process_implied_equality().

610 {
611  OpExpr *expr = makeNode(OpExpr);
612 
613  expr->opno = opno;
614  expr->opfuncid = InvalidOid;
615  expr->opresulttype = opresulttype;
616  expr->opretset = opretset;
617  expr->opcollid = opcollid;
618  expr->inputcollid = inputcollid;
619  if (rightop)
620  expr->args = list_make2(leftop, rightop);
621  else
622  expr->args = list_make1(leftop);
623  expr->location = -1;
624  return (Expr *) expr;
625 }
#define list_make2(x1, x2)
Definition: pg_list.h:229
#define list_make1(x1)
Definition: pg_list.h:227
Oid opresulttype
Definition: primnodes.h:504
int location
Definition: primnodes.h:509
Oid opcollid
Definition: primnodes.h:506
Oid opfuncid
Definition: primnodes.h:503
#define InvalidOid
Definition: postgres_ext.h:36
#define makeNode(_type_)
Definition: nodes.h:573
Oid inputcollid
Definition: primnodes.h:507
Oid opno
Definition: primnodes.h:502
List * args
Definition: primnodes.h:508
bool opretset
Definition: primnodes.h:505

◆ make_orclause()

Expr* make_orclause ( List orclauses)

Definition at line 649 of file makefuncs.c.

References BoolExpr::args, BoolExpr::boolop, BoolExpr::location, makeNode, and OR_EXPR.

Referenced by create_bitmap_subplan(), create_tidscan_plan(), eval_const_expressions_mutator(), ExplainNode(), extract_or_clause(), make_sub_restrictinfos(), negate_clause(), process_duplicate_ors(), and process_sublinks_mutator().

650 {
651  BoolExpr *expr = makeNode(BoolExpr);
652 
653  expr->boolop = OR_EXPR;
654  expr->args = orclauses;
655  expr->location = -1;
656  return (Expr *) expr;
657 }
int location
Definition: primnodes.h:570
BoolExprType boolop
Definition: primnodes.h:568
#define makeNode(_type_)
Definition: nodes.h:573
List * args
Definition: primnodes.h:569

◆ makeA_Expr()

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

Definition at line 30 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().

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

◆ makeAlias()

◆ makeBoolConst()

Node* makeBoolConst ( bool  value,
bool  isnull 
)

Definition at line 355 of file makefuncs.c.

References BoolGetDatum, InvalidOid, and makeConst().

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

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

◆ makeBoolExpr()

◆ makeColumnDef()

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

Definition at line 488 of file makefuncs.c.

References ColumnDef::collClause, ColumnDef::collOid, ColumnDef::colname, ColumnDef::constraints, ColumnDef::cooked_default, ColumnDef::fdwoptions, ColumnDef::inhcount, 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().

489 {
491 
492  n->colname = pstrdup(colname);
493  n->typeName = makeTypeNameFromOid(typeOid, typmod);
494  n->inhcount = 0;
495  n->is_local = true;
496  n->is_not_null = false;
497  n->is_from_type = false;
498  n->storage = 0;
499  n->raw_default = NULL;
500  n->cooked_default = NULL;
501  n->collClause = NULL;
502  n->collOid = collOid;
503  n->constraints = NIL;
504  n->fdwoptions = NIL;
505  n->location = -1;
506 
507  return n;
508 }
#define NIL
Definition: pg_list.h:65
char storage
Definition: parsenodes.h:652
bool is_local
Definition: parsenodes.h:649
List * constraints
Definition: parsenodes.h:661
char * pstrdup(const char *in)
Definition: mcxt.c:1186
bool is_not_null
Definition: parsenodes.h:650
Node * cooked_default
Definition: parsenodes.h:654
Oid collOid
Definition: parsenodes.h:660
List * fdwoptions
Definition: parsenodes.h:662
int location
Definition: parsenodes.h:663
Node * raw_default
Definition: parsenodes.h:653
TypeName * makeTypeNameFromOid(Oid typeOid, int32 typmod)
Definition: makefuncs.c:470
bool is_from_type
Definition: parsenodes.h:651
#define makeNode(_type_)
Definition: nodes.h:573
TypeName * typeName
Definition: parsenodes.h:647
CollateClause * collClause
Definition: parsenodes.h:659
int inhcount
Definition: parsenodes.h:648
char * colname
Definition: parsenodes.h:646

◆ makeConst()

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

Definition at line 297 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(), adjust_partition_tlist(), 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(), match_clause_to_partition_key(), match_network_subset(), pattern_fixed_prefix(), RelationGetDummyIndexExpressions(), rewriteTargetListIU(), rewriteValuesRTE(), scalararraysel(), string_to_bytea_const(), string_to_const(), and transformContainerSubscripts().

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

◆ makeDefElem()

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

Definition at line 544 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(), and untransformRelOptions().

545 {
546  DefElem *res = makeNode(DefElem);
547 
548  res->defnamespace = NULL;
549  res->defname = name;
550  res->arg = arg;
551  res->defaction = DEFELEM_UNSPEC;
552  res->location = location;
553 
554  return res;
555 }
char * defnamespace
Definition: parsenodes.h:729
DefElemAction defaction
Definition: parsenodes.h:732
int location
Definition: parsenodes.h:733
Node * arg
Definition: parsenodes.h:731
#define makeNode(_type_)
Definition: nodes.h:573
const char * name
Definition: encode.c:521
void * arg
char * defname
Definition: parsenodes.h:730

◆ makeDefElemExtended()

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

Definition at line 562 of file makefuncs.c.

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

564 {
565  DefElem *res = makeNode(DefElem);
566 
567  res->defnamespace = nameSpace;
568  res->defname = name;
569  res->arg = arg;
570  res->defaction = defaction;
571  res->location = location;
572 
573  return res;
574 }
char * defnamespace
Definition: parsenodes.h:729
DefElemAction defaction
Definition: parsenodes.h:732
int location
Definition: parsenodes.h:733
Node * arg
Definition: parsenodes.h:731
#define makeNode(_type_)
Definition: nodes.h:573
const char * name
Definition: encode.c:521
void * arg
char * defname
Definition: parsenodes.h:730

◆ makeFromExpr()

FromExpr* makeFromExpr ( List fromlist,
Node quals 
)

◆ makeFuncCall()

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

Definition at line 583 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().

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

◆ makeFuncExpr()

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

Definition at line 517 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().

519 {
520  FuncExpr *funcexpr;
521 
522  funcexpr = makeNode(FuncExpr);
523  funcexpr->funcid = funcid;
524  funcexpr->funcresulttype = rettype;
525  funcexpr->funcretset = false; /* only allowed case here */
526  funcexpr->funcvariadic = false; /* only allowed case here */
527  funcexpr->funcformat = fformat;
528  funcexpr->funccollid = funccollid;
529  funcexpr->inputcollid = inputcollid;
530  funcexpr->args = args;
531  funcexpr->location = -1;
532 
533  return funcexpr;
534 }
Oid funcresulttype
Definition: primnodes.h:456
List * args
Definition: primnodes.h:463
Oid funccollid
Definition: primnodes.h:461
bool funcretset
Definition: primnodes.h:457
CoercionForm funcformat
Definition: primnodes.h:460
Oid funcid
Definition: primnodes.h:455
#define makeNode(_type_)
Definition: nodes.h:573
Oid inputcollid
Definition: primnodes.h:462
int location
Definition: primnodes.h:464
bool funcvariadic
Definition: primnodes.h:458

◆ makeGroupingSet()

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

Definition at line 788 of file makefuncs.c.

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

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

789 {
791 
792  n->kind = kind;
793  n->content = content;
794  n->location = location;
795  return n;
796 }
List * content
Definition: parsenodes.h:1304
GroupingSetKind kind
Definition: parsenodes.h:1303
#define makeNode(_type_)
Definition: nodes.h:573

◆ makeIndexInfo()

IndexInfo* makeIndexInfo ( int  numattrs,
int  numkeyattrs,
Oid  amoid,
List expressions,
List predicates,
bool  unique,
bool  isready,
bool  concurrent 
)

Definition at line 740 of file makefuncs.c.

References Assert, CurrentMemoryContext, IndexInfo::ii_Am, IndexInfo::ii_AmCache, IndexInfo::ii_BrokenHotChain, IndexInfo::ii_Concurrent, IndexInfo::ii_Context, IndexInfo::ii_ExclusionOps, IndexInfo::ii_ExclusionProcs, IndexInfo::ii_ExclusionStrats, IndexInfo::ii_Expressions, IndexInfo::ii_ExpressionsState, IndexInfo::ii_NumIndexAttrs, IndexInfo::ii_NumIndexKeyAttrs, IndexInfo::ii_ParallelWorkers, IndexInfo::ii_Predicate, IndexInfo::ii_PredicateState, IndexInfo::ii_ReadyForInserts, IndexInfo::ii_Unique, IndexInfo::ii_UniqueOps, IndexInfo::ii_UniqueProcs, IndexInfo::ii_UniqueStrats, makeNode, and NIL.

Referenced by BuildDummyIndexInfo(), BuildIndexInfo(), CheckIndexCompatible(), DefineIndex(), and index_concurrently_create_copy().

742 {
744 
745  n->ii_NumIndexAttrs = numattrs;
746  n->ii_NumIndexKeyAttrs = numkeyattrs;
747  Assert(n->ii_NumIndexKeyAttrs != 0);
749  n->ii_Unique = unique;
750  n->ii_ReadyForInserts = isready;
751  n->ii_Concurrent = concurrent;
752 
753  /* expressions */
754  n->ii_Expressions = expressions;
756 
757  /* predicates */
758  n->ii_Predicate = predicates;
759  n->ii_PredicateState = NULL;
760 
761  /* exclusion constraints */
762  n->ii_ExclusionOps = NULL;
763  n->ii_ExclusionProcs = NULL;
764  n->ii_ExclusionStrats = NULL;
765 
766  /* speculative inserts */
767  n->ii_UniqueOps = NULL;
768  n->ii_UniqueProcs = NULL;
769  n->ii_UniqueStrats = NULL;
770 
771  /* initialize index-build state to default */
772  n->ii_BrokenHotChain = false;
773  n->ii_ParallelWorkers = 0;
774 
775  /* set up for possible use by index AM */
776  n->ii_Am = amoid;
777  n->ii_AmCache = NULL;
779 
780  return n;
781 }
#define NIL
Definition: pg_list.h:65
MemoryContext ii_Context
Definition: execnodes.h:176
uint16 * ii_UniqueStrats
Definition: execnodes.h:168
List * ii_Predicate
Definition: execnodes.h:161
ExprState * ii_PredicateState
Definition: execnodes.h:162
Oid * ii_ExclusionProcs
Definition: execnodes.h:164
Oid * ii_UniqueOps
Definition: execnodes.h:166
List * ii_ExpressionsState
Definition: execnodes.h:160
int ii_NumIndexKeyAttrs
Definition: execnodes.h:157
Oid * ii_UniqueProcs
Definition: execnodes.h:167
bool ii_BrokenHotChain
Definition: execnodes.h:172
MemoryContext CurrentMemoryContext
Definition: mcxt.c:38
bool ii_ReadyForInserts
Definition: execnodes.h:170
void * ii_AmCache
Definition: execnodes.h:175
int ii_NumIndexAttrs
Definition: execnodes.h:156
bool ii_Unique
Definition: execnodes.h:169
#define makeNode(_type_)
Definition: nodes.h:573
List * ii_Expressions
Definition: execnodes.h:159
#define Assert(condition)
Definition: c.h:739
int ii_ParallelWorkers
Definition: execnodes.h:173
bool ii_Concurrent
Definition: execnodes.h:171
Oid * ii_ExclusionOps
Definition: execnodes.h:163
uint16 * ii_ExclusionStrats
Definition: execnodes.h:165
Oid ii_Am
Definition: execnodes.h:174

◆ makeNullConst()

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

Definition at line 335 of file makefuncs.c.

References get_typlenbyval(), and makeConst().

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

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

◆ makeRangeVar()

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

Definition at line 420 of file makefuncs.c.

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

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

421 {
422  RangeVar *r = makeNode(RangeVar);
423 
424  r->catalogname = NULL;
425  r->schemaname = schemaname;
426  r->relname = relname;
427  r->inh = true;
428  r->relpersistence = RELPERSISTENCE_PERMANENT;
429  r->alias = NULL;
430  r->location = location;
431 
432  return r;
433 }
NameData relname
Definition: pg_class.h:35
char * schemaname
Definition: primnodes.h:67
int location
Definition: primnodes.h:73
char * relname
Definition: primnodes.h:68
bool inh
Definition: primnodes.h:69
#define makeNode(_type_)
Definition: nodes.h:573
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 400 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().

402 {
404 
405  r->arg = arg;
406  r->resulttype = rtype;
407  r->resulttypmod = rtypmod;
408  r->resultcollid = rcollid;
409  r->relabelformat = rformat;
410  r->location = -1;
411 
412  return r;
413 }
Expr * arg
Definition: primnodes.h:800
Oid resulttype
Definition: primnodes.h:801
Oid resultcollid
Definition: primnodes.h:803
#define makeNode(_type_)
Definition: nodes.h:573
void * arg
int32 resulttypmod
Definition: primnodes.h:802
CoercionForm relabelformat
Definition: primnodes.h:804
int location
Definition: primnodes.h:805

◆ makeSimpleA_Expr()

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

Definition at line 48 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().

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

◆ makeTargetEntry()

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

Definition at line 236 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(), adjust_partition_tlist(), ApplyRetrieveRule(), build_index_tlist(), build_minmax_path(), build_path_tlist(), build_physical_tlist(), build_remote_returning(), BuildOnConflictExcludedTargetlist(), check_sql_fn_retval(), convert_combining_aggrefs(), convert_EXISTS_to_ANY(), create_unique_plan(), determineRecursiveColTypes(), ExecInitSubPlan(), expand_inherited_rtentry(), expand_targetlist(), expandRelAttrs(), ExpandRowReference(), foreign_grouping_ok(), generate_append_tlist(), generate_setop_tlist(), make_tlist_from_pathtarget(), postgresAddForeignUpdateTargets(), prepare_sort_from_pathkeys(), preprocess_targetlist(), pull_up_constant_function(), pull_up_simple_values(), rebuild_fdw_scan_tlist(), rewriteTargetListIU(), rewriteTargetListUD(), transformAggregateCall(), transformInsertStmt(), transformMultiAssignRef(), transformSetOperationStmt(), transformSetOperationTree(), and transformTargetEntry().

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

◆ makeTypeName()

TypeName* makeTypeName ( char *  typnam)

Definition at line 442 of file makefuncs.c.

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

Referenced by plpgsql_parse_wordrowtype(), and plpgsql_parse_wordtype().

443 {
445 }
Value * makeString(char *str)
Definition: value.c:53
#define list_make1(x1)
Definition: pg_list.h:227
TypeName * makeTypeNameFromNameList(List *names)
Definition: makefuncs.c:454

◆ makeTypeNameFromNameList()

◆ makeTypeNameFromOid()

TypeName* makeTypeNameFromOid ( Oid  typeOid,
int32  typmod 
)

Definition at line 470 of file makefuncs.c.

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

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

471 {
472  TypeName *n = makeNode(TypeName);
473 
474  n->typeOid = typeOid;
475  n->typemod = typmod;
476  n->location = -1;
477  return n;
478 }
Oid typeOid
Definition: parsenodes.h:210
#define makeNode(_type_)
Definition: nodes.h:573
int location
Definition: parsenodes.h:216
int32 typemod
Definition: parsenodes.h:214

◆ makeVacuumRelation()

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

Definition at line 803 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().

804 {
806 
807  v->relation = relation;
808  v->oid = oid;
809  v->va_cols = va_cols;
810  return v;
811 }
RangeVar * relation
Definition: parsenodes.h:3204
#define makeNode(_type_)
Definition: nodes.h:573

◆ makeVar()

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

Definition at line 66 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(), build_remote_returning(), BuildOnConflictExcludedTargetlist(), eval_const_expressions_mutator(), expand_inherited_rtentry(), 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(), NotNullImpliedByRelConstraints(), PartConstraintImpliedByRelConstraint(), postgresAddForeignUpdateTargets(), preprocess_targetlist(), rewriteTargetListIU(), rewriteTargetListUD(), set_baserel_partition_key_exprs(), set_dummy_tlist_references(), and transformSetOperationStmt().

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

◆ makeVarFromTargetEntry()

Var* makeVarFromTargetEntry ( Index  varno,
TargetEntry tle 
)

Definition at line 103 of file makefuncs.c.

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

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

105 {
106  return makeVar(varno,
107  tle->resno,
108  exprType((Node *) tle->expr),
109  exprTypmod((Node *) tle->expr),
110  exprCollation((Node *) tle->expr),
111  0);
112 }
int32 exprTypmod(const Node *expr)
Definition: nodeFuncs.c:275
Definition: nodes.h:525
AttrNumber resno
Definition: primnodes.h:1394
Var * makeVar(Index varno, AttrNumber varattno, Oid vartype, int32 vartypmod, Oid varcollid, Index varlevelsup)
Definition: makefuncs.c:66
Expr * expr
Definition: primnodes.h:1393
Oid exprType(const Node *expr)
Definition: nodeFuncs.c:41
Oid exprCollation(const Node *expr)
Definition: nodeFuncs.c:719

◆ makeWholeRowVar()

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

Definition at line 133 of file makefuncs.c.

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

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

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