Exemplo n.º 1
0
 /**
  * Load the sql file and then execute it
  *
  * @throws     BuildException
  */
 public function main()
 {
     $conf = new GeneratorConfig();
     $conf->setBuildProperties($this->getProject()->getProperties());
     $this->setBuildConnections($conf->getBuildConnections());
     if ($this->sqldbmap === null || $this->getSqlDbMap()->exists() === false) {
         throw new BuildException("You haven't provided an sqldbmap, or " . "the one you specified doesn't exist: " . $this->sqldbmap->getPath());
     }
     if ($this->url === null) {
         throw new BuildException("DSN url attribute must be set!");
     }
     // get an ordered list of SQL files to execute
     $databases = $this->getFilesToExecute();
     $this->log(sprintf('Reading SQL files...'));
     foreach ($databases as $database => $files) {
         $statements[$database] = array();
         foreach ($files as $fileName) {
             $fullFileName = $this->srcDir ? $this->srcDir . DIRECTORY_SEPARATOR . $fileName : $fileName;
             if (file_exists($fullFileName)) {
                 $this->log(sprintf('  Loading statements from "%s"', $fullFileName));
                 $fileStatements = PropelSQLParser::parseFile($fullFileName);
                 $this->log(sprintf('    %d statements to execute', count($fileStatements)), Project::MSG_VERBOSE);
                 $statements[$database] = array_merge($statements[$database], $fileStatements);
             } else {
                 $this->log(sprintf('File "%s" in sqldbmap does not exist, skipping it.', $fullFileName));
             }
         }
     }
     $successfullStatements = 0;
     $this->log(sprintf('Executing SQL statements...'));
     foreach ($statements as $database => $statementList) {
         $successfullStatements += $this->insertDatabaseSqlFiles($database, $statementList);
     }
     $this->log(sprintf('SQL execution complete. %d statements successfully executed.', $successfullStatements));
 }
Exemplo n.º 2
0
 /**
  * @param string $datasource    A datasource name.
  */
 public function insertSql($datasource = null)
 {
     $statementsToInsert = array();
     foreach ($this->getProperties($this->getSqlDbMapFilename()) as $sqlFile => $database) {
         if (null !== $datasource && $database !== $datasource) {
             // skip
             break;
         }
         if (!isset($statementsToInsert[$database])) {
             $statementsToInsert[$database] = array();
         }
         if (null === $database || null !== $database && $database === $datasource) {
             $filename = $this->getWorkingDirectory() . DIRECTORY_SEPARATOR . $sqlFile;
             if (file_exists($filename)) {
                 foreach (PropelSQLParser::parseFile($filename) as $sql) {
                     $statementsToInsert[$database][] = $sql;
                 }
             }
         }
     }
     foreach ($statementsToInsert as $database => $sqls) {
         if (!$this->hasConnection($database)) {
             continue;
         }
         $pdo = $this->getPdoConnection($database);
         $pdo->beginTransaction();
         try {
             foreach ($sqls as $sql) {
                 $stmt = $pdo->prepare($sql);
                 $stmt->execute();
             }
             $pdo->commit();
         } catch (PDOException $e) {
             $pdo->rollback();
             throw $e;
         }
     }
     return true;
 }