/libraries/dabl/database/propel/platform/MssqlPlatform.php
https://github.com/coleHafner/coleandheather_dabl · PHP · 185 lines · 144 code · 20 blank · 21 comment · 13 complexity · 98de5215140223e41b01dd0ac8b4e1a2 MD5 · raw file
- <?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 dirname(__FILE__) . '/DefaultPlatform.php';
- require_once dirname(__FILE__) . '/../model/Domain.php';
- /**
- * MS SQL PropelPlatformInterface implementation.
- *
- * @author Hans Lellelid <hans@xmpl.org> (Propel)
- * @author Martin Poeschl <mpoeschl@marmot.at> (Torque)
- * @version $Revision: 2194 $
- * @package propel.generator.platform
- */
- class MssqlPlatform extends DefaultPlatform
- {
- protected static $dropCount = 0;
- /**
- * Initializes db specific domain mapping.
- */
- protected function initialize()
- {
- parent::initialize();
- $this->setSchemaDomainMapping(new Domain(PropelTypes::INTEGER, "INT"));
- $this->setSchemaDomainMapping(new Domain(PropelTypes::BOOLEAN, "INT"));
- $this->setSchemaDomainMapping(new Domain(PropelTypes::DOUBLE, "FLOAT"));
- $this->setSchemaDomainMapping(new Domain(PropelTypes::LONGVARCHAR, "VARCHAR(MAX)"));
- $this->setSchemaDomainMapping(new Domain(PropelTypes::CLOB, "VARCHAR(MAX)"));
- $this->setSchemaDomainMapping(new Domain(PropelTypes::DATE, "DATETIME"));
- $this->setSchemaDomainMapping(new Domain(PropelTypes::BU_DATE, "DATETIME"));
- $this->setSchemaDomainMapping(new Domain(PropelTypes::TIME, "DATETIME"));
- $this->setSchemaDomainMapping(new Domain(PropelTypes::TIMESTAMP, "DATETIME"));
- $this->setSchemaDomainMapping(new Domain(PropelTypes::BU_TIMESTAMP, "DATETIME"));
- $this->setSchemaDomainMapping(new Domain(PropelTypes::BINARY, "BINARY(7132)"));
- $this->setSchemaDomainMapping(new Domain(PropelTypes::VARBINARY, "VARBINARY(MAX)"));
- $this->setSchemaDomainMapping(new Domain(PropelTypes::LONGVARBINARY, "VARBINARY(MAX)"));
- $this->setSchemaDomainMapping(new Domain(PropelTypes::BLOB, "VARBINARY(MAX)"));
- $this->setSchemaDomainMapping(new Domain(PropelTypes::OBJECT, "VARCHAR(MAX)"));
- $this->setSchemaDomainMapping(new Domain(PropelTypes::PHP_ARRAY, "VARCHAR(MAX)"));
- $this->setSchemaDomainMapping(new Domain(PropelTypes::ENUM, "TINYINT"));
- }
- public function getMaxColumnNameLength()
- {
- return 128;
- }
- public function getNullString($notNull)
- {
- return ($notNull ? "NOT NULL" : "NULL");
- }
- public function supportsNativeDeleteTrigger()
- {
- return true;
- }
- public function supportsInsertNullPk()
- {
- return false;
- }
- public function getDropTableDDL(Table $table)
- {
- $ret = '';
- foreach ($table->getForeignKeys() as $fk) {
- $ret .= "
- IF EXISTS (SELECT 1 FROM sysobjects WHERE type ='RI' AND name='" . $fk->getName() . "')
- ALTER TABLE " . $this->quoteIdentifier($table->getName()) . " DROP CONSTRAINT " . $this->quoteIdentifier($fk->getName()) . ";
- ";
- }
- self::$dropCount++;
- $ret .= "
- IF EXISTS (SELECT 1 FROM sysobjects WHERE type = 'U' AND name = '" . $table->getName() . "')
- BEGIN
- DECLARE @reftable_" . self::$dropCount . " nvarchar(60), @constraintname_" . self::$dropCount . " nvarchar(60)
- DECLARE refcursor CURSOR FOR
- select reftables.name tablename, cons.name constraintname
- from sysobjects tables,
- sysobjects reftables,
- sysobjects cons,
- sysreferences ref
- where tables.id = ref.rkeyid
- and cons.id = ref.constid
- and reftables.id = ref.fkeyid
- and tables.name = '" . $table->getName() . "'
- OPEN refcursor
- FETCH NEXT from refcursor into @reftable_" . self::$dropCount . ", @constraintname_" . self::$dropCount . "
- while @@FETCH_STATUS = 0
- BEGIN
- exec ('alter table '+@reftable_" . self::$dropCount . "+' drop constraint '+@constraintname_" . self::$dropCount . ")
- FETCH NEXT from refcursor into @reftable_" . self::$dropCount . ", @constraintname_" . self::$dropCount . "
- END
- CLOSE refcursor
- DEALLOCATE refcursor
- DROP TABLE " . $this->quoteIdentifier($table->getName()) . "
- END
- ";
- return $ret;
- }
- public function getPrimaryKeyDDL(Table $table)
- {
- if ($table->hasPrimaryKey()) {
- $pattern = 'CONSTRAINT %s PRIMARY KEY (%s)';
- return sprintf($pattern,
- $this->quoteIdentifier($this->getPrimaryKeyName($table)),
- $this->getColumnListDDL($table->getPrimaryKey())
- );
- }
- }
- public function getAddForeignKeyDDL(ForeignKey $fk)
- {
- if ($fk->isSkipSql()) {
- return;
- }
- $pattern = "
- BEGIN
- ALTER TABLE %s ADD %s
- END
- ;
- ";
- return sprintf($pattern,
- $this->quoteIdentifier($fk->getTable()->getName()),
- $this->getForeignKeyDDL($fk)
- );
- }
- public function getForeignKeyDDL(ForeignKey $fk)
- {
- if ($fk->isSkipSql()) {
- return;
- }
- $pattern = 'CONSTRAINT %s FOREIGN KEY (%s) REFERENCES %s (%s)';
- $script = sprintf($pattern,
- $this->quoteIdentifier($fk->getName()),
- $this->getColumnListDDL($fk->getLocalColumns()),
- $this->quoteIdentifier($fk->getForeignTableName()),
- $this->getColumnListDDL($fk->getForeignColumns())
- );
- if ($fk->hasOnUpdate() && $fk->getOnUpdate() != ForeignKey::SETNULL) {
- $script .= ' ON UPDATE ' . $fk->getOnUpdate();
- }
- if ($fk->hasOnDelete() && $fk->getOnDelete() != ForeignKey::SETNULL) {
- $script .= ' ON DELETE '. $fk->getOnDelete();
- }
- return $script;
- }
- /**
- * @see Platform::supportsSchemas()
- */
- public function supportsSchemas()
- {
- return true;
- }
- public function hasSize($sqlType)
- {
- return !("INT" == $sqlType || "TEXT" == $sqlType);
- }
- public function quoteIdentifier($text)
- {
- return $this->isIdentifierQuotingEnabled ? '[' . strtr($text, array('.' => '].[')) . ']' : $text;
- }
- public function getTimestampFormatter()
- {
- return 'Y-m-d H:i:s';
- }
- }