sintonia/library/propel/generator/lib/builder/sql/pgsql/PgsqlDataSQLBuilder.php

103 lines
2.3 KiB
PHP

<?php
/**
* This file is part of the Propel package.
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*
* @license MIT License
*/
require_once 'builder/sql/DataSQLBuilder.php';
/**
* PostgreSQL class for building data dump SQL.
*
* @author Hans Lellelid <hans@xmpl.org>
* @package propel.generator.builder.sql.pgsql
*/
class PgsqlDataSQLBuilder extends DataSQLBuilder
{
/**
* The largets serial value encountered this far.
*
* @var int
*/
private $maxSeqVal;
/**
* Construct a new PgsqlDataSQLBuilder object.
*
* @param Table $table
*/
public function __construct(Table $table)
{
parent::__construct($table);
}
/**
* The main method in this class, returns the SQL for INSERTing data into a row.
* @param DataRow $row The row to process.
* @return string
*/
public function buildRowSql(DataRow $row)
{
$sql = parent::buildRowSql($row);
$table = $this->getTable();
if ($table->hasAutoIncrementPrimaryKey() && $table->getIdMethod() == IDMethod::NATIVE) {
foreach ($row->getColumnValues() as $colValue) {
if ($colValue->getColumn()->isAutoIncrement()) {
if ($colValue->getValue() > $this->maxSeqVal) {
$this->maxSeqVal = $colValue->getValue();
}
}
}
}
return $sql;
}
public function getTableEndSql()
{
$table = $this->getTable();
$sql = "";
if ($table->hasAutoIncrementPrimaryKey() && $table->getIdMethod() == IDMethod::NATIVE) {
$seqname = $this->getDDLBuilder()->getSequenceName();
$sql .= "SELECT pg_catalog.setval('$seqname', ".((int)$this->maxSeqVal).");
";
}
return $sql;
}
/**
* Get SQL value to insert for Postgres BOOLEAN column.
* @param boolean $value
* @return string The representation of boolean for Postgres ('t' or 'f').
*/
protected function getBooleanSql($value)
{
if ($value === 'f' || $value === 'false' || $value === "0") {
$value = false;
}
return ($value ? "'t'" : "'f'");
}
/**
*
* @param mixed $blob Blob object or string containing data.
* @return string
*/
protected function getBlobSql($blob)
{
// they took magic __toString() out of PHP5.0.0; this sucks
if (is_object($blob)) {
$blob = $blob->__toString();
}
return "'" . pg_escape_bytea($blob) . "'";
}
}