Esempio n. 1
0
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;
}
Esempio n. 2
0
/* 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;
}
Esempio n. 3
0
/* 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 );
}