本文整理汇总了PHP中Column::setAutoIncrement方法的典型用法代码示例。如果您正苦于以下问题:PHP Column::setAutoIncrement方法的具体用法?PHP Column::setAutoIncrement怎么用?PHP Column::setAutoIncrement使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Column
的用法示例。
在下文中一共展示了Column::setAutoIncrement方法的14个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。
示例1: setColumns
/**
* Creates the column from a given array
*
* @param array $columns
*/
public function setColumns($columns)
{
if (false == is_array($columns)) {
return;
}
foreach ($columns as $name => $options) {
$column = new Column();
$type = $this->getOptionByKey("type", $options);
$length = $this->getOptionByKey("length", $options);
$notNull = $this->getOptionByKey("notNull", $options);
$autoIncrement = $this->getOptionByKey("autoIncrement", $options);
$index = $this->getOptionByKey("index", $options);
$collate = $this->getOptionByKey("collate", $options);
$column->setName($name);
// Set all options if set
if (false != $type) {
$column->setType($type);
}
if (false != $length) {
$column->setLength($length);
}
if (false != $notNull) {
$column->setNotNull($notNull);
}
if (false != $autoIncrement) {
$column->setAutoIncrement($autoIncrement);
}
if (false != $index) {
$column->setIndex($index);
}
if (false != $collate) {
$column->setCollate($collate);
}
// Add column
$this->columns[] = $column;
}
}
示例2: addColumns
/**
* Adds Columns to the specified table.
*
* @param Table $table The Table model class to add columns to.
* @param int $oid The table OID
* @param string $version The database version.
*/
protected function addColumns(Table $table, $oid, $version)
{
// Get the columns, types, etc.
// Based on code from pgAdmin3 (http://www.pgadmin.org/)
$stmt = $this->dbh->prepare("SELECT\n\t\t\t\t\t\t\t\t att.attname,\n\t\t\t\t\t\t\t\t att.atttypmod,\n\t\t\t\t\t\t\t\t att.atthasdef,\n\t\t\t\t\t\t\t\t att.attnotnull,\n\t\t\t\t\t\t\t\t def.adsrc,\n\t\t\t\t\t\t\t\t CASE WHEN att.attndims > 0 THEN 1 ELSE 0 END AS isarray,\n\t\t\t\t\t\t\t\t CASE\n\t\t\t\t\t\t\t\t WHEN ty.typname = 'bpchar'\n\t\t\t\t\t\t\t\t THEN 'char'\n\t\t\t\t\t\t\t\t WHEN ty.typname = '_bpchar'\n\t\t\t\t\t\t\t\t THEN '_char'\n\t\t\t\t\t\t\t\t ELSE\n\t\t\t\t\t\t\t\t ty.typname\n\t\t\t\t\t\t\t\t END AS typname,\n\t\t\t\t\t\t\t\t ty.typtype\n\t\t\t\t\t\t\t\t FROM pg_attribute att\n\t\t\t\t\t\t\t\t JOIN pg_type ty ON ty.oid=att.atttypid\n\t\t\t\t\t\t\t\t LEFT OUTER JOIN pg_attrdef def ON adrelid=att.attrelid AND adnum=att.attnum\n\t\t\t\t\t\t\t\t WHERE att.attrelid = ? AND att.attnum > 0\n\t\t\t\t\t\t\t\t AND att.attisdropped IS FALSE\n\t\t\t\t\t\t\t\t ORDER BY att.attnum");
$stmt->bindValue(1, $oid, PDO::PARAM_INT);
$stmt->execute();
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
$size = null;
$precision = null;
$scale = null;
// Check to ensure that this column isn't an array data type
if ((int) $row['isarray'] === 1) {
throw new EngineException(sprintf("Array datatypes are not currently supported [%s.%s]", $this->name, $row['attname']));
}
// if (((int) $row['isarray']) === 1)
$name = $row['attname'];
// If they type is a domain, Process it
if (strtolower($row['typtype']) == 'd') {
$arrDomain = $this->processDomain($row['typname']);
$type = $arrDomain['type'];
$size = $arrDomain['length'];
$precision = $size;
$scale = $arrDomain['scale'];
$boolHasDefault = strlen(trim($row['atthasdef'])) > 0 ? $row['atthasdef'] : $arrDomain['hasdefault'];
$default = strlen(trim($row['adsrc'])) > 0 ? $row['adsrc'] : $arrDomain['default'];
$is_nullable = strlen(trim($row['attnotnull'])) > 0 ? $row['attnotnull'] : $arrDomain['notnull'];
$is_nullable = $is_nullable == 't' ? false : true;
} else {
$type = $row['typname'];
$arrLengthPrecision = $this->processLengthScale($row['atttypmod'], $type);
$size = $arrLengthPrecision['length'];
$precision = $size;
$scale = $arrLengthPrecision['scale'];
$boolHasDefault = $row['atthasdef'];
$default = $row['adsrc'];
$is_nullable = $row['attnotnull'] == 't' ? false : true;
}
// else (strtolower ($row['typtype']) == 'd')
$autoincrement = null;
// if column has a default
if ($boolHasDefault == 't' && strlen(trim($default)) > 0) {
if (!preg_match('/^nextval\\(/', $default)) {
$strDefault = preg_replace('/::[\\W\\D]*/', '', $default);
$default = str_replace("'", '', $strDefault);
} else {
$autoincrement = true;
$default = null;
}
} else {
$default = null;
}
$propelType = $this->getMappedPropelType($type);
if (!$propelType) {
$propelType = Column::DEFAULT_TYPE;
$this->warn("Column [" . $table->getName() . "." . $name . "] has a column type (" . $type . ") that Propel does not support.");
}
$column = new Column($name);
$column->setTable($table);
$column->setDomainForType($propelType);
// We may want to provide an option to include this:
// $column->getDomain()->replaceSqlType($type);
$column->getDomain()->replaceSize($size);
$column->getDomain()->replaceScale($scale);
if ($default !== null) {
if (in_array($default, array('now()'))) {
$type = ColumnDefaultValue::TYPE_EXPR;
} else {
$type = ColumnDefaultValue::TYPE_VALUE;
}
$column->getDomain()->setDefaultValue(new ColumnDefaultValue($default, $type));
}
$column->setAutoIncrement($autoincrement);
$column->setNotNull(!$is_nullable);
$table->addColumn($column);
}
}
示例3: addColumns
/**
* Adds Columns to the specified table.
*
* @param Table $table The Table model class to add columns to.
*/
protected function addColumns(Table $table)
{
$stmt = $this->dbh->query("SHOW COLUMNS FROM `" . $table->getName() . "`");
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
$name = $row['Field'];
$is_nullable = $row['Null'] == 'YES';
$autoincrement = strpos($row['Extra'], 'auto_increment') !== false;
$size = null;
$precision = null;
$scale = null;
if (preg_match('/^(\\w+)[\\(]?([\\d,]*)[\\)]?( |$)/', $row['Type'], $matches)) {
// colname[1] size/precision[2]
$nativeType = $matches[1];
if ($matches[2]) {
if (($cpos = strpos($matches[2], ',')) !== false) {
$size = (int) substr($matches[2], 0, $cpos);
$precision = $size;
$scale = (int) substr($matches[2], $cpos + 1);
} else {
$size = (int) $matches[2];
}
}
} elseif (preg_match('/^(\\w+)\\(/', $row['Type'], $matches)) {
$nativeType = $matches[1];
} else {
$nativeType = $row['Type'];
}
//BLOBs can't have any default values in MySQL
$default = preg_match('~blob|text~', $nativeType) ? null : $row['Default'];
$propelType = $this->getMappedPropelType($nativeType);
if (!$propelType) {
$propelType = Column::DEFAULT_TYPE;
$this->warn("Column [" . $table->getName() . "." . $name . "] has a column type (" . $nativeType . ") that Propel does not support.");
}
$column = new Column($name);
$column->setTable($table);
$column->setDomainForType($propelType);
// We may want to provide an option to include this:
// $column->getDomain()->replaceSqlType($type);
$column->getDomain()->replaceSize($size);
$column->getDomain()->replaceScale($scale);
if ($default !== null) {
$column->getDomain()->setDefaultValue(new ColumnDefaultValue($default, ColumnDefaultValue::TYPE_VALUE));
}
$column->setAutoIncrement($autoincrement);
$column->setNotNull(!$is_nullable);
if ($this->addVendorInfo) {
$vi = $this->getNewVendorInfoObject($row);
$column->addVendorInfo($vi);
}
$table->addColumn($column);
}
}
示例4: testColumnIsFKAndPK
public function testColumnIsFKAndPK()
{
$column = new Column();
$column->setName('id');
$column->setPrimaryKey(true);
$column->setAutoIncrement(true);
$column->setType('integer');
$table = new Table();
$table->setCommonName('table_one');
$table->addColumn($column);
$db = new Database();
$db->setName('MultipleTables');
$db->addTable($table);
$column = new Column();
$column->setName('id');
$column->setPrimaryKey(true);
$column->setAutoIncrement(true);
$column->setType('integer');
$c2 = new Column();
$c2->setPrimaryKey(true);
$c2->setName('foreign_id');
$c2->setType('integer');
$table = new Table();
$table->setCommonName('table_two');
$table->addColumn($column);
$table->addColumn($c2);
$fk = new ForeignKey();
$fk->setName('FK_1');
$fk->addReference('foreign_id', 'id');
$fk->setForeignTableCommonName('table_one');
$table->addForeignKey($fk);
$db->addTable($table);
$expected = implode("\n", array('digraph G {', 'nodetable_one [label="{<table>table_one|<cols>id (integer) [PK]\\l}", shape=record];', 'nodetable_two [label="{<table>table_two|<cols>id (integer) [PK]\\lforeign_id (integer) [FK] [PK]\\l}", shape=record];', 'nodetable_two:cols -> nodetable_one:table [label="foreign_id=id"];', '}', ''));
$this->assertEquals($expected, PropelDotGenerator::create($db));
}
示例5: addColumns
/**
* Adds Columns to the specified table.
*
* @param Table $table The Table model class to add columns to.
*/
protected function addColumns(Table $table)
{
$stmt = $this->dbh->query("SELECT COLUMN_NAME, DATA_TYPE, NULLABLE, DATA_LENGTH, DATA_PRECISION, DATA_SCALE, DATA_DEFAULT FROM USER_TAB_COLS WHERE TABLE_NAME = '" . $table->getName() . "'");
/* @var stmt PDOStatement */
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
if (strpos($row['COLUMN_NAME'], '$') !== false) {
// this is an Oracle internal column - prune
continue;
}
$size = $row["DATA_PRECISION"] ? $row["DATA_PRECISION"] : $row["DATA_LENGTH"];
$scale = $row["DATA_SCALE"];
$default = $row['DATA_DEFAULT'];
$type = $row["DATA_TYPE"];
$isNullable = $row['NULLABLE'] == 'Y';
if ($type == "NUMBER" && $row["DATA_SCALE"] > 0) {
$type = "DECIMAL";
}
if ($type == "NUMBER" && $size > 9) {
$type = "BIGINT";
}
if ($type == "FLOAT" && $row["DATA_PRECISION"] == 126) {
$type = "DOUBLE";
}
if (strpos($type, 'TIMESTAMP(') !== false) {
$type = substr($type, 0, strpos($type, '('));
$default = "0000-00-00 00:00:00";
$size = null;
$scale = null;
}
if ($type == "DATE") {
$default = "0000-00-00";
$size = null;
$scale = null;
}
$propelType = $this->getMappedPropelType($type);
if (!$propelType) {
$propelType = Column::DEFAULT_TYPE;
$this->warn("Column [" . $table->getName() . "." . $row['COLUMN_NAME'] . "] has a column type (" . $row["DATA_TYPE"] . ") that Propel does not support.");
}
$column = new Column($row['COLUMN_NAME']);
$column->setPhpName();
// Prevent problems with strange col names
$column->setTable($table);
$column->setDomainForType($propelType);
$column->getDomain()->replaceSize($size);
$column->getDomain()->replaceScale($scale);
if ($default !== null) {
$column->getDomain()->setDefaultValue(new ColumnDefaultValue($default, ColumnDefaultValue::TYPE_VALUE));
}
$column->setAutoIncrement(false);
// This flag sets in self::parse()
$column->setNotNull(!$isNullable);
$table->addColumn($column);
}
}
示例6: addColumns
/**
* Adds Columns to the specified table.
*
* @param Table $table The Table model class to add columns to.
*/
protected function addColumns(Table $table)
{
$stmt = $this->dbh->query("sp_columns '" . $table->getName() . "'");
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
$name = $row['COLUMN_NAME'];
$type = $row['TYPE_NAME'];
$size = $row['LENGTH'];
$is_nullable = $row['NULLABLE'];
$default = $row['COLUMN_DEF'];
$precision = $row['PRECISION'];
$scale = $row['SCALE'];
$autoincrement = false;
if (strtolower($type) == "int identity") {
$autoincrement = true;
}
$propelType = $this->getMappedPropelType($type);
if (!$propelType) {
$propelType = Column::DEFAULT_TYPE;
$this->warn("Column [" . $table->getName() . "." . $name . "] has a column type (" . $type . ") that Propel does not support.");
}
$column = new Column($name);
$column->setTable($table);
$column->setDomainForType($propelType);
// We may want to provide an option to include this:
// $column->getDomain()->replaceSqlType($type);
$column->getDomain()->replaceSize($size);
$column->getDomain()->replaceScale($scale);
if ($default !== null) {
$column->getDomain()->setDefaultValue(new ColumnDefaultValue($default, ColumnDefaultValue::TYPE_VALUE));
}
$column->setAutoIncrement($autoincrement);
$column->setNotNull(!$is_nullable);
$table->addColumn($column);
}
}
示例7: getColumnFromRow
/**
* Factory method creating a Column object
* based on a row from the 'show columns from ' MySQL query result.
*
* @param array $row An associative array with the following keys:
* Field, Type, Null, Key, Default, Extra.
*
* @return Column
*/
public function getColumnFromRow($row, Table $table)
{
$name = $row['Field'];
$is_nullable = $row['Null'] == 'YES';
$autoincrement = strpos($row['Extra'], 'auto_increment') !== false;
$size = null;
$precision = null;
$scale = null;
$sqlType = false;
$desc = $row['Comment'];
$regexp = '/^
(\\w+) # column type [1]
[\\(] # (
?([\\d,]*) # size or size, precision [2]
[\\)] # )
?\\s* # whitespace
(\\w*) # extra description (UNSIGNED, CHARACTER SET, ...) [3]
$/x';
if (preg_match($regexp, $row['Type'], $matches)) {
$nativeType = $matches[1];
if ($matches[2]) {
if (($cpos = strpos($matches[2], ',')) !== false) {
$size = (int) substr($matches[2], 0, $cpos);
$precision = $size;
$scale = (int) substr($matches[2], $cpos + 1);
} else {
$size = (int) $matches[2];
}
}
if ($matches[3]) {
$sqlType = $row['Type'];
}
foreach (self::$defaultTypeSizes as $type => $defaultSize) {
if ($nativeType == $type && $size == $defaultSize && $scale === null) {
$size = null;
continue;
}
}
} elseif (preg_match('/^(\\w+)\\(/', $row['Type'], $matches)) {
$nativeType = $matches[1];
if ($nativeType == 'enum') {
$sqlType = $row['Type'];
}
} else {
$nativeType = $row['Type'];
}
//BLOBs can't have any default values in MySQL
$default = preg_match('~blob|text~', $nativeType) ? null : $row['Default'];
$propelType = $this->getMappedPropelType($nativeType);
if (!$propelType) {
$propelType = Column::DEFAULT_TYPE;
$sqlType = $row['Type'];
$this->warn("Column [" . $table->getName() . "." . $name . "] has a column type (" . $nativeType . ") that Propel does not support.");
}
// Special case for TINYINT(1) which is a BOOLEAN
if (PropelTypes::TINYINT === $propelType && 1 === $size) {
$propelType = PropelTypes::BOOLEAN;
}
$column = new Column($name);
$column->setTable($table);
$column->setDomainForType($propelType);
if ($sqlType) {
$column->getDomain()->replaceSqlType($sqlType);
}
$column->getDomain()->replaceSize($size);
$column->getDomain()->replaceScale($scale);
if ($default !== null) {
if ($propelType == PropelTypes::BOOLEAN) {
if ($default == '1') {
$default = 'true';
}
if ($default == '0') {
$default = 'false';
}
}
if (in_array($default, array('CURRENT_TIMESTAMP'))) {
$type = ColumnDefaultValue::TYPE_EXPR;
} else {
$type = ColumnDefaultValue::TYPE_VALUE;
}
$column->getDomain()->setDefaultValue(new ColumnDefaultValue($default, $type));
}
$column->setAutoIncrement($autoincrement);
$column->setNotNull(!$is_nullable);
if ($this->addVendorInfo) {
$vi = $this->getNewVendorInfoObject($row);
$column->addVendorInfo($vi);
}
if ($desc) {
if (!$this->isUtf8($desc)) {
$desc = utf8_encode($desc);
//.........这里部分代码省略.........
示例8: testGetColumnDDLAutoIncrement
public function testGetColumnDDLAutoIncrement()
{
$database = new Database();
$database->setPlatform($this->getPlatform());
$table = new Table('foo_table');
$table->setIdMethod(IDMethod::NATIVE);
$database->addTable($table);
$column = new Column('foo');
$column->getDomain()->copy($this->getPlatform()->getDomainForType(PropelTypes::BIGINT));
$column->setAutoIncrement(true);
$table->addColumn($column);
$expected = '"foo" bigserial';
$this->assertEquals($expected, $this->getPlatform()->getColumnDDL($column));
}
示例9: addColumns
/**
* Adds Columns to the specified table.
*
* @param Table $table The Table model class to add columns to.
* @param int $oid The table OID
* @param string $version The database version.
*/
protected function addColumns(Table $table)
{
$stmt = $this->dbh->query("PRAGMA table_info('" . $table->getName() . "')");
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
$name = $row['name'];
$fulltype = $row['type'];
$size = null;
$precision = null;
$scale = null;
if (preg_match('/^([^\\(]+)\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*\\)$/', $fulltype, $matches)) {
$type = $matches[1];
$precision = $matches[2];
$scale = $matches[3];
// aka precision
} elseif (preg_match('/^([^\\(]+)\\(\\s*(\\d+)\\s*\\)$/', $fulltype, $matches)) {
$type = $matches[1];
$size = $matches[2];
} else {
$type = $fulltype;
}
// If column is primary key and of type INTEGER, it is auto increment
// See: http://sqlite.org/faq.html#q1
$autoincrement = $row['pk'] == 1 && strtolower($type) == 'integer';
$not_null = $row['notnull'];
$default = $row['dflt_value'];
$propelType = $this->getMappedPropelType($type);
if (!$propelType) {
$propelType = Column::DEFAULT_TYPE;
$this->warn("Column [" . $table->getName() . "." . $name . "] has a column type (" . $type . ") that Propel does not support.");
}
$column = new Column($name);
$column->setTable($table);
$column->setDomainForType($propelType);
// We may want to provide an option to include this:
// $column->getDomain()->replaceSqlType($type);
$column->getDomain()->replaceSize($size);
$column->getDomain()->replaceScale($scale);
if ($default !== null) {
$column->getDomain()->setDefaultValue(new ColumnDefaultValue($default, ColumnDefaultValue::TYPE_VALUE));
}
$column->setAutoIncrement($autoincrement);
$column->setNotNull($not_null);
if ($row['pk'] == 1 || strtolower($type) == 'integer') {
$column->setPrimaryKey(true);
}
$table->addColumn($column);
}
}
示例10: testCompareAutoincrement
public function testCompareAutoincrement()
{
$c1 = new Column();
$c1->setAutoIncrement(true);
$c2 = new Column();
$c2->setAutoIncrement(false);
$expectedChangedProperties = array('autoIncrement' => array(true, false));
$this->assertEquals($expectedChangedProperties, PropelColumnComparator::compareColumns($c1, $c2));
}
示例11: addColumns
/**
* Adds Columns to the specified table.
*
* @param Table $table The Table model class to add columns to.
*/
protected function addColumns(Table $table)
{
$dataFetcher = $this->dbh->query("sp_columns '" . $table->getName() . "'");
foreach ($dataFetcher as $row) {
$name = $this->cleanDelimitedIdentifiers($row['COLUMN_NAME']);
$type = $row['TYPE_NAME'];
$size = $row['LENGTH'];
$isNullable = $row['NULLABLE'];
$default = $row['COLUMN_DEF'];
$scale = $row['SCALE'];
$autoincrement = false;
if (strtolower($type) == 'int identity') {
$autoincrement = true;
}
$propelType = $this->getMappedPropelType($type);
if (!$propelType) {
$propelType = Column::DEFAULT_TYPE;
$this->warn(sprintf('Column [%s.%s] has a column type (%s) that Propel does not support.', $table->getName(), $name, $type));
}
$column = new Column($name);
$column->setTable($table);
$column->setDomainForType($propelType);
// We may want to provide an option to include this:
// $column->getDomain()->replaceSqlType($type);
$column->getDomain()->replaceSize($size);
$column->getDomain()->replaceScale($scale);
if ($default !== null) {
$column->getDomain()->setDefaultValue(new ColumnDefaultValue($default, ColumnDefaultValue::TYPE_VALUE));
}
$column->setAutoIncrement($autoincrement);
$column->setNotNull(!$isNullable);
$table->addColumn($column);
}
}
示例12: addColumns
/**
* Adds Columns to the specified table.
*
* @param Table $table The Table model class to add columns to.
*/
protected function addColumns(Table $table)
{
return;
$stmt = $this->dbh->query("SHOW COLUMNS FROM `" . $table->getName() . "`");
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
$row['Comment'] = $this->dbh->query("\n\t\t\t\tSELECT\n\t\t\t\tCOLUMN_COMMENT\n\t\t\t\tFROM information_schema.COLUMNS\n\t\t\t\tWHERE TABLE_NAME='{$table->getName()}'\n\t\t\t\t\tAND TABLE_SCHEMA='{$table->getDatabase()->getName()}'\n\t\t\t\t\tAND COLUMN_NAME='{$row['Field']}' LIMIT 1")->fetchColumn();
$name = $row['Field'];
$is_nullable = $row['Null'] == 'YES';
$autoincrement = strpos($row['Extra'], 'auto_increment') !== false;
$size = null;
$precision = null;
$scale = null;
if (preg_match('/^(\\w+)[\\(]?([\\d,]*)[\\)]?( |$)/', $row['Type'], $matches)) {
// colname[1] size/precision[2]
$nativeType = $matches[1];
if ($matches[2]) {
if (($cpos = strpos($matches[2], ',')) !== false) {
$size = (int) substr($matches[2], 0, $cpos);
$precision = $size;
$scale = (int) substr($matches[2], $cpos + 1);
} else {
$size = (int) $matches[2];
}
}
foreach (self::$defaultTypeSizes as $type => $defaultSize) {
if ($nativeType == $type && $size == $defaultSize) {
$size = null;
continue;
}
}
} elseif (preg_match('/^(\\w+)\\(/', $row['Type'], $matches)) {
$nativeType = $matches[1];
} else {
$nativeType = $row['Type'];
}
//BLOBs can't have any default values in MySQL
$default = preg_match('~blob|text~', $nativeType) ? null : $row['Default'];
$propelType = $this->getMappedPropelType($nativeType);
if (in_array($propelType, array(PropelTypes::INTEGER, PropelTypes::BIGINT)) && strpos($row['Comment'], 'timestamp') === 0) {
$propelType = PropelTypes::INTEGER_TIMESTAMP;
} elseif (!$propelType) {
$propelType = Column::DEFAULT_TYPE;
$this->warn("Column [" . $table->getName() . "." . $name . "] has a column type (" . $nativeType . ") that Propel does not support.");
}
$column = new Column($name);
$column->setTable($table);
$column->setDomainForType($propelType);
// We may want to provide an option to include this:
// $column->getDomain()->replaceSqlType($type);
$column->getDomain()->replaceSize($size);
$column->getDomain()->replaceScale($scale);
if ($default !== null) {
if ($propelType == PropelTypes::BOOLEAN) {
if ($default == '1') {
$default = 'true';
}
if ($default == '0') {
$default = 'false';
}
}
if (in_array($default, array('CURRENT_TIMESTAMP'))) {
$type = ColumnDefaultValue::TYPE_EXPR;
} else {
$type = ColumnDefaultValue::TYPE_VALUE;
}
$column->getDomain()->setDefaultValue(new ColumnDefaultValue($default, $type));
}
$column->setAutoIncrement($autoincrement);
$column->setNotNull(!$is_nullable);
if ($this->addVendorInfo) {
$vi = $this->getNewVendorInfoObject($row);
$column->addVendorInfo($vi);
}
$table->addColumn($column);
}
}
示例13: testCreateTable
/**
* Test to create a Table
*/
public function testCreateTable()
{
$col1 = new Column();
$col1->COLUMN_NAME = 'test1';
$col1->setDataType('int');
$col1->setAutoIncrement(true);
$col1->setIsNullable(false);
$col1->size = 20;
$col1->createPrimaryKey = true;
$col2 = new Column();
$col2->COLUMN_NAME = 'test2';
$col2->setDataType('varchar');
$col2->setCollation('utf8_general_ci');
$col2->size = 250;
$columns = array($col1, $col2);
$table = new Table();
// Set some properties and save
$table->TABLE_NAME = 'innodb2';
$table->TABLE_SCHEMA = 'tabletest';
$table->optionChecksum = 1;
$table->optionDelayKeyWrite = 1;
$table->optionPackKeys = 0;
$table->ENGINE = 'MyISAM';
$table->TABLE_COLLATION = 'utf8_general_ci';
$table->comment = 'mein testkommentar';
$table->columns = $columns;
$table->insert();
$this->assertTrue(is_string($table->showCreateTable));
$pk = array('TABLE_SCHEMA' => 'tabletest', 'TABLE_NAME' => 'innodb2', 'COLUMN_NAME' => 'test1');
// Load column definition
$col = Column::model()->findByPk($pk);
$this->assertEquals('test1', $col->COLUMN_NAME);
$this->assertEquals('int', $col->getDataType());
$this->assertTrue($col->getAutoIncrement());
$this->assertFalse($col->getIsNullable());
$this->assertTrue($col->getIsPartOfPrimaryKey());
$this->assertEquals(20, $col->size);
$pk = array('TABLE_SCHEMA' => 'tabletest', 'TABLE_NAME' => 'innodb2', 'COLUMN_NAME' => 'test2');
// Load column definition
$col = Column::model()->findByPk($pk);
$this->assertEquals('test2', $col->COLUMN_NAME);
$this->assertEquals('varchar', $col->getDataType());
$this->assertFalse($col->getAutoIncrement());
$this->assertFalse($col->getIsNullable());
$this->assertFalse($col->getIsPartOfPrimaryKey());
$this->assertEquals('utf8_general_ci', $col->getCollation());
$this->assertEquals(250, $col->size);
}
示例14: addColumns
/**
* Adds Columns to the specified table.
*
* @param Table $table The Table model class to add columns to.
* @param int $oid The table OID
* @param string $version The database version.
*/
protected function addColumns(Table $table)
{
$stmt = $this->dbh->query("SELECT COLUMN_NAME, DATA_TYPE, NULLABLE, DATA_LENGTH, DATA_SCALE, DATA_DEFAULT FROM USER_TAB_COLS WHERE TABLE_NAME = '" . $table->getName() . "'");
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
$name = $row['COLUMN_NAME'];
$type = $row["DATA_TYPE"];
$nativeType = $type;
$isNullable = $row['NULLABLE'] == 'Y';
$size = $row["DATA_LENGTH"];
//$precision = $row["DATA_PRECISION"]; // NOT USED
$scale = $row["DATA_SCALE"];
$autoIncrement = false;
// YET TO BE PARSED
$default = $row['DATA_DEFAULT'];
$propelType = $this->getMappedPropelType($nativeType);
if (!$propelType) {
$propelType = Column::DEFAULT_TYPE;
$this->warn("Column [" . $table->getName() . "." . $name . "] has a column type (" . $nativeType . ") that Propel does not support.");
}
$column = new Column($name);
$column->setTable($table);
$column->setDomainForType($propelType);
// We may want to provide an option to include this:
// $column->getDomain()->replaceSqlType($type);
$column->getDomain()->replaceSize($size);
$column->getDomain()->replaceScale($scale);
if ($default !== null) {
$column->getDomain()->setDefaultValue(new ColumnDefaultValue($default, ColumnDefaultValue::TYPE_VALUE));
}
$column->setAutoIncrement($autoIncrement);
$column->setNotNull(!$isNullable);
$table->addColumn($column);
}
$this->addPrimaryKey($table);
$this->addForeignKeys($table);
}