/** * Gets a specific propel (renamed) property from the build. * * @param string $name * @return mixed */ protected function getBuildProperty($name) { if ($this->generatorConfig !== null) { return $this->generatorConfig->getBuildProperty($name); } return null; }
public function setGeneratorConfig(GeneratorConfig $generatorConfig) { if ($defaultTableEngine = $generatorConfig->getBuildProperty('mysqlTableType')) { $this->defaultTableEngine = $defaultTableEngine; } if ($tableEngineKeyword = $generatorConfig->getBuildProperty('mysqlTableEngineKeyword')) { $this->tableEngineKeyword = $tableEngineKeyword; } }
/** * Get the Platform object for this class * * @return Platform */ protected function getPlatform() { static $platform; if (!$platform) { $platform = new MysqlPlatform(); $config = new GeneratorConfig(); $config->setBuildProperties(array('propel.mysql.tableType' => 'InnoDB')); $platform->setGeneratorConfig($config); } return $platform; }
public function testAddBehavior() { $platform = new MysqlPlatform(); $config = new GeneratorConfig(); $config->setBuildProperties(array('propel.behavior.timestampable.class' => 'behavior.TimestampableBehavior')); $platform->setGeneratorConfig($config); $xmlToAppData = new XmlToAppData($platform, "defaultpackage", null); $appData = $xmlToAppData->parseFile('fixtures/bookstore/behavior-timestampable-schema.xml'); $table = $appData->getDatabase("bookstore-behavior")->getTable('table1'); $this->assertThat($table->getBehavior('timestampable'), $this->isInstanceOf('TimestampableBehavior'), 'addBehavior() uses the behavior class defined in build.properties'); }
/** * Gets a specific propel (renamed) property from the build. * * @param string $name * @return mixed */ public function getBuildProperty($name) { if (null !== $this->generatorConfig) { return $this->generatorConfig->getBuildProperty($name); } return null; }
/** * Gets the GeneratorConfig object for this task or creates it on-demand. * @return GeneratorConfig */ protected function getGeneratorConfig() { if ($this->generatorConfig === null) { $this->generatorConfig = new GeneratorConfig(); $this->generatorConfig->setBuildProperties($this->getProject()->getProperties()); } return $this->generatorConfig; }
/** * Handles opening elements of the xml file. */ public function startElement($name, $attributes) { try { if ($name == "dataset") { // Clear any start/end DLL call_user_func(array($this->builderClazz, 'reset')); $this->sqlWriter->write(call_user_func(array($this->builderClazz, 'getDatabaseStartSql'))); } else { // we're processing a row of data // where tag name is phpName e.g. <BookReader .... /> $table = $this->database->getTableByPhpName($name); $columnValues = array(); foreach ($attributes as $name => $value) { $col = $table->getColumnByPhpName($name); $columnValues[] = new ColumnValue($col, iconv('utf-8', $this->encoding, $value)); } $data = new DataRow($table, $columnValues); if ($this->currTableName !== $table->getName()) { // new table encountered if ($this->currBuilder !== null) { $this->sqlWriter->write($this->currBuilder->getTableEndSql()); } $this->currTableName = $table->getName(); $this->currBuilder = $this->generatorConfig->getConfiguredBuilder($table, 'datasql'); $this->sqlWriter->write($this->currBuilder->getTableStartSql()); } // Write the SQL $this->sqlWriter->write($this->currBuilder->buildRowSql($data)); } } catch (Exception $e) { // Exceptions have traditionally not bubbled up nicely from the expat parser, // so we also print the stack trace here. print $e; throw $e; } }
/** * 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)); }
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); }
/** * @expectedException BuildException */ public function testGetClassnameOnInexistantProperty() { $generator = new GeneratorConfig(); $generator->getClassname('propel.foo.bar'); }
public function testSetPackageOverridesNamespaceAutoPackage() { $schema = <<<EOF <database name="DB" namespace="NS1"> <table name="table" namespace="NS2" package="foo"> <column name="id" primaryKey="true" /> <column name="title1" type="VARCHAR" /> </table> </database> EOF; $config = new GeneratorConfig(); $config->setBuildProperties(array('propel.namespace.autoPackage' => 'true')); $xmlToAppData = new XmlToAppData(new DefaultPlatform()); $xmlToAppData->setGeneratorConfig($config); $table = $xmlToAppData->parseString($schema)->getDatabase('DB')->getTable('table'); $this->assertEquals('foo', $table->getPackage()); }
public function testGetPLatform() { $this->assertInstanceOf('CustomPlatform', $this->generatorConfig->getConfiguredPlatform()); $this->assertInstanceOf('CustomPlatform', $this->generatorConfig->getConfiguredPlatform(null, 'default')); }