PostgreSQL Source Code: src/include/parser/parse_type.h File Reference (original) (raw)

Go to the source code of this file.

Functions
Type LookupTypeName (ParseState *pstate, const TypeName *typeName, int32 *typmod_p, bool missing_ok)
Type LookupTypeNameExtended (ParseState *pstate, const TypeName *typeName, int32 *typmod_p, bool temp_ok, bool missing_ok)
Oid LookupTypeNameOid (ParseState *pstate, const TypeName *typeName, bool missing_ok)
Type typenameType (ParseState *pstate, const TypeName *typeName, int32 *typmod_p)
Oid typenameTypeId (ParseState *pstate, const TypeName *typeName)
void typenameTypeIdAndMod (ParseState *pstate, const TypeName *typeName, Oid *typeid_p, int32 *typmod_p)
char * TypeNameToString (const TypeName *typeName)
char * TypeNameListToString (List *typenames)
Oid LookupCollation (ParseState *pstate, List *collnames, int location)
Oid GetColumnDefCollation (ParseState *pstate, const ColumnDef *coldef, Oid typeOid)
Type typeidType (Oid id)
Oid typeTypeId (Type tp)
int16 typeLen (Type t)
bool typeByVal (Type t)
char * typeTypeName (Type t)
Oid typeTypeRelid (Type typ)
Oid typeTypeCollation (Type typ)
Datum stringTypeDatum (Type tp, char *string, int32 atttypmod)
Oid typeidTypeRelid (Oid type_id)
Oid typeOrDomainTypeRelid (Oid type_id)
TypeName * typeStringToTypeName (const char *str, Node *escontext)
bool parseTypeString (const char *str, Oid *typeid_p, int32 *typmod_p, Node *escontext)

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 )

typeTypeRelid()