Jacek Kowalski
2023-07-24 8cde7c538ea1d0d8aa51bcb3f2482ae4f19713ad
lib/Database.php
@@ -10,13 +10,23 @@
      $this->pdo = new PDO('sqlite:'.$file);
      $this->pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
      
      $this->pdo->query('CREATE TABLE IF NOT EXISTS vehicles (
      $this->pdo->query('CREATE TABLE IF NOT EXISTS vehicles2 (
         id INT PRIMARY KEY,
         num INT UNIQUE,
         weight INT
         weight INT,
         line VARCHAR,
         date INT
      )');
      try {
         $this->beginTransaction();
         $this->pdo->query('INSERT INTO vehicles2 SELECT id, num, weight, \'?\', \''.time().'\' FROM vehicles');
         $this->commit();
         $this->pdo->query('DROP TABLE vehicles');
      } catch(PDOException $e) {
         $this->rollback();
      }
      
      $this->addStatement = $this->pdo->prepare('INSERT OR REPLACE INTO vehicles (id, num, weight) VALUES (:id, :num, :weight)');
      $this->addStatement = $this->pdo->prepare('INSERT OR REPLACE INTO vehicles2 (id, num, weight, line, date) VALUES (:id, :num, :weight, :line, :date)');
      
      $this->_cacheClear();
   }
@@ -35,7 +45,7 @@
   
   protected function _cachePopulate() {
      if($this->cacheId === NULL) {
         $st = $this->pdo->prepare('SELECT * FROM vehicles');
         $st = $this->pdo->prepare('SELECT * FROM vehicles2');
         $st->execute();
         $result = $st->fetchAll(PDO::FETCH_ASSOC);
         
@@ -58,9 +68,14 @@
      $this->cacheNum = NULL;
   }
   
   public function getAll() {
   public function getAllById() {
      $this->_cachePopulate();
      return $this->cacheId;
   }
   public function getAllByNum() {
      $this->_cachePopulate();
      return $this->cacheNum;
   }
   
   public function getById($id) {
@@ -74,25 +89,28 @@
   }
   
   public function clear() {
      $this->pdo->query('DELETE FROM vehicles');
      $this->pdo->query('DELETE FROM vehicles2');
      $this->_cacheClear();
   }
   
   public function add($id, $num, $weight) {
   public function add($id, $num, $weight, $line = NULL, $date = NULL) {
      $vehicle = [
         'id' => (string)$id,
         'num' => (string)$num,
         'weight' => (string)$weight
         'weight' => (string)$weight,
         'line' => (string)($line ?? ''),
         'date' => (string)($date ?? time()),
      ];
      $this->addStatement->execute($vehicle);
      $this->_cacheAdd($vehicle);
   }
   
   public function addMapping($mapping) {
   public function addMapping($vehiclesMapping, Mapper $mapper) {
      $this->beginTransaction();
      $weight = count($mapping);
      foreach($mapping as $id => $num) {
         $this->add($id, $num, $weight);
      $weight = count($vehiclesMapping);
      foreach($vehiclesMapping as $id => $num) {
         $trip = $mapper->getTTSSVehicleTrip($id);
         $this->add($id, $num, $weight, ($trip['line'] ?? '?') . ' ' . ($trip['direction'] ?? '?'));
      }
      $this->commit();
   }