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)
 
ConstraintmakeNotNullConstraint (String *colname)
 
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)
 
NodemakeStringConst (char *str, int location)
 
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, bool summarizing, bool withoutoverlaps)
 
GroupingSetmakeGroupingSet (GroupingSetKind kind, List *content, int location)
 
VacuumRelationmakeVacuumRelation (RangeVar *relation, Oid oid, List *va_cols)
 
JsonFormatmakeJsonFormat (JsonFormatType type, JsonEncoding encoding, int location)
 
JsonValueExprmakeJsonValueExpr (Expr *raw_expr, Expr *formatted_expr, JsonFormat *format)
 
JsonBehaviormakeJsonBehavior (JsonBehaviorType btype, Node *expr, int location)
 
NodemakeJsonKeyValue (Node *key, Node *value)
 
NodemakeJsonIsPredicate (Node *expr, JsonFormat *format, JsonValueType item_type, bool unique_keys, int location)
 
JsonTablePathSpecmakeJsonTablePathSpec (char *string, char *name, int string_location, int name_location)
 
JsonTablePathmakeJsonTablePath (Const *pathvalue, char *pathname)
 

Function Documentation

◆ flatCopyTargetEntry()

TargetEntry * flatCopyTargetEntry ( TargetEntry src_tle)

Definition at line 275 of file makefuncs.c.

276{
278
279 Assert(IsA(src_tle, TargetEntry));
280 memcpy(tle, src_tle, sizeof(TargetEntry));
281 return tle;
282}
#define Assert(condition)
Definition: c.h:815
#define IsA(nodeptr, _type_)
Definition: nodes.h:158
#define makeNode(_type_)
Definition: nodes.h:155

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 733 of file makefuncs.c.

734{
735 if (qual1 == NULL)
736 return qual2;
737 if (qual2 == NULL)
738 return qual1;
739 return (Node *) make_andclause(list_make2(qual1, qual2));
740}
Expr * make_andclause(List *andclauses)
Definition: makefuncs.c:680
#define list_make2(x1, x2)
Definition: pg_list.h:214
Definition: nodes.h:129

References list_make2, and make_andclause().

Referenced by AddQual(), subquery_push_qual(), and transform_MERGE_to_join().

◆ make_andclause()

Expr * make_andclause ( List andclauses)

◆ make_ands_explicit()

Expr * make_ands_explicit ( List andclauses)

Definition at line 752 of file makefuncs.c.

753{
754 if (andclauses == NIL)
755 return (Expr *) makeBoolConst(true, false);
756 else if (list_length(andclauses) == 1)
757 return (Expr *) linitial(andclauses);
758 else
759 return make_andclause(andclauses);
760}
Node * makeBoolConst(bool value, bool isnull)
Definition: makefuncs.c:361
static int list_length(const List *l)
Definition: pg_list.h:152
#define NIL
Definition: pg_list.h:68
#define linitial(l)
Definition: pg_list.h:178

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 763 of file makefuncs.c.

764{
765 /*
766 * NB: because the parser sets the qual field to NULL in a query that has
767 * no WHERE clause, we must consider a NULL input clause as TRUE, even
768 * though one might more reasonably think it FALSE.
769 */
770 if (clause == NULL)
771 return NIL; /* NULL -> NIL list == TRUE */
772 else if (is_andclause(clause))
773 return ((BoolExpr *) clause)->args;
774 else if (IsA(clause, Const) &&
775 !((Const *) clause)->constisnull &&
776 DatumGetBool(((Const *) clause)->constvalue))
777 return NIL; /* constant TRUE input -> NIL list */
778 else
779 return list_make1(clause);
780}
static bool is_andclause(const void *clause)
Definition: nodeFuncs.h:107
#define list_make1(x1)
Definition: pg_list.h:212
static bool DatumGetBool(Datum X)
Definition: postgres.h:95

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 712 of file makefuncs.c.

713{
714 BoolExpr *expr = makeNode(BoolExpr);
715
716 expr->boolop = NOT_EXPR;
717 expr->args = list_make1(notclause);
718 expr->location = -1;
719 return (Expr *) expr;
720}
@ NOT_EXPR
Definition: primnodes.h:947

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 654 of file makefuncs.c.

657{
658 OpExpr *expr = makeNode(OpExpr);
659
660 expr->opno = opno;
661 expr->opfuncid = InvalidOid;
662 expr->opresulttype = opresulttype;
663 expr->opretset = opretset;
664 expr->opcollid = opcollid;
665 expr->inputcollid = inputcollid;
666 if (rightop)
667 expr->args = list_make2(leftop, rightop);
668 else
669 expr->args = list_make1(leftop);
670 expr->location = -1;
671 return (Expr *) expr;
672}
#define InvalidOid
Definition: postgres_ext.h:37
Oid opno
Definition: primnodes.h:834
List * args
Definition: primnodes.h:852
ParseLoc location
Definition: primnodes.h:855

References OpExpr::args, InvalidOid, list_make1, list_make2, OpExpr::location, makeNode, and OpExpr::opno.

Referenced by build_bound_expr(), build_implied_join_equality(), convert_EXISTS_to_ANY(), create_one_window_path(), 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(), process_implied_equality(), and rewriteSearchAndCycle().

◆ make_orclause()

◆ 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{
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}
int a
Definition: isn.c:68
const char * name

References a, makeNode, and name.

◆ makeAlias()

◆ makeBoolConst()

Node * makeBoolConst ( bool  value,
bool  isnull 
)

Definition at line 361 of file makefuncs.c.

362{
363 /* note that pg_type.h hardwires size of bool as 1 ... duplicate it */
364 return (Node *) makeConst(BOOLOID, -1, InvalidOid, 1,
365 BoolGetDatum(value), isnull, true);
366}
static struct @162 value
Const * makeConst(Oid consttype, int32 consttypmod, Oid constcollid, int constlen, Datum constvalue, bool constisnull, bool constbyval)
Definition: makefuncs.c:303
static Datum BoolGetDatum(bool X)
Definition: postgres.h:107

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

Referenced by add_base_clause_to_rel(), add_join_clause_to_rels(), create_append_plan(), eval_const_expressions_mutator(), find_duplicate_ors(), find_simplified_clause(), 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 reconsider_outer_join_clauses().

◆ makeBoolExpr()

◆ makeColumnDef()

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

Definition at line 518 of file makefuncs.c.

519{
521
522 n->colname = pstrdup(colname);
523 n->typeName = makeTypeNameFromOid(typeOid, typmod);
524 n->inhcount = 0;
525 n->is_local = true;
526 n->is_not_null = false;
527 n->is_from_type = false;
528 n->storage = 0;
529 n->raw_default = NULL;
530 n->cooked_default = NULL;
531 n->collClause = NULL;
532 n->collOid = collOid;
533 n->constraints = NIL;
534 n->fdwoptions = NIL;
535 n->location = -1;
536
537 return n;
538}
TypeName * makeTypeNameFromOid(Oid typeOid, int32 typmod)
Definition: makefuncs.c:500
bool is_not_null
Definition: parsenodes.h:742
CollateClause * collClause
Definition: parsenodes.h:752
List * constraints
Definition: parsenodes.h:754
Node * cooked_default
Definition: parsenodes.h:747
char * colname
Definition: parsenodes.h:737
TypeName * typeName
Definition: parsenodes.h:738
bool is_from_type
Definition: parsenodes.h:743
List * fdwoptions
Definition: parsenodes.h:755
Node * raw_default
Definition: parsenodes.h:746
char storage
Definition: parsenodes.h:744
Oid collOid
Definition: parsenodes.h:753
bool is_local
Definition: parsenodes.h:741
int16 inhcount
Definition: parsenodes.h:740
ParseLoc location
Definition: parsenodes.h:756

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(), DefineSequence(), DefineVirtualRelation(), intorel_startup(), MergeAttributes(), transformOfType(), and transformTableLikeClause().

◆ makeConst()

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

Definition at line 303 of file makefuncs.c.

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

References Const::consttype, makeNode, PG_DETOAST_DATUM, and PointerGetDatum().

Referenced by add_security_quals(), add_with_check_options(), array_subscript_transform(), build_bound_expr(), build_coercion_expression(), build_minmax_path(), check_sql_fn_retval(), create_final_distinct_paths(), create_partial_distinct_paths(), eval_const_expressions_mutator(), evaluate_expr(), expand_insert_targetlist(), get_qual_for_hash(), get_qual_for_list(), get_typdefault(), GetJsonBehaviorConst(), getJsonEncodingConst(), make_const(), makeBoolConst(), makeJsonTablePathScan(), makeNullConst(), match_clause_to_partition_key(), match_network_subset(), match_orclause_to_indexcol(), pattern_fixed_prefix(), RelationGetDummyIndexExpressions(), rewriteSearchAndCycle(), rewriteTargetListIU(), rewriteValuesRTE(), scalararraysel(), set_fn_opclass_options(), string_to_bytea_const(), string_to_const(), and transformJsonBehavior().

◆ makeDefElem()

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

Definition at line 590 of file makefuncs.c.

591{
593
594 res->defnamespace = NULL;
595 res->defname = name;
596 res->arg = arg;
597 res->defaction = DEFELEM_UNSPEC;
598 res->location = location;
599
600 return res;
601}
@ DEFELEM_UNSPEC
Definition: parsenodes.h:816
void * arg

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

Referenced by buildDefItem(), copy_table(), 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 608 of file makefuncs.c.

610{
612
613 res->defnamespace = nameSpace;
614 res->defname = name;
615 res->arg = arg;
616 res->defaction = defaction;
617 res->location = location;
618
619 return res;
620}

References arg, makeNode, name, and res.

◆ makeFromExpr()

◆ makeFuncCall()

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

Definition at line 629 of file makefuncs.c.

630{
632
633 n->funcname = name;
634 n->args = args;
635 n->agg_order = NIL;
636 n->agg_filter = NULL;
637 n->over = NULL;
638 n->agg_within_group = false;
639 n->agg_star = false;
640 n->agg_distinct = false;
641 n->func_variadic = false;
642 n->funcformat = funcformat;
643 n->location = location;
644 return n;
645}
bool agg_within_group
Definition: parsenodes.h:442
CoercionForm funcformat
Definition: parsenodes.h:446
Node * agg_filter
Definition: parsenodes.h:440
List * agg_order
Definition: parsenodes.h:439
List * funcname
Definition: parsenodes.h:437
List * args
Definition: parsenodes.h:438
bool agg_star
Definition: parsenodes.h:443
bool agg_distinct
Definition: parsenodes.h:444
ParseLoc location
Definition: parsenodes.h:447
bool func_variadic
Definition: parsenodes.h:445
struct WindowDef * over
Definition: parsenodes.h:441

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 547 of file makefuncs.c.

549{
550 FuncExpr *funcexpr;
551
552 funcexpr = makeNode(FuncExpr);
553 funcexpr->funcid = funcid;
554 funcexpr->funcresulttype = rettype;
555 funcexpr->funcretset = false; /* only allowed case here */
556 funcexpr->funcvariadic = false; /* only allowed case here */
557 funcexpr->funcformat = fformat;
558 funcexpr->funccollid = funccollid;
559 funcexpr->inputcollid = inputcollid;
560 funcexpr->args = args;
561 funcexpr->location = -1;
562
563 return funcexpr;
564}
ParseLoc location
Definition: primnodes.h:786
Oid funcid
Definition: primnodes.h:766
List * args
Definition: primnodes.h:784

References generate_unaccent_rules::args, FuncExpr::args, FuncExpr::funcid, 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(), coerceJsonFuncExpr(), get_qual_for_hash(), make_path_cat_expr(), makeJsonByteaToTextConversion(), rewriteSearchAndCycle(), and transformJsonValueExpr().

◆ makeGroupingSet()

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

Definition at line 845 of file makefuncs.c.

846{
848
849 n->kind = kind;
850 n->content = content;
851 n->location = location;
852 return n;
853}
List * content
Definition: parsenodes.h:1519
ParseLoc location
Definition: parsenodes.h:1520

References GroupingSet::content, 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,
bool  summarizing,
bool  withoutoverlaps 
)

Definition at line 787 of file makefuncs.c.

791{
793
794 n->ii_NumIndexAttrs = numattrs;
795 n->ii_NumIndexKeyAttrs = numkeyattrs;
798 n->ii_Unique = unique;
799 n->ii_NullsNotDistinct = nulls_not_distinct;
800 n->ii_ReadyForInserts = isready;
801 n->ii_CheckedUnchanged = false;
802 n->ii_IndexUnchanged = false;
803 n->ii_Concurrent = concurrent;
804 n->ii_Summarizing = summarizing;
805 n->ii_WithoutOverlaps = withoutoverlaps;
806
807 /* summarizing indexes cannot contain non-key attributes */
808 Assert(!summarizing || (numkeyattrs == numattrs));
809
810 /* expressions */
811 n->ii_Expressions = expressions;
813
814 /* predicates */
815 n->ii_Predicate = predicates;
816 n->ii_PredicateState = NULL;
817
818 /* exclusion constraints */
819 n->ii_ExclusionOps = NULL;
820 n->ii_ExclusionProcs = NULL;
821 n->ii_ExclusionStrats = NULL;
822
823 /* speculative inserts */
824 n->ii_UniqueOps = NULL;
825 n->ii_UniqueProcs = NULL;
826 n->ii_UniqueStrats = NULL;
827
828 /* initialize index-build state to default */
829 n->ii_BrokenHotChain = false;
830 n->ii_ParallelWorkers = 0;
831
832 /* set up for possible use by index AM */
833 n->ii_Am = amoid;
834 n->ii_AmCache = NULL;
836
837 return n;
838}
MemoryContext CurrentMemoryContext
Definition: mcxt.c:143
bool ii_Unique
Definition: execnodes.h:208
uint16 * ii_ExclusionStrats
Definition: execnodes.h:204
bool ii_BrokenHotChain
Definition: execnodes.h:214
int ii_NumIndexAttrs
Definition: execnodes.h:195
void * ii_AmCache
Definition: execnodes.h:219
bool ii_CheckedUnchanged
Definition: execnodes.h:211
Oid * ii_UniqueOps
Definition: execnodes.h:205
ExprState * ii_PredicateState
Definition: execnodes.h:201
Oid * ii_ExclusionOps
Definition: execnodes.h:202
bool ii_NullsNotDistinct
Definition: execnodes.h:209
int ii_ParallelWorkers
Definition: execnodes.h:217
bool ii_Concurrent
Definition: execnodes.h:213
uint16 * ii_UniqueStrats
Definition: execnodes.h:207
int ii_NumIndexKeyAttrs
Definition: execnodes.h:196
List * ii_ExpressionsState
Definition: execnodes.h:199
List * ii_Expressions
Definition: execnodes.h:198
bool ii_WithoutOverlaps
Definition: execnodes.h:216
bool ii_IndexUnchanged
Definition: execnodes.h:212
Oid * ii_ExclusionProcs
Definition: execnodes.h:203
Oid ii_Am
Definition: execnodes.h:218
bool ii_Summarizing
Definition: execnodes.h:215
Oid * ii_UniqueProcs
Definition: execnodes.h:206
MemoryContext ii_Context
Definition: execnodes.h:220
bool ii_ReadyForInserts
Definition: execnodes.h:210
List * ii_Predicate
Definition: execnodes.h:200

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_ParallelWorkers, IndexInfo::ii_Predicate, IndexInfo::ii_PredicateState, IndexInfo::ii_ReadyForInserts, IndexInfo::ii_Summarizing, IndexInfo::ii_Unique, IndexInfo::ii_UniqueOps, IndexInfo::ii_UniqueProcs, IndexInfo::ii_UniqueStrats, IndexInfo::ii_WithoutOverlaps, makeNode, and NIL.

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

◆ makeJsonBehavior()

JsonBehavior * makeJsonBehavior ( JsonBehaviorType  btype,
Node expr,
int  location 
)

Definition at line 908 of file makefuncs.c.

909{
911
912 behavior->btype = btype;
913 behavior->expr = expr;
914 behavior->location = location;
915
916 return behavior;
917}
Node * expr
Definition: primnodes.h:1822
ParseLoc location
Definition: primnodes.h:1824
JsonBehaviorType btype
Definition: primnodes.h:1821

References JsonBehavior::btype, JsonBehavior::expr, JsonBehavior::location, and makeNode.

Referenced by transformJsonBehavior().

◆ makeJsonFormat()

JsonFormat * makeJsonFormat ( JsonFormatType  type,
JsonEncoding  encoding,
int  location 
)

Definition at line 875 of file makefuncs.c.

876{
878
879 jf->format_type = type;
880 jf->encoding = encoding;
881 jf->location = location;
882
883 return jf;
884}
int32 encoding
Definition: pg_database.h:41
ParseLoc location
Definition: primnodes.h:1684
JsonEncoding encoding
Definition: primnodes.h:1683
JsonFormatType format_type
Definition: primnodes.h:1682
const char * type

References encoding, JsonFormat::encoding, JsonFormat::format_type, JsonFormat::location, makeNode, and type.

Referenced by transformJsonOutput(), transformJsonReturning(), transformJsonSerializeExpr(), and transformJsonTableColumn().

◆ makeJsonIsPredicate()

Node * makeJsonIsPredicate ( Node expr,
JsonFormat format,
JsonValueType  item_type,
bool  unique_keys,
int  location 
)

Definition at line 939 of file makefuncs.c.

941{
943
944 n->expr = expr;
945 n->format = format;
946 n->item_type = item_type;
947 n->unique_keys = unique_keys;
948 n->location = location;
949
950 return (Node *) n;
951}
static char format
JsonFormat * format
Definition: primnodes.h:1767
JsonValueType item_type
Definition: primnodes.h:1768
ParseLoc location
Definition: primnodes.h:1770

References JsonIsPredicate::expr, format, JsonIsPredicate::format, JsonIsPredicate::item_type, JsonIsPredicate::location, makeNode, and JsonIsPredicate::unique_keys.

Referenced by transformJsonIsPredicate().

◆ makeJsonKeyValue()

Node * makeJsonKeyValue ( Node key,
Node value 
)

Definition at line 924 of file makefuncs.c.

925{
927
928 n->key = (Expr *) key;
930
931 return (Node *) n;
932}
#define castNode(_type_, nodeptr)
Definition: nodes.h:176
JsonValueExpr * value
Definition: parsenodes.h:1920

References castNode, JsonKeyValue::key, sort-test::key, makeNode, JsonKeyValue::value, and value.

◆ makeJsonTablePath()

JsonTablePath * makeJsonTablePath ( Const pathvalue,
char *  pathname 
)

Definition at line 979 of file makefuncs.c.

980{
982
983 Assert(IsA(pathvalue, Const));
984 path->value = pathvalue;
985 path->name = pathname;
986
987 return path;
988}
Const * value
Definition: primnodes.h:1902

References Assert, IsA, makeNode, JsonTablePath::name, and JsonTablePath::value.

Referenced by makeJsonTablePathScan().

◆ makeJsonTablePathSpec()

JsonTablePathSpec * makeJsonTablePathSpec ( char *  string,
char *  name,
int  string_location,
int  name_location 
)

Definition at line 958 of file makefuncs.c.

960{
962
963 Assert(string != NULL);
964 pathspec->string = makeStringConst(string, string_location);
965 if (name != NULL)
966 pathspec->name = pstrdup(name);
967
968 pathspec->name_location = name_location;
969 pathspec->location = string_location;
970
971 return pathspec;
972}
Node * makeStringConst(char *str, int location)
Definition: makefuncs.c:571
ParseLoc name_location
Definition: parsenodes.h:1857

References Assert, JsonTablePathSpec::location, makeNode, makeStringConst(), name, JsonTablePathSpec::name, JsonTablePathSpec::name_location, pstrdup(), and JsonTablePathSpec::string.

◆ makeJsonValueExpr()

JsonValueExpr * makeJsonValueExpr ( Expr raw_expr,
Expr formatted_expr,
JsonFormat format 
)

Definition at line 891 of file makefuncs.c.

893{
895
896 jve->raw_expr = raw_expr;
897 jve->formatted_expr = formatted_expr;
898 jve->format = format;
899
900 return jve;
901}
Expr * formatted_expr
Definition: primnodes.h:1715
JsonFormat * format
Definition: primnodes.h:1716
Expr * raw_expr
Definition: primnodes.h:1714

References format, JsonValueExpr::format, JsonValueExpr::formatted_expr, makeNode, and JsonValueExpr::raw_expr.

Referenced by eval_const_expressions_mutator(), transformJsonArrayQueryConstructor(), transformJsonParseArg(), and transformJsonTableColumn().

◆ makeNotNullConstraint()

Constraint * makeNotNullConstraint ( String colname)

Definition at line 446 of file makefuncs.c.

447{
448 Constraint *notnull;
449
450 notnull = makeNode(Constraint);
451 notnull->contype = CONSTR_NOTNULL;
452 notnull->conname = NULL;
453 notnull->is_no_inherit = false;
454 notnull->deferrable = false;
455 notnull->initdeferred = false;
456 notnull->location = -1;
457 notnull->keys = list_make1(colname);
458 notnull->is_enforced = true;
459 notnull->skip_validation = false;
460 notnull->initially_valid = true;
461
462 return notnull;
463}
@ CONSTR_NOTNULL
Definition: parsenodes.h:2770
bool initdeferred
Definition: parsenodes.h:2805
ParseLoc location
Definition: parsenodes.h:2845
List * keys
Definition: parsenodes.h:2816
ConstrType contype
Definition: parsenodes.h:2802
bool is_no_inherit
Definition: parsenodes.h:2809
bool is_enforced
Definition: parsenodes.h:2806
bool initially_valid
Definition: parsenodes.h:2808
bool skip_validation
Definition: parsenodes.h:2807
bool deferrable
Definition: parsenodes.h:2804
char * conname
Definition: parsenodes.h:2803

References Constraint::conname, CONSTR_NOTNULL, Constraint::contype, Constraint::deferrable, Constraint::initdeferred, Constraint::initially_valid, Constraint::is_enforced, Constraint::is_no_inherit, Constraint::keys, list_make1, Constraint::location, makeNode, and Constraint::skip_validation.

Referenced by ATExecSetNotNull(), ATPrepAddPrimaryKey(), transformColumnDefinition(), and transformIndexConstraint().

◆ makeNullConst()

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

Definition at line 341 of file makefuncs.c.

342{
343 int16 typLen;
344 bool typByVal;
345
346 get_typlenbyval(consttype, &typLen, &typByVal);
347 return makeConst(consttype,
348 consttypmod,
349 constcollid,
350 (int) typLen,
351 (Datum) 0,
352 true,
353 typByVal);
354}
int16_t int16
Definition: c.h:483
void get_typlenbyval(Oid typid, int16 *typlen, bool *typbyval)
Definition: lsyscache.c:2251
uintptr_t Datum
Definition: postgres.h:69

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 
)

◆ makeRelabelType()

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

Definition at line 406 of file makefuncs.c.

408{
410
411 r->arg = arg;
412 r->resulttype = rtype;
413 r->resulttypmod = rtypmod;
414 r->resultcollid = rcollid;
415 r->relabelformat = rformat;
416 r->location = -1;
417
418 return r;
419}
Oid resulttype
Definition: primnodes.h:1201
ParseLoc location
Definition: primnodes.h:1208
Expr * arg
Definition: primnodes.h:1200

References arg, RelabelType::arg, RelabelType::location, makeNode, and RelabelType::resulttype.

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

◆ makeStringConst()

Node * makeStringConst ( char *  str,
int  location 
)

Definition at line 571 of file makefuncs.c.

572{
574
575 n->val.sval.type = T_String;
576 n->val.sval.sval = str;
577 n->location = location;
578
579 return (Node *) n;
580}
const char * str
union ValUnion val
Definition: parsenodes.h:373
ParseLoc location
Definition: parsenodes.h:375
char * sval
Definition: value.h:68
String sval
Definition: parsenodes.h:364

References A_Const::location, makeNode, str, ValUnion::sval, String::sval, and A_Const::val.

Referenced by makeJsonTablePathSpec(), and transformJsonTableColumn().

◆ makeTargetEntry()

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

Definition at line 242 of file makefuncs.c.

246{
248
249 tle->expr = expr;
250 tle->resno = resno;
251 tle->resname = resname;
252
253 /*
254 * We always set these fields to 0. If the caller wants to change them he
255 * must do so explicitly. Few callers do that, so omitting these
256 * arguments reduces the chance of error.
257 */
258 tle->ressortgroupref = 0;
259 tle->resorigtbl = InvalidOid;
260 tle->resorigcol = 0;
261
262 tle->resjunk = resjunk;
263
264 return tle;
265}
Expr * expr
Definition: primnodes.h:2245
AttrNumber resno
Definition: primnodes.h:2247
Index ressortgroupref
Definition: primnodes.h:2251

References TargetEntry::expr, InvalidOid, makeNode, TargetEntry::resno, 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 472 of file makefuncs.c.

473{
475}
TypeName * makeTypeNameFromNameList(List *names)
Definition: makefuncs.c:484

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

Referenced by plpgsql_parse_wordrowtype().

◆ makeTypeNameFromNameList()

◆ makeTypeNameFromOid()

TypeName * makeTypeNameFromOid ( Oid  typeOid,
int32  typmod 
)

Definition at line 500 of file makefuncs.c.

501{
503
504 n->typeOid = typeOid;
505 n->typemod = typmod;
506 n->location = -1;
507 return n;
508}
Oid typeOid
Definition: parsenodes.h:280

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

Referenced by generateSerialExtraStmts(), makeColumnDef(), and transformAlterTableStmt().

◆ makeVacuumRelation()

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

Definition at line 860 of file makefuncs.c.

861{
863
864 v->relation = relation;
865 v->oid = oid;
866 v->va_cols = va_cols;
867 return v;
868}
RangeVar * relation
Definition: parsenodes.h:3930

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 varreturningtype
84 * different from VAR_RETURNING_DEFAULT, non-null varnullingrels, or with
85 * varnosyn/varattnosyn different from varno/varattno. We don't provide
86 * separate arguments for them, but just initialize them to sensible
87 * default values. This reduces code clutter and chance of error for most
88 * callers.
89 */
91 var->varnullingrels = NULL;
92 var->varnosyn = (Index) varno;
93 var->varattnosyn = varattno;
94
95 /* Likewise, we just set location to "unknown" here */
96 var->location = -1;
97
98 return var;
99}
unsigned int Index
Definition: c.h:571
@ VAR_RETURNING_DEFAULT
Definition: primnodes.h:255
Definition: primnodes.h:261
ParseLoc location
Definition: primnodes.h:309
AttrNumber varattno
Definition: primnodes.h:273
int varno
Definition: primnodes.h:268
VarReturningType varreturningtype
Definition: primnodes.h:296
Index varlevelsup
Definition: primnodes.h:293

References Var::location, makeNode, VAR_RETURNING_DEFAULT, Var::varattno, Var::varlevelsup, Var::varno, and Var::varreturningtype.

Referenced by add_row_identity_columns(), ATPrepAlterColumnType(), build_index_tlist(), build_physical_tlist(), build_remote_returning(), buildGroupedVar(), 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 107 of file makefuncs.c.

109{
110 return makeVar(varno,
111 tle->resno,
112 exprType((Node *) tle->expr),
113 exprTypmod((Node *) tle->expr),
114 exprCollation((Node *) tle->expr),
115 0);
116}
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:42
int32 exprTypmod(const Node *expr)
Definition: nodeFuncs.c:301
Oid exprCollation(const Node *expr)
Definition: nodeFuncs.c:821

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_phv(), search_indexed_tlist_for_sortgroupref(), and transformInsertStmt().

◆ makeWholeRowVar()

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

Definition at line 137 of file makefuncs.c.

141{
142 Var *result;
143 Oid toid;
144 Node *fexpr;
145
146 switch (rte->rtekind)
147 {
148 case RTE_RELATION:
149 /* relation: the rowtype is a named composite type */
150 toid = get_rel_type_id(rte->relid);
151 if (!OidIsValid(toid))
153 (errcode(ERRCODE_WRONG_OBJECT_TYPE),
154 errmsg("relation \"%s\" does not have a composite type",
155 get_rel_name(rte->relid))));
156 result = makeVar(varno,
158 toid,
159 -1,
161 varlevelsup);
162 break;
163
164 case RTE_FUNCTION:
165
166 /*
167 * If there's more than one function, or ordinality is requested,
168 * force a RECORD result, since there's certainly more than one
169 * column involved and it can't be a known named type.
170 */
171 if (rte->funcordinality || list_length(rte->functions) != 1)
172 {
173 /* always produces an anonymous RECORD result */
174 result = makeVar(varno,
176 RECORDOID,
177 -1,
179 varlevelsup);
180 break;
181 }
182
183 fexpr = ((RangeTblFunction *) linitial(rte->functions))->funcexpr;
184 toid = exprType(fexpr);
185 if (type_is_rowtype(toid))
186 {
187 /* func returns composite; same as relation case */
188 result = makeVar(varno,
190 toid,
191 -1,
193 varlevelsup);
194 }
195 else if (allowScalar)
196 {
197 /* func returns scalar; just return its output as-is */
198 result = makeVar(varno,
199 1,
200 toid,
201 -1,
202 exprCollation(fexpr),
203 varlevelsup);
204 }
205 else
206 {
207 /* func returns scalar, but we want a composite result */
208 result = makeVar(varno,
210 RECORDOID,
211 -1,
213 varlevelsup);
214 }
215 break;
216
217 default:
218
219 /*
220 * RTE is a join, subselect, tablefunc, or VALUES. We represent
221 * this as a whole-row Var of RECORD type. (Note that in most
222 * cases the Var will be expanded to a RowExpr during planning,
223 * but that is not our concern here.)
224 */
225 result = makeVar(varno,
227 RECORDOID,
228 -1,
230 varlevelsup);
231 break;
232 }
233
234 return result;
235}
#define InvalidAttrNumber
Definition: attnum.h:23
#define OidIsValid(objectId)
Definition: c.h:732
int errcode(int sqlerrcode)
Definition: elog.c:853
int errmsg(const char *fmt,...)
Definition: elog.c:1070
#define ERROR
Definition: elog.h:39
#define ereport(elevel,...)
Definition: elog.h:149
char * get_rel_name(Oid relid)
Definition: lsyscache.c:1928
bool type_is_rowtype(Oid typid)
Definition: lsyscache.c:2655
Oid get_rel_type_id(Oid relid)
Definition: lsyscache.c:1979
@ RTE_FUNCTION
Definition: parsenodes.h:1029
@ RTE_RELATION
Definition: parsenodes.h:1026
unsigned int Oid
Definition: postgres_ext.h:32
bool funcordinality
Definition: parsenodes.h:1188
List * functions
Definition: parsenodes.h:1186
RTEKind rtekind
Definition: parsenodes.h:1056

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