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 (int varno, AttrNumber varattno, Oid vartype, int32 vartypmod, Oid varcollid, Index varlevelsup)
 
VarmakeVarFromTargetEntry (int varno, TargetEntry *tle)
 
VarmakeWholeRowVar (RangeTblEntry *rte, int 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, CoercionForm funcformat, 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 nulls_not_distinct, 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 271 of file makefuncs.c.

272 {
274 
275  Assert(IsA(src_tle, TargetEntry));
276  memcpy(tle, src_tle, sizeof(TargetEntry));
277  return tle;
278 }
Assert(fmt[strlen(fmt) - 1] !='\n')
#define IsA(nodeptr, _type_)
Definition: nodes.h:168
#define makeNode(_type_)
Definition: nodes.h:165

References Assert(), IsA, and makeNode.

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

◆ make_and_qual()

Node* make_and_qual ( Node qual1,
Node qual2 
)

Definition at line 689 of file makefuncs.c.

690 {
691  if (qual1 == NULL)
692  return qual2;
693  if (qual2 == NULL)
694  return qual1;
695  return (Node *) make_andclause(list_make2(qual1, qual2));
696 }
Expr * make_andclause(List *andclauses)
Definition: makefuncs.c:636
#define list_make2(x1, x2)
Definition: pg_list.h:212
Definition: nodes.h:118

References list_make2, and make_andclause().

Referenced by AddQual(), and subquery_push_qual().

◆ make_andclause()

Expr* make_andclause ( List andclauses)

Definition at line 636 of file makefuncs.c.

637 {
638  BoolExpr *expr = makeNode(BoolExpr);
639 
640  expr->boolop = AND_EXPR;
641  expr->args = andclauses;
642  expr->location = -1;
643  return (Expr *) expr;
644 }
@ AND_EXPR
Definition: primnodes.h:758
int location
Definition: primnodes.h:768
BoolExprType boolop
Definition: primnodes.h:766
List * args
Definition: primnodes.h:767

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

Referenced by eval_const_expressions_mutator(), ExplainNode(), 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().

◆ make_ands_explicit()

Expr* make_ands_explicit ( List andclauses)

Definition at line 708 of file makefuncs.c.

709 {
710  if (andclauses == NIL)
711  return (Expr *) makeBoolConst(true, false);
712  else if (list_length(andclauses) == 1)
713  return (Expr *) linitial(andclauses);
714  else
715  return make_andclause(andclauses);
716 }
Node * makeBoolConst(bool value, bool isnull)
Definition: makefuncs.c:357
static int list_length(const List *l)
Definition: pg_list.h:150
#define NIL
Definition: pg_list.h:66
#define linitial(l)
Definition: pg_list.h:176

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

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

◆ make_ands_implicit()

List* make_ands_implicit ( Expr clause)

Definition at line 719 of file makefuncs.c.

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

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().

◆ make_notclause()

Expr* make_notclause ( Expr notclause)

Definition at line 668 of file makefuncs.c.

669 {
670  BoolExpr *expr = makeNode(BoolExpr);
671 
672  expr->boolop = NOT_EXPR;
673  expr->args = list_make1(notclause);
674  expr->location = -1;
675  return (Expr *) expr;
676 }
@ NOT_EXPR
Definition: primnodes.h:758

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

Referenced by negate_clause().

◆ make_opclause()

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

Definition at line 610 of file makefuncs.c.

613 {
614  OpExpr *expr = makeNode(OpExpr);
615 
616  expr->opno = opno;
617  expr->opfuncid = InvalidOid;
618  expr->opresulttype = opresulttype;
619  expr->opretset = opretset;
620  expr->opcollid = opcollid;
621  expr->inputcollid = inputcollid;
622  if (rightop)
623  expr->args = list_make2(leftop, rightop);
624  else
625  expr->args = list_make1(leftop);
626  expr->location = -1;
627  return (Expr *) expr;
628 }
#define InvalidOid
Definition: postgres_ext.h:36
bool opretset
Definition: primnodes.h:657
int location
Definition: primnodes.h:669
Oid opno
Definition: primnodes.h:648
Oid opcollid
Definition: primnodes.h:660
List * args
Definition: primnodes.h:666
Oid inputcollid
Definition: primnodes.h:663
Oid opresulttype
Definition: primnodes.h:654

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

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

◆ make_orclause()

Expr* make_orclause ( List orclauses)

◆ 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.

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 }
const char * name
Definition: encode.c:561
int a
Definition: isn.c:69

References a, makeNode, and name.

◆ makeAlias()

◆ makeBoolConst()

Node* makeBoolConst ( bool  value,
bool  isnull 
)

Definition at line 357 of file makefuncs.c.

358 {
359  /* note that pg_type.h hardwires size of bool as 1 ... duplicate it */
360  return (Node *) makeConst(BOOLOID, -1, InvalidOid, 1,
361  BoolGetDatum(value), isnull, true);
362 }
static struct @143 value
Const * makeConst(Oid consttype, int32 consttypmod, Oid constcollid, int constlen, Datum constvalue, bool constisnull, bool constbyval)
Definition: makefuncs.c:299
static Datum BoolGetDatum(bool X)
Definition: postgres.h:450

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

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(), and process_duplicate_ors().

◆ makeBoolExpr()

◆ makeColumnDef()

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

Definition at line 490 of file makefuncs.c.

491 {
493 
494  n->colname = pstrdup(colname);
495  n->typeName = makeTypeNameFromOid(typeOid, typmod);
496  n->inhcount = 0;
497  n->is_local = true;
498  n->is_not_null = false;
499  n->is_from_type = 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 }
TypeName * makeTypeNameFromOid(Oid typeOid, int32 typmod)
Definition: makefuncs.c:472
bool is_not_null
Definition: parsenodes.h:693
CollateClause * collClause
Definition: parsenodes.h:703
int location
Definition: parsenodes.h:707
List * constraints
Definition: parsenodes.h:705
Node * cooked_default
Definition: parsenodes.h:698
int inhcount
Definition: parsenodes.h:691
char * colname
Definition: parsenodes.h:688
TypeName * typeName
Definition: parsenodes.h:689
bool is_from_type
Definition: parsenodes.h:694
List * fdwoptions
Definition: parsenodes.h:706
Node * raw_default
Definition: parsenodes.h:697
char storage
Definition: parsenodes.h:695
Oid collOid
Definition: parsenodes.h:704
bool is_local
Definition: parsenodes.h:692

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().

◆ makeConst()

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

Definition at line 299 of file makefuncs.c.

306 {
307  Const *cnst = makeNode(Const);
308 
309  /*
310  * If it's a varlena value, force it to be in non-expanded (non-toasted)
311  * format; this avoids any possible dependency on external values and
312  * improves consistency of representation, which is important for equal().
313  */
314  if (!constisnull && constlen == -1)
315  constvalue = PointerGetDatum(PG_DETOAST_DATUM(constvalue));
316 
317  cnst->consttype = consttype;
318  cnst->consttypmod = consttypmod;
319  cnst->constcollid = constcollid;
320  cnst->constlen = constlen;
321  cnst->constvalue = constvalue;
322  cnst->constisnull = constisnull;
323  cnst->constbyval = constbyval;
324  cnst->location = -1; /* "unknown" */
325 
326  return cnst;
327 }
#define PG_DETOAST_DATUM(datum)
Definition: fmgr.h:240
static Datum PointerGetDatum(const void *X)
Definition: postgres.h:670
Oid constcollid
Definition: primnodes.h:261
Oid consttype
Definition: primnodes.h:259
int constlen
Definition: primnodes.h:262
Datum constvalue
Definition: primnodes.h:263
bool constisnull
Definition: primnodes.h:264
bool constbyval
Definition: primnodes.h:266
int32 consttypmod
Definition: primnodes.h:260
int location
Definition: primnodes.h:270

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(), array_subscript_transform(), build_coercion_expression(), build_minmax_path(), check_sql_fn_retval(), create_final_distinct_paths(), eval_const_expressions_mutator(), evaluate_expr(), expand_insert_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(), rewriteSearchAndCycle(), rewriteTargetListIU(), rewriteValuesRTE(), scalararraysel(), set_fn_opclass_options(), string_to_bytea_const(), and string_to_const().

◆ makeDefElem()

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

Definition at line 546 of file makefuncs.c.

547 {
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 }
@ DEFELEM_UNSPEC
Definition: parsenodes.h:767
void * arg

References arg, DEFELEM_UNSPEC, makeNode, name, and res.

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

◆ makeDefElemExtended()

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

Definition at line 564 of file makefuncs.c.

566 {
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 }

References arg, makeNode, name, and res.

◆ makeFromExpr()

◆ makeFuncCall()

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

Definition at line 585 of file makefuncs.c.

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->over = NULL;
594  n->agg_within_group = false;
595  n->agg_star = false;
596  n->agg_distinct = false;
597  n->func_variadic = false;
598  n->funcformat = funcformat;
599  n->location = location;
600  return n;
601 }
bool agg_within_group
Definition: parsenodes.h:396
int location
Definition: parsenodes.h:401
CoercionForm funcformat
Definition: parsenodes.h:400
Node * agg_filter
Definition: parsenodes.h:394
List * agg_order
Definition: parsenodes.h:393
List * funcname
Definition: parsenodes.h:391
List * args
Definition: parsenodes.h:392
bool agg_star
Definition: parsenodes.h:397
bool agg_distinct
Definition: parsenodes.h:398
bool func_variadic
Definition: parsenodes.h:399
struct WindowDef * over
Definition: parsenodes.h:395

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::funcformat, FuncCall::funcname, FuncCall::location, makeNode, name, NIL, and FuncCall::over.

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

◆ makeFuncExpr()

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

Definition at line 519 of file makefuncs.c.

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 funccollid
Definition: primnodes.h:604
bool funcretset
Definition: primnodes.h:600
Oid funcid
Definition: primnodes.h:598
bool funcvariadic
Definition: primnodes.h:601
List * args
Definition: primnodes.h:606
CoercionForm funcformat
Definition: primnodes.h:603
Oid inputcollid
Definition: primnodes.h:605
int location
Definition: primnodes.h:607
Oid funcresulttype
Definition: primnodes.h:599

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_deserialfn_expr(), build_aggregate_finalfn_expr(), build_aggregate_serialfn_expr(), build_aggregate_transfn_expr(), build_coercion_expression(), get_qual_for_hash(), make_path_cat_expr(), and rewriteSearchAndCycle().

◆ makeGroupingSet()

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

Definition at line 797 of file makefuncs.c.

798 {
800 
801  n->kind = kind;
802  n->content = content;
803  n->location = location;
804  return n;
805 }
GroupingSetKind kind
Definition: parsenodes.h:1389
List * content
Definition: parsenodes.h:1390

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

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

◆ makeIndexInfo()

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

Definition at line 743 of file makefuncs.c.

745 {
747 
748  n->ii_NumIndexAttrs = numattrs;
749  n->ii_NumIndexKeyAttrs = numkeyattrs;
750  Assert(n->ii_NumIndexKeyAttrs != 0);
752  n->ii_Unique = unique;
753  n->ii_NullsNotDistinct = nulls_not_distinct;
754  n->ii_ReadyForInserts = isready;
755  n->ii_CheckedUnchanged = false;
756  n->ii_IndexUnchanged = false;
757  n->ii_Concurrent = concurrent;
758 
759  /* expressions */
760  n->ii_Expressions = expressions;
762 
763  /* predicates */
764  n->ii_Predicate = predicates;
765  n->ii_PredicateState = NULL;
766 
767  /* exclusion constraints */
768  n->ii_ExclusionOps = NULL;
769  n->ii_ExclusionProcs = NULL;
770  n->ii_ExclusionStrats = NULL;
771 
772  /* opclass options */
773  n->ii_OpclassOptions = NULL;
774 
775  /* speculative inserts */
776  n->ii_UniqueOps = NULL;
777  n->ii_UniqueProcs = NULL;
778  n->ii_UniqueStrats = NULL;
779 
780  /* initialize index-build state to default */
781  n->ii_BrokenHotChain = false;
782  n->ii_ParallelWorkers = 0;
783 
784  /* set up for possible use by index AM */
785  n->ii_Am = amoid;
786  n->ii_AmCache = NULL;
788 
789  return n;
790 }
MemoryContext CurrentMemoryContext
Definition: mcxt.c:124
bool ii_Unique
Definition: execnodes.h:190
uint16 * ii_ExclusionStrats
Definition: execnodes.h:185
bool ii_BrokenHotChain
Definition: execnodes.h:196
int ii_NumIndexAttrs
Definition: execnodes.h:176
void * ii_AmCache
Definition: execnodes.h:199
bool ii_CheckedUnchanged
Definition: execnodes.h:193
Datum * ii_OpclassOptions
Definition: execnodes.h:189
Oid * ii_UniqueOps
Definition: execnodes.h:186
ExprState * ii_PredicateState
Definition: execnodes.h:182
Oid * ii_ExclusionOps
Definition: execnodes.h:183
bool ii_NullsNotDistinct
Definition: execnodes.h:191
int ii_ParallelWorkers
Definition: execnodes.h:197
bool ii_Concurrent
Definition: execnodes.h:195
uint16 * ii_UniqueStrats
Definition: execnodes.h:188
int ii_NumIndexKeyAttrs
Definition: execnodes.h:177
List * ii_ExpressionsState
Definition: execnodes.h:180
List * ii_Expressions
Definition: execnodes.h:179
bool ii_IndexUnchanged
Definition: execnodes.h:194
Oid * ii_ExclusionProcs
Definition: execnodes.h:184
Oid ii_Am
Definition: execnodes.h:198
Oid * ii_UniqueProcs
Definition: execnodes.h:187
MemoryContext ii_Context
Definition: execnodes.h:200
bool ii_ReadyForInserts
Definition: execnodes.h:192
List * ii_Predicate
Definition: execnodes.h:181

References Assert(), CurrentMemoryContext, IndexInfo::ii_Am, IndexInfo::ii_AmCache, IndexInfo::ii_BrokenHotChain, IndexInfo::ii_CheckedUnchanged, IndexInfo::ii_Concurrent, IndexInfo::ii_Context, IndexInfo::ii_ExclusionOps, IndexInfo::ii_ExclusionProcs, IndexInfo::ii_ExclusionStrats, IndexInfo::ii_Expressions, IndexInfo::ii_ExpressionsState, IndexInfo::ii_IndexUnchanged, IndexInfo::ii_NullsNotDistinct, IndexInfo::ii_NumIndexAttrs, IndexInfo::ii_NumIndexKeyAttrs, IndexInfo::ii_OpclassOptions, 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().

◆ makeNullConst()

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

Definition at line 337 of file makefuncs.c.

338 {
339  int16 typLen;
340  bool typByVal;
341 
342  get_typlenbyval(consttype, &typLen, &typByVal);
343  return makeConst(consttype,
344  consttypmod,
345  constcollid,
346  (int) typLen,
347  (Datum) 0,
348  true,
349  typByVal);
350 }
signed short int16
Definition: c.h:429
void get_typlenbyval(Oid typid, int16 *typlen, bool *typbyval)
Definition: lsyscache.c:2209
uintptr_t Datum
Definition: postgres.h:412

References get_typlenbyval(), and makeConst().

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

◆ makeRangeVar()

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

Definition at line 422 of file makefuncs.c.

423 {
424  RangeVar *r = makeNode(RangeVar);
425 
426  r->catalogname = NULL;
427  r->schemaname = schemaname;
428  r->relname = relname;
429  r->inh = true;
430  r->relpersistence = RELPERSISTENCE_PERMANENT;
431  r->alias = NULL;
432  r->location = location;
433 
434  return r;
435 }
NameData relname
Definition: pg_class.h:38
int location
Definition: primnodes.h:89
char * relname
Definition: primnodes.h:77
bool inh
Definition: primnodes.h:80
Alias * alias
Definition: primnodes.h:86
char relpersistence
Definition: primnodes.h:83
char * schemaname
Definition: primnodes.h:74

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

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

◆ makeRelabelType()

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

Definition at line 402 of file makefuncs.c.

404 {
406 
407  r->arg = arg;
408  r->resulttype = rtype;
409  r->resulttypmod = rtypmod;
410  r->resultcollid = rcollid;
411  r->relabelformat = rformat;
412  r->location = -1;
413 
414  return r;
415 }
Oid resultcollid
Definition: primnodes.h:1004
int32 resulttypmod
Definition: primnodes.h:1003
CoercionForm relabelformat
Definition: primnodes.h:1005
Oid resulttype
Definition: primnodes.h:1002
Expr * arg
Definition: primnodes.h:1001

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

Referenced by assign_hypothetical_collations(), buildMergedJoinVar(), coerce_type(), and make_partition_op_expr().

◆ 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.

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 }
String * makeString(char *str)
Definition: value.c:63

References a, list_make1, makeNode, makeString(), and name.

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

◆ makeTargetEntry()

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

Definition at line 238 of file makefuncs.c.

242 {
244 
245  tle->expr = expr;
246  tle->resno = resno;
247  tle->resname = resname;
248 
249  /*
250  * We always set these fields to 0. If the caller wants to change them he
251  * must do so explicitly. Few callers do that, so omitting these
252  * arguments reduces the chance of error.
253  */
254  tle->ressortgroupref = 0;
255  tle->resorigtbl = InvalidOid;
256  tle->resorigcol = 0;
257 
258  tle->resjunk = resjunk;
259 
260  return tle;
261 }
Expr * expr
Definition: primnodes.h:1555
char * resname
Definition: primnodes.h:1557
Oid resorigtbl
Definition: primnodes.h:1560
AttrNumber resno
Definition: primnodes.h:1556
bool resjunk
Definition: primnodes.h:1562
Index ressortgroupref
Definition: primnodes.h:1558
AttrNumber resorigcol
Definition: primnodes.h:1561

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

Referenced by add_row_identity_var(), add_to_flat_tlist(), ApplyRetrieveRule(), build_index_tlist(), build_minmax_path(), build_path_tlist(), build_physical_tlist(), build_remote_returning(), BuildOnConflictExcludedTargetlist(), check_sql_fn_retval(), coerce_fn_result_column(), convert_combining_aggrefs(), convert_EXISTS_to_ANY(), create_unique_plan(), determineRecursiveColTypes(), ExecInitSubPlan(), expand_inherited_rtentry(), expand_insert_targetlist(), expandNSItemAttrs(), ExpandRowReference(), foreign_grouping_ok(), generate_append_tlist(), generate_setop_tlist(), make_tlist_from_pathtarget(), prepare_sort_from_pathkeys(), preprocess_targetlist(), pull_up_constant_function(), pull_up_simple_values(), rebuild_fdw_scan_tlist(), rewriteSearchAndCycle(), rewriteTargetListIU(), transformAggregateCall(), transformMergeStmt(), transformMultiAssignRef(), transformReturnStmt(), transformSetOperationStmt(), transformSetOperationTree(), and transformTargetEntry().

◆ makeTypeName()

TypeName* makeTypeName ( char *  typnam)

Definition at line 444 of file makefuncs.c.

445 {
447 }
TypeName * makeTypeNameFromNameList(List *names)
Definition: makefuncs.c:456

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

Referenced by plpgsql_parse_wordrowtype(), and plpgsql_parse_wordtype().

◆ makeTypeNameFromNameList()

◆ makeTypeNameFromOid()

TypeName* makeTypeNameFromOid ( Oid  typeOid,
int32  typmod 
)

Definition at line 472 of file makefuncs.c.

473 {
474  TypeName *n = makeNode(TypeName);
475 
476  n->typeOid = typeOid;
477  n->typemod = typmod;
478  n->location = -1;
479  return n;
480 }
Oid typeOid
Definition: parsenodes.h:234

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

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

◆ makeVacuumRelation()

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

Definition at line 812 of file makefuncs.c.

813 {
815 
816  v->relation = relation;
817  v->oid = oid;
818  v->va_cols = va_cols;
819  return v;
820 }
RangeVar * relation
Definition: parsenodes.h:3463

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

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

◆ makeVar()

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

Definition at line 66 of file makefuncs.c.

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  * Only a few callers need to make Var nodes with varnosyn/varattnosyn
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->varnosyn = (Index) varno;
89  var->varattnosyn = varattno;
90 
91  /* Likewise, we just set location to "unknown" here */
92  var->location = -1;
93 
94  return var;
95 }
unsigned int Index
Definition: c.h:550
Definition: primnodes.h:205
Oid vartype
Definition: primnodes.h:220
AttrNumber varattno
Definition: primnodes.h:217
Oid varcollid
Definition: primnodes.h:224
int varno
Definition: primnodes.h:212
int32 vartypmod
Definition: primnodes.h:222
Index varlevelsup
Definition: primnodes.h:230
int location
Definition: primnodes.h:243

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

Referenced by add_row_identity_columns(), ATPrepAlterColumnType(), build_index_tlist(), build_physical_tlist(), build_remote_returning(), BuildOnConflictExcludedTargetlist(), buildVarFromNSColumn(), eval_const_expressions_mutator(), expand_inherited_rtentry(), expand_single_inheritance_child(), expandNSItemVars(), 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_path_cat_expr(), make_path_rowexpr(), makeVarFromTargetEntry(), makeWholeRowVar(), NotNullImpliedByRelConstraints(), PartConstraintImpliedByRelConstraint(), postgresAddForeignUpdateTargets(), preprocess_targetlist(), rewriteSearchAndCycle(), scanNSItemForColumn(), set_baserel_partition_key_exprs(), set_dummy_tlist_references(), transformAssignedExpr(), and transformSetOperationStmt().

◆ makeVarFromTargetEntry()

Var* makeVarFromTargetEntry ( int  varno,
TargetEntry tle 
)

Definition at line 103 of file makefuncs.c.

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 }
Var * makeVar(int varno, AttrNumber varattno, Oid vartype, int32 vartypmod, Oid varcollid, Index varlevelsup)
Definition: makefuncs.c:66
Oid exprType(const Node *expr)
Definition: nodeFuncs.c:43
int32 exprTypmod(const Node *expr)
Definition: nodeFuncs.c:266
Oid exprCollation(const Node *expr)
Definition: nodeFuncs.c:764

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

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

◆ makeWholeRowVar()

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

Definition at line 133 of file makefuncs.c.

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  ereport(ERROR,
149  (errcode(ERRCODE_WRONG_OBJECT_TYPE),
150  errmsg("relation \"%s\" does not have a composite type",
151  get_rel_name(rte->relid))));
152  result = makeVar(varno,
154  toid,
155  -1,
156  InvalidOid,
157  varlevelsup);
158  break;
159 
160  case RTE_FUNCTION:
161 
162  /*
163  * If there's more than one function, or ordinality is requested,
164  * force a RECORD result, since there's certainly more than one
165  * column involved and it can't be a known named type.
166  */
167  if (rte->funcordinality || list_length(rte->functions) != 1)
168  {
169  /* always produces an anonymous RECORD result */
170  result = makeVar(varno,
172  RECORDOID,
173  -1,
174  InvalidOid,
175  varlevelsup);
176  break;
177  }
178 
179  fexpr = ((RangeTblFunction *) linitial(rte->functions))->funcexpr;
180  toid = exprType(fexpr);
181  if (type_is_rowtype(toid))
182  {
183  /* func returns composite; same as relation case */
184  result = makeVar(varno,
186  toid,
187  -1,
188  InvalidOid,
189  varlevelsup);
190  }
191  else if (allowScalar)
192  {
193  /* func returns scalar; just return its output as-is */
194  result = makeVar(varno,
195  1,
196  toid,
197  -1,
198  exprCollation(fexpr),
199  varlevelsup);
200  }
201  else
202  {
203  /* func returns scalar, but we want a composite result */
204  result = makeVar(varno,
206  RECORDOID,
207  -1,
208  InvalidOid,
209  varlevelsup);
210  }
211  break;
212 
213  default:
214 
215  /*
216  * RTE is a join, subselect, tablefunc, or VALUES. We represent
217  * this as a whole-row Var of RECORD type. (Note that in most
218  * cases the Var will be expanded to a RowExpr during planning,
219  * but that is not our concern here.)
220  */
221  result = makeVar(varno,
223  RECORDOID,
224  -1,
225  InvalidOid,
226  varlevelsup);
227  break;
228  }
229 
230  return result;
231 }
#define InvalidAttrNumber
Definition: attnum.h:23
#define OidIsValid(objectId)
Definition: c.h:711
int errcode(int sqlerrcode)
Definition: elog.c:695
int errmsg(const char *fmt,...)
Definition: elog.c:906
#define ERROR
Definition: elog.h:35
#define ereport(elevel,...)
Definition: elog.h:145
bool type_is_rowtype(Oid typid)
Definition: lsyscache.c:2613
Oid get_rel_type_id(Oid relid)
Definition: lsyscache.c:1961
char * get_rel_name(Oid relid)
Definition: lsyscache.c:1910
@ RTE_FUNCTION
Definition: parsenodes.h:1014
@ RTE_RELATION
Definition: parsenodes.h:1011
unsigned int Oid
Definition: postgres_ext.h:31
bool funcordinality
Definition: parsenodes.h:1125
List * functions
Definition: parsenodes.h:1124
RTEKind rtekind
Definition: parsenodes.h:1030

References ereport, errcode(), errmsg(), ERROR, exprCollation(), exprType(), RangeTblEntry::funcordinality, RangeTblEntry::functions, get_rel_name(), 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(), and transformWholeRowRef().