Index: trunk/admin/install/upgrades/inportal_check_v1.0.10.php =================================================================== diff -u -r1220 -r1393 --- trunk/admin/install/upgrades/inportal_check_v1.0.10.php (.../inportal_check_v1.0.10.php) (revision 1220) +++ trunk/admin/install/upgrades/inportal_check_v1.0.10.php (.../inportal_check_v1.0.10.php) (revision 1393) @@ -29,11 +29,11 @@ // 2. build mega sql joining all tables in on and search resource id throught them $ado->Execute('DROP TABLE IF EXISTS '.GetTablePrefix().'DupeRIDs'); - $sql=Array(); - $sql_template="SELECT %1\$s AS ID, '%1\$s' AS IDField, ResourceId, '%2\$s' AS TableName FROM ".GetTablePrefix()."%2\$s "; + $sql = Array(); + $sql_template = 'SELECT %1$s AS ID, \'%1$s\' AS IDField, ResourceId, \'%2$s\' AS TableName, \'%3$s\' AS Module FROM '.GetTablePrefix().'%2$s '; foreach($ret as $sql_part) { - $sql[]=sprintf($sql_template,$sql_part['IDField'],$sql_part['Table']); + $sql[]=sprintf($sql_template,$sql_part['IDField'],$sql_part['Table'],$sql_part['Module']); } $module_table=GetTablePrefix().'DupeRIDs '; @@ -52,16 +52,19 @@ $dupes=Array(); // this is dupes $update_tpl='UPDATE '.GetTablePrefix().'%s SET ResourceId=%s WHERE %s=%s'; + + $non_category_items = Array(); while(!$rs->EOF) { $rec=&$rs->fields; if( isset($originals[$rec['ResourceId']]) ) { // this is dupe - $next_id=GetNextResourceId(); - $update_sql=sprintf($update_tpl,$rec['TableName'],$next_id,$rec['IDField'],$rec['ID']); + $next_id = GetNextResourceId(); + $update_sql = sprintf($update_tpl,$rec['TableName'],$next_id,$rec['IDField'],$rec['ID']); $ado->Execute($update_sql); - $dupes[$next_id]=$rec['ID']; + $dupes[$next_id] = $rec['ID']; + if($rec['Module'] == 'In-Portal') $non_category_items[$next_id] = $rec['ID']; } else { @@ -88,7 +91,10 @@ // move to lost + found category foreach($dupes as $dupe_rid => $dupe_id) { - $ado->Execute('INSERT INTO '.GetTablePrefix().'CategoryItems VALUES ('.$cat_id.','.$dupe_rid.',1)'); + if( !isset($non_category_items[$dupe_rid]) ) + { + $ado->Execute('INSERT INTO '.GetTablePrefix().'CategoryItems VALUES ('.$cat_id.','.$dupe_rid.',1)'); + } } } Index: trunk/globals.php =================================================================== diff -u -r1248 -r1393 --- trunk/globals.php (.../globals.php) (revision 1248) +++ trunk/globals.php (.../globals.php) (revision 1393) @@ -124,24 +124,43 @@ function GetNextResourceId($Increment=1) { - $adodbConnection = &GetADODBConnection(); - $sql = "LOCK TABLES ".GetTablePrefix()."IdGenerator WRITE"; - $adodbConnection->Execute($sql); - $sql = "UPDATE ".GetTablePrefix()."IdGenerator SET lastid=lastid+".$Increment; - $adodbConnection->Execute($sql); - $rs = $adodbConnection->Execute("SELECT lastid FROM ".GetTablePrefix()."IdGenerator"); - $val = $rs->fields["lastid"]; - if(!$rs || $rs->EOF) + global $objModules; + $table_name = GetTablePrefix().'IdGenerator'; + + $db = &GetADODBConnection(); + + // dummy protection: get maximal resource id used actually and fix last_id used + $max_resourceid = 0; + $table_info = $objModules->ExecuteFunction('GetModuleInfo', 'dupe_resourceids'); + $sql_template = 'SELECT MAX(ResourceId) FROM '.GetTablePrefix().'%s'; + + foreach($table_info as $module_name => $module_info) + { + foreach($module_info as $module_sub_info) + { + $sql = sprintf($sql_template,$module_sub_info['Table']); + $tmp_resourceid = $db->GetOne($sql); + if($tmp_resourceid > $max_resourceid) $max_resourceid = $tmp_resourceid; + } + } + + // update lastid to be next resourceid available + $db->Execute('LOCK TABLES '.$table_name.' WRITE'); + $id_diff = $db->GetOne('SELECT '.$max_resourceid.' + 1 - lastid FROM '.$table_name); + if($id_diff) $Increment += $id_diff; + + $sql = 'UPDATE '.$table_name.' SET lastid = lastid + '.$Increment; // set new id in db + $db->Execute($sql); + + $val = $db->GetOne('SELECT lastid FROM '.$table_name); + if($val === false) { - echo $adodbConnection->ErrorMsg(); - $sql = "INSERT INTO ".GetTablePrefix()."IdGenerator (lastid) VALUES ($Increment)"; - $adodbConnection->Execute($sql); - $val = 1; + $db->Execute('INSERT INTO '.$table_name.' (lastid) VALUES ('.$Increment.')'); + $val = $Increment; } - $sql = "UNLOCK TABLES"; - $adodbConnection->Execute($sql); - $val = $val-($Increment-1); - return $val; + $db->Execute('UNLOCK TABLES'); + + return $val - $Increment + $id_diff; // return previous free id (-1) ? } function AddSlash($s) Index: trunk/kernel/startup.php =================================================================== diff -u -r1278 -r1393 --- trunk/kernel/startup.php (.../startup.php) (revision 1278) +++ trunk/kernel/startup.php (.../startup.php) (revision 1393) @@ -43,8 +43,8 @@ */ if( file_exists($pathtoroot.'debug.php') && !defined('DEBUG_MODE') ) include_once($pathtoroot.'debug.php'); if( !defined('DEBUG_MODE') ) error_reporting(0); - -ini_set('memory_limit', '16M'); + +ini_set('memory_limit', defined('DEBUG_MODE') ? '32M' : '16M' ); ini_set('include_path', '.'); $kernel_version = "1.0.0";