[phpOpenTracker-devel] [Bug #4624] POT Creates Month Merge Tables Incorrectly
[email protected] Thu, 21 Jul 2005 12:38:48 -0700 (PDT)
| Newsgroups | gmane.comp.web.phpopentracker.devel |
|---|---|
| Message-ID | <[email protected]> |
Bug #4624, was updated on 2005-Jul-20 17:43
Here is a current snapshot of the bug.
Project: phpOpenTracker
Category: None
Status: Open
Resolution: None
Bug Group: None
Priority: 5
Submitted by: matthius
Assigned to : none
Summary: POT Creates Month Merge Tables Incorrectly
Details: When using POT in mysql_merge mode it was unable to correctly create the merge tables/monthly tables. The result was I always got error no:2 file not found errors. I did some research and discovered that the merge tables (pot_accesslog and pot_visitors) were not identical to the monthly tables (i.e. pot_acceslog_200507) the biggest problem I saw was that the monthly tables were InnoDB instead of MyISAM. If i dropped all the monthly tables POT would recreate them incorrectly.
My workaround:
I exported the monthly tables (SQL format) modified their table type, dropped the old tables and re created them.
Old structure:
DROP TABLE IF EXISTS `pot_visitors_200507`;
CREATE TABLE `pot_visitors_200507` (
`accesslog_id` int(11) NOT NULL default '0',
`visitor_id` int(11) NOT NULL default '0',
`client_id` int(10) unsigned NOT NULL default '0',
`operating_system_id` int(11) NOT NULL default '0',
`user_agent_id` int(11) NOT NULL default '0',
`host_id` int(11) NOT NULL default '0',
`referer_id` int(11) NOT NULL default '0',
`timestamp` int(10) unsigned NOT NULL default '0',
`weekday` tinyint(1) unsigned NOT NULL default '0',
`hour` tinyint(2) unsigned NOT NULL default '0',
`returning_visitor` tinyint(1) unsigned NOT NULL default '0',
PRIMARY KEY (`accesslog_id`),
KEY `client_time` (`client_id`,`timestamp`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 DELAY_KEY_WRITE=1;
New structure:
DROP TABLE IF EXISTS `pot_visitors_200507`;
CREATE TABLE `pot_visitors_200507` (
`accesslog_id` int(11) NOT NULL default '0',
`visitor_id` int(11) NOT NULL default '0',
`client_id` int(10) unsigned NOT NULL default '0',
`operating_system_id` int(11) NOT NULL default '0',
`user_agent_id` int(11) NOT NULL default '0',
`host_id` int(11) NOT NULL default '0',
`referer_id` int(11) NOT NULL default '0',
`timestamp` int(10) unsigned NOT NULL default '0',
`weekday` tinyint(1) unsigned NOT NULL default '0',
`hour` tinyint(2) unsigned NOT NULL default '0',
`returning_visitor` tinyint(1) unsigned NOT NULL default '0',
PRIMARY KEY (`accesslog_id`),
KEY `client_time` (`client_id`,`timestamp`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 DELAY_KEY_WRITE=1;
Then I dropped the merge table and re created it based on the monthly table definition: i.e.
DROP TABLE IF EXISTS `pot_visitors`;
CREATE TABLE `pot_visitors` (
`accesslog_id` int(11) NOT NULL default '0',
`visitor_id` int(11) NOT NULL default '0',
`client_id` int(10) unsigned NOT NULL default '0',
`operating_system_id` int(11) NOT NULL default '0',
`user_agent_id` int(11) NOT NULL default '0',
`host_id` int(11) NOT NULL default '0',
`referer_id` int(11) NOT NULL default '0',
`timestamp` int(10) unsigned NOT NULL default '0',
`weekday` tinyint(1) unsigned NOT NULL default '0',
`hour` tinyint(2) unsigned NOT NULL default '0',
`returning_visitor` tinyint(1) unsigned NOT NULL default '0',
PRIMARY KEY (`accesslog_id`),
KEY `client_time` (`client_id`,`timestamp`)
) ENGINE=MRG_MyISAM DEFAULT CHARSET=latin1
UNION=(pot_visitors_200507, pot_visitors_200508, pot_visitors_200509,
pot_visitors_200510, pot_visitors_200511, pot_visitors_200512);
After doing this, everything worked. But the POT table creation code is clearly creating the wrong kind of table.
I'm running POT v1.5.1 - Apache2 - PHP 4.4.0RC2 on Win2k3. Feel free to contact me with any questions.
Keep up the good work!
- Matt
Follow-Ups:
Date: 2005-Jul-21 12:38
By: matthius
Comment:
s_bergmann,
Perfect! Yes my DB does create InnoDB tables by default and the patch does fix the problem.
Take care,
- Matt
-------------------------------------------------------
Date: 2005-Jul-20 21:35
By: s_bergmann
Comment:
Is your MySQL configured to create InnoDB tables by default? Does the following patch work for you?
Index: phpOpenTracker/DB/mysql_merge.php
===================================================================
--- phpOpenTracker/DB/mysql_merge.php (Revision 51)
+++ phpOpenTracker/DB/mysql_merge.php (Arbeitskopie)
@@ -317,7 +317,7 @@
'',
'IF NOT EXISTS',
$name,
- ($type == 'accesslog') ? 'DELAY_KEY_WRITE=1 PACK_KEYS=1' : 'DELAY_KEY_WRITE=1'
+ ($type == 'accesslog') ? 'TYPE=MyISAM DELAY_KEY_WRITE=1 PACK_KEYS=1' : 'TYPE=MyISAM DELAY_KEY_WRITE=1'
)
);
}
-------------------------------------------------------
For detailed info, follow this link:
http://developer.berlios.de/bugs/?func=detailbug&bug_id=4624&group_id=2025