API16

JInstaller/parseSQLFiles

From Joomla! Documentation

< API16:JInstaller
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

The "API16" namespace is an archived namespace. This page contains information for a Joomla! version which is no longer supported. It exists only as a historical reference, it will not be improved and its content may be incomplete and/or contain broken links.

Description[edit]

Method to extract the name of a discreet installation sql file from the installation manifest file.


<! removed transcluded page call, red link never existed >

Syntax[edit]

parseSQLFiles($element)
Parameter Name Default Value Description
$element $element The xml node to process

Returns[edit]

mixed Number of queries processed or False on error

Defined in[edit]

libraries/joomla/installer/installer.php

Importing[edit]

jimport( 'joomla.installer.installer' );

Source Body[edit]

public function parseSQLFiles($element)
{
        if ( ! $element instanceof JXMLElement || ! count($element->children())) {
                // The tag does not exist.
                return 0;
        }

        // Initialise variables.
        $queries = array();
        $db = & $this->_db;
        $dbDriver = strtolower($db->get('name'));
        if ($dbDriver == 'mysqli') {
                $dbDriver = 'mysql';
        }
        $dbCharset = ($db->hasUTF()) ? 'utf8' : '';

        // Get the name of the sql file to process
        $sqlfile = '';
        foreach ($element->children() as $file)
        {
                $fCharset = (strtolower($file->attributes()->charset) == 'utf8') ? 'utf8' : '';
                $fDriver  = strtolower($file->attributes()->driver);
                if ($fDriver == 'mysqli') {
                        $fDriver = 'mysql';
                }

                if ($fCharset == $dbCharset && $fDriver == $dbDriver)
                {
                        $sqlfile = $this->getPath('extension_root').DS.$file;
                        // Check that sql files exists before reading. Otherwise raise error for rollback
                        if (!file_exists($sqlfile))
                        {
                                JError::raiseWarning(1,'JInstaller::installer: '. JText::_('SQL File not found').' '. $sqlfile);
                                return false;
                        }
                        $buffer = file_get_contents($sqlfile);

                        // Graceful exit and rollback if read not successful
                        if ($buffer === false)
                        {
                                JError::raiseWarning(1, 'JInstaller::installer: '. JText::_('SQL File Buffer Read Error'));
                                return false;
                        }

                        // Create an array of queries from the sql file
                        jimport('joomla.installer.helper');
                        $queries = JInstallerHelper::splitSql($buffer);

                        if (count($queries) == 0) {
                                // No queries to process
                                return 0;
                        }

                        // Process each query in the $queries array (split out of sql file).
                        foreach ($queries as $query)
                        {
                                $query = trim($query);
                                if ($query != '' && $query{0} != '#')
                                {
                                        $db->setQuery($query);
                                        if (!$db->query())
                                        {
                                                JError::raiseWarning(1, 'JInstaller::install: '.JText::_('SQL Error')." ".$db->stderr(true));
                                                return false;
                                        }
                                }
                        }
                }
        }

        return (int) count($queries);
}


<! removed transcluded page call, red link never existed >

Examples[edit]

Code Examples[edit]