MCPcopy Create free account
hub / github.com/FirebirdSQL/firebird / DbCache

Class DbCache

src/jrd/Mapping.cpp:1071–1261  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1069
1070private:
1071 class DbCache
1072 {
1073 public:
1074 DbCache(MemoryPool& p)
1075 : logins(p, userSql),
1076 roles(p, roleSql),
1077 pairs(p)
1078 { }
1079
1080 bool getPrivileges(const string& name, const string* sqlRole, const string& trusted_role,
1081 UserId::Privileges& system_privileges)
1082 {
1083 system_privileges.clearAll();
1084 if (!logins.getPrivileges(name, system_privileges))
1085 return false;
1086
1087 MAP_DEBUG(fprintf(stderr, "name=%s\n", name.c_str()));
1088
1089 bool granted = false;
1090 if (!pairs.isRoleGranted(name, sqlRole, granted))
1091 return false;
1092
1093 MAP_DEBUG(fprintf(stderr, "granted=%d\n", granted));
1094 return roles.getPrivileges((granted ? *sqlRole : trusted_role), system_privileges);
1095 }
1096
1097 void populate(Mapping::DbHandle& iDb, const string& name, const string* sqlRole,
1098 const string& trusted_role)
1099 {
1100 logins.populate(name, iDb);
1101 roles.populate(trusted_role, iDb);
1102 if (sqlRole)
1103 roles.populate(*sqlRole, iDb);
1104 pairs.populate(name, sqlRole, iDb);
1105 }
1106
1107 void invalidate()
1108 {
1109 logins.invalidate();
1110 roles.invalidate();
1111 pairs.invalidate();
1112 }
1113
1114 private:
1115 class NameCache : private GenericMap<Pair<Left<string, UserId::Privileges> > >
1116 {
1117 public:
1118 NameCache(MemoryPool& p, const char* s)
1119 : GenericMap(p),
1120 sql(s)
1121 { }
1122
1123 bool getPrivileges(const string& key, UserId::Privileges& system_privileges)
1124 {
1125 if (!key.hasData())
1126 return true;
1127
1128 UserId::Privileges p;

Callers 1

populateMethod · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected