Esempio n. 1
0
QString SimpleJsonDB::jsonString()
{
    acquireWriteLock();
    QString dbString = db->toJson(QMJsonFormat_Pretty, QMJsonSort_CaseSensitive);

    if (filterVmAndDomstoreKeys)
    {
        auto filteredValue = QMJsonValue::fromJson(dbString);

        if (filteredValue.isNull())
        {
            qCritical("unable to convert db string to qmjsonvalue!");
            exit(1);
        }

        if (!filteredValue->isObject())
        {
            qCritical("db qmjsonvalue is not an object!");
            exit(1);
        }

        filteredValue->toObject()->remove("vm");
        filteredValue->toObject()->remove("dom-store");
        dbString = filteredValue->toJson(QMJsonFormat_Pretty, QMJsonSort_CaseSensitive);
    }

    releaseWriteLock();
    return dbString;
}
Esempio n. 2
0
void SimpleJsonDB::readFromDisk()
{
    acquireWriteLock();

    if (path != ":memory:")
    {
        QFile dbFile(path);

        if (dbFile.exists())
        {
            db = QMJsonValue::fromJsonFile(path);
            qDebug() << "db from json file:" << db;

            // XXX: fix desired https://github.com/QtMark/qmjson/issues/9
            if (db.isNull() || !db->isObject())
            {
                // save off bad db file for later review, but do not abort
                // this is preferable than failing to boot if dbd doesn't come up
                qCritical() << "failed to read db:" << path << "malformed?" << dbFile.readAll();
                qCritical() << "moving bad db from:" << path << "to:" << path + ".bad";
                dbFile.rename(path + ".bad");
            }
        }
    }

    // if no json file exists, create empty object
    if (db.isNull() || !db->isObject())
    {
        qDebug() << "creating default empty object for db:" << path;
        auto obj = QMPointer<QMJsonObject>(new QMJsonObject());
        db = QMPointer<QMJsonValue>(new QMJsonValue(obj));
    }

    releaseWriteLock();
}
Esempio n. 3
0
void IndexReader::deleteDocument(int32_t docNum) {
    SyncLock syncLock(this);
    ensureOpen();
    acquireWriteLock();
    _hasChanges = true;
    doDelete(docNum);
}
Esempio n. 4
0
void IndexReader::undeleteAll() {
    SyncLock syncLock(this);
    ensureOpen();
    acquireWriteLock();
    _hasChanges = true;
    doUndeleteAll();
}
Esempio n. 5
0
void IndexReader::setNorm(int32_t doc, const String& field, uint8_t value) {
    SyncLock syncLock(this);
    ensureOpen();
    acquireWriteLock();
    _hasChanges = true;
    doSetNorm(doc, field, value);
}