public function store($id, $data)
 {
     $ids = Util::validateIds($this->shardSequences(), array($id));
     if (!in_array($id, $ids)) {
         throw new Exception('invalid id', $id);
     }
     $this->store->set($id, $data);
     return TRUE;
 }
 /**
  * update an existing entry based on id. It does an insert or update just in case the record is missing in the db.
  */
 public function store($id, $data)
 {
     $ids = Util::validateIds($this->shardSequences(), array($id));
     if (!in_array($id, $ids)) {
         throw new Exception('invalid id', $id);
     }
     list($shard, $sequence) = Util::parseId($id);
     $table = $this->table($shard);
     $db = $this->db($table);
     if (DB\Transaction::inProgress()) {
         DB\Transaction::add($db);
     }
     $sql = "INSERT INTO {$table} (thread, sequence, data) VALUES (%i, %i, %s) ON DUPLICATE KEY UPDATE `data` = VALUES(`data`)";
     $db->execute($sql, $this->thread, $sequence, $this->serialize($data));
     return TRUE;
 }
 /**
  * update an existing entry based on id. It does an insert or update just in case the record is missing in the db.
  */
 public function store($id, $data)
 {
     $ids = Util::validateIds($this->shardSequences(), array($id));
     if (!in_array($id, $ids)) {
         throw new Exception('invalid id', $id);
     }
     list($shard, $sequence) = Util::parseId($id);
     $table = $this->table($shard);
     $db = $this->db($table);
     if (DB\Transaction::inProgress()) {
         DB\Transaction::add($db);
     }
     $sql = "INSERT OR IGNORE INTO {$table} (thread, sequence, data) VALUES (%i, %i, %s)";
     $data = $this->serialize($data);
     $rs = $db->execute($sql, $this->thread, $sequence, $data);
     if (!$rs->affected()) {
         $sql = "UPDATE {$table} SET `data` = %s WHERE `thread` = %i AND `sequence` = %i";
         $db->execute($sql, $data, $this->thread, $sequence);
     }
     return TRUE;
 }