PyObject *run(PyObject *self, PyObject *args)
{
    struct Runobj runobj = {0};
    struct Result rst = {0};
    rst.re_call = -1;
    
    if(initRun(&runobj, args)){
        if(runobj.args)
            free((void*)runobj.args);
        return NULL;
    }
    
    if(runit(&runobj, &rst) == -1)
        return NULL;
    if(runobj.args)
        free((void*)runobj.args);
    
    return genResult(&rst);
}
Example #2
0
void Database::createOrUpdateCacheTableFromServer(const QSqlDatabase& dbMaster, const QSqlDatabase& dbCache, const QString& field, const QString& table, const QUuid* userId)
{    
    try
    {
        QDateTime ts = getUpdateTimestampForTable(dbCache, table, userId);

        QSqlQuery queryMaster(dbMaster);
        queryMaster.setForwardOnly(true);
        queryMaster.prepare("SELECT * FROM " + table + " WHERE " + field + " > ? ORDER BY " + field);
        queryMaster.bindValue(0, datetimeToString(ts));

        if (!queryMaster.exec())
            throw DatabaseException(queryMaster);

        while (queryMaster.next())
        {
            QDateTime updated = Database::replaceCacheRecordByServerRecord(dbCache, table, queryMaster);
            if (ts < updated)
                ts = updated;

            if (table == "genresult")
            {
                GenResultDAO* genResultDAO = GenResultDAO::getInstance();
                Q_ASSERT(genResultDAO);

                QSqlRecord record = queryMaster.record();

                GenResult genResult(record);
                if (genResult.getParentId().isNull())
                {
                    QUuid id(genResult.getId());

                    PackagesDAO* packagesDAO = PackagesDAO::getInstance();
                    Q_ASSERT(packagesDAO);

                    QObject parent;
                    FPackage* projectDoc = packagesDAO->getPackage(genResult.getPackageHash(), &parent);

                    SeDocument* document = projectDoc->getDocument(genResult.getResultId());
                    if (document)
                    {
                        QStandardItem root;
                        genResultDAO->loadItemModel(id, document, &root);

                        GenIndexDAO* genIndexDAO = GenIndexDAO::getInstance();
                        Q_ASSERT(genIndexDAO);

                        genIndexDAO->saveItemModel(id, &root);
                    }
                    SeDocument* journal = projectDoc->getJournal(genResult.getResultId());
                    if (journal)
                    {
                        QStandardItem root;
                        genResultDAO->loadItemModel(id, journal, &root);

                        GenIndexDAO* genIndexDAO = GenIndexDAO::getInstance();
                        Q_ASSERT(genIndexDAO);

                        genIndexDAO->saveItemModel(id, &root);
                    }

                    SeDocument*report = projectDoc->getReport(genResult.getResultId());
                    if (report)
                    {
                        QStandardItem root;
                        genResultDAO->loadItemModel(id, report, &root);

                        GenIndexDAO* genIndexDAO = GenIndexDAO::getInstance();
                        Q_ASSERT(genIndexDAO);

                        genIndexDAO->saveItemModel(id, &root);
                    }

                    SeDocument* advsearch = projectDoc->getAdvSearch(genResult.getResultId());
                    if (advsearch)
                    {
                        QStandardItem root;
                        genResultDAO->loadItemModel(id, advsearch, &root);

                        GenIndexDAO* genIndexDAO = GenIndexDAO::getInstance();
                        Q_ASSERT(genIndexDAO);

                        genIndexDAO->saveItemModel(id, &root);
                    }


                }
            }
        }

        setUpdateTimestampForTable(dbCache, table, userId, ts);
    }
    catch (DatabaseException dbException)
    {
        dbException.displayMessage();
    }
}