/**
     * Validates the database according to extension requirements
     * Prints form for changes if any. If none, returns blank. If an update is ordered, empty is returned as well.
     * DBAL compliant (based on Install Tool code)
     *
     * @param	string		Extension key
     * @param	array		Extension information array
     * @param	boolean		If true, returns array with info.
     * @return	mixed		If $infoOnly, returns array with information. Otherwise performs update.
     */
    function checkDBupdates($extKey, $extInfo, $infoOnly = 0)
    {
        // Initializing Install Tool object:
        $instObj = new t3lib_install();
        $instObj->INSTALL = t3lib_div::_GP('TYPO3_INSTALL');
        $dbStatus = array();
        // Updating tables and fields?
        if (is_array($extInfo['files']) && in_array('ext_tables.sql', $extInfo['files'])) {
            $fileContent = t3lib_div::getUrl($this->getExtPath($extKey, $extInfo['type']) . 'ext_tables.sql');
            $FDfile = $instObj->getFieldDefinitions_fileContent($fileContent);
            if (count($FDfile)) {
                $FDdb = $instObj->getFieldDefinitions_database(TYPO3_db);
                $diff = $instObj->getDatabaseExtra($FDfile, $FDdb);
                $update_statements = $instObj->getUpdateSuggestions($diff);
                $dbStatus['structure']['tables_fields'] = $FDfile;
                $dbStatus['structure']['diff'] = $diff;
                // Updating database...
                if (!$infoOnly && is_array($instObj->INSTALL['database_update'])) {
                    $instObj->performUpdateQueries($update_statements['add'], $instObj->INSTALL['database_update']);
                    $instObj->performUpdateQueries($update_statements['change'], $instObj->INSTALL['database_update']);
                    $instObj->performUpdateQueries($update_statements['create_table'], $instObj->INSTALL['database_update']);
                } else {
                    $content .= $instObj->generateUpdateDatabaseForm_checkboxes($update_statements['add'], $GLOBALS['LANG']->getLL('checkDBupdates_add_fields'));
                    $content .= $instObj->generateUpdateDatabaseForm_checkboxes($update_statements['change'], $GLOBALS['LANG']->getLL('checkDBupdates_changing_fields'), 1, 0, $update_statements['change_currentValue']);
                    $content .= $instObj->generateUpdateDatabaseForm_checkboxes($update_statements['create_table'], $GLOBALS['LANG']->getLL('checkDBupdates_add_tables'));
                }
            }
        }
        // Importing static tables?
        if (is_array($extInfo['files']) && in_array('ext_tables_static+adt.sql', $extInfo['files'])) {
            $fileContent = t3lib_div::getUrl($this->getExtPath($extKey, $extInfo['type']) . 'ext_tables_static+adt.sql');
            $statements = $instObj->getStatementArray($fileContent, 1);
            list($statements_table, $insertCount) = $instObj->getCreateTables($statements, 1);
            // Execute import of static table content:
            if (!$infoOnly && is_array($instObj->INSTALL['database_import'])) {
                // Traverse the tables
                foreach ($instObj->INSTALL['database_import'] as $table => $md5str) {
                    if ($md5str == md5($statements_table[$table])) {
                        $GLOBALS['TYPO3_DB']->admin_query('DROP TABLE IF EXISTS ' . $table);
                        $GLOBALS['TYPO3_DB']->admin_query($statements_table[$table]);
                        if ($insertCount[$table]) {
                            $statements_insert = $instObj->getTableInsertStatements($statements, $table);
                            foreach ($statements_insert as $v) {
                                $GLOBALS['TYPO3_DB']->admin_query($v);
                            }
                        }
                    }
                }
            } else {
                $whichTables = $instObj->getListOfTables();
                if (count($statements_table)) {
                    $out = '';
                    foreach ($statements_table as $table => $definition) {
                        $exist = isset($whichTables[$table]);
                        $dbStatus['static'][$table]['exists'] = $exist;
                        $dbStatus['static'][$table]['count'] = $insertCount[$table];
                        $out .= '<tr>
							<td><input type="checkbox" name="TYPO3_INSTALL[database_import][' . $table . ']" checked="checked" value="' . md5($definition) . '" /></td>
							<td><strong>' . $table . '</strong></td>
							<td><img src="clear.gif" width="10" height="1" alt="" /></td>
							<td nowrap="nowrap">' . ($insertCount[$table] ? $GLOBALS['LANG']->getLL('checkDBupdates_rows') . ' ' . $insertCount[$table] : '') . '</td>
							<td><img src="clear.gif" width="10" height="1" alt="" /></td>
							<td nowrap="nowrap">' . ($exist ? t3lib_iconWorks::getSpriteIcon('status-dialog-warning') . $GLOBALS['LANG']->getLL('checkDBupdates_table_exists') : '') . '</td>
							</tr>';
                    }
                    $content .= '
						<br />
						<h3>' . $GLOBALS['LANG']->getLL('checkDBupdates_import_static_data') . '</h3>
						<table border="0" cellpadding="0" cellspacing="0">' . $out . '</table>
						';
                }
            }
        }
        // Return array of information if $infoOnly, otherwise content.
        return $infoOnly ? $dbStatus : $content;
    }