#include "headers/Query.h" vector query_parktimes_for_customer(int cid) { /* This is needed to initialize the park_instances for the customer constructor that is supposed to create a customer from data in the db. This should not be called on on it's own outside query_customer(); */ vector park_times; SQLite::Statement query(data::db, "SELECT * FROM Park_time WHERE customer_id = ?;"); query.bind(1, cid); while (query.executeStep()) { int id = query.getColumn(0); int spot_id = query.getColumn(2); int start = query.getColumn(3); int duration = query.getColumn(5); Park_time result{id, cid, spot_id, start, duration}; park_times.push_back(result); } query.reset(); return park_times; } vector query_customer_with_name(string name) { /* We use this instead of plain customers because: 1. no error handling needed here if there are no customers 2. multiple customers could be returned with the same name. */ vector result; SQLite::Statement query( data::db, "SELECT id, name, password, verhicle FROM Customer WHERE name = ?;"); query.bind(1, name); while (query.executeStep()) { int id = query.getColumn(0); string name_ = query.getColumn(1); string password = query.getColumn(2); int verhicle = query.getColumn(3); // cast to verhicle vector park_instances = query_parktimes_for_customer(id); result.push_back(Customer{ id, name_, password, Verhicle_type(verhicle), park_instances}); } return result; } Customer query_customer_with_id(int id) { /* do not call this function if you are not certain a customer with this id exists. // the only legitimate caller of this function is query_parkspot_x // there is no error handling in this function // for when this function doesn't find the customer with this id !!!! */ SQLite::Statement query(data::db, "SELECT * FROM Customer WHERE id = ?;"); query.bind(1, id); while (query.executeStep()) { string name = query.getColumn(1); string password = query.getColumn(2); int verhicle = query.getColumn(3); // cast to verhicle vector park_instances = query_parktimes_for_customer(id); Customer result{ id, name, password, Verhicle_type(verhicle), park_instances}; // DEBUG cout << "{" << result.id << "," < ?;"); query.bind(1, 0); while (query.executeStep()) { int id = query.getColumn(0); int taken = query.getColumn(1); int cid = query.getColumn(2); park_customers.push_back(query_customer_with_id(cid)); parking_spots.push_back( Park_spot{get_customer_ptr_for_parkspot(cid), id, bool(taken)}); } } Customer* get_customer_ptr_for_parkspot(int id) { if (!id) { return nullptr; } for (int i = 0; i < park_customers.size(); i++) { if (park_customers[i].id == id) { return &park_customers[i]; } } return nullptr; }