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); }
time_t SzbaseWrapper::next( time_t t , ProbeType pt , int num ) { return szb_move_time( t , num , pt.get_szarp_pt() , pt.get_len() ); }
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); } }