Author: dr
Date: Mon Jan 14 11:30:24 2008
New Revision: 7143
Log:
- Implemented issue #10364: Added support for table name prefixes.
Modified:
trunk/DatabaseSchema/ChangeLog
trunk/DatabaseSchema/src/db_schema_autoload.php
trunk/DatabaseSchema/src/handlers/common_sql_writer.php
trunk/DatabaseSchema/src/handlers/mysql/reader.php
trunk/DatabaseSchema/src/handlers/mysql/writer.php
trunk/DatabaseSchema/src/handlers/oracle/reader.php
trunk/DatabaseSchema/src/handlers/oracle/writer.php
trunk/DatabaseSchema/src/handlers/pgsql/reader.php
trunk/DatabaseSchema/src/handlers/pgsql/writer.php
trunk/DatabaseSchema/src/handlers/sqlite/reader.php
trunk/DatabaseSchema/src/handlers/sqlite/writer.php
trunk/DatabaseSchema/src/interfaces/db_reader.php
trunk/DatabaseSchema/src/interfaces/db_writer.php
trunk/DatabaseSchema/src/options/schema.php
trunk/DatabaseSchema/src/schema.php
trunk/DatabaseSchema/tests/generic_test.php
Modified: trunk/DatabaseSchema/ChangeLog
==============================================================================
--- trunk/DatabaseSchema/ChangeLog [iso-8859-1] (original)
+++ trunk/DatabaseSchema/ChangeLog [iso-8859-1] Mon Jan 14 11:30:24 2008
@@ -1,6 +1,7 @@
1.4alpha1 - [RELEASEDATE]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+- Implemented issue #10364: Added support for table name prefixes.
- Implemented issue #11562: Schema validator for duplicate index names.
Modified: trunk/DatabaseSchema/src/db_schema_autoload.php
==============================================================================
--- trunk/DatabaseSchema/src/db_schema_autoload.php [iso-8859-1] (original)
+++ trunk/DatabaseSchema/src/db_schema_autoload.php [iso-8859-1] Mon Jan 14
11:30:24 2008
@@ -19,14 +19,14 @@
'ezcDbSchemaInvalidWriterClassException' =>
'DatabaseSchema/exceptions/invalid_writer_class.php',
'ezcDbSchemaSqliteDropFieldException' =>
'DatabaseSchema/exceptions/sqlite_drop_field_exception.php',
'ezcDbSchemaUnknownFormatException' =>
'DatabaseSchema/exceptions/unknown_format.php',
+ 'ezcDbSchemaDiffWriter' =>
'DatabaseSchema/interfaces/schema_diff_writer.php',
+ 'ezcDbSchemaWriter' =>
'DatabaseSchema/interfaces/schema_writer.php',
+ 'ezcDbSchemaDbWriter' =>
'DatabaseSchema/interfaces/db_writer.php',
+ 'ezcDbSchemaDiffDbWriter' =>
'DatabaseSchema/interfaces/db_diff_writer.php',
'ezcDbSchemaDiffReader' =>
'DatabaseSchema/interfaces/schema_diff_reader.php',
- 'ezcDbSchemaDiffWriter' =>
'DatabaseSchema/interfaces/schema_diff_writer.php',
'ezcDbSchemaReader' =>
'DatabaseSchema/interfaces/schema_reader.php',
- 'ezcDbSchemaWriter' =>
'DatabaseSchema/interfaces/schema_writer.php',
'ezcDbSchemaCommonSqlWriter' =>
'DatabaseSchema/handlers/common_sql_writer.php',
'ezcDbSchemaDbReader' =>
'DatabaseSchema/interfaces/db_reader.php',
- 'ezcDbSchemaDbWriter' =>
'DatabaseSchema/interfaces/db_writer.php',
- 'ezcDbSchemaDiffDbWriter' =>
'DatabaseSchema/interfaces/db_diff_writer.php',
'ezcDbSchemaDiffFileReader' =>
'DatabaseSchema/interfaces/file_diff_reader.php',
'ezcDbSchemaDiffFileWriter' =>
'DatabaseSchema/interfaces/file_diff_writer.php',
'ezcDbSchemaFileReader' =>
'DatabaseSchema/interfaces/file_reader.php',
Modified: trunk/DatabaseSchema/src/handlers/common_sql_writer.php
==============================================================================
--- trunk/DatabaseSchema/src/handlers/common_sql_writer.php [iso-8859-1]
(original)
+++ trunk/DatabaseSchema/src/handlers/common_sql_writer.php [iso-8859-1] Mon
Jan 14 11:30:24 2008
@@ -15,7 +15,7 @@
* @package DatabaseSchema
* @version //autogentag//
*/
-abstract class ezcDbSchemaCommonSqlWriter
+abstract class ezcDbSchemaCommonSqlWriter implements ezcDbSchemaDbWriter,
ezcDbSchemaDiffDbWriter
{
/**
* Stores a list of queries that is generated by the various Database
writing backends.
@@ -30,6 +30,81 @@
* @var ezcDbSchema
*/
protected $schema;
+
+ /**
+ * Returns what type of schema writer this class implements.
+ *
+ * This method always returns ezcDbSchema::DATABASE
+ *
+ * @return int
+ */
+ public function getWriterType()
+ {
+ return ezcDbSchema::DATABASE;
+ }
+
+ /**
+ * Creates the tables contained in $schema in the database that is related
to $db
+ *
+ * This method takes the table definitions from $schema and will create the
+ * tables according to this definition in the database that is references
+ * by the $db handler. If tables with the same name as contained in the
+ * definitions already exist they will be removed and recreated with the
+ * new definition.
+ *
+ * @param ezcDbHandler $db
+ * @param ezcDbSchema $schema
+ */
+ public function saveToDb( ezcDbHandler $db, ezcDbSchema $dbSchema )
+ {
+ $db->beginTransaction();
+ foreach ( $this->convertToDDL( $dbSchema ) as $query )
+ {
+ if ( $this->isQueryAllowed( $db, $query ) )
+ {
+ $db->exec( $query );
+ }
+ }
+ $db->commit();
+ }
+
+ /**
+ * Returns an array with SQL DDL statements that creates the database
definition in $dbSchema
+ *
+ * Converts the schema definition contained in $dbSchema to DDL SQL. This
+ * SQL can be used to create tables in an existing database according to
+ * the definition. The SQL queries are returned as an array.
+ *
+ * @param ezcDbSchemaDiff $schemaDiff
+ * @return array(string)
+ */
+ public function convertToDDL( ezcDbSchema $dbSchema )
+ {
+ $this->schema = $dbSchema->getSchema();
+
+ // reset queries
+ $this->queries = array();
+ $this->context = array();
+
+ $this->generateSchemaAsSql();
+ return $this->queries;
+ }
+
+ /**
+ * Checks if the query is allowed.
+ *
+ * Perform testing if table exist for DROP TABLE query
+ * to avoid stoping execution while try to drop not existent table.
+ *
+ * @param ezcDbHandler $db
+ * @param string $query
+ *
+ * @return boolean
+ */
+ public function isQueryAllowed( ezcDbHandler $db, $query )
+ {
+ return true;
+ }
/**
* Creates SQL DDL statements from a schema definitin.
@@ -40,10 +115,11 @@
*/
protected function generateSchemaAsSql()
{
+ $prefix = ezcDbSchema::$options->tableNamePrefix;
foreach ( $this->schema as $tableName => $tableDefinition )
{
- $this->generateDropTableSql( $tableName );
- $this->generateCreateTableSql( $tableName, $tableDefinition );
+ $this->generateDropTableSql( $prefix . $tableName );
+ $this->generateCreateTableSql( $prefix . $tableName,
$tableDefinition );
}
}
Modified: trunk/DatabaseSchema/src/handlers/mysql/reader.php
==============================================================================
--- trunk/DatabaseSchema/src/handlers/mysql/reader.php [iso-8859-1] (original)
+++ trunk/DatabaseSchema/src/handlers/mysql/reader.php [iso-8859-1] Mon Jan 14
11:30:24 2008
@@ -14,7 +14,7 @@
* @package DatabaseSchema
* @version //autogentag//
*/
-class ezcDbSchemaMysqlReader implements ezcDbSchemaDbReader
+class ezcDbSchemaMysqlReader extends ezcDbSchemaDbReader
{
/**
* Contains a type map from MySQL native types to generic DbSchema types.
@@ -71,18 +71,6 @@
}
/**
- * Returns a ezcDbSchema object from the database that is referenced with
$db.
- *
- * @param ezcDbHandler $db
- * @return ezcDbSchema
- */
- public function loadFromDb( ezcDbHandler $db )
- {
- $this->db = $db;
- return new ezcDbSchema( $this->fetchSchema() );
- }
-
- /**
* Loops over all the tables in the database and extracts schema
information.
*
* This method extracts information about a database's schema from the
@@ -90,19 +78,26 @@
*
* @return ezcDbSchema
*/
- private function fetchSchema()
+ protected function fetchSchema()
{
$schemaDefinition = array();
$tables = $this->db->query( "SHOW TABLES" )->fetchAll();
array_walk( $tables, create_function( '&$item,$key', '$item =
$item[0];' ) );
+ // strip out the prefix and only return tables with the prefix set.
+ $prefix = ezcDbSchema::$options->tableNamePrefix;
+
foreach ( $tables as $tableName )
{
- $fields = $this->fetchTableFields( $tableName );
- $indexes = $this->fetchTableIndexes( $tableName );
-
- $schemaDefinition[$tableName] = ezcDbSchema::createNewTable(
$fields, $indexes );
+ $tableNameWithoutPrefix = substr( $tableName, strlen( $prefix ) );
+ if ( $prefix === '' || $tableName !== $tableNameWithoutPrefix )
+ {
+ $fields = $this->fetchTableFields( $tableName );
+ $indexes = $this->fetchTableIndexes( $tableName );
+
+ $schemaDefinition[$tableNameWithoutPrefix] =
ezcDbSchema::createNewTable( $fields, $indexes );
+ }
}
return $schemaDefinition;
Modified: trunk/DatabaseSchema/src/handlers/mysql/writer.php
==============================================================================
--- trunk/DatabaseSchema/src/handlers/mysql/writer.php [iso-8859-1] (original)
+++ trunk/DatabaseSchema/src/handlers/mysql/writer.php [iso-8859-1] Mon Jan 14
11:30:24 2008
@@ -45,47 +45,6 @@
}
/**
- * Creates tables defined in $dbSchema in the database referenced by $db.
- *
- * This method uses [EMAIL PROTECTED] convertToDDL} to create SQL for the
schema
- * definition and then executes the return SQL statements on the database
- * handler $db.
- *
- * @todo check for failed transaction
- *
- * @param ezcDbHandler $db
- * @param ezcDbSchema $dbSchema
- */
- public function saveToDb( ezcDbHandler $db, ezcDbSchema $dbSchema )
- {
- $db->beginTransaction();
- foreach ( $this->convertToDDL( $dbSchema ) as $query )
- {
- $db->exec( $query );
- }
- $db->commit();
- }
-
- /**
- * Returns the definition in $dbSchema as database specific SQL DDL
queries.
- *
- * @param ezcDbSchema $dbSchema
- *
- * @return array(string)
- */
- public function convertToDDL( ezcDbSchema $dbSchema )
- {
- $this->schema = $dbSchema->getSchema();
-
- // reset queries
- $this->queries = array();
- $this->context = array();
-
- $this->generateSchemaAsSql();
- return $this->queries;
- }
-
- /**
* Returns what type of schema difference writer this class implements.
*
* This method always returns ezcDbSchema::DATABASE
@@ -182,7 +141,7 @@
*/
protected function generateCreateTableSqlStatement( $tableName )
{
- return "CREATE TABLE `$tableName`";
+ return "CREATE TABLE `{$tableName}`";
}
/**
Modified: trunk/DatabaseSchema/src/handlers/oracle/reader.php
==============================================================================
--- trunk/DatabaseSchema/src/handlers/oracle/reader.php [iso-8859-1] (original)
+++ trunk/DatabaseSchema/src/handlers/oracle/reader.php [iso-8859-1] Mon Jan 14
11:30:24 2008
@@ -14,7 +14,7 @@
* @package DatabaseSchema
* @version //autogentag//
*/
-class ezcDbSchemaOracleReader implements ezcDbSchemaDbReader
+class ezcDbSchemaOracleReader extends ezcDbSchemaDbReader
{
/**
* Contains a type map from Oracle native types to generic DbSchema types.
@@ -48,18 +48,6 @@
}
/**
- * Returns a ezcDbSchema object from the database that is referenced with
$db.
- *
- * @param ezcDbHandler $db
- * @return ezcDbSchema
- */
- public function loadFromDb( ezcDbHandler $db )
- {
- $this->db = $db;
- return new ezcDbSchema( $this->fetchSchema() );
- }
-
- /**
* Loops over all the tables in the database and extracts schema
information.
*
* This method extracts information about a database's schema from the
@@ -67,19 +55,26 @@
*
* @return ezcDbSchema
*/
- private function fetchSchema()
+ protected function fetchSchema()
{
$schemaDefinition = array();
$tables = $this->db->query( "SELECT table_name FROM user_tables ORDER
BY table_name" )->fetchAll();
array_walk( $tables, create_function( '&$item,$key', '$item =
$item[0];' ) );
+ // strip out the prefix and only return tables with the prefix set.
+ $prefix = ezcDbSchema::$options->tableNamePrefix;
+
foreach ( $tables as $tableName )
{
- $fields = $this->fetchTableFields( $tableName );
- $indexes = $this->fetchTableIndexes( $tableName );
-
- $schemaDefinition[$tableName] = ezcDbSchema::createNewTable(
$fields, $indexes );
+ $tableNameWithoutPrefix = substr( $tableName, strlen( $prefix ) );
+ if ( $prefix === '' || $tableName !== $tableNameWithoutPrefix )
+ {
+ $fields = $this->fetchTableFields( $tableName );
+ $indexes = $this->fetchTableIndexes( $tableName );
+
+ $schemaDefinition[$tableNameWithoutPrefix] =
ezcDbSchema::createNewTable( $fields, $indexes );
+ }
}
return $schemaDefinition;
Modified: trunk/DatabaseSchema/src/handlers/oracle/writer.php
==============================================================================
--- trunk/DatabaseSchema/src/handlers/oracle/writer.php [iso-8859-1] (original)
+++ trunk/DatabaseSchema/src/handlers/oracle/writer.php [iso-8859-1] Mon Jan 14
11:30:24 2008
@@ -33,55 +33,17 @@
);
/**
- * Returns what type of schema writer this class implements.
- *
- * This method always returns ezcDbSchema::DATABASE
- *
- * @return int
- */
- public function getWriterType()
- {
- return ezcDbSchema::DATABASE;
- }
-
- /**
- * Creates tables defined in $dbSchema in the database referenced by $db.
- *
- * This method uses [EMAIL PROTECTED] convertToDDL} to create SQL for the
schema
- * definition and then executes the return SQL statements on the database
- * handler $db.
- *
- * @todo check for failed transaction
- *
- * @param ezcDbHandler $db
- * @param ezcDbSchema $dbSchema
- */
- public function saveToDb( ezcDbHandler $db, ezcDbSchema $dbSchema )
- {
- $db->beginTransaction();
- foreach ( $this->convertToDDL( $dbSchema ) as $query )
- {
- if ( $this->isQueryAllowed( $db, $query ) )
- {
- $db->exec( $query );
- }
- }
- $db->commit();
- }
-
- /**
* Checks if query allowed.
*
* Perform testing if table exist for DROP TABLE query
* to avoid stoping execution while try to drop not existent table.
*
- * @param ezcDbHandler $db
- * @param string $query
+ * @param ezcDbHandler $db
+ * @param string $query
*
- *
* @return boolean false if query should not be executed.
*/
- private function isQueryAllowed( ezcDbHandler $db, $query )
+ public function isQueryAllowed( ezcDbHandler $db, $query )
{
if ( strstr( $query, 'AUTO_INCREMENT' ) ) // detect AUTO_INCREMENT and
return imediately. Will process later.
{
@@ -114,25 +76,6 @@
}
return true;
- }
-
- /**
- * Returns the definition in $dbSchema as database specific SQL DDL
queries.
- *
- * @param ezcDbSchema $dbSchema
- *
- * @return array(string)
- */
- public function convertToDDL( ezcDbSchema $dbSchema )
- {
- $this->schema = $dbSchema->getSchema();
-
- // reset queries
- $this->queries = array();
- $this->context = array();
-
- $this->generateSchemaAsSql();
- return $this->queries;
}
/**
Modified: trunk/DatabaseSchema/src/handlers/pgsql/reader.php
==============================================================================
--- trunk/DatabaseSchema/src/handlers/pgsql/reader.php [iso-8859-1] (original)
+++ trunk/DatabaseSchema/src/handlers/pgsql/reader.php [iso-8859-1] Mon Jan 14
11:30:24 2008
@@ -14,7 +14,7 @@
* @package DatabaseSchema
* @version //autogentag//
*/
-class ezcDbSchemaPgsqlReader implements ezcDbSchemaDbReader
+class ezcDbSchemaPgsqlReader extends ezcDbSchemaDbReader
{
/**
* Contains a type map from PostgreSQL native types to generic DbSchema
types.
@@ -75,18 +75,6 @@
}
/**
- * Returns a ezcDbSchema object from the database that is referenced with
$db.
- *
- * @param ezcDbHandler $db
- * @return ezcDbSchema
- */
- public function loadFromDb( ezcDbHandler $db )
- {
- $this->db = $db;
- return new ezcDbSchema( $this->fetchSchema() );
- }
-
- /**
* Loops over all the tables in the database and extracts schema
information.
*
* This method extracts information about a database's schema from the
@@ -94,19 +82,26 @@
*
* @return ezcDbSchema
*/
- private function fetchSchema()
+ protected function fetchSchema()
{
$schemaDefinition = array();
$tables = $this->db->query( "SELECT table_name FROM
information_schema.tables WHERE table_schema = 'public'" )->fetchAll();
array_walk( $tables, create_function( '&$item,$key', '$item =
$item[0];' ) );
+ // strip out the prefix and only return tables with the prefix set.
+ $prefix = ezcDbSchema::$options->tableNamePrefix;
+
foreach ( $tables as $tableName )
{
- $fields = $this->fetchTableFields( $tableName );
- $indexes = $this->fetchTableIndexes( $tableName );
-
- $schemaDefinition[$tableName] = ezcDbSchema::createNewTable(
$fields, $indexes );
+ $tableNameWithoutPrefix = substr( $tableName, strlen( $prefix ) );
+ if ( $prefix === '' || $tableName !== $tableNameWithoutPrefix )
+ {
+ $fields = $this->fetchTableFields( $tableName );
+ $indexes = $this->fetchTableIndexes( $tableName );
+
+ $schemaDefinition[$tableNameWithoutPrefix] =
ezcDbSchema::createNewTable( $fields, $indexes );
+ }
}
return $schemaDefinition;
Modified: trunk/DatabaseSchema/src/handlers/pgsql/writer.php
==============================================================================
--- trunk/DatabaseSchema/src/handlers/pgsql/writer.php [iso-8859-1] (original)
+++ trunk/DatabaseSchema/src/handlers/pgsql/writer.php [iso-8859-1] Mon Jan 14
11:30:24 2008
@@ -31,18 +31,6 @@
'blob' => 'bytea',
'clob' => 'text'
);
-
- /**
- * Returns what type of schema writer this class implements.
- *
- * This method always returns ezcDbSchema::DATABASE
- *
- * @return int
- */
- public function getWriterType()
- {
- return ezcDbSchema::DATABASE;
- }
/**
* Creates tables defined in $dbSchema in the database referenced by $db.
@@ -99,13 +87,13 @@
* Perform testing if table exist for DROP TABLE query
* to avoid stoping execution while try to drop not existent table.
*
- * @param ezcDbHandler $db
- * @param string $query
+ * @param ezcDbHandler $db
+ * @param string $query
*
*
* @return boolean false if query should not be executed.
*/
- private function isQueryAllowed( ezcDbHandler $db, $query )
+ public function isQueryAllowed( ezcDbHandler $db, $query )
{
if ( substr( $query, 0, 10 ) == 'DROP TABLE' )
{
@@ -128,25 +116,6 @@
return false;
}
return true;
- }
-
- /**
- * Returns the definition in $dbSchema as database specific SQL DDL
queries.
- *
- * @param ezcDbSchema $dbSchema
- *
- * @return array(string)
- */
- public function convertToDDL( ezcDbSchema $dbSchema )
- {
- $this->schema = $dbSchema->getSchema();
-
- // reset queries
- $this->queries = array();
- $this->context = array();
-
- $this->generateSchemaAsSql();
- return $this->queries;
}
/**
@@ -217,7 +186,7 @@
*/
protected function generateCreateTableSqlStatement( $tableName )
{
- return "CREATE TABLE \"$tableName\"";
+ return "CREATE TABLE \"{$tableName}\"";
}
/**
Modified: trunk/DatabaseSchema/src/handlers/sqlite/reader.php
==============================================================================
--- trunk/DatabaseSchema/src/handlers/sqlite/reader.php [iso-8859-1] (original)
+++ trunk/DatabaseSchema/src/handlers/sqlite/reader.php [iso-8859-1] Mon Jan 14
11:30:24 2008
@@ -14,7 +14,7 @@
* @package DatabaseSchema
* @version //autogentag//
*/
-class ezcDbSchemaSqliteReader implements ezcDbSchemaDbReader
+class ezcDbSchemaSqliteReader extends ezcDbSchemaDbReader
{
/**
* Contains a type map from SQLite native types to generic DbSchema types.
@@ -51,18 +51,6 @@
}
/**
- * Returns a ezcDbSchema object from the database that is referenced with
$db.
- *
- * @param ezcDbHandler $db
- * @return ezcDbSchema
- */
- public function loadFromDb( ezcDbHandler $db )
- {
- $this->db = $db;
- return new ezcDbSchema( $this->fetchSchema() );
- }
-
- /**
* Loops over all the tables in the database and extracts schema
information.
*
* This method extracts information about a database's schema from the
@@ -70,19 +58,26 @@
*
* @return ezcDbSchema
*/
- private function fetchSchema()
+ protected function fetchSchema()
{
$schemaDefinition = array();
$tables = $this->db->query( "SELECT name FROM sqlite_master WHERE
type='table' AND name != 'sqlite_sequence' ORDER BY name" )->fetchAll();
array_walk( $tables, create_function( '&$item,$key', '$item =
$item[0];' ) );
+ // strip out the prefix and only return tables with the prefix set.
+ $prefix = ezcDbSchema::$options->tableNamePrefix;
+
foreach ( $tables as $tableName )
{
- $fields = $this->fetchTableFields( $tableName );
- $indexes = $this->fetchTableIndexes( $tableName );
-
- $schemaDefinition[$tableName] = ezcDbSchema::createNewTable(
$fields, $indexes );
+ $tableNameWithoutPrefix = substr( $tableName, strlen( $prefix ) );
+ if ( $prefix === '' || $tableName !== $tableNameWithoutPrefix )
+ {
+ $fields = $this->fetchTableFields( $tableName );
+ $indexes = $this->fetchTableIndexes( $tableName );
+
+ $schemaDefinition[$tableNameWithoutPrefix] =
ezcDbSchema::createNewTable( $fields, $indexes );
+ }
}
return $schemaDefinition;
Modified: trunk/DatabaseSchema/src/handlers/sqlite/writer.php
==============================================================================
--- trunk/DatabaseSchema/src/handlers/sqlite/writer.php [iso-8859-1] (original)
+++ trunk/DatabaseSchema/src/handlers/sqlite/writer.php [iso-8859-1] Mon Jan 14
11:30:24 2008
@@ -13,7 +13,7 @@
*
* @package DatabaseSchema
*/
-class ezcDbSchemaSqliteWriter extends ezcDbSchemaCommonSqlWriter implements
ezcDbSchemaDbWriter, ezcDbSchemaDiffDbWriter
+class ezcDbSchemaSqliteWriter extends ezcDbSchemaCommonSqlWriter
{
/**
* Contains a type map from DbSchema types to SQLite native types.
@@ -45,43 +45,17 @@
}
/**
- * Creates tables defined in $dbSchema in the database referenced by $db.
- *
- * This method uses [EMAIL PROTECTED] convertToDDL} to create SQL for the
schema
- * definition and then executes the return SQL statements on the database
- * handler $db.
- *
- * @todo check for failed transaction
- *
- * @param ezcDbHandler $db
- * @param ezcDbSchema $dbSchema
- */
- public function saveToDb( ezcDbHandler $db, ezcDbSchema $dbSchema )
- {
- $db->beginTransaction();
- foreach ( $this->convertToDDL( $dbSchema ) as $query )
- {
- if ( $this->isQueryAllowed( $db, $query ) )
- {
- $db->exec( $query );
- }
- }
- $db->commit();
- }
-
- /**
- * Checks if sertain query allowed.
+ * Checks if certain query allowed.
*
* Perform testing if table exist for DROP TABLE query
* to avoid stoping execution while try to drop not existent table.
*
- * @param ezcDbHandler $db
- * @param string $query
- *
+ * @param ezcDbHandler $db
+ * @param string $query
*
* @return boolean false if query should not be executed.
*/
- private function isQueryAllowed( ezcDbHandler $db, $query )
+ public function isQueryAllowed( ezcDbHandler $db, $query )
{
if ( strstr($query, 'DROP COLUMN') || strstr($query, 'CHANGE') ) //
detecting DROP COLUMN clause or field CHANGE clause
{
@@ -108,26 +82,6 @@
return true;
}
-
- /**
- * Returns the definition in $dbSchema as database specific SQL DDL
queries.
- *
- * @param ezcDbSchema $dbSchema
- *
- * @return array(string)
- */
- public function convertToDDL( ezcDbSchema $dbSchema )
- {
- $this->schema = $dbSchema->getSchema();
-
- // reset queries
- $this->queries = array();
- $this->context = array();
-
- $this->generateSchemaAsSql();
- return $this->queries;
- }
-
/**
* Returns what type of schema difference writer this class implements.
*
@@ -139,7 +93,6 @@
{
return ezcDbSchema::DATABASE;
}
-
/**
* Applies the differences defined in $dbSchemaDiff to the database
referenced by $db.
*
@@ -463,7 +416,7 @@
*/
protected function generateCreateTableSqlStatement( $tableName )
{
- return "CREATE TABLE '$tableName'";
+ return "CREATE TABLE '{$tableName}'";
}
/**
Modified: trunk/DatabaseSchema/src/interfaces/db_reader.php
==============================================================================
--- trunk/DatabaseSchema/src/interfaces/db_reader.php [iso-8859-1] (original)
+++ trunk/DatabaseSchema/src/interfaces/db_reader.php [iso-8859-1] Mon Jan 14
11:30:24 2008
@@ -13,7 +13,7 @@
* @package DatabaseSchema
* @version //autogen//
*/
-interface ezcDbSchemaDbReader extends ezcDbSchemaReader
+abstract class ezcDbSchemaDbReader implements ezcDbSchemaReader
{
/**
* Returns an ezcDbSchema created from the database schema in the database
referenced by $db
@@ -25,6 +25,10 @@
* @param ezcDbHandler $db
* @return ezcDbSchema
*/
- public function loadFromDb( ezcDbHandler $db );
+ public function loadFromDb( ezcDbHandler $db )
+ {
+ $this->db = $db;
+ return new ezcDbSchema( $this->fetchSchema() );
+ }
}
?>
Modified: trunk/DatabaseSchema/src/interfaces/db_writer.php
==============================================================================
--- trunk/DatabaseSchema/src/interfaces/db_writer.php [iso-8859-1] (original)
+++ trunk/DatabaseSchema/src/interfaces/db_writer.php [iso-8859-1] Mon Jan 14
11:30:24 2008
@@ -27,7 +27,7 @@
* @param ezcDbHandler $db
* @param ezcDbSchema $schema
*/
- public function saveToDb( ezcDbHandler $db, ezcDbSchema $schema );
+ public function saveToDb( ezcDbHandler $db, ezcDbSchema $dbSchema );
/**
* Returns an array with SQL DDL statements that creates the database
definition in $dbSchema
@@ -40,5 +40,18 @@
* @return array(string)
*/
public function convertToDDL( ezcDbSchema $dbSchema );
+
+ /**
+ * Checks if the query is allowed.
+ *
+ * Perform testing if table exist for DROP TABLE query
+ * to avoid stoping execution while try to drop not existent table.
+ *
+ * @param ezcDbHandler $db
+ * @param string $query
+ *
+ * @return boolean
+ */
+ public function isQueryAllowed( ezcDbHandler $db, $query );
}
?>
Modified: trunk/DatabaseSchema/src/options/schema.php
==============================================================================
--- trunk/DatabaseSchema/src/options/schema.php [iso-8859-1] (original)
+++ trunk/DatabaseSchema/src/options/schema.php [iso-8859-1] Mon Jan 14
11:30:24 2008
@@ -41,6 +41,7 @@
$this->properties['fieldClassName'] = 'ezcDbSchemaField';
$this->properties['indexClassName'] = 'ezcDbSchemaIndex';
$this->properties['indexFieldClassName'] = 'ezcDbSchemaIndexField';
+ $this->properties['tableNamePrefix'] = '';
parent::__construct( $options );
}
@@ -90,6 +91,14 @@
$this->properties[$propertyName] = $propertyValue;
break;
+ case 'tableNamePrefix':
+ if ( !is_string( $propertyValue ) )
+ {
+ throw new ezcBaseValueException( $propertyName,
$propertyValue, 'string' );
+ }
+ $this->properties[$propertyName] = $propertyValue;
+ break;
+
default:
throw new ezcBasePropertyNotFoundException( $propertyName );
break;
Modified: trunk/DatabaseSchema/src/schema.php
==============================================================================
--- trunk/DatabaseSchema/src/schema.php [iso-8859-1] (original)
+++ trunk/DatabaseSchema/src/schema.php [iso-8859-1] Mon Jan 14 11:30:24 2008
@@ -152,6 +152,7 @@
*/
static public function createFromDb( ezcDbHandler $db )
{
+ self::initOptions();
$className = ezcDbSchemaHandlerManager::getReaderByFormat(
$db->getName() );
$reader = new $className();
self::checkSchemaReader( $reader, self::DATABASE );
@@ -202,6 +203,7 @@
*/
public function writeToDb( ezcDbHandler $db )
{
+ self::initOptions();
$className = ezcDbSchemaHandlerManager::getWriterByFormat(
$db->getName() );
$writer = new $className();
self::checkSchemaWriter( $writer, self::DATABASE );
@@ -226,6 +228,7 @@
*/
public function convertToDDL( $db )
{
+ self::initOptions();
if ( $db instanceof ezcDbHandler )
{
$db = $db->getName();
Modified: trunk/DatabaseSchema/tests/generic_test.php
==============================================================================
--- trunk/DatabaseSchema/tests/generic_test.php [iso-8859-1] (original)
+++ trunk/DatabaseSchema/tests/generic_test.php [iso-8859-1] Mon Jan 14
11:30:24 2008
@@ -51,6 +51,38 @@
return $tables;
}
+ private static function getSchemaWithPrefixedTableNames()
+ {
+ $tables = array(
+ 'prefix_bugdb' => new ezcDbSchemaTable(
+ array (
+ 'id' => new ezcDbSchemaField( 'integer', false, true,
null, true ),
+ 'bug_type' => new ezcDbSchemaField( 'text', 32, true ),
+ 'severity' => new ezcDbSchemaField( 'integer', false,
true, 0 ),
+ 'sdesc' => new ezcDbSchemaField( 'text', 80, true ),
+ 'ldesc' => new ezcDbSchemaField( 'clob', false, true ),
+ 'php_version' => new ezcDbSchemaField( 'text', 100, true ),
+ ),
+ array (
+ 'bug_type' => new ezcDbSchemaIndex( array ( 'bug_type' =>
new ezcDbSchemaIndexField() ), false, false ),
+ 'php_version' => new ezcDbSchemaIndex( array (
'php_version' => new ezcDbSchemaIndexField() ) ),
+ 'primary' => new ezcDbSchemaIndex( array ( 'id' => new
ezcDbSchemaIndexField() ), true ),
+ )
+ ),
+ 'prefix_bugdb_comments' => new ezcDbSchemaTable(
+ array (
+ 'bug_id' => new ezcDbSchemaField( 'integer', false, true,
0 ),
+ 'comment' => new ezcDbSchemaField( 'clob', false, true ),
+ 'email' => new ezcDbSchemaField( 'text', 32 ),
+ ),
+ array (
+ 'email' => new ezcDbSchemaIndex( array ( 'email' => new
ezcDbSchemaIndexField() ) ),
+ )
+ ),
+ );
+ return $tables;
+ }
+
public function testSimple()
{
$schema = new ezcDbSchema( self::getSchema() );
@@ -302,5 +334,57 @@
self::assertEquals( $file_orig, $file_dump );
}
+ public function testWriteWithPrefixReadWithPrefix()
+ {
+ xdebug_break();
+ $optionsWithPrefix = new ezcDbSchemaOptions;
+ $optionsWithPrefix->tableNamePrefix = 'prefix_';
+ $schema = new ezcDbSchema( self::getSchema() );
+
+ ezcDbSchema::setOptions( $optionsWithPrefix );
+ $schema->writeToDb( $this->db );
+
+ ezcDbSchema::setOptions( $optionsWithPrefix );
+ $newSchema = ezcDbSchema::createFromDb( $this->db );
+
+ self::assertEquals( $schema, $newSchema );
+ }
+
+ public function testWriteWithPrefixReadWithoutPrefix()
+ {
+ xdebug_break();
+ $optionsWithoutPrefix = new ezcDbSchemaOptions;
+ $optionsWithoutPrefix->tableNamePrefix = '';
+ $optionsWithPrefix = new ezcDbSchemaOptions;
+ $optionsWithPrefix->tableNamePrefix = 'prefix_';
+ $schema = new ezcDbSchema( self::getSchema() );
+ $schemaWithPrefix = new ezcDbSchema(
self::getSchemaWithPrefixedTableNames() );
+
+ ezcDbSchema::setOptions( $optionsWithPrefix );
+ $schema->writeToDb( $this->db );
+
+ ezcDbSchema::setOptions( $optionsWithoutPrefix );
+ $newSchema = ezcDbSchema::createFromDb( $this->db );
+
+ self::assertEquals( $schemaWithPrefix, $newSchema );
+ }
+
+ public function testWriteWithoutPrefixReadWithPrefix()
+ {
+ $optionsWithoutPrefix = new ezcDbSchemaOptions;
+ $optionsWithoutPrefix->tableNamePrefix = '';
+ $optionsWithPrefix = new ezcDbSchemaOptions;
+ $optionsWithPrefix->tableNamePrefix = 'prefix_';
+
+ $schema = new ezcDbSchema( self::getSchema() );
+ $schemaWithPrefix = new ezcDbSchema(
self::getSchemaWithPrefixedTableNames() );
+
+ ezcDbSchema::setOptions( $optionsWithoutPrefix );
+ $schemaWithPrefix->writeToDb( $this->db );
+
+ ezcDbSchema::setOptions( $optionsWithPrefix );
+ $newSchema = ezcDbSchema::createFromDb( $this->db );
+ self::assertEquals( $schema, $newSchema );
+ }
}
?>
--
svn-components mailing list
[email protected]
http://lists.ez.no/mailman/listinfo/svn-components