|
<?php |
|
|
|
namespace PicoDb; |
|
|
|
use PDO; |
|
use PicoDb\Builder\InsertBuilder; |
|
use PicoDb\Builder\UpdateBuilder; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class LargeObject extends Table |
|
{ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function findOneColumnAsStream($column) |
|
{ |
|
$this->limit(1); |
|
$this->columns($column); |
|
|
|
$rq = $this->db->getStatementHandler() |
|
->withSql($this->buildSelectQuery()) |
|
->withPositionalParams($this->conditionBuilder->getValues()) |
|
->execute(); |
|
|
|
$rq->bindColumn($column, $fd, PDO::PARAM_LOB); |
|
$rq->fetch(PDO::FETCH_BOUND); |
|
|
|
return $fd; |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function findOneColumnAsString($column) |
|
{ |
|
$fd = $this->findOneColumnAsStream($column); |
|
|
|
if (is_string($fd)) { |
|
return $fd; |
|
} |
|
|
|
return stream_get_contents($fd); |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function insertFromStream($blobColumn, &$blobDescriptor, array $data = array()) |
|
{ |
|
$columns = array_merge(array($blobColumn), array_keys($data)); |
|
$this->db->startTransaction(); |
|
|
|
$result = $this->db->getStatementHandler() |
|
->withSql(InsertBuilder::getInstance($this->db, $this->conditionBuilder) |
|
->withTable($this->name) |
|
->withColumns($columns) |
|
->build() |
|
) |
|
->withNamedParams($data) |
|
->withLobParam($blobColumn, $blobDescriptor) |
|
->execute(); |
|
|
|
$this->db->closeTransaction(); |
|
|
|
return $result !== false; |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function insertFromFile($blobColumn, $filename, array $data = array()) |
|
{ |
|
$fp = fopen($filename, 'rb'); |
|
$result = $this->insertFromStream($blobColumn, $fp, $data); |
|
fclose($fp); |
|
return $result; |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function insertFromString($blobColumn, &$blobData, array $data = array()) |
|
{ |
|
return $this->insertFromStream($blobColumn, $blobData, $data); |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function updateFromStream($blobColumn, &$blobDescriptor, array $data = array()) |
|
{ |
|
$values = array_merge(array_values($data), $this->conditionBuilder->getValues()); |
|
$columns = array_merge(array($blobColumn), array_keys($data)); |
|
|
|
$this->db->startTransaction(); |
|
|
|
$result = $this->db->getStatementHandler() |
|
->withSql(UpdateBuilder::getInstance($this->db, $this->conditionBuilder) |
|
->withTable($this->name) |
|
->withColumns($columns) |
|
->build() |
|
) |
|
->withPositionalParams($values) |
|
->withLobParam($blobColumn, $blobDescriptor) |
|
->execute(); |
|
|
|
$this->db->closeTransaction(); |
|
|
|
return $result !== false; |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function updateFromFile($blobColumn, $filename, array $data = array()) |
|
{ |
|
$fp = fopen($filename, 'r'); |
|
$result = $this->updateFromStream($blobColumn, $fp, $data); |
|
fclose($fp); |
|
return $result; |
|
} |
|
} |
|
|