/**
  * Gets the table and field structure from database.
  * Which fields and which tables are determined from the ext_tables.sql file
  *
  * @param	string		Array with table.field values
  * @return	array		Array of tables and fields splitted.
  */
 function getTableAndFieldStructure($parts)
 {
     // Instance of install tool
     $instObj = new t3lib_install();
     $dbFields = $instObj->getFieldDefinitions_database(TYPO3_db);
     $outTables = array();
     foreach ($parts as $table) {
         $sub = explode('.', $table);
         if ($sub[0] && isset($dbFields[$sub[0]])) {
             if ($sub[1]) {
                 $key = explode('KEY:', $sub[1], 2);
                 if (count($key) == 2 && !$key[0]) {
                     // key:
                     if (isset($dbFields[$sub[0]]['keys'][$key[1]])) {
                         $outTables[$sub[0]]['keys'][$key[1]] = $dbFields[$sub[0]]['keys'][$key[1]];
                     }
                 } else {
                     if (isset($dbFields[$sub[0]]['fields'][$sub[1]])) {
                         $outTables[$sub[0]]['fields'][$sub[1]] = $dbFields[$sub[0]]['fields'][$sub[1]];
                     }
                 }
             } else {
                 $outTables[$sub[0]] = $dbFields[$sub[0]];
             }
         }
     }
     return $outTables;
 }
 /**
  * Updates the database according to extension requirements
  * DBAL compliant (based on Install Tool code)
  *
  * @param	string		Extension key
  * @param	array		Extension information array
  * @return	void
  */
 function forceDBupdates($extKey, $extInfo)
 {
     $instObj = new t3lib_install();
     // Updating tables and fields?
     if (is_array($extInfo['files']) && in_array('ext_tables.sql', $extInfo['files'])) {
         $fileContent = t3lib_div::getUrl(tx_em_Tools::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);
             foreach ((array) $update_statements['add'] as $string) {
                 $GLOBALS['TYPO3_DB']->admin_query($string);
             }
             foreach ((array) $update_statements['change'] as $string) {
                 $GLOBALS['TYPO3_DB']->admin_query($string);
             }
             foreach ((array) $update_statements['create_table'] as $string) {
                 $GLOBALS['TYPO3_DB']->admin_query($string);
             }
         }
     }
     // Importing static tables?
     if (is_array($extInfo['files']) && in_array('ext_tables_static+adt.sql', $extInfo['files'])) {
         $fileContent = t3lib_div::getUrl(tx_em_Tools::getExtPath($extKey, $extInfo['type']) . 'ext_tables_static+adt.sql');
         $statements = $instObj->getStatementarray($fileContent, 1);
         list($statements_table, $insertCount) = $instObj->getCreateTables($statements, 1);
         // Traverse the tables
         foreach ($statements_table as $table => $query) {
             $GLOBALS['TYPO3_DB']->admin_query('DROP TABLE IF EXISTS ' . $table);
             $GLOBALS['TYPO3_DB']->admin_query($query);
             if ($insertCount[$table]) {
                 $statements_insert = $instObj->getTableInsertStatements($statements, $table);
                 foreach ($statements_insert as $v) {
                     $GLOBALS['TYPO3_DB']->admin_query($v);
                 }
             }
         }
     }
 }