Пример #1
0
static
void CC resolve_writable_sphys ( void *item, void *data )
{
    struct resolve_phys_data *pb = data;
    const SPhysMember *smbr = ( const void* ) item;
    VProduction *out = NULL;

    if ( pb -> seed == NULL )
        VProdResolveSPhysMember ( & pb -> pr, & out, smbr );
    else
    {
        uint32_t i;
        const KSymbol *sym = smbr -> name;
        const char *sname = sym -> name . addr;
        size_t ssize = sym -> name . size;
        if ( sname [ 0 ] == '.' )
        {
            ++ sname;
            -- ssize;
        }

        /* TBD - this is not too speedy, but it is
           very low frequency in all known cases */
        for ( i = 0; i < pb -> count; ++ i )
        {
            const char *name;
            rc_t rc = KNamelistGet ( pb -> seed, i, & name );
            if ( rc == 0 )
            {
                if ( strlen ( name ) == ssize && memcmp ( sname, name, ssize ) == 0 )
                {
                    VProdResolveSPhysMember ( & pb -> pr, & out, smbr );
                    break;
                }
            }
        }
    }
}
Пример #2
0
static
rc_t VProdResolvePhysExpr ( const VProdResolve *self,
    VProduction **out, const KSymbol *sym )
{
    if ( self -> chain == chainEncoding )
    {
        assert ( self -> curs -> read_only == false );
        PLOGMSG ( klogWarn, ( klogWarn, "illegal access of physical column '$(name)'"
                   , "name=%.*s"
                   , ( int ) sym -> name . size
                   , sym -> name . addr ));
        return 0;
    }

    return VProdResolveSPhysMember ( self, out, sym -> u . obj );
}