Forums / Developer / zeta components db handler with ini settings

zeta components db handler with ini settings

Author Message

Benjamin Choquet

Wednesday 30 March 2011 7:58:56 am

Hi,

I'm willing to use to use the db schema zeta component which seems far more powerful than the ezpublish one but ezpublish db interface is not compatible.

I'm wondering if eZPublish API makes it possible to instantiate a ezcDBHandler using DatabaseSettings defined in site.ini. Has anyone tried that before ?

Nicolas Pastorino

Wednesday 30 March 2011 10:40:21 am

Hi Benjamin,

The ezcDBHandler interface and eZDBInterface's are different. Even if you manage to get an ezcDBHandler session instantiated, the methods called will differ, causing Fatal errors. Achieveing this would require more in-depth changes, imho.

In your custom extensions though, to access external tables, you can use Zeta Components for this. I do this very often, and i love it :)

Cheers !

--
Nicolas Pastorino
Director Community - eZ
Member of the Community Project Board

eZ Publish Community on twitter: http://twitter.com/ezcommunity

t : http://twitter.com/jeanvoye
G+ : http://plus.tl/jeanvoye

Benjamin Choquet

Thursday 31 March 2011 12:24:00 am

Hi Nicolas, thanks for your reply.

The thing is I'm developing an upgrade script which is totally unrelated to eZ's execution so I wouldn't mind using a totally different API. My need is more of a ezcDbFactory wrapper loading site.ini's DatabaseSettings block and calling the component's factory but I gather nothing exists at the time.

I guess I'll have to make one. Any pit traps I should beware when it comes to db instantiation ?

Gaetano Giunta

Thursday 31 March 2011 1:14:54 am

If you do that, please share the results of your work - I guess many ppl will appreciate it.

About using ezc dbschema: it os not 100% compatible when using oracle (eg. the names of sequences used for autoincrement cols is different, as well as the way it handles quoting of identifiers). Any improvement in that area is of course welcome, too

Principal Consultant International Business
Member of the Community Project Board

Nicolas Pastorino

Thursday 31 March 2011 2:32:33 am

Hi Benjamin, Gaetano,

Here is an initialization stub, easily embeddable in a dedicated method :

public static function initializeEzcPersistentSession()
    {
        if ( !self::$initialized )
        {
            // @FIXME : make this code DBMS-agnostic
            $dbURI = "mysql://";
            $dbURI .= eZINI::instance()->variable( 'DatabaseSettings', 'User' );
            $dbURI .= ':' . eZINI::instance()->variable( 'DatabaseSettings', 'Password' );
            $dbURI .= '@' . eZINI::instance()->variable( 'DatabaseSettings', 'Server' );
            $dbURI .= '/' . eZINI::instance()->variable( 'DatabaseSettings', 'Database' );

            ezcDbInstance::set( ezcDbFactory::create( $dbURI ) );
            $session = new ezcPersistentSession( ezcDbInstance::get(),
                                                 new ezcPersistentCacheManager( new ezcPersistentCodeManager( "extension/ezforumtools/classes/po/" ) ) );
            ezcPersistentSessionInstance::set( $session ); // set default session
            self::$initialized = true;
        }
        return ezcPersistentSessionInstance::get();
    }

and here is a usage stub :

$session = eZForumTools::initializeEzcPersistentSession();
$q = $session->createFindQuery( 'eZForumModeratedEntry' );
$q->where( $q->expr->eq( 'contentObjectId', $q->bindValue( $objectId ) ) );
return $session->find( $q, 'eZForumModeratedEntry' );

These are stubs, to be wrapped in lazy initialization ideally,
Hope it helps,
Cheers,

--
Nicolas Pastorino
Director Community - eZ
Member of the Community Project Board

eZ Publish Community on twitter: http://twitter.com/ezcommunity

t : http://twitter.com/jeanvoye
G+ : http://plus.tl/jeanvoye

Benjamin Choquet

Wednesday 18 May 2011 9:56:34 am

For those interested I finally made a helper method which works fine for a classic mySQL install.

Gist is available at https://gist.github.com/978982

Feel free to improve it :)

eZ debug

Timing: Jan 17 2025 22:58:51
Script start
Timing: Jan 17 2025 22:58:51
Module start 'content'
Timing: Jan 17 2025 22:58:52
Module end 'content'
Timing: Jan 17 2025 22:58:52
Script end

Main resources:

Total runtime0.8804 sec
Peak memory usage4,096.0000 KB
Database Queries205

Timing points:

CheckpointStart (sec)Duration (sec)Memory at start (KB)Memory used (KB)
Script start 0.00000.0051 587.8438180.8203
Module start 'content' 0.00510.7600 768.6641623.3438
Module end 'content' 0.76510.1152 1,392.0078341.0547
Script end 0.8803  1,733.0625 

Time accumulators:

 Accumulator Duration (sec) Duration (%) Count Average (sec)
Ini load
Load cache0.00400.4575210.0002
Check MTime0.00170.1956210.0001
Mysql Total
Database connection0.00050.058110.0005
Mysqli_queries0.806291.57172050.0039
Looping result0.00190.21622030.0000
Template Total0.853797.020.4269
Template load0.00220.248520.0011
Template processing0.851596.721020.4258
Template load and register function0.00010.016410.0001
states
state_id_array0.00110.125210.0011
state_identifier_array0.00080.095320.0004
Override
Cache load0.00190.2161340.0001
Sytem overhead
Fetch class attribute can translate value0.00100.116440.0003
Fetch class attribute name0.00100.108980.0001
XML
Image XML parsing0.00130.144340.0003
class_abstraction
Instantiating content class attribute0.00000.001990.0000
General
dbfile0.00480.5487330.0001
String conversion0.00000.000830.0000
Note: percentages do not add up to 100% because some accumulators overlap

CSS/JS files loaded with "ezjscPacker" during request:

CacheTypePacklevelSourceFiles
CSS0extension/community/design/community/stylesheets/ext/jquery.autocomplete.css
extension/community_design/design/suncana/stylesheets/scrollbars.css
extension/community_design/design/suncana/stylesheets/tabs.css
extension/community_design/design/suncana/stylesheets/roadmap.css
extension/community_design/design/suncana/stylesheets/content.css
extension/community_design/design/suncana/stylesheets/star-rating.css
extension/community_design/design/suncana/stylesheets/syntax_and_custom_tags.css
extension/community_design/design/suncana/stylesheets/buttons.css
extension/community_design/design/suncana/stylesheets/tweetbox.css
extension/community_design/design/suncana/stylesheets/jquery.fancybox-1.3.4.css
extension/bcsmoothgallery/design/standard/stylesheets/magnific-popup.css
extension/sevenx/design/simple/stylesheets/star_rating.css
extension/sevenx/design/simple/stylesheets/libs/fontawesome/css/all.min.css
extension/sevenx/design/simple/stylesheets/main.v02.css
extension/sevenx/design/simple/stylesheets/main.v02.res.css
JS0extension/ezjscore/design/standard/lib/yui/3.17.2/build/yui/yui-min.js
extension/ezjscore/design/standard/javascript/jquery-3.7.0.min.js
extension/community_design/design/suncana/javascript/jquery.ui.core.min.js
extension/community_design/design/suncana/javascript/jquery.ui.widget.min.js
extension/community_design/design/suncana/javascript/jquery.easing.1.3.js
extension/community_design/design/suncana/javascript/jquery.ui.tabs.js
extension/community_design/design/suncana/javascript/jquery.hoverIntent.min.js
extension/community_design/design/suncana/javascript/jquery.popmenu.js
extension/community_design/design/suncana/javascript/jScrollPane.js
extension/community_design/design/suncana/javascript/jquery.mousewheel.js
extension/community_design/design/suncana/javascript/jquery.cycle.all.js
extension/sevenx/design/simple/javascript/jquery.scrollTo.js
extension/community_design/design/suncana/javascript/jquery.cookie.js
extension/community_design/design/suncana/javascript/ezstarrating_jquery.js
extension/community_design/design/suncana/javascript/jquery.initboxes.js
extension/community_design/design/suncana/javascript/app.js
extension/community_design/design/suncana/javascript/twitterwidget.js
extension/community_design/design/suncana/javascript/community.js
extension/community_design/design/suncana/javascript/roadmap.js
extension/community_design/design/suncana/javascript/ez.js
extension/community_design/design/suncana/javascript/ezshareevents.js
extension/sevenx/design/simple/javascript/main.js

Templates used to render the page:

UsageRequested templateTemplateTemplate loadedEditOverride
1node/view/full.tplfull/forum_topic.tplextension/sevenx/design/simple/override/templates/full/forum_topic.tplEdit templateOverride template
6content/datatype/view/ezxmltext.tpl<No override>extension/community_design/design/suncana/templates/content/datatype/view/ezxmltext.tplEdit templateOverride template
8content/datatype/view/ezxmltags/paragraph.tpl<No override>extension/ezwebin/design/ezwebin/templates/content/datatype/view/ezxmltags/paragraph.tplEdit templateOverride template
3content/datatype/view/ezimage.tpl<No override>extension/sevenx/design/simple/templates/content/datatype/view/ezimage.tplEdit templateOverride template
2content/datatype/view/ezxmltags/literal.tpl<No override>extension/community/design/standard/templates/content/datatype/view/ezxmltags/literal.tplEdit templateOverride template
1content/datatype/view/ezxmltags/line.tpl<No override>design/standard/templates/content/datatype/view/ezxmltags/line.tplEdit templateOverride template
1pagelayout.tpl<No override>extension/sevenx/design/simple/templates/pagelayout.tplEdit templateOverride template
 Number of times templates used: 22
 Number of unique templates used: 7

Time used to render debug report: 0.0001 secs