/** * Writes the classes for $schema to $defDir in the traditional way. * * Writes the PersistentObject class stubs for $schema to $classDir using * {@link ezcDbSchemaPersistentClassWriter} from the DatabaseSchema * component. * * @param string $classDir * @param ezcDbSchema $schema */ private function writeClassesTraditional($classDir, $schema) { $writer = new ezcDbSchemaPersistentClassWriter($this->input->getOption("overwrite")->value, $this->input->getOption("prefix")->value); $writer->saveToFile($classDir, $schema); }
/** * Run the generator. * Process the given options and generate a PersistentObject definition from it. * * @return void */ public function run() { try { $this->input->process(); } catch (ezcConsoleException $e) { $this->raiseError("Error while processing your options: {$e->getMessage()}", true); } if ($this->input->getOption('h')->value === true) { $this->output->outputText($this->input->getHelpText(ezcPersistentObjectSchemaGenerator::PROGRAM_DESCRIPTION, 80, true), "help"); exit(0); } $defDir = $this->input->argumentDefinition["def dir"]->value; $classDir = $this->input->argumentDefinition["class dir"]->value; $schema = null; try { $readerClass = ezcDbSchemaHandlerManager::getReaderByFormat($this->input->getOption("format")->value); $reader = new $readerClass(); switch (true) { case $reader instanceof ezcDbSchemaDbReader: $db = ezcDbFactory::create($this->input->getOption("source")->value); $schema = ezcDbSchema::createFromDb($db); break; case $reader instanceof ezcDbSchemaFileReader: $schema = ezcDbSchema::createFromFile($this->input->getOption("format")->value, $this->input->getOption("source")->value); break; default: $this->raiseError("Reader class not supported: '{$readerClass}'."); break; } } catch (Exception $e) { $this->raiseError("Error reading schema: {$e->getMessage()}"); } try { $writer = new ezcDbSchemaPersistentWriter($this->input->getOption("overwrite")->value, $this->input->getOption("prefix")->value); $writer->saveToFile($defDir, $schema); if ($classDir !== null) { $writer = new ezcDbSchemaPersistentClassWriter($this->input->getOption("overwrite")->value, $this->input->getOption("prefix")->value); $writer->saveToFile($classDir, $schema); } } catch (ezcBaseException $e) { $this->raiseError("Error writing schema: {$e->getMessage()}"); } $this->output->outputLine("PersistentObject definition successfully written to {$defDir}.", 'info'); if ($classDir !== null) { $this->output->outputLine("Class files successfully written to {$classDir}.", 'info'); } }
CREATE UNIQUE INDEX 'nested_set_pri' on 'nested_set' ( 'id' ); CREATE INDEX 'nested_set_left' on 'nested_set' ( 'lft' ); CREATE INDEX 'nested_set_right' on 'nested_set' ( 'rgt' ); CREATE TABLE data ( 'node_id' varchar(255) NOT NULL, 'melting_temp_k' float, 'boiling_temp_k' float ); CREATE UNIQUE INDEX 'data_pri' on 'data' ( 'node_id' ); ENDSQL ); // Create the example Persistent Object definition files and stub classes $dbSchema = ezcDbSchema::createFromDb($dbh); $writer1 = new ezcDbSchemaPersistentWriter(true); $writer2 = new ezcDbSchemaPersistentClassWriter(true); $writer1->saveToFile('files/po_defs', $dbSchema); $writer2->saveToFile('files/classes', $dbSchema); require 'files/classes/data.php'; // Setup the store and tree $session = new ezcPersistentSession($dbh, new ezcPersistentCodeManager("files/po_defs")); $store = new ezcTreePersistentObjectDataStore($session, 'data', 'node_id'); $tree = new ezcTreeDbNestedSet($dbh, 'nested_set', $store); // Insert data $metal = new data(); $tree->setRootNode($root = $tree->createNode('Metals', $metal)); $iron = new data(); $iron->setState(array('melting_temp_k' => 1811, 'boiling_temp_k' => 3134)); $root->addChild($tree->createNode('Fe', $iron)); // Fetch data $fe = $tree->fetchNodeById('Fe')->data;