#include "tdb.h" #include "core/log.h" //#include "core/misc.h" namespace Ticket { Error TDb::GetTicketByDirId(long dir_id, Ticket & ticket) { PGresult * r = 0; Error status = WINIX_ERR_OK; try { query.Clear(); query << R("select ticket.id, ticket.dir_id, ticket.parent_id, ticket.type, ticket.status, ticket.priority, " "ticket.category, ticket.expected, ticket.progress, ticket.item_id " "from core.ticket " "where ticket.dir_id=") << dir_id << R(";"); r = AssertQuery(query); AssertResult(r, PGRES_TUPLES_OK); int rows = Rows(r); if( rows > 1 ) log << log1 << "Db: there is more than one ticket with dir_id: " << dir_id << logend; else if( rows == 0 ) throw Error(WINIX_ERR_NO_TICKET); TicketColumns tc; tc.SetColumns(r); tc.SetTicket(r, 0, ticket); } catch(const Error & e) { status = e; } ClearResult(r); return status; } Error TDb::GetTickets(long parent_id, std::vector & ticket_tab) { PGresult * r = 0; Error status = WINIX_ERR_OK; try { query.Clear(); query << R("select ticket.id, ticket.dir_id, ticket.parent_id, ticket.type, ticket.status, ticket.priority, " "ticket.category, ticket.expected, ticket.progress, ticket.item_id " "from core.ticket " "where ticket.parent_id = ") << parent_id << R(";"); r = AssertQuery(query); AssertResult(r, PGRES_TUPLES_OK); int rows = Rows(r); Ticket ticket; TicketColumns tc; tc.SetColumns(r); for(int i=0 ; i 0 ) log << log2 << "Db: deleted " << rows << " rows from core.ticket" << logend; } catch(const Error & e) { status = e; } ClearResult(r); return status; } void TDb::TicketColumns::SetColumns(PGresult * r) { // PQfnumber returns -1 if there is no such a column id = PQfnumber(r, "id"); dir_id = PQfnumber(r, "dir_id"); parent_id = PQfnumber(r, "parent_id"); type = PQfnumber(r, "type"); status = PQfnumber(r, "status"); priority = PQfnumber(r, "priority"); category = PQfnumber(r, "category"); expected = PQfnumber(r, "expected"); progress = PQfnumber(r, "progress"); item_id = PQfnumber(r, "item_id"); } void TDb::TicketColumns::SetTicket(PGresult * r, long row, Ticket & ticket) { if( id != -1 ) ticket.id = DbBase::AssertValueLong(r, row, id); if( dir_id != -1 ) ticket.dir_id = DbBase::AssertValueLong(r, row, dir_id); if( parent_id != -1 ) ticket.parent_id = DbBase::AssertValueLong(r, row, parent_id); if( type != -1 ) ticket.type = DbBase::AssertValueInt(r, row, type); if( status != -1 ) ticket.status = DbBase::AssertValueInt(r, row, status); if( priority != -1 ) ticket.priority = DbBase::AssertValueInt(r, row, priority); if( category != -1 ) ticket.category = DbBase::AssertValueInt(r, row, category); if( expected != -1 ) ticket.expected = DbBase::AssertValueInt(r, row, expected); if( progress != -1 ) ticket.progress = DbBase::AssertValueInt(r, row, progress); if( item_id != -1 ) ticket.item_id = DbBase::AssertValueLong(r, row, item_id); } } // namespace