Exemplo n.º 1
0
 /**
  *
  * @param $entityAlias string Alias of the entity ('prxgt_acc_type_asset').
  * @param $demEntity array Associative array with entity definition (DEM subtree).
  */
 public function createEntity($entityAlias, $demEntity)
 {
     $tblName = $this->_resource->getTableName($entityAlias);
     $this->_logger->info("Create new table: {$tblName}.");
     /* init new object to create table in DB */
     $tbl = $this->_conn->newTable($tblName);
     if (isset($demEntity[DemCfg::COMMENT])) {
         $tbl->setComment($demEntity[DemCfg::COMMENT]);
     }
     $indexes = isset($demEntity[DemCfg::INDEX]) ? $demEntity[DemCfg::INDEX] : null;
     $relations = isset($demEntity[DemCfg::RELATION]) ? $demEntity[DemCfg::RELATION] : null;
     /* parse attributes */
     foreach ($demEntity[DemCfg::ATTRIBUTE] as $key => $attr) {
         $attrName = $attr[DemCfg::ALIAS];
         $attrType = $this->_parser->entityGetAttrType($attr[DemCfg::TYPE]);
         $attrSize = $this->_parser->entityGetAttrSize($attr[DemCfg::TYPE]);
         $attrOpts = $this->_parser->entityGetAttrOptions($attr, $indexes);
         $attrComment = isset($attr[DemCfg::COMMENT]) ? $attr[DemCfg::COMMENT] : null;
         $tbl->addColumn($attrName, $attrType, $attrSize, $attrOpts, $attrComment);
     }
     /* parse indexes */
     if ($indexes) {
         foreach ($indexes as $key => $ndx) {
             /* PRIMARY indexes are processed as columns options */
             if ($ndx[DemCfg::TYPE] == DemType::INDEX_PRIMARY) {
                 continue;
             }
             /* process not PRIMARY indexes */
             $ndxFields = $this->_parser->entityGetIndexFields($ndx);
             $ndxType = $this->_parser->entityGetIndexType($ndx);
             $ndxOpts = $this->_parser->entityGetIndexOptions($ndx);
             $ndxName = $this->_conn->getIndexName($entityAlias, $ndxFields, $ndxType);
             $this->_logger->info("Create new index: {$ndxName}.");
             $tbl->addIndex($ndxName, $ndxFields, $ndxOpts);
         }
     }
     /* create new table */
     $this->_conn->createTable($tbl);
     /* parse relations */
     if ($relations) {
         foreach ($relations as $one) {
             /* one only column FK is supported by Magento FW */
             $ownColumn = reset($one[DemCfg::OWN][DemCfg::ALIASES]);
             $refTableAlias = $one[DemCfg::REFERENCE][DemCfg::ENTITY][DemCfg::COMPLETE_ALIAS];
             $refTable = $this->_resource->getTableName($refTableAlias);
             $refColumn = reset($one[DemCfg::REFERENCE][DemCfg::ALIASES]);
             $onDelete = $this->_parser->referenceGetAction($one[DemCfg::ACTION][DemCfg::DELETE]);
             /* there is no onUpdate in M2, $purge is used instead. Set default value 'false' for purge. */
             //$onUpdate = $this->_parser->referenceGetAction($one[DemCfg::ACTION][DemCfg::UPDATE]);
             $onUpdate = false;
             $fkName = $this->_conn->getForeignKeyName($tblName, $ownColumn, $refTable, $refColumn);
             $this->_logger->info("Create new relation '{$fkName}' from '{$tblName}:{$ownColumn}' to '{$refTable}:{$refColumn}'.");
             try {
                 $this->_conn->addForeignKey($fkName, $tblName, $ownColumn, $refTable, $refColumn, $onDelete, $onUpdate);
             } catch (\Exception $e) {
                 $msg = "Cannot create FK '{$fkName}'. Error: " . $e->getMessage();
                 $this->_logger->error($msg);
             }
         }
     }
 }
 public function test_entityGetIndexOptions()
 {
     /** === Test Data === */
     /** === Mocks === */
     /** === Test itself === */
     $obj = new Parser();
     $opts = $obj->entityGetIndexOptions([Dem::TYPE => DemType::INDEX_UNIQUE]);
     $this->assertArrayHasKey(MageType::OPT_TYPE, $opts);
 }