Ejemplo n.º 1
0
 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
 }