Пример #1
0
 protected function getComputedTypeRepresentation($name, DBType $type)
 {
     if ($type->canHaveSize()) {
         return $this->computeSized($name, $type->isNullable(), $type->getSize());
     } else {
         if ($type->canHavePrecision()) {
             return $this->computeDecimal($name, $type->isNullable(), $type->getPrecision(), $type->getScale());
         } else {
             return $this->compute($name, $type->isNullable());
         }
     }
 }
Пример #2
0
 function getTypeRepresentation(DBType $dbType)
 {
     switch ($dbType->getValue()) {
         case DBType::BOOLEAN:
             return $this->compute('TINYINT(1) UNSIGNED', $dbType->isNullable());
         case DBType::BINARY:
             $size = $dbType->getSize();
             if ($size < 65535) {
                 $customType = 'BLOB';
             } else {
                 if ($size < 16777215) {
                     $customType = 'MEDIUMBLOB';
                 } else {
                     $customType = 'LONGTBLOB';
                 }
             }
             return $this->compute($customType, $dbType->isNullable());
         case DBType::VARCHAR:
             $size = $dbType->getSize();
             if (!$size) {
                 $dbType->setSize(255);
             } else {
                 if ($size > 255) {
                     if ($size < 65535) {
                         $customType = 'TEXT';
                     } else {
                         if ($size < 16777215) {
                             $customType = 'MEDIUMTEXT';
                         } else {
                             $customType = 'LONGTEXT';
                         }
                     }
                     return $this->compute($customType, $dbType->isNullable());
                 }
             }
     }
     $type = parent::getTypeRepresentation($dbType);
     if ($dbType->isGenerated()) {
         $type .= ' AUTO_INCREMENT';
     }
     return $type;
 }
Пример #3
0
 function getTypeRepresentation(DBType $dbType)
 {
     $type = $dbType->getId();
     if ($size = $dbType->getSize()) {
         $type .= '(' . $size . ')';
     }
     if ($precision = $dbType->getPrecision()) {
         $type .= '(' . $precision;
         if ($scale = $dbType->getScale()) {
             $type .= ',' . $scale;
         }
         $type .= ')';
     }
     if (!$dbType->isNullable()) {
         $type .= ' NOT NULL';
     }
     if ($dbType->isGenerated()) {
         $type .= ' GENERATED';
     }
     return $type;
 }
Пример #4
0
 static function getOrmPropertyType(AssociationMultiplicity $multiplicity)
 {
     $type = new DBType(DBType::VARCHAR, $multiplicity->isNullable(), null, null, null, false);
     return $type->getOrmPropertyType();
 }
 protected function getCtorArgumentsPhpCode()
 {
     return array('\'' . $this->boxableType . '\'', $this->dbType->toPhpCodeCall());
 }
 /**
  * Resolution order:
  *  - IDaoRelated (check a class existance within the global scope and withing the domain scope) --> AssociationPropertyType
  *  - IOrmRelated --> CompositionPropertyType
  *  - IOrmPropertyAssignable --> IOrmPropertyAssignable::getOrmProperty()
  *  - IBoxable --> BoxablePropertyType
  *  - DBType
  *  - any type with public ctor
  * @return OrmPropertyType
  */
 private function getPropertyType(SimpleXMLElement $element, AssociationMultiplicity $multiplicity)
 {
     $name = (string) $element['type'];
     $parameters = $this->getTypeParameters($element);
     if ($class = $this->importEntity($name)) {
         // force recursion
         if ($class->hasDao() && $class->getIdentifier()) {
             return new AssociationPropertyType($class, $multiplicity, AssociationBreakAction::cascade());
         } else {
             return new CompositePropertyType($class);
         }
     } else {
         if (DBType::hasMember($name)) {
             $parameters['id'] = $name;
             if (!isset($parameters['nullable'])) {
                 $parameters['nullable'] = $multiplicity->isNullable() ? 'true' : 'false';
             }
             $dbType = $this->makeObject('DBType', $parameters);
             return $dbType->getOrmPropertyType();
         } else {
             if (@class_exists($name, true)) {
                 if (TypeUtils::isInherits($name, 'IDaoRelated')) {
                     return new AssociationPropertyType(call_user_func(array($name, 'orm')), $multiplicity, AssociationBreakAction::cascade());
                 } else {
                     if (TypeUtils::isInherits($name, 'IOrmRelated')) {
                         $orm = call_user_func(array($name, 'orm'));
                         return new CompositePropertyType($orm);
                     } else {
                         if (TypeUtils::isInherits($name, 'IOrmPropertyAssignable')) {
                             return call_user_func(array($name, 'getOrmPropertyType'), $multiplicity);
                         } else {
                             if (TypeUtils::isInherits($name, 'IBoxable')) {
                                 $parameters['id'] = DBType::VARCHAR;
                                 if (!isset($parameters['nullable'])) {
                                     $parameters['nullable'] = $multiplicity->isNullable() ? 'true' : 'false';
                                 }
                                 return new BoxablePropertyType($name, $this->makeObject('DBType', $parameters));
                             } else {
                                 if (TypeUtils::isInherits($name, 'ISqlType')) {
                                     // for RawSqlType
                                     return new PrimitivePropertyType($this->makeObject($name, $parameters));
                                 } else {
                                     if (TypeUtils::isInherits($name, 'OrmPropertyType')) {
                                         // OrmPropertyType with public ctor
                                         return $this->makeObject($name, $parameters);
                                     }
                                 }
                             }
                         }
                     }
                 }
             }
         }
     }
     throw new OrmModelIntegrityException('Unknown type of ' . (string) $element['name'] . ' property:  ' . $name);
 }
 /**
  * Resolution order:
  *  - IDaoRelated (check a class existance within the global scope and withing the domain scope) --> AssociationPropertyType
  *  - IOrmRelated --> CompositionPropertyType (not implemented)
  *  - IOrmPropertyAssignable --> IOrmPropertyAssignable::getOrmProperty()
  *  - IBoxable --> BoxablePropertyType
  *  - DBType
  *  - any type with public ctor
  * @return OrmPropertyType
  */
 private function getPropertyType($name, AssociationMultiplicity $multiplicity, array $parameters = array())
 {
     if ($this->ormDomain->classExists($name)) {
         $class = $this->ormDomain->getClass($name);
         if ($class->hasDao() && $class->getIdentifier()) {
             return new AssociationPropertyType($class, $multiplicity, AssociationBreakAction::cascade());
         } else {
             return new CompositePropertyType($class);
         }
     } else {
         if (DBType::hasMember($name)) {
             $parameters['id'] = $name;
             if (!isset($parameters['nullable'])) {
                 $parameters['nullable'] = $multiplicity->isNullable() ? 'true' : 'false';
             }
             $dbType = $this->makeObject('DBType', $parameters);
             return $dbType->getOrmPropertyType();
         } else {
             if (class_exists($name, true)) {
                 if (TypeUtils::isChild($name, 'IDaoRelated')) {
                     return new AssociationPropertyType(call_user_func(array($name, 'orm')), $multiplicity, AssociationBreakAction::cascade());
                 } else {
                     if (TypeUtils::isChild($name, 'IOrmRelated')) {
                         $orm = call_user_func(array($name, 'orm'));
                         return new CompositePropertyType($orm);
                     } else {
                         if (TypeUtils::isChild($name, 'IOrmPropertyAssignable')) {
                             return call_user_func(array($name, 'getOrmPropertyType'), $multiplicity);
                         } else {
                             if (TypeUtils::isChild($name, 'IBoxable')) {
                                 $parameters['id'] = DBType::VARCHAR;
                                 if (!isset($parameters['nullable'])) {
                                     $parameters['nullable'] = $multiplicity->isNullable() ? 'true' : 'false';
                                 }
                                 return new BoxablePropertyType($name, $this->makeObject('DBType', $parameters));
                             } else {
                                 if (TypeUtils::isChild($name, 'ISqlType')) {
                                     // for RawSqlType
                                     return new PrimitivePropertyType($this->makeObject($name, $parameters));
                                 } else {
                                     //$this->makeObject($name, $parameters);
                                 }
                             }
                         }
                     }
                 }
             }
         }
     }
     throw new OrmModelIntegrityException('do not know how to map ' . $name);
 }
 protected function getCtorArgumentsPhpCode()
 {
     return array($this->type->toPhpCodeCall());
 }