PostgreSQL Source Code: src/include/parser/parse_type.h File Reference (original) (raw)
Go to the source code of this file.
◆ ISCOMPLEX
◆ Type
◆ GetColumnDefCollation()
Definition at line 540 of file parse_type.c.
541{
542 Oid result;
544 int location = coldef->location;
545
547 {
548
551 location);
552 }
554 {
555
556 result = coldef->collOid;
557 }
558 else
559 {
560
561 result = typcollation;
562 }
563
564
567 (errcode(ERRCODE_DATATYPE_MISMATCH),
568 errmsg("collations are not supported by type %s",
571
572 return result;
573}
#define OidIsValid(objectId)
int errcode(int sqlerrcode)
int errmsg(const char *fmt,...)
#define ereport(elevel,...)
char * format_type_be(Oid type_oid)
Oid get_typcollation(Oid typid)
int parser_errposition(ParseState *pstate, int location)
Oid LookupCollation(ParseState *pstate, List *collnames, int location)
CollateClause * collClause
References ColumnDef::collClause, CollateClause::collname, ColumnDef::collOid, ereport, errcode(), errmsg(), ERROR, format_type_be(), get_typcollation(), CollateClause::location, ColumnDef::location, LookupCollation(), OidIsValid, and parser_errposition().
Referenced by addRangeTableEntryForFunction(), ATExecAddColumn(), ATExecAlterColumnType(), ATPrepAlterColumnType(), BuildDescForRelation(), MergeChildAttribute(), and MergeInheritedAttribute().
◆ LookupCollation()
◆ LookupTypeName()
Definition at line 38 of file parse_type.c.
40{
42 typeName, typmod_p, true, missing_ok);
43}
Type LookupTypeNameExtended(ParseState *pstate, const TypeName *typeName, int32 *typmod_p, bool temp_ok, bool missing_ok)
References LookupTypeNameExtended().
Referenced by AlterTypeOwner(), compute_return_type(), get_object_address_type(), interpret_function_parameter_list(), LookupTypeNameOid(), parseTypeString(), and typenameType().
◆ LookupTypeNameExtended()
Definition at line 73 of file parse_type.c.
76{
77 Oid typoid;
80
82 {
83
84 typoid = typeName->typeOid;
85 }
87 {
88
90 char *field = NULL;
91 Oid relid;
93
94
96 {
97 case 1:
99 (errcode(ERRCODE_SYNTAX_ERROR),
100 errmsg("improper %%TYPE reference (too few dotted names): %s",
103 break;
104 case 2:
107 break;
108 case 3:
112 break;
113 case 4:
118 break;
119 default:
121 (errcode(ERRCODE_SYNTAX_ERROR),
122 errmsg("improper %%TYPE reference (too many dotted names): %s",
125 break;
126 }
127
128
129
130
131
132
133
134
138 {
139 if (missing_ok)
141 else
143 (errcode(ERRCODE_UNDEFINED_COLUMN),
144 errmsg("column \"%s\" of relation \"%s\" does not exist",
147 }
148 else
149 {
151
152
154
155
157 (errmsg("type reference %s converted to %s",
160 }
161 }
162 else
163 {
164
165 char *schemaname;
167
168
170
171 if (schemaname)
172 {
173
174 Oid namespaceId;
176
178
184 else
186
188 }
189 else
190 {
191
193 }
194
195
198 }
199
201 {
202 if (typmod_p)
203 *typmod_p = -1;
204 return NULL;
205 }
206
209 elog(ERROR, "cache lookup failed for type %u", typoid);
210
212
213 if (typmod_p)
214 *typmod_p = typmod;
215
216 return (Type) tup;
217}
#define InvalidAttrNumber
Assert(PointerIsAligned(start, uint64))
#define HeapTupleIsValid(tuple)
AttrNumber get_attnum(Oid relid, const char *attname)
Oid get_array_type(Oid typid)
Oid get_atttype(Oid relid, AttrNumber attnum)
RangeVar * makeRangeVar(char *schemaname, char *relname, int location)
char * NameListToString(const List *names)
Oid LookupExplicitNamespace(const char *nspname, bool missing_ok)
void DeconstructQualifiedName(const List *names, char **nspname_p, char **objname_p)
Oid TypenameGetTypidExtended(const char *typname, bool temp_ok)
#define RangeVarGetRelid(relation, lockmode, missing_ok)
char * TypeNameToString(const TypeName *typeName)
static int32 typenameTypeMod(ParseState *pstate, const TypeName *typeName, Type typ)
static int list_length(const List *l)
static Datum PointerGetDatum(const void *X)
static Datum ObjectIdGetDatum(Oid X)
HeapTuple SearchSysCache1(int cacheId, Datum key1)
#define GetSysCacheOid2(cacheId, oidcol, key1, key2)
References TypeName::arrayBounds, Assert(), attnum, cancel_parser_errposition_callback(), RangeVar::catalogname, DeconstructQualifiedName(), elog, ereport, errcode(), errmsg(), ERROR, format_type_be(), get_array_type(), get_attnum(), get_atttype(), GetSysCacheOid2, HeapTupleIsValid, InvalidAttrNumber, InvalidOid, lfourth, linitial, list_length(), TypeName::location, LookupExplicitNamespace(), lsecond, lthird, makeRangeVar(), NameListToString(), TypeName::names, NIL, NoLock, NOTICE, ObjectIdGetDatum(), OidIsValid, parser_errposition(), TypeName::pct_type, PointerGetDatum(), RangeVarGetRelid, RangeVar::relname, RangeVar::schemaname, SearchSysCache1(), setup_parser_errposition_callback(), strVal, TypenameGetTypidExtended(), TypeNameToString(), typenameTypeMod(), TypeName::typeOid, and typname.
Referenced by FuncNameAsType(), and LookupTypeName().
◆ LookupTypeNameOid()
Definition at line 232 of file parse_type.c.
233{
234 Oid typoid;
236
237 tup = LookupTypeName(pstate, typeName, NULL, missing_ok);
238 if (tup == NULL)
239 {
240 if (!missing_ok)
242 (errcode(ERRCODE_UNDEFINED_OBJECT),
243 errmsg("type \"%s\" does not exist",
246
248 }
249
252
253 return typoid;
254}
static void * GETSTRUCT(const HeapTupleData *tuple)
Type LookupTypeName(ParseState *pstate, const TypeName *typeName, int32 *typmod_p, bool missing_ok)
FormData_pg_type * Form_pg_type
void ReleaseSysCache(HeapTuple tuple)
References ereport, errcode(), errmsg(), ERROR, GETSTRUCT(), InvalidOid, TypeName::location, LookupTypeName(), parser_errposition(), ReleaseSysCache(), and TypeNameToString().
Referenced by get_object_address(), LookupFuncWithArgs(), LookupOperWithArgs(), and type_in_list_does_not_exist_skipping().
◆ parseTypeString()
bool parseTypeString | ( | const char * | str, |
---|---|---|---|
Oid * | typeid_p, | ||
int32 * | typmod_p, | ||
Node * | escontext | ||
) |
Definition at line 785 of file parse_type.c.
787{
790
792 if (typeName == NULL)
793 return false;
794
797 if (tup == NULL)
798 {
799 ereturn(escontext, false,
800 (errcode(ERRCODE_UNDEFINED_OBJECT),
801 errmsg("type \"%s\" does not exist",
803 }
804 else
805 {
807
808 if (!typ->typisdefined)
809 {
811 ereturn(escontext, false,
812 (errcode(ERRCODE_UNDEFINED_OBJECT),
813 errmsg("type \"%s\" is only a shell",
815 }
816 *typeid_p = typ->oid;
818 }
819
820 return true;
821}
#define ereturn(context, dummy_value,...)
#define IsA(nodeptr, _type_)
TypeName * typeStringToTypeName(const char *str, Node *escontext)
References ereturn, errcode(), errmsg(), GETSTRUCT(), IsA, LookupTypeName(), ReleaseSysCache(), str, TypeNameToString(), and typeStringToTypeName().
Referenced by parseNameAndArgTypes(), pg_input_is_valid_common(), plperl_spi_prepare(), pltcl_SPI_prepare(), PLy_spi_prepare(), regtypein(), and to_regtypemod().
◆ stringTypeDatum()
◆ typeByVal()
◆ typeidType()
◆ typeidTypeRelid()
Oid typeidTypeRelid | ( | Oid | type_id | ) |
---|
Definition at line 668 of file parse_type.c.
669{
672 Oid result;
673
676 elog(ERROR, "cache lookup failed for type %u", type_id);
678 result = type->typrelid;
680 return result;
681}
References elog, ERROR, GETSTRUCT(), HeapTupleIsValid, ObjectIdGetDatum(), ReleaseSysCache(), SearchSysCache1(), and type.
Referenced by transformAssignmentIndirection(), and typeInheritsFrom().
◆ typeLen()
◆ TypeNameListToString()
char * TypeNameListToString | ( | List * | typenames | ) |
---|
◆ TypeNameToString()
char * TypeNameToString | ( | const TypeName * | typeName | ) |
---|
Definition at line 478 of file parse_type.c.
479{
481
484 return string.data;
485}
References appendTypeNameToBuffer(), and initStringInfo().
Referenced by AlterDomainDropConstraint(), AlterDomainValidateConstraint(), AlterTypeOwner(), compute_return_type(), CreateCast(), CreateTransform(), defGetString(), defGetTypeLength(), DefineAggregate(), DefineDomain(), DefineOpClass(), does_not_exist_skipping(), get_object_address_opf_member(), get_object_address_type(), interpret_function_parameter_list(), LookupTypeNameExtended(), LookupTypeNameOid(), parseTypeString(), type_in_list_does_not_exist_skipping(), typenameType(), and typenameTypeMod().
◆ typenameType()
Definition at line 264 of file parse_type.c.
265{
267
268 tup = LookupTypeName(pstate, typeName, typmod_p, false);
269 if (tup == NULL)
271 (errcode(ERRCODE_UNDEFINED_OBJECT),
272 errmsg("type \"%s\" does not exist",
277 (errcode(ERRCODE_UNDEFINED_OBJECT),
278 errmsg("type \"%s\" is only a shell",
281 return tup;
282}
References ereport, errcode(), errmsg(), ERROR, GETSTRUCT(), TypeName::location, LookupTypeName(), parser_errposition(), and TypeNameToString().
Referenced by AlterType(), ATExecAddOf(), ATExecAlterColumnType(), DefineDomain(), DefineType(), transformColumnDefinition(), transformColumnType(), transformOfType(), typenameTypeId(), and typenameTypeIdAndMod().
◆ typenameTypeId()
Definition at line 291 of file parse_type.c.
292{
293 Oid typoid;
295
299
300 return typoid;
301}
Type typenameType(ParseState *pstate, const TypeName *typeName, int32 *typmod_p)
References GETSTRUCT(), ReleaseSysCache(), and typenameType().
Referenced by AlterDomainAddConstraint(), AlterDomainDefault(), AlterDomainDropConstraint(), AlterDomainNotNull(), AlterDomainValidateConstraint(), AlterEnum(), AlterTypeNamespace(), check_object_ownership(), CreateCast(), CreateFunction(), CreateTransform(), DefineAggregate(), DefineOpClass(), DefineOperator(), DefineRange(), DefineRelation(), DefineType(), init_params(), PrepareQuery(), processTypesSpec(), RenameConstraint(), RenameType(), transformAlterTableStmt(), and transformIndexConstraint().
◆ typenameTypeIdAndMod()
Definition at line 310 of file parse_type.c.
312{
314
315 tup = typenameType(pstate, typeName, typmod_p);
318}
References GETSTRUCT(), ReleaseSysCache(), and typenameType().
Referenced by addRangeTableEntryForFunction(), ATExecAddColumn(), ATPrepAlterColumnType(), BuildDescForRelation(), flatten_set_variable_args(), MergeChildAttribute(), MergeInheritedAttribute(), revalidate_rectypeid(), transformJsonOutput(), transformJsonTableColumns(), transformRangeTableFunc(), transformTypeCast(), and transformXmlSerialize().
◆ typeOrDomainTypeRelid()
Oid typeOrDomainTypeRelid | ( | Oid | type_id | ) |
---|
Definition at line 689 of file parse_type.c.
690{
693 Oid result;
694
695 for (;;)
696 {
699 elog(ERROR, "cache lookup failed for type %u", type_id);
701 if (type->typtype != TYPTYPE_DOMAIN)
702 {
703
704 break;
705 }
706
707 type_id = type->typbasetype;
709 }
710 result = type->typrelid;
712 return result;
713}
References elog, ERROR, GETSTRUCT(), HeapTupleIsValid, ObjectIdGetDatum(), ReleaseSysCache(), SearchSysCache1(), and type.
Referenced by typeInheritsFrom(), and typeIsOfTypedTable().
◆ typeStringToTypeName()
TypeName * typeStringToTypeName | ( | const char * | str, |
---|---|---|---|
Node * | escontext | ||
) |
Definition at line 738 of file parse_type.c.
739{
740 List *raw_parsetree_list;
743
744
745 if (strspn(str, " \t\n\r\f\v") == strlen(str))
746 goto fail;
747
748
749
750
755
757
759
760
763
764
765 if (typeName->setof)
766 goto fail;
767
768 return typeName;
769
770fail:
772 (errcode(ERRCODE_SYNTAX_ERROR),
773 errmsg("invalid type name \"%s\"", str)));
774}
List * raw_parser(const char *str, RawParseMode mode)
#define unconstify(underlying_type, expr)
ErrorContextCallback * error_context_stack
static void pts_error_callback(void *arg)
#define linitial_node(type, l)
struct ErrorContextCallback * previous
void(* callback)(void *arg)
References ErrorContextCallback::arg, Assert(), ErrorContextCallback::callback, ereturn, errcode(), errmsg(), error_context_stack, linitial_node, list_length(), ErrorContextCallback::previous, pts_error_callback(), RAW_PARSE_TYPE_NAME, raw_parser(), TypeName::setof, str, and unconstify.
Referenced by parseTypeString(), and pg_get_object_address().
◆ typeTypeCollation()
◆ typeTypeId()
◆ typeTypeName()
char * typeTypeName | ( | Type | t | ) |
---|