/** * Returns the type-casted and stringified default value for the specified * Column. This only works for scalar default values currently. * * @param Column $column * @throws EngineException * @return string */ protected function getDefaultValueString(Column $column) { $defaultValue = var_export(null, true); $val = $column->getPhpDefaultValue(); if (null === $val) { return $defaultValue; } if ($column->isTemporalType()) { $fmt = $this->getTemporalFormatter($column); try { if (!($this->getPlatform() instanceof MysqlPlatform && ($val === '0000-00-00 00:00:00' || $val === '0000-00-00'))) { // while technically this is not a default value of NULL, // this seems to be closest in meaning. $defDt = new \DateTime($val); $defaultValue = var_export($defDt->format($fmt), true); } } catch (\Exception $exception) { // prevent endless loop when timezone is undefined date_default_timezone_set('America/Los_Angeles'); throw new EngineException(sprintf('Unable to parse default temporal value "%s" for column "%s"', $column->getDefaultValueString(), $column->getFullyQualifiedName()), 0, $exception); } } elseif ($column->isEnumType()) { $valueSet = $column->getValueSet(); if (!in_array($val, $valueSet)) { throw new EngineException(sprintf('Default Value "%s" is not among the enumerated values', $val)); } $defaultValue = array_search($val, $valueSet); } elseif ($column->isSetType()) { $defaultValue = SetColumnConverter::convertToInt($val, $column->getValueSet()); } elseif ($column->isPhpPrimitiveType()) { settype($val, $column->getPhpType()); $defaultValue = var_export($val, true); } elseif ($column->isPhpObjectType()) { $defaultValue = 'new ' . $column->getPhpType() . '(' . var_export($val, true) . ')'; } elseif ($column->isPhpArrayType()) { $defaultValue = var_export($val, true); } else { throw new EngineException("Cannot get default value string for " . $column->getFullyQualifiedName()); } return $defaultValue; }
public function testGetPhpDefaultValue() { $domain = $this->getDomainMock(); $domain->expects($this->once())->method('getPhpDefaultValue')->will($this->returnValue(true)); $column = new Column(); $column->setDomain($domain); $this->assertTrue($column->getPhpDefaultValue()); }