/** * * @param string $module * @param string $action */ public static function update($module, $action = 'create') { $targetDbName = 'centreon'; ini_set('memory_limit', '-1'); $di = Di::getDefault(); $config = $di->get('config'); $targetDb = 'db_centreon'; $db = $di->get($targetDb); // Configuration for Propel $configParams = array('propel.project' => 'centreon', 'propel.database' => 'mysql', 'propel.database.url' => $config->get($targetDb, 'dsn'), 'propel.database.user' => $config->get($targetDb, 'username'), 'propel.database.password' => $config->get($targetDb, 'password')); // Set the Current Platform and DB Connection $platform = new CentreonMysqlPlatform($db); // Initilize Schema Parser $propelDb = new \MysqlSchemaParser($db); $propelDb->setGeneratorConfig(new \GeneratorConfig($configParams)); $propelDb->setPlatform($platform); // get Current Db State $currentDbAppData = new \AppData($platform); $currentDbAppData->setGeneratorConfig(new \GeneratorConfig($configParams)); $currentDb = $currentDbAppData->addDatabase(array('name' => $targetDbName)); $propelDb->parse($currentDb); // Retreive target DB State $updatedAppData = new \AppData($platform); self::getDbFromXml($updatedAppData, 'centreon'); // Get diff between current db state and target db state $diff = \PropelDatabaseComparator::computeDiff($currentDb, $updatedAppData->getDatabase('centreon'), false); if ($diff !== false) { $strDiff = $platform->getModifyDatabaseDDL($diff); $sqlToBeExecuted = \PropelSQLParser::parseString($strDiff); $finalSql = "\nSET FOREIGN_KEY_CHECKS = 0;\n\n"; if ($action == 'create') { $finalSql .= implode(";\n\n", static::keepCreateStatement($sqlToBeExecuted, $module)); } elseif ($action == 'delete') { $finalSql .= implode(";\n\n", static::keepDeleteStatement($sqlToBeExecuted, $module)); } $finalSql .= ";\n\nSET FOREIGN_KEY_CHECKS = 1;\n\n"; \PropelSQLParser::executeString($finalSql, $db); } // Empty Target DB self::deleteTargetDbSchema($targetDbName); }
/** * Packages the datamodels to one datamodel per package * * This applies only when the the packageObjectModel option is set. We need to * re-package the datamodels to allow the database package attribute to control * which tables go into which SQL file. * * @return array The packaged datamodels */ protected function packageDataModels() { static $packagedDataModels; if (is_null($packagedDataModels)) { $dataModels = $this->getDataModels(); $dataModel = array_shift($dataModels); $packagedDataModels = array(); $platform = $this->getGeneratorConfig()->getConfiguredPlatform(); foreach ($dataModel->getDatabases() as $db) { foreach ($db->getTables() as $table) { $package = $table->getPackage(); if (!isset($packagedDataModels[$package])) { $dbClone = $this->cloneDatabase($db); $dbClone->setPackage($package); $ad = new AppData($platform); $ad->setGeneratorConfig($this->getGeneratorConfig()); $ad->setName($dataModel->getName()); $ad->addDatabase($dbClone); $packagedDataModels[$package] = $ad; } $packagedDataModels[$package]->getDatabase($db->getName())->addTable($table); } } } return $packagedDataModels; }
public function testAppendXmlNamespaceWithAutoPackage() { $schema = <<<EOF <?xml version="1.0"?> <table name="test" namespace="\\testNs"/> EOF; $doc = new DOMDocument('1.0'); $doc->formatOutput = true; $config = new GeneratorConfig(); $config->setBuildProperties(array('propel.namespace.autoPackage' => 'true')); $appData = new AppData(); $appData->setGeneratorConfig($config); $db = new Database('testDb'); $db->setAppData($appData); $table = new Table('test'); $table->setDatabase($db); $table->setNamespace('\\testNs'); $table->appendXml($doc); $xmlstr = trim($doc->saveXML()); $this->assertSame($schema, $xmlstr); $schema = <<<EOF <?xml version="1.0"?> <table name="test" namespace="\\testNs" package="testPkg"/> EOF; $doc = new DOMDocument('1.0'); $doc->formatOutput = true; $table->setPackage('testPkg'); $table->appendXml($doc); $xmlstr = trim($doc->saveXML()); $this->assertSame($schema, $xmlstr); }
protected static function initializeCurrentSchema($platform) { $configParams = array('propel.project' => 'centreon', 'propel.database' => 'mysql', 'propel.database.driver' => 'mysql', 'propel.database.createUrl' => 'mysql://root@localhost/', 'propel.database.url' => 'mysql:dbname=centreon;host=localhost', 'propel.database.user' => 'root', 'propel.database.password' => '', 'propel.database.encoding' => 'utf-8'); // Initilize Schema Parser $db = Di::getDefault()->get('db_centreon'); $propelDb = new \MysqlSchemaParser($db); $propelDb->setGeneratorConfig(new \GeneratorConfig($configParams)); $propelDb->setPlatform($platform); // get Current Db State $currentDbAppData = new \AppData($platform); $currentDbAppData->setGeneratorConfig(new \GeneratorConfig($configParams)); $currentDb = $currentDbAppData->addDatabase(array('name' => 'centreon')); $propelDb->parse($currentDb); return $currentDb; }