Warning: session_start(): open(/var/lib/php/sessions/sess_cnal1i02rc54i3jsineori1bo2, O_RDWR) failed: No space left on device (28) in /var/www/tb-usercake/models/config.php on line 51
Warning: session_start(): Failed to read session data: files (path: /var/lib/php/sessions) in /var/www/tb-usercake/models/config.php on line 51
concept BigDB {
S name;
}
concept BigEntry {
new Ref db;
S globalID;
long fileNr, headerStart, start, length;
S text() { ret bigDB_getText(this); }
toString { ret "BigEntry " + globalID; }
}
sbool bigDB_inited;
svoid bigDB() {
lock dbLock();
if (bigDB_inited) ret;
bigDB_inited = true;
dbIndexing(BigEntry, 'globalID);
bigDB_standardDB();
}
static BigDB bigDB_standardDB() {
ret uniq(BigDB, name := "");
}
static BigEntry bigDB_newStringEntry(S text) {
lock dbLock();
BigDB db = bigDB_standardDB();
long fileNr = bigDB_fileNrToAppendTo();
S globalID = aGlobalID();
File file = bigDB_file(db, fileNr);
long length = fileSize(file);
long l = lUtf8(text);
S header = globalID + " " + l + "\n";
long start = length + lUtf8(header);
appendToTextFile(file, header + text + "\n");
ret cnew(BigEntry, +db, +globalID, +fileNr, headerStart := length, +start, length := l);
}
static long bigDB_fileNrToAppendTo() {
ret 1;
}
static File bigDB_file(BigDB db, long nr) {
ret getProgramFile("db." + urlencode(appendIfNempty(unnull(db.name), ".")) + nr);
}
static S bigDB_getText(BigEntry entry) {
File f = db_file(entry.db!, entry.fileNr);
ret fromUtf8(loadBinaryFilePart(f, entry.start, entry.start+entry.length));
}