From: <ar...@us...> - 2011-09-14 19:40:39
|
Revision: 37261 http://tikiwiki.svn.sourceforge.net/tikiwiki/?rev=37261&view=rev Author: arildb Date: 2011-09-14 19:40:31 +0000 (Wed, 14 Sep 2011) Log Message: ----------- [NEW] Initial, but incomplete, update of installer to support InnoDB. This version will (re)install InnoDB, but no choice is given i.e. no MyISAM option. Modified Paths: -------------- branches/experimental/innodb/db/tiki.sql branches/experimental/innodb/installer/installlib.php branches/experimental/innodb/installer/tiki-installer.php branches/experimental/innodb/templates/tiki-install.tpl Modified: branches/experimental/innodb/db/tiki.sql =================================================================== --- branches/experimental/innodb/db/tiki.sql 2011-09-14 18:52:30 UTC (rev 37260) +++ branches/experimental/innodb/db/tiki.sql 2011-09-14 19:40:31 UTC (rev 37261) @@ -146,8 +146,7 @@ KEY `topicId` (`topicId`), KEY `publishDate` (`publishDate`), KEY `expireDate` (`expireDate`), - KEY `type` (`type`), - FULLTEXT KEY `ft` (`title`, `heading`, `body`) + KEY `type` (`type`) ) ENGINE=MyISAM AUTO_INCREMENT=1 ; DROP TABLE IF EXISTS `tiki_article_types`; @@ -272,8 +271,7 @@ PRIMARY KEY (`postId`), KEY `data` (`data`(255)), KEY `blogId` (`blogId`), - KEY `created` (`created`), - FULLTEXT KEY `ft` (`data`, `title`) + KEY `created` (`created`) ) ENGINE=MyISAM AUTO_INCREMENT=1 ; DROP TABLE IF EXISTS `tiki_blog_posts_images`; @@ -319,8 +317,7 @@ PRIMARY KEY (`blogId`), KEY `title` (`title`), KEY `description` (`description`(255)), - KEY `hits` (`hits`), - FULLTEXT KEY `ft` (`title`, `description`) + KEY `hits` (`hits`) ) ENGINE=MyISAM AUTO_INCREMENT=1 ; DROP TABLE IF EXISTS `tiki_calendar_categories`; @@ -386,11 +383,7 @@ `lastmodif` int(14) NOT NULL default '0', `allday` tinyint(1) NOT NULL default '0', PRIMARY KEY (`calitemId`), - KEY `calendarId` (`calendarId`), - FULLTEXT KEY `ft` (`name`,`description`), - CONSTRAINT `fk_calitems_recurrence` - FOREIGN KEY (`recurrenceId`) REFERENCES `tiki_calendar_recurrence`(`recurrenceId`) - ON UPDATE CASCADE ON DELETE SET NULL + KEY `calendarId` (`calendarId`) ) ENGINE=MyISAM AUTO_INCREMENT=1 ; DROP TABLE IF EXISTS `tiki_calendar_locations`; @@ -557,8 +550,7 @@ KEY `tc_pi` (`parentId`), KEY `objectType` (object, `objectType`), KEY `commentDate` (`commentDate`), - KEY `threaded` (message_id, in_reply_to, `parentId`), - FULLTEXT KEY `ft` (title,data) + KEY `threaded` (message_id, in_reply_to, `parentId`) ) ENGINE=MyISAM AUTO_INCREMENT=1 ; DROP TABLE IF EXISTS `tiki_content`; @@ -643,8 +635,7 @@ `cache_timestamp` int(14) default NULL, PRIMARY KEY (`siteId`), KEY (`isValid`), - KEY (url), - FULLTEXT KEY `ft` (name,description) + KEY (url) ) ENGINE=MyISAM AUTO_INCREMENT=1 ; DROP TABLE IF EXISTS `tiki_dsn`; @@ -682,8 +673,7 @@ KEY `faqId` (`faqId`), KEY `question` (question(255)), KEY `answer` (answer(255)), - KEY `created` (`created`), - FULLTEXT KEY `ft` (question,answer) + KEY `created` (`created`) ) ENGINE=MyISAM AUTO_INCREMENT=1 ; DROP TABLE IF EXISTS `tiki_faqs`; @@ -698,8 +688,7 @@ PRIMARY KEY (`faqId`), KEY `title` (title), KEY `description` (description(255)), - KEY `hits` (hits), - FULLTEXT KEY `ft` (title,description) + KEY `hits` (hits) ) ENGINE=MyISAM AUTO_INCREMENT=1 ; DROP TABLE IF EXISTS `tiki_featured_links`; @@ -808,8 +797,7 @@ KEY `created` (created), KEY `archiveId` (`archiveId`), KEY `galleryId` (`galleryId`), - KEY `hits` (hits), - FULLTEXT KEY `ft` (name,description,search_data,filename) + KEY `hits` (hits) ) ENGINE=MyISAM AUTO_INCREMENT=1 ; DROP TABLE IF EXISTS `tiki_file_drafts`; @@ -989,8 +977,7 @@ KEY `description` (description(255)), KEY `hits` (hits), KEY `parentgallery` (parentgallery), - KEY `visibleUser` (visible, user), - FULLTEXT KEY `ft` (name,description) + KEY `visibleUser` (visible, user) ) ENGINE=MyISAM AUTO_INCREMENT=1 ; DROP TABLE IF EXISTS `tiki_galleries_scales`; @@ -1084,8 +1071,7 @@ KEY `hits` (hits), KEY `ti_gId` (`galleryId`), KEY `ti_cr` (created), - KEY `ti_us` (user), - FULLTEXT KEY `ft` (name,description) + KEY `ti_us` (user) ) ENGINE=MyISAM AUTO_INCREMENT=1 ; DROP TABLE IF EXISTS `tiki_images_data`; @@ -1644,7 +1630,6 @@ UNIQUE KEY `pageName` (`pageName`), KEY `data` (`data`(255)), KEY `pageRank` (`pageRank`), - FULLTEXT KEY `ft` (`pageName`,`description`,`data`), KEY `lastModif`(`lastModif`) ) ENGINE=MyISAM AUTO_INCREMENT=1; @@ -2234,8 +2219,7 @@ `value` text, PRIMARY KEY (`itemId`,`fieldId`), INDEX `fieldId` (`fieldId`), - INDEX value (value(250)), - FULLTEXT KEY `ft` (value) + INDEX value (value(250)) ) ENGINE=MyISAM; DROP TABLE IF EXISTS `tiki_tracker_item_field_logs`; @@ -2325,6 +2309,9 @@ PRIMARY KEY (`name`(30),`user`,`position`, `ord`) ) ENGINE=MyISAM; +/* +Incorrect table definition; there can be only one auto column and it must be defined as a key + DROP TABLE IF EXISTS `tiki_user_bookmarks_folders`; CREATE TABLE `tiki_user_bookmarks_folders` ( `folderId` int(12) NOT NULL auto_increment, @@ -2333,6 +2320,7 @@ `name` varchar(30) default NULL, PRIMARY KEY (`user`,`folderId`) ) ENGINE=MyISAM AUTO_INCREMENT=1 ; +*/ DROP TABLE IF EXISTS `tiki_user_bookmarks_urls`; CREATE TABLE `tiki_user_bookmarks_urls` ( @@ -3685,3 +3673,20 @@ PRIMARY KEY (`id`), KEY `server` (`server`) ) ENGINE=MyISAM; + +/* +MyISAM FULLTEXT indexing +CREATE FULLTEXT INDEX ft_articles ON tiki_articles(`title`, `heading`, `body`); +CREATE FULLTEXT INDEX ft_blog_posts ON tiki_blog_posts(`data`, `title`); +CREATE FULLTEXT INDEX ft_blogs ON tiki_blogs(`title`, `description`); +CREATE FULLTEXT INDEX ft_calendar_items ON tiki_calendar_items(`name`,`description`); +CREATE FULLTEXT INDEX ft_comments ON tiki_comments(title,data); +CREATE FULLTEXT INDEX ftidx_directory_sites ON tiki_directory_sites(name,description); +CREATE FULLTEXT INDEX ftidx_faq_questions ON tiki_faq_questions(question,answer); +CREATE FULLTEXT INDEX ftidx_faqs ON tiki_faqs(title,description); +CREATE FULLTEXT INDEX ftidx_files ON tiki_files(name,description,search_data,filename); +CREATE FULLTEXT INDEX ftidx_galleries ON tiki_galleries(name,description); +CREATE FULLTEXT INDEX ftidx_images ON tiki_images(name,description); +CREATE FULLTEXT INDEX ftidx_pages ON tiki_pages(`pageName`,`description`,`data`); +CREATE FULLTEXT INDEX ftidx_tracker_item_fields ON tiki_tracker_item_fields(value); +*/ \ No newline at end of file Modified: branches/experimental/innodb/installer/installlib.php =================================================================== --- branches/experimental/innodb/installer/installlib.php 2011-09-14 18:52:30 UTC (rev 37260) +++ branches/experimental/innodb/installer/installlib.php 2011-09-14 19:40:31 UTC (rev 37261) @@ -25,6 +25,8 @@ var $success = array(); var $failures = array(); + + var $useInnoDB = false; function Installer() // {{{ { @@ -153,6 +155,11 @@ $display_errors = ini_get('display_errors'); ini_set('display_errors', 'Off'); + if($this->useInnoDB) { + // Convert all MyISAM statments to InnoDB + $statement = str_ireplace("MyISAM", "InnoDB", $statement); + } + if ($this->query($statement, array(), -1, -1, true, $file) === false) { $status = false; } @@ -364,4 +371,49 @@ return $iis_warning; } + /** + * Get a list of installed engines in the MySQL instance + * $return array of engine names + */ + function getEngines() { + $engines = array(); + $result = $this->query('show engines'); + if ( $result ) { + while ( $res = $result->fetchRow() ) { + $engines[] = $res['Engine']; + } + } + return $engines; + } + + /** + * Check if InnoDB is an avaible engine + * @return true if the InnoDB engine is available + */ + function hasInnoDB() { + $engines = $this->getEngines(); + foreach($engines as $engine) { + if(strcmp(strtoupper($engine), 'INNODB') == 0) { + return true; + } + } + return false; + } + + /** + * Detect the engine used in the current schema. + * Assumes that all tables use the same table engine + * @return string identifying the current engine, or an empty string if not installed + */ + function getCurrentEngine() { + $engine = ''; + if($this->tableExists('tiki_schema')) { + $result = $this->query('SHOW TABLE STATUS WHERE Name = "tiki_schema"'); + if ( $result ) { + $res = $result->fetchRow(); + $engine = $res['Engine']; + } + } + return $engine; + } } Modified: branches/experimental/innodb/installer/tiki-installer.php =================================================================== --- branches/experimental/innodb/installer/tiki-installer.php 2011-09-14 18:52:30 UTC (rev 37260) +++ branches/experimental/innodb/installer/tiki-installer.php 2011-09-14 19:40:31 UTC (rev 37261) @@ -773,6 +773,14 @@ $tikifeedback[] = array('num'=>1, 'mes'=>tra("No database name specified")); } } +// Mark that InnoDB is to be used, if selected +if(isset($_REQUEST['useInnoDB'])) { + if(intval($_REQUEST['useInnoDB']) > 0) { + if($installer != null) { + $installer->useInnoDB = true; + } + } +} if ( $dbcon ) { $smarty->assign('dbcon', 'y'); @@ -1080,6 +1088,13 @@ } if( $install_step == '4' ) { + // Show the innodb option in the (re)install section if InnoDB is present + if($installer->hasInnoDB()) { + $smarty->assign( 'hasInnoDB', true ); + } else { + $smarty->assign( 'hasInnoDB', false ); + } + $value = ''; if ( ($db = TikiDB::get()) && ($result = $db->fetchAll( 'show variables like "character_set_database"') )) { $res = reset( $result ); Modified: branches/experimental/innodb/templates/tiki-install.tpl =================================================================== --- branches/experimental/innodb/templates/tiki-install.tpl 2011-09-14 18:52:30 UTC (rev 37260) +++ branches/experimental/innodb/templates/tiki-install.tpl 2011-09-14 19:40:31 UTC (rev 37261) @@ -349,6 +349,13 @@ </p> </div> + {if $hasInnoDB} + <p>Installing InnoDB + <input type="hidden" name="useInnoDB" value="1" /> + {else} + <input type="hidden" name="useInnoDB" value="0" /> + </p> + {/if} </fieldset> </td> {if $tikidb_created} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |