void send_result_row_to_nqxe( Processor::query_id_t query_id, Processor::operator_id_t operator_id, Processor::RowT& row ) { block_data_t msg[100]; /* void on_result_row(int type, QueryProcessor::size_type cols, QueryProcessor::RowT& row, QueryProcessor::query_id_t qid, QueryProcessor::operator_id_t oid) { */ typedef Processor::BasicOperator BasicOperator; Query *q = ian_.get_query(query_id); if(!q) { debug_->debug("!q %d", (int)query_id); return; } BasicOperator *op = q->get_operator(operator_id); if(!op) { debug_->debug("!op %d", (int)operator_id); return; } int cols = op->projection_info().columns(); if(op->type() == Processor::BOD::AGGREGATE) { Processor::AggregateT *aggr = (Processor::AggregateT*)op; //int cols = op-> projection_info().columns(); //cols = aggr->columns_physical(); cols = aggr->columns_logical(); } int msglen = 1 + 1 + 1 + 1 + 4*cols; block_data_t chk = 0; msg[0] = 'R'; msg[1] = 2 + 4 * cols; // # bytes to follow after this one msg[2] = query_id; msg[3] = operator_id; if(op->type() == Processor::BOD::AGGREGATE) { Processor::AggregateT *aggr = (Processor::AggregateT*)op; int j = 0; // physical column for(int i = 0; i< cols; i++, j++) { // logical column //printf("tach %d", Processor::AggregateT::AD::AGAIN); if((aggr->aggregation_types()[i] & ~AGAIN) == AggregateT::AD::AVG) { j++; } Value v; memcpy(&v, &row[j], sizeof(Value)); wiselib::write<Os, block_data_t, Processor::Value>(msg + 4 + 4*i, v); } } else { for(int i = 0; i< cols; i++) { Value v; memcpy(&v, &row[i], sizeof(Value)); wiselib::write<Os, block_data_t, Processor::Value>(msg + 4 + 4*i, v); } } for(int i = 0; i<msglen; i++) { chk ^= msg[i]; } msg[msglen] = chk; uart_->write(msglen + 1, (Os::Uart::block_data_t*)msg); } // send_result_row_to_nqxe()