mirror of
https://github.com/e107inc/e107.git
synced 2025-08-05 22:27:34 +02:00
Issue #5209 - Partial fix. Currently does not support FULLTEXT on a field that already has an INDEX.
This commit is contained in:
@@ -331,7 +331,13 @@ CREATE TABLE news (
|
|||||||
KEY news_datestamp (news_datestamp),
|
KEY news_datestamp (news_datestamp),
|
||||||
KEY news_sticky (news_sticky),
|
KEY news_sticky (news_sticky),
|
||||||
KEY news_render_type (news_render_type),
|
KEY news_render_type (news_render_type),
|
||||||
KEY news_class (news_class)
|
KEY news_class (news_class),
|
||||||
|
FULLTEXT (news_title),
|
||||||
|
FULLTEXT (news_body),
|
||||||
|
FULLTEXT (news_extended),
|
||||||
|
FULLTEXT (news_summary),
|
||||||
|
FULLTEXT (news_meta_keywords),
|
||||||
|
FULLTEXT (news_meta_description)
|
||||||
) ENGINE=InnoDB;
|
) ENGINE=InnoDB;
|
||||||
|
|
||||||
|
|
||||||
@@ -411,8 +417,11 @@ CREATE TABLE page (
|
|||||||
menu_class varchar(250) NOT NULL default '0',
|
menu_class varchar(250) NOT NULL default '0',
|
||||||
menu_button_url varchar(250) NOT NULL default '',
|
menu_button_url varchar(250) NOT NULL default '',
|
||||||
menu_button_text varchar(250) NOT NULL default '',
|
menu_button_text varchar(250) NOT NULL default '',
|
||||||
|
PRIMARY KEY (page_id),
|
||||||
PRIMARY KEY (page_id)
|
FULLTEXT (page_title),
|
||||||
|
FULLTEXT (page_text),
|
||||||
|
FULLTEXT (page_metakeys),
|
||||||
|
FULLTEXT (page_fields)
|
||||||
) ENGINE=InnoDB;
|
) ENGINE=InnoDB;
|
||||||
# --------------------------------------------------------
|
# --------------------------------------------------------
|
||||||
|
|
||||||
@@ -589,7 +598,8 @@ CREATE TABLE user (
|
|||||||
PRIMARY KEY (user_id),
|
PRIMARY KEY (user_id),
|
||||||
UNIQUE KEY user_name (user_name),
|
UNIQUE KEY user_name (user_name),
|
||||||
UNIQUE KEY user_loginname (user_loginname),
|
UNIQUE KEY user_loginname (user_loginname),
|
||||||
KEY join_ban_index (user_join,user_ban)
|
KEY join_ban_index (user_join,user_ban),
|
||||||
|
FULLTEXT (user_signature)
|
||||||
) ENGINE=InnoDB;
|
) ENGINE=InnoDB;
|
||||||
# --------------------------------------------------------
|
# --------------------------------------------------------
|
||||||
|
|
||||||
|
@@ -793,7 +793,7 @@ class db_verify
|
|||||||
// return "<pre>".print_r($data,TRUE)."</pre>";
|
// return "<pre>".print_r($data,TRUE)."</pre>";
|
||||||
|
|
||||||
$v = $data['_valid'];
|
$v = $data['_valid'];
|
||||||
$i = $data['_invalid'];
|
$i = !empty($data['_invalid']) ? $data['_invalid'] : array();
|
||||||
|
|
||||||
$valid = $this->toMysql($v,$mode);
|
$valid = $this->toMysql($v,$mode);
|
||||||
$invalid = $this->toMysql($i,$mode);
|
$invalid = $this->toMysql($i,$mode);
|
||||||
@@ -1163,6 +1163,13 @@ class db_verify
|
|||||||
foreach($tmp as $line)
|
foreach($tmp as $line)
|
||||||
{
|
{
|
||||||
$line = trim($line);
|
$line = trim($line);
|
||||||
|
|
||||||
|
if(strpos($line,"PRIMARY") === 0 || strpos($line,"KEY") === 0 || strpos($line,"INDEX") === 0 || strpos($line,"FULLTEXT") === 0 || strpos($line,"FOREIGN") === 0)
|
||||||
|
{
|
||||||
|
$newline[] = ''; // Add a placeholder to preserve the structure
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
$newline[] = preg_replace('/^([^`\s][0-9a-zA-Z\$_]*)/',"`$1`", $line);
|
$newline[] = preg_replace('/^([^`\s][0-9a-zA-Z\$_]*)/',"`$1`", $line);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1172,20 +1179,7 @@ class db_verify
|
|||||||
$mes = e107::getMessage();
|
$mes = e107::getMessage();
|
||||||
|
|
||||||
// $regex = "/`?([\w]*)`?\s*?(".implode("|",$this->fieldTypes)."|".implode("|",$this->fieldTypeNum).")\s?(?:\([\s]?([0-9,]*)[\s]?\))?[\s]?(unsigned)?[\s]?.*?(?:(NOT NULL|NULL))?[\s]*(auto_increment|default .*)?[\s]?(?:PRIMARY KEY)?[\s]*?,?\s*?\n/im";
|
// $regex = "/`?([\w]*)`?\s*?(".implode("|",$this->fieldTypes)."|".implode("|",$this->fieldTypeNum).")\s?(?:\([\s]?([0-9,]*)[\s]?\))?[\s]?(unsigned)?[\s]?.*?(?:(NOT NULL|NULL))?[\s]*(auto_increment|default .*)?[\s]?(?:PRIMARY KEY)?[\s]*?,?\s*?\n/im";
|
||||||
$regex = "/^\s*?`?([\w]*)`?\s*?(".implode("|",$this->fieldTypes)."|".implode("|",$this->fieldTypeNum).")\s?(?:\([\s]?([0-9,]*)[\s]?\))?[\s]?(unsigned)?[\s]?.*?(?:(NOT NULL|NULL))?[\s]*(auto_increment|default|AUTO_INCREMENT|DEFAULT [\w'\s.\(:\)-]*)?[\s]?(comment [\w\s'.-]*)?[\s]?(?:PRIMARY KEY)?[\s]*?,?\s*?\n/im";
|
$regex = "/^\s*?`?([\w]*)`?\s*?(".implode("|",$this->fieldTypes)."|".implode("|",$this->fieldTypeNum).")\s?(?:\([\s]?([0-9,]*)[\s]?\))?[\s]?(unsigned)?[\s]?.*?(?:(NOT NULL|NULL))?[\s]*(auto_increment|default|AUTO_INCREMENT|DEFAULT [\w'\s.\(:\)-]*)?[\s]?(comment [\w\s'.-]*)?[\s]?(?:PRIMARY KEY|FULLTEXT)?[\s]*?,?\s*?\n/im";
|
||||||
|
|
||||||
|
|
||||||
// echo $regex."<br /><br />";
|
|
||||||
|
|
||||||
// $regex = "/`?([\w]*)`?\s*(int|varchar|tinyint|smallint|text|char|tinyint) ?(?:\([\s]?([0-9]*)[\s]?\))?[\s]?(unsigned)?[\s]?.*?(NOT NULL|NULL)?[\s]*(auto_increment|default .*)?[\s]?,/i";
|
|
||||||
|
|
||||||
// $regex = "/^\s*?`?([\w]*)`?\s*?(".implode("|",$this->fieldTypes)."|".implode("|",$this->fieldTypeNum).")\s?(?:\([\s]?([0-9,]*)[\s]?\))?[\s]?(unsigned)?[\s]?.*?(?:(NOT NULL|NULL))?[\s]*?(auto_increment|default [\w'\".-]*)?[\s]?(?:PRIMARY KEY)?[\s]*?,?\n/im";
|
|
||||||
//$regex = "/^\s*?`?([\w]*)`?\s*?(date|time|timestamp|datetime|year|tinyblob|blob|mediumblob|longblob|tinytext|mediumtext|longtext|text|bit|tinyint|smallint|mediumint|integer|int|bigint|real|double|float|decimal|numeric|varchar|char|binary|varbinary|enum|set)\s?(?:\([\s]?([0-9,]*)[\s]?\))?[\s]?(unsigned)?[\s]*?(?:(NOT NULL|NULL))?[\s]*?(auto_increment|default [\w'\".-]*)?[\s]?(?:PRIMARY KEY)?[\s]*?,?\n/im";
|
|
||||||
// $mes->addDebug($regex);
|
|
||||||
|
|
||||||
//$regex = "/^\s*?`?([\w]*)`?\s*?(date|time|timestamp|datetime|year|text|bit|tinyint|smallint|mediumint|integer|int|bigint|real|double|float|decimal|numeric|varchar|char|binary|varbinary|enum|set)\s?(?:\([\s]?([0-9,]*)[\s]?\))?[\s]?(unsigned)?[\s]*?(?:(NOT NULL|NULL))?[\s]*?(auto_increment|default [\w'.-]*)?[\s]?(?:PRIMARY KEY)?[\s]*?,?\n/i";
|
|
||||||
|
|
||||||
// echo "reg=".$regex;
|
|
||||||
|
|
||||||
preg_match_all($regex,$data,$m);
|
preg_match_all($regex,$data,$m);
|
||||||
|
|
||||||
@@ -1215,10 +1209,47 @@ class db_verify
|
|||||||
*/
|
*/
|
||||||
function getIndex($data, $print = false)
|
function getIndex($data, $print = false)
|
||||||
{
|
{
|
||||||
$regex = "/(PRIMARY|UNIQUE|FULLTEXT|FOREIGN)?[\s]*?(INDEX|KEY)[\s]*(?:`?([\w]*)`?)?[\s]*?\(`?([\w]+)`?(?:\s*\(\d+\))?(?:\s*(ASC|DESC))?\)[\s]*,?/i";
|
// $regex = "/(PRIMARY|UNIQUE|FULLTEXT|FOREIGN)?[\s]*?(INDEX|KEY)[\s]*(?:`?([\w]*)`?)?[\s]*?\(`?([\w]+)`?(?:\s*\(\d+\))?(?:\s*(ASC|DESC))?\)[\s]*,?/i";
|
||||||
|
// $regex = "/(?P<type>PRIMARY|PRIMARY|UNIQUE|FULLTEXT|FOREIGN|KEY)[\s]*?(?P<key_type>INDEX|KEY)?[\s]*(?:`?(?P<field>[\w]*)`?)?[\s]*?\(`?(?P<keyname>[\w]+)`?(?:\s*\(\d+\))?(?:\s*(?P<order>ASC|DESC))?\)[\s]*,?/i";
|
||||||
|
|
||||||
|
$regex = "/(?P<type>PRIMARY|UNIQUE|FULLTEXT|FOREIGN|KEY|INDEX)[\s]*?(?P<key_type>INDEX|KEY)?[\s]*(?:`?(?P<field>[\w]*)`?)?[\s]*?\(`?(?P<keyname>[\w]+)`?(?:\s*\((?P<length>\d+)\))?(?:\s*(?P<order>ASC|DESC))?\)[\s]*,?/i";
|
||||||
preg_match_all($regex,$data,$m);
|
preg_match_all($regex,$data,$m);
|
||||||
|
|
||||||
|
$ret = [];
|
||||||
|
|
||||||
|
foreach($m['type'] as $k=>$val)
|
||||||
|
{
|
||||||
|
$i = $m['field'][$k];
|
||||||
|
$type = trim(strtoupper($m['type'][$k]));
|
||||||
|
$keyname = trim($m['keyname'][$k]);
|
||||||
|
$field = trim($m['field'][$k]);
|
||||||
|
|
||||||
|
if(empty($field) || $field === 'KEY')
|
||||||
|
{
|
||||||
|
$field = $keyname;
|
||||||
|
$i = $keyname;
|
||||||
|
}
|
||||||
|
|
||||||
|
if($type === 'KEY' || $type === 'INDEX')
|
||||||
|
{
|
||||||
|
$type = '';
|
||||||
|
}
|
||||||
|
|
||||||
|
if(empty($keyname) || $keyname === 'KEY')
|
||||||
|
{
|
||||||
|
$keyname = $field;
|
||||||
|
}
|
||||||
|
|
||||||
|
$ret[$i] = array(
|
||||||
|
'type' => $type,
|
||||||
|
'keyname' => $keyname,
|
||||||
|
'field' => $field,
|
||||||
|
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $ret;
|
||||||
|
/*
|
||||||
if (count($m) > 0)
|
if (count($m) > 0)
|
||||||
{
|
{
|
||||||
unset($m[2]);
|
unset($m[2]);
|
||||||
@@ -1273,7 +1304,7 @@ class db_verify
|
|||||||
}
|
}
|
||||||
|
|
||||||
return $ret;
|
return $ret;
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@@ -57,5 +57,7 @@ CREATE TABLE blank (
|
|||||||
`blank_url` varchar(255) NOT NULL,
|
`blank_url` varchar(255) NOT NULL,
|
||||||
`blank_media` json DEFAULT NULL,
|
`blank_media` json DEFAULT NULL,
|
||||||
`blank_class` int(10) NOT NULL,
|
`blank_class` int(10) NOT NULL,
|
||||||
PRIMARY KEY (`blank_id`)
|
PRIMARY KEY (`blank_id`),
|
||||||
|
FULLTEXT (`blank_nick`),
|
||||||
|
FULLTEXT (`blank_message`)
|
||||||
) ENGINE=MyISAM;
|
) ENGINE=MyISAM;
|
||||||
|
@@ -5,5 +5,7 @@ CREATE TABLE chatbox (
|
|||||||
cb_datestamp int(10) unsigned NOT NULL default '0',
|
cb_datestamp int(10) unsigned NOT NULL default '0',
|
||||||
cb_blocked tinyint(3) unsigned NOT NULL default '0',
|
cb_blocked tinyint(3) unsigned NOT NULL default '0',
|
||||||
cb_ip varchar(45) NOT NULL default '',
|
cb_ip varchar(45) NOT NULL default '',
|
||||||
|
FULLTEXT (cb_nick),
|
||||||
|
FULLTEXT (cb_message),
|
||||||
PRIMARY KEY (cb_id)
|
PRIMARY KEY (cb_id)
|
||||||
) ENGINE=MyISAM;
|
) ENGINE=MyISAM;
|
@@ -25,7 +25,11 @@ CREATE TABLE download (
|
|||||||
download_visible varchar(255) NOT NULL default '0',
|
download_visible varchar(255) NOT NULL default '0',
|
||||||
PRIMARY KEY (download_id),
|
PRIMARY KEY (download_id),
|
||||||
UNIQUE KEY download_name (download_name),
|
UNIQUE KEY download_name (download_name),
|
||||||
KEY download_category (download_category)
|
KEY download_category (download_category),
|
||||||
|
FULLTEXT (download_url),
|
||||||
|
FULLTEXT (download_description),
|
||||||
|
FULLTEXT (download_author),
|
||||||
|
FULLTEXT (download_author_website)
|
||||||
) ENGINE=MyISAM;
|
) ENGINE=MyISAM;
|
||||||
# --------------------------------------------------------
|
# --------------------------------------------------------
|
||||||
|
|
||||||
|
@@ -9,7 +9,10 @@ CREATE TABLE faqs (
|
|||||||
faq_author_ip varchar(45) NOT NULL default '',
|
faq_author_ip varchar(45) NOT NULL default '',
|
||||||
faq_tags varchar(255) NOT NULL default '',
|
faq_tags varchar(255) NOT NULL default '',
|
||||||
faq_order int(6) unsigned NOT NULL default '0',
|
faq_order int(6) unsigned NOT NULL default '0',
|
||||||
PRIMARY KEY (faq_id)
|
PRIMARY KEY (faq_id),
|
||||||
|
FULLTEXT (faq_question),
|
||||||
|
FULLTEXT (faq_answer),
|
||||||
|
FULLTEXT (faq_tags)
|
||||||
) ENGINE=MyISAM;
|
) ENGINE=MyISAM;
|
||||||
|
|
||||||
CREATE TABLE faqs_info (
|
CREATE TABLE faqs_info (
|
||||||
@@ -23,6 +26,7 @@ CREATE TABLE faqs_info (
|
|||||||
faq_info_metad varchar(255) NOT NULL default '',
|
faq_info_metad varchar(255) NOT NULL default '',
|
||||||
faq_info_metak varchar(255) NOT NULL default '',
|
faq_info_metak varchar(255) NOT NULL default '',
|
||||||
faq_info_sef varchar(255) NOT NULL default '',
|
faq_info_sef varchar(255) NOT NULL default '',
|
||||||
PRIMARY KEY (faq_info_id)
|
PRIMARY KEY (faq_info_id),
|
||||||
|
FULLTEXT (faq_info_title)
|
||||||
) ENGINE=MyISAM;
|
) ENGINE=MyISAM;
|
||||||
|
|
||||||
|
@@ -43,7 +43,8 @@ CREATE TABLE forum_thread (
|
|||||||
PRIMARY KEY (`thread_id`),
|
PRIMARY KEY (`thread_id`),
|
||||||
KEY `thread_forum_id` (`thread_forum_id`),
|
KEY `thread_forum_id` (`thread_forum_id`),
|
||||||
KEY `thread_sticky` (`thread_sticky`),
|
KEY `thread_sticky` (`thread_sticky`),
|
||||||
KEY `thread_lastpost` (`thread_lastpost`)
|
KEY `thread_lastpost` (`thread_lastpost`),
|
||||||
|
FULLTEXT (`thread_name`)
|
||||||
) ENGINE=MyISAM AUTO_INCREMENT=1 ;
|
) ENGINE=MyISAM AUTO_INCREMENT=1 ;
|
||||||
|
|
||||||
CREATE TABLE forum_post (
|
CREATE TABLE forum_post (
|
||||||
@@ -65,7 +66,8 @@ CREATE TABLE forum_post (
|
|||||||
KEY `post_thread` (`post_thread`),
|
KEY `post_thread` (`post_thread`),
|
||||||
KEY `post_forum` (`post_forum`),
|
KEY `post_forum` (`post_forum`),
|
||||||
KEY `post_datestamp` (`post_datestamp`),
|
KEY `post_datestamp` (`post_datestamp`),
|
||||||
KEY `post_user` (`post_user`)
|
KEY `post_user` (`post_user`),
|
||||||
|
FULLTEXT (`post_entry`)
|
||||||
) ENGINE=MyISAM AUTO_INCREMENT=1 ;
|
) ENGINE=MyISAM AUTO_INCREMENT=1 ;
|
||||||
|
|
||||||
CREATE TABLE forum_track (
|
CREATE TABLE forum_track (
|
||||||
|
@@ -51,6 +51,8 @@ class db_verifyTest extends \Codeception\Test\Unit
|
|||||||
table_email2 tinyint(3) unsigned NOT NULL default '0',
|
table_email2 tinyint(3) unsigned NOT NULL default '0',
|
||||||
table_email90 tinyint(3) unsigned NOT NULL default '0',
|
table_email90 tinyint(3) unsigned NOT NULL default '0',
|
||||||
e107_name varchar(100) NOT NULL default '',
|
e107_name varchar(100) NOT NULL default '',
|
||||||
|
FULLTEXT (table_title),
|
||||||
|
FULLTEXT (table_description),
|
||||||
PRIMARY KEY (table_id)";
|
PRIMARY KEY (table_id)";
|
||||||
|
|
||||||
$expected = array(
|
$expected = array(
|
||||||
@@ -250,10 +252,12 @@ class db_verifyTest extends \Codeception\Test\Unit
|
|||||||
|
|
||||||
$data = "`schedule_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
|
$data = "`schedule_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
|
||||||
`schedule_cust_id` int(11) NOT NULL,
|
`schedule_cust_id` int(11) NOT NULL,
|
||||||
|
`schedule_description` text NOT NULL,
|
||||||
`schedule_complete` int(1) unsigned NOT NULL DEFAULT 0,
|
`schedule_complete` int(1) unsigned NOT NULL DEFAULT 0,
|
||||||
PRIMARY KEY (`schedule_id`),
|
PRIMARY KEY (`schedule_id`),
|
||||||
UNIQUE KEY `schedule_cust_id` (`schedule_cust_id`),
|
FULLTEXT (`schedule_description`),
|
||||||
KEY `schedule_invoice_id` (`schedule_invoice_id`)";
|
UNIQUE KEY `schedule_cust_id` (`schedule_cust_id_key`),
|
||||||
|
KEY `schedule_invoice_id` (`schedule_invoice_id_key`)";
|
||||||
|
|
||||||
$expected = array(
|
$expected = array(
|
||||||
'schedule_id' =>
|
'schedule_id' =>
|
||||||
@@ -262,16 +266,22 @@ class db_verifyTest extends \Codeception\Test\Unit
|
|||||||
'keyname' => 'schedule_id',
|
'keyname' => 'schedule_id',
|
||||||
'field' => 'schedule_id',
|
'field' => 'schedule_id',
|
||||||
),
|
),
|
||||||
|
'schedule_description' =>
|
||||||
|
array(
|
||||||
|
'type' => 'FULLTEXT',
|
||||||
|
'keyname' => 'schedule_description',
|
||||||
|
'field' => 'schedule_description',
|
||||||
|
),
|
||||||
'schedule_cust_id' =>
|
'schedule_cust_id' =>
|
||||||
array(
|
array(
|
||||||
'type' => 'UNIQUE',
|
'type' => 'UNIQUE',
|
||||||
'keyname' => 'schedule_cust_id',
|
'keyname' => 'schedule_cust_id_key',
|
||||||
'field' => 'schedule_cust_id',
|
'field' => 'schedule_cust_id',
|
||||||
),
|
),
|
||||||
'schedule_invoice_id' =>
|
'schedule_invoice_id' =>
|
||||||
array(
|
array(
|
||||||
'type' => '',
|
'type' => '',
|
||||||
'keyname' => 'schedule_invoice_id',
|
'keyname' => 'schedule_invoice_id_key',
|
||||||
'field' => 'schedule_invoice_id',
|
'field' => 'schedule_invoice_id',
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
@@ -839,6 +849,7 @@ EOF;
|
|||||||
`schedule_results` text NOT NULL,
|
`schedule_results` text NOT NULL,
|
||||||
PRIMARY KEY (`schedule_id`),
|
PRIMARY KEY (`schedule_id`),
|
||||||
UNIQUE KEY `schedule_user_id` (`schedule_user_id`),
|
UNIQUE KEY `schedule_user_id` (`schedule_user_id`),
|
||||||
|
FULLTEXT (`schedule_name`),
|
||||||
KEY `schedule_invoice_id` (`schedule_invoice_id`)
|
KEY `schedule_invoice_id` (`schedule_invoice_id`)
|
||||||
";
|
";
|
||||||
|
|
||||||
@@ -960,6 +971,17 @@ EOF;
|
|||||||
),
|
),
|
||||||
'_file' => 'myplugin',
|
'_file' => 'myplugin',
|
||||||
),
|
),
|
||||||
|
'schedule_name' =>
|
||||||
|
array(
|
||||||
|
'_status' => 'missing_index',
|
||||||
|
'_valid' =>
|
||||||
|
array(
|
||||||
|
'type' => 'FULLTEXT',
|
||||||
|
'keyname' => 'schedule_name',
|
||||||
|
'field' => 'schedule_name',
|
||||||
|
),
|
||||||
|
'_file' => 'myplugin',
|
||||||
|
),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user