API16

JInstaller/parseSQLFiles

From Joomla! Documentation

< API16:JInstaller

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]