rc_t SRATableColDatatype ( const SRATable *self, uint32_t idx, VTypedecl *type, VTypedef *def ) { rc_t rc; if ( type == NULL && def == NULL ) rc = RC ( rcSRA, rcColumn, rcAccessing, rcParam, rcNull ); else { union { VTypedecl td; VTypedef def; } dummy; if ( type == NULL ) type = & dummy . td; else if ( def == NULL ) def = & dummy . def; if ( idx == 0 ) rc = RC ( rcSRA, rcColumn, rcAccessing, rcSelf, rcNull ); else if ( self == NULL ) rc = RC ( rcSRA, rcTable, rcAccessing, rcSelf, rcNull ); else { VTypedesc desc; rc = VCursorDatatype ( self -> curs, idx, type, & desc ); if ( rc == 0 ) { rc = VSchemaDescribeTypedef ( VCursorGetSchema(self -> curs), def, type -> type_id ); if ( rc == 0 ) return 0; } } memset ( type, 0, sizeof * type ); memset ( def, 0, sizeof * def ); } return rc; }
/* ResolveTypename * convert a type id into its type definition * * "resolved" [ OUT ] - resolved type definition * * "typname" [ IN ] - NUL-terminated type name */ LIB_EXPORT rc_t CC VDatatypesResolveTypename ( const VDatatypes *self, VTypedef *resolved, const char *typname ) { rc_t rc; if ( resolved == NULL ) rc = RC ( rcSRA, rcSchema, rcResolving, rcParam, rcNull ); else { VTypedecl td; rc = VSchemaResolveTypedecl ( ( const VSchema* ) self, & td, typname ); if ( rc == 0 ) { rc = VSchemaDescribeTypedef ( ( const VSchema* ) self, resolved, td . type_id ); if ( rc == 0 ) return rc; } memset ( resolved, 0, sizeof * resolved ); } return rc; }
/* ResolveTypeid * convert a type id into its type definition * * "resolved" [ OUT ] - resolved type definition * * "type_id" [ IN ] - 1-based runtime type id */ LIB_EXPORT rc_t CC VDatatypesResolveTypeid ( const VDatatypes *self, VTypedef *resolved, uint32_t type_id ) { return VSchemaDescribeTypedef ( ( const VSchema* ) self, resolved, type_id ); }