int main()
{
   Matrix3f A;
   Vector3f b;
   A << 1,2,3,  4,5,6,  7,8,10;
   b << 3, 3, 4;
   cout << "Here is the matrix A:\n" << A << endl;
   cout << "Here is the vector b:\n" << b << endl;
   Vector3f x = A.colPivHouseholderQr().solve(b);
   cout << "The solution is:\n" << x << endl;
}
int main(void)
{
cout << endl;
try {
  sql::Driver *driver;
  sql::Connection *con;
  sql::Statement *stmt;
  sql::ResultSet *res;

  /* Create a connection */
  driver = get_driver_instance();
  con = driver->connect("tcp://serverip:port", "username", "###");
  /* Connect to the MySQL test database */
  con->setSchema("PECKHAM_RAW_DATA");
  int i = 0;
  int j = 0;
    Matrix3f A;
    Vector3f b;
  std::string mac_current;
  stmt = con->createStatement();
  res = stmt->executeQuery("SELECT COUNT(MAC_ROUTER), MAC_CLIENT, MAC_ROUTER,AVG(`SIGNAL`), `ROUTERS`.`ROUTER_POSITION_X`,`ROUTERS`.`ROUTER_POSITION_Y`,`ROUTERS`.`ROUTER_POSITION_Z` FROM PECKHAM_RAW_DATA.RAW_PACKET_INFO JOIN PECKHAM_RAW_DATA.ROUTERS ON `ROUTERS`.`ROUTER_MAC` = `RAW_PACKET_INFO`.`MAC_ROUTER` WHERE `RAW_PACKET_INFO`.DT > NOW()-INTERVAL 1 second GROUP BY MAC_CLIENT,MAC_ROUTER ORDER BY MAC_CLIENT");
  while (res->next()) {
      if (i == 0 and j == 0) {
          mac_current = res->getString(2);
          cout<< mac_current <<"|0|"<<j<<"\n";
          client_locations[i].client_data[j].MAC = res->getString(2);
          client_locations[i].client_data[j].DISTANCE = pow ((100/ pow(10,((atof(res->getString(4).c_str()))/10)) ) * (pow ((0.404262661 / (4*3.14159265)),2)),(1/2.9));
          client_locations[i].client_data[j].X = atof(res->getString(5).c_str());
          client_locations[i].client_data[j].Y = atof(res->getString(6).c_str());
          client_locations[i].client_data[j].Z = atof(res->getString(7).c_str());
          j++;
      }
      else{
          if (mac_current == res->getString(2)){
              j++;
              cout<< mac_current <<"|1|"<<j<<"\n";
              client_locations[i].client_data[j].MAC = res->getString(2);
              client_locations[i].client_data[j].DISTANCE = pow ((100/ pow(10,((atof(res->getString(4).c_str()))/10)) ) * (pow ((0.404262661 / (4*3.14159265)),2)),(1/2.9));
              client_locations[i].client_data[j].X = atof(res->getString(5).c_str());
              client_locations[i].client_data[j].Y = atof(res->getString(6).c_str());
              client_locations[i].client_data[j].Z = atof(res->getString(7).c_str());
          }
          else {
              i++;
              j = 0;
              mac_current = res->getString(2);
              cout<< mac_current <<"|2|"<<j<<"\n";
              client_locations[i].client_data[j].MAC = res->getString(2);
              client_locations[i].client_data[j].DISTANCE = pow ((100/ pow(10,((atof(res->getString(4).c_str()))/10)) ) * (pow ((0.404262661 / (4*3.14159265)),2)),(1/2.9));
              client_locations[i].client_data[j].X = atof(res->getString(5).c_str());
              client_locations[i].client_data[j].Y = atof(res->getString(6).c_str());
              client_locations[i].client_data[j].Z = atof(res->getString(7).c_str());
          }
      }
  }
    
    for (i = 0; i <= 50; i++){
        if (client_locations[i].client_data[0].DISTANCE != 0 && client_locations[i].client_data[1].DISTANCE != 0 && client_locations[i].client_data[2].DISTANCE != 0)
        {
            Matrix3f A;
            Vector3f b;
            A << client_locations[i].client_data[0].X,client_locations[i].client_data[0].Y,client_locations[i].client_data[0].Z,  client_locations[i].client_data[1].X,client_locations[i].client_data[1].Y,client_locations[i].client_data[1].Z,  client_locations[i].client_data[2].X,client_locations[i].client_data[2].Y,client_locations[i].client_data[2].Z;
            b << client_locations[i].client_data[0].DISTANCE,client_locations[i].client_data[1].DISTANCE,client_locations[i].client_data[2].DISTANCE;
            Vector3f x = A.colPivHouseholderQr().solve(b);
            cout << "Here is the vector b:\n" << b << endl;
            cout << "The Position for: "<<client_locations[i].client_data[0].MAC<<"\n" << x << endl;
        }
    }
    
  delete res;
  delete stmt;
  delete con;

} catch (sql::SQLException &e) {
  cout << "# ERR: SQLException in " << __FILE__;
  cout << "(" << __FUNCTION__ << ") on line " << __LINE__ << endl;
  cout << "# ERR: " << e.what();
  cout << " (MySQL error code: " << e.getErrorCode();
  cout << ", SQLState: " << e.getSQLState() << " )" << endl;
}

cout << endl;

return EXIT_SUCCESS;
}