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; } } } } }
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 ); }