Exemple #1
0
void QueryExecutor::ExecuteExtractParametersQuery(DatabaseQuery::ExtractionParameters &pars) {
    IPKContainer* ipk = IPKContainer::GetObject();
    assert(ipk);

    SzbExtractor extr(szbase);
    extr.SetPeriod(PeriodToProbeType(pars.pt),
                   pars.start_time,
                   szb_move_time(pars.end_time, 1, PeriodToProbeType(pars.pt), 0),
                   0);

    extr.SetNoDataString(L"NO_DATA");
    extr.SetEmpty(0);

    FILE* output = fopen((const char*) SC::S2U(*pars.file_name).c_str(), "w");
    if (output == NULL)
        return;

    std::vector<SzbExtractor::Param> params;
    for (size_t i = 0; i < pars.params->size(); i++) {
        std::wstring param = pars.params->at(i);
        std::wstring prefix = pars.prefixes->at(i);
        szb_buffer_t* buffer = szbase->GetBuffer(prefix);
        params.push_back(SzbExtractor::Param(param, prefix, buffer, SzbExtractor::TYPE_AVERAGE));
    }

    extr.SetParams(params);
    extr.ExtractToCSV(output, L";");
    fclose(output);
}
Exemple #2
0
time_t SzbaseWrapper::next( time_t t , ProbeType pt , int num )
{
    return szb_move_time( t , num , pt.get_szarp_pt() , pt.get_len() );
}
Exemple #3
0
void QueryExecutor::ExecuteDataQuery(szb_buffer_t* szb, TParam* p, DatabaseQuery* q) {
    DatabaseQuery::ValueData &vd = q->value_data;

    if (vd.vv->size() == 0)
        return;

    SZARP_PROBE_TYPE pt = PeriodToProbeType(vd.period_type);

    int year = -1, month = -1;

    std::vector<DatabaseQuery::ValueData::V>::iterator i = vd.vv->begin();

    DatabaseQuery *rq = NULL;

    while (i != vd.vv->end()) {

        int new_year, new_month;
        szb_time2my(i->time, &new_year, &new_month);

        if (new_year != year || new_month != month) {
            if (rq) {
                DatabaseResponse dr(rq);
                wxPostEvent(response_receiver, dr);
                rq = NULL;
            }

            year = new_year;
            month = new_month;

        }

        if (rq == NULL) {
            rq = CreateDataQueryPrivate(q->draw_info, q->param, vd.period_type, q->draw_no);
            rq->inquirer_id = q->inquirer_id;
        }

        time_t end = szb_move_time(i->time, 1, pt, i->custom_length);
        if (p && szb) {
            bool fixed;
            i->response = szb_get_avg(szb,
                                      p,
                                      i->time,
                                      end,
                                      &i->sum,
                                      &i->count,
                                      pt,
                                      &fixed,
                                      &i->first_val,
                                      &i->last_val);
            if (szb->last_err != SZBE_OK) {
                i->ok = false;
                i->error = szb->last_err;
                i->error_str = wcsdup(szb->last_err_string.c_str());

                szb->last_err = SZBE_OK;
                szb->last_err_string = std::wstring();
            } else {
                i->ok = true;
            }

        } else {
            i->response = nan("");
            i->ok = true;
        }

        rq->value_data.vv->push_back(*i);

        ++i;
    }

    if (rq) {
        DatabaseResponse dr(rq);
        wxPostEvent(response_receiver, dr);
    }

}