Zend Framework

Allow defining of the schema separator in Zend_Db_Adapter

Details

Description

To simulate the schema system in RDBMS which don't support it (as MySQL, where SCHEMA is a DATABASE) I thought to patch the Zend_Db_Adapter_Abstract by adding a protected attribute called Zend_Db_Adapter_Abstract::$_schemaSeparator (default to '.') and a public method Zend_Db_Adapter_Abstract::getSchemaSeparator()

Then by simply changing the '.' string with a call to Zend_Db_Adapter_Abstract::getSchemaSeparator() in the following methods:
Zend_Db_Table_Abstract::_setupMetadata()
Zend_Db_Table_Abstract::_setupTableName()
Zend_Db_Table_Abstract::_setupPrimaryKey()
Zend_Db_Table_Abstract::insert()
Zend_Db_Table_Abstract::update
Zend_Db_Table_Abstract::delete()
Zend_Db_Select::__toString()
Zend_Db_Select::_join()

So you could extend an Adapter (eg MySQLi) by definig the attribute $schemaSeparator (say with '_') and you get a sort of schema management analogue of PostgreSQL one (for example), to group table in namespaces.

I've also build a patch you could find in http://dev.tesio.it/patch.Zend_Db

The work estimate contain simply adding the patch to the core CVS and testing more widely...

  1. library_Zend_Db.diff
    09/Apr/08 2:43 AM
    4 kB
    Giacomo Tesio
  2. patch.Zend_Db
    19/Mar/08 8:51 AM
    3 kB
    Giacomo Tesio

Activity

Hide
Giacomo Tesio added a comment -

The patch I wrote...

Show
Giacomo Tesio added a comment - The patch I wrote...
Hide
Wil Sinclair added a comment -

Please categorize/fix as needed.

Show
Wil Sinclair added a comment - Please categorize/fix as needed.
Hide
Giacomo Tesio added a comment -

I realized that, when using such a feature, you should set Adapter::$autoQuoteIdentifiers = FALSE: otherwise, a "virtual schema" called "schema" and a table named "test_table" with an Adapter::$_schemaSeparator = '' you would get a query quoting the table as `schema`_`test_table` which is clearly wrong.

To make it work better I'm wondering of a protected _schemaSperatator setter (say Adapter::_setSchemaSeparator(string $separator, boolean $explodeIdentifiers = false) )

$explodeIdentifiers set a protected Adapter boolean attribute (defined true by default in Zend_Db_Adapter_Abstract) which enable / disable the explode() call in Zend_Db_Adapter_Abstract::_quoteIdentifierAs()

What do you think about this?

Show
Giacomo Tesio added a comment - I realized that, when using such a feature, you should set Adapter::$autoQuoteIdentifiers = FALSE: otherwise, a "virtual schema" called "schema" and a table named "test_table" with an Adapter::$_schemaSeparator = '' you would get a query quoting the table as `schema`_`test_table` which is clearly wrong. To make it work better I'm wondering of a protected _schemaSperatator setter (say Adapter::_setSchemaSeparator(string $separator, boolean $explodeIdentifiers = false) ) $explodeIdentifiers set a protected Adapter boolean attribute (defined true by default in Zend_Db_Adapter_Abstract) which enable / disable the explode() call in Zend_Db_Adapter_Abstract::_quoteIdentifierAs() What do you think about this?
Hide
Giacomo Tesio added a comment -

Here an updated Patch which fix a little bug in Zend_Db_Adapter_Abstract::_joinUsing() and follow the contributer guide (aka, built using svn diff)

Show
Giacomo Tesio added a comment - Here an updated Patch which fix a little bug in Zend_Db_Adapter_Abstract::_joinUsing() and follow the contributer guide (aka, built using svn diff)
Hide
Wil Sinclair added a comment -

No action on this issue for too long. I'm reassigning to Ralph for re-evaluation and categorization.

Show
Wil Sinclair added a comment - No action on this issue for too long. I'm reassigning to Ralph for re-evaluation and categorization.

People

Vote (0)
Watch (1)

Dates

  • Created:
    Updated:

Time Tracking

Estimated:
1h
Original Estimate - 1 hour
Remaining:
1h
Remaining Estimate - 1 hour
Logged:
Not Specified
Time Spent - Not Specified