diff -r 000000000000 -r 7f95f8617b0b vendor/doctrine-dbal/lib/Doctrine/DBAL/Schema/AbstractAsset.php --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/doctrine-dbal/lib/Doctrine/DBAL/Schema/AbstractAsset.php Sat Sep 24 15:40:41 2011 +0200 @@ -0,0 +1,143 @@ +. + */ + +namespace Doctrine\DBAL\Schema; + +use Doctrine\DBAL\Platforms\AbstractPlatform; + +/** + * The abstract asset allows to reset the name of all assets without publishing this to the public userland. + * + * This encapsulation hack is necessary to keep a consistent state of the database schema. Say we have a list of tables + * array($tableName => Table($tableName)); if you want to rename the table, you have to make sure + * + * @license http://www.opensource.org/licenses/lgpl-license.php LGPL + * @link www.doctrine-project.org + * @since 2.0 + * @version $Revision$ + * @author Benjamin Eberlei + */ +abstract class AbstractAsset +{ + /** + * @var string + */ + protected $_name; + + protected $_quoted = false; + + /** + * Set name of this asset + * + * @param string $name + */ + protected function _setName($name) + { + if ($this->isQuoted($name)) { + $this->_quoted = true; + $name = $this->trimQuotes($name); + } + $this->_name = $name; + } + + /** + * Check if this identifier is quoted. + * + * @param string $identifier + * @return bool + */ + protected function isQuoted($identifier) + { + return (isset($identifier[0]) && ($identifier[0] == '`' || $identifier[0] == '"')); + } + + /** + * Trim quotes from the identifier. + * + * @param string $identifier + * @return string + */ + protected function trimQuotes($identifier) + { + return trim($identifier, '`"'); + } + + /** + * Return name of this schema asset. + * + * @return string + */ + public function getName() + { + return $this->_name; + } + + /** + * Get the quoted representation of this asset but only if it was defined with one. Otherwise + * return the plain unquoted value as inserted. + * + * @param AbstractPlatform $platform + * @return string + */ + public function getQuotedName(AbstractPlatform $platform) + { + return ($this->_quoted) ? $platform->quoteIdentifier($this->_name) : $this->_name; + } + + /** + * Generate an identifier from a list of column names obeying a certain string length. + * + * This is especially important for Oracle, since it does not allow identifiers larger than 30 chars, + * however building idents automatically for foreign keys, composite keys or such can easily create + * very long names. + * + * @param array $columnNames + * @param string $prefix + * @param int $maxSize + * @return string + */ + protected function _generateIdentifierName($columnNames, $prefix='', $maxSize=30) + { + /*$columnCount = count($columnNames); + $postfixLen = strlen($postfix); + $parts = array_map(function($columnName) use($columnCount, $postfixLen, $maxSize) { + return substr($columnName, -floor(($maxSize-$postfixLen)/$columnCount - 1)); + }, $columnNames); + $parts[] = $postfix; + + $identifier = trim(implode("_", $parts), '_'); + // using implicit schema support of DB2 and Postgres there might be dots in the auto-generated + // identifier names which can easily be replaced by underscores. + $identifier = str_replace(".", "_", $identifier); + + if (is_numeric(substr($identifier, 0, 1))) { + $identifier = "i" . substr($identifier, 0, strlen($identifier)-1); + } + + return $identifier;*/ + + + $hash = implode("", array_map(function($column) { + return dechex(crc32($column)); + }, $columnNames)); + return substr(strtoupper($prefix . "_" . $hash), 0, $maxSize); + } +} \ No newline at end of file