public function main() { $this->validate(); if (!$this->mapperElement) { throw new BuildException("You must use a <mapper/> element to describe how names should be transformed."); } if ($this->packageObjectModel) { $dataModels = $this->packageDataModels(); } else { $dataModels = $this->getDataModels(); } // 1) first create a map of filenames to databases; this is used by other tasks like // the SQLExec task. $this->createSqlDbMap(); // 2) Now actually create the DDL based on the datamodel(s) from XML schema file. $targetDatabase = $this->getTargetDatabase(); DataModelBuilder::setBuildProperties($this->getPropelProperties()); $builderClazz = DataModelBuilder::getBuilderClass('ddl'); foreach ($dataModels as $package => $dataModel) { foreach ($dataModel->getDatabases() as $database) { // file we are going to create if (!$this->packageObjectModel) { $name = $dataModel->getName(); } else { $name = ($package ? $package . '.' : '') . 'schema.xml'; } $outFile = $this->getMappedFile($name); $this->log("Writing to SQL file: " . $outFile->getPath()); // First add any "header" SQL $ddl = call_user_func(array($builderClazz, 'getDatabaseStartDDL')); foreach ($database->getTables() as $table) { if (!$table->isSkipSql()) { $builder = DataModelBuilder::builderFactory($table, 'ddl'); $this->log("\t+ " . $table->getName() . " [builder: " . get_class($builder) . "]"); $ddl .= $builder->build(); foreach ($builder->getWarnings() as $warning) { $this->log($warning, PROJECT_MSG_WARN); } } else { $this->log("\t + (skipping) " . $table->getName()); } } // foreach database->getTables() // Finally check to see if there is any "footer" SQL $ddl .= call_user_func(array($builderClazz, 'getDatabaseEndDDL')); // Now we're done. Write the file! file_put_contents($outFile->getAbsolutePath(), $ddl); } // foreach database } //foreach datamodels }