mirror of
https://github.com/e107inc/e107.git
synced 2025-03-14 01:19:44 +01:00
Issue #5209 - Partial fix. Currently does not support FULLTEXT on a field that already has an INDEX.
This commit is contained in:
parent
8a6919f2a3
commit
0b89d5d301
@ -331,7 +331,13 @@ CREATE TABLE news (
|
||||
KEY news_datestamp (news_datestamp),
|
||||
KEY news_sticky (news_sticky),
|
||||
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;
|
||||
|
||||
|
||||
@ -410,9 +416,12 @@ CREATE TABLE page (
|
||||
menu_template varchar(50) NOT NULL default '',
|
||||
menu_class varchar(250) NOT NULL default '0',
|
||||
menu_button_url varchar(250) NOT NULL default '',
|
||||
menu_button_text varchar(250) NOT NULL default '',
|
||||
|
||||
PRIMARY KEY (page_id)
|
||||
menu_button_text varchar(250) NOT NULL default '',
|
||||
PRIMARY KEY (page_id),
|
||||
FULLTEXT (page_title),
|
||||
FULLTEXT (page_text),
|
||||
FULLTEXT (page_metakeys),
|
||||
FULLTEXT (page_fields)
|
||||
) ENGINE=InnoDB;
|
||||
# --------------------------------------------------------
|
||||
|
||||
@ -589,7 +598,8 @@ CREATE TABLE user (
|
||||
PRIMARY KEY (user_id),
|
||||
UNIQUE KEY user_name (user_name),
|
||||
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;
|
||||
# --------------------------------------------------------
|
||||
|
||||
|
@ -793,7 +793,7 @@ class db_verify
|
||||
// return "<pre>".print_r($data,TRUE)."</pre>";
|
||||
|
||||
$v = $data['_valid'];
|
||||
$i = $data['_invalid'];
|
||||
$i = !empty($data['_invalid']) ? $data['_invalid'] : array();
|
||||
|
||||
$valid = $this->toMysql($v,$mode);
|
||||
$invalid = $this->toMysql($i,$mode);
|
||||
@ -1163,6 +1163,13 @@ class db_verify
|
||||
foreach($tmp as $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);
|
||||
}
|
||||
|
||||
@ -1172,26 +1179,13 @@ class db_verify
|
||||
$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 = "/^\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);
|
||||
|
||||
$ret = array();
|
||||
|
||||
if($print) var_dump($regex, $m);
|
||||
|
||||
if($print) var_dump($regex, $m);
|
||||
|
||||
foreach($m[1] as $k=>$val)
|
||||
{
|
||||
@ -1215,10 +1209,47 @@ class db_verify
|
||||
*/
|
||||
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);
|
||||
|
||||
$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)
|
||||
{
|
||||
unset($m[2]);
|
||||
@ -1273,7 +1304,7 @@ class db_verify
|
||||
}
|
||||
|
||||
return $ret;
|
||||
|
||||
*/
|
||||
}
|
||||
|
||||
|
||||
|
@ -57,5 +57,7 @@ CREATE TABLE blank (
|
||||
`blank_url` varchar(255) NOT NULL,
|
||||
`blank_media` json DEFAULT NULL,
|
||||
`blank_class` int(10) NOT NULL,
|
||||
PRIMARY KEY (`blank_id`)
|
||||
PRIMARY KEY (`blank_id`),
|
||||
FULLTEXT (`blank_nick`),
|
||||
FULLTEXT (`blank_message`)
|
||||
) ENGINE=MyISAM;
|
||||
|
@ -5,5 +5,7 @@ CREATE TABLE chatbox (
|
||||
cb_datestamp int(10) unsigned NOT NULL default '0',
|
||||
cb_blocked tinyint(3) unsigned NOT NULL default '0',
|
||||
cb_ip varchar(45) NOT NULL default '',
|
||||
FULLTEXT (cb_nick),
|
||||
FULLTEXT (cb_message),
|
||||
PRIMARY KEY (cb_id)
|
||||
) ENGINE=MyISAM;
|
@ -25,7 +25,11 @@ CREATE TABLE download (
|
||||
download_visible varchar(255) NOT NULL default '0',
|
||||
PRIMARY KEY (download_id),
|
||||
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;
|
||||
# --------------------------------------------------------
|
||||
|
||||
|
@ -9,7 +9,10 @@ CREATE TABLE faqs (
|
||||
faq_author_ip varchar(45) NOT NULL default '',
|
||||
faq_tags varchar(255) NOT NULL default '',
|
||||
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;
|
||||
|
||||
CREATE TABLE faqs_info (
|
||||
@ -23,6 +26,7 @@ CREATE TABLE faqs_info (
|
||||
faq_info_metad varchar(255) NOT NULL default '',
|
||||
faq_info_metak 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;
|
||||
|
||||
|
@ -43,7 +43,8 @@ CREATE TABLE forum_thread (
|
||||
PRIMARY KEY (`thread_id`),
|
||||
KEY `thread_forum_id` (`thread_forum_id`),
|
||||
KEY `thread_sticky` (`thread_sticky`),
|
||||
KEY `thread_lastpost` (`thread_lastpost`)
|
||||
KEY `thread_lastpost` (`thread_lastpost`),
|
||||
FULLTEXT (`thread_name`)
|
||||
) ENGINE=MyISAM AUTO_INCREMENT=1 ;
|
||||
|
||||
CREATE TABLE forum_post (
|
||||
@ -65,7 +66,8 @@ CREATE TABLE forum_post (
|
||||
KEY `post_thread` (`post_thread`),
|
||||
KEY `post_forum` (`post_forum`),
|
||||
KEY `post_datestamp` (`post_datestamp`),
|
||||
KEY `post_user` (`post_user`)
|
||||
KEY `post_user` (`post_user`),
|
||||
FULLTEXT (`post_entry`)
|
||||
) ENGINE=MyISAM AUTO_INCREMENT=1 ;
|
||||
|
||||
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_email90 tinyint(3) unsigned NOT NULL default '0',
|
||||
e107_name varchar(100) NOT NULL default '',
|
||||
FULLTEXT (table_title),
|
||||
FULLTEXT (table_description),
|
||||
PRIMARY KEY (table_id)";
|
||||
|
||||
$expected = array(
|
||||
@ -250,10 +252,12 @@ class db_verifyTest extends \Codeception\Test\Unit
|
||||
|
||||
$data = "`schedule_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
|
||||
`schedule_cust_id` int(11) NOT NULL,
|
||||
`schedule_description` text NOT NULL,
|
||||
`schedule_complete` int(1) unsigned NOT NULL DEFAULT 0,
|
||||
PRIMARY KEY (`schedule_id`),
|
||||
UNIQUE KEY `schedule_cust_id` (`schedule_cust_id`),
|
||||
KEY `schedule_invoice_id` (`schedule_invoice_id`)";
|
||||
FULLTEXT (`schedule_description`),
|
||||
UNIQUE KEY `schedule_cust_id` (`schedule_cust_id_key`),
|
||||
KEY `schedule_invoice_id` (`schedule_invoice_id_key`)";
|
||||
|
||||
$expected = array(
|
||||
'schedule_id' =>
|
||||
@ -262,16 +266,22 @@ class db_verifyTest extends \Codeception\Test\Unit
|
||||
'keyname' => 'schedule_id',
|
||||
'field' => 'schedule_id',
|
||||
),
|
||||
'schedule_description' =>
|
||||
array(
|
||||
'type' => 'FULLTEXT',
|
||||
'keyname' => 'schedule_description',
|
||||
'field' => 'schedule_description',
|
||||
),
|
||||
'schedule_cust_id' =>
|
||||
array(
|
||||
'type' => 'UNIQUE',
|
||||
'keyname' => 'schedule_cust_id',
|
||||
'keyname' => 'schedule_cust_id_key',
|
||||
'field' => 'schedule_cust_id',
|
||||
),
|
||||
'schedule_invoice_id' =>
|
||||
array(
|
||||
'type' => '',
|
||||
'keyname' => 'schedule_invoice_id',
|
||||
'keyname' => 'schedule_invoice_id_key',
|
||||
'field' => 'schedule_invoice_id',
|
||||
),
|
||||
);
|
||||
@ -839,6 +849,7 @@ EOF;
|
||||
`schedule_results` text NOT NULL,
|
||||
PRIMARY KEY (`schedule_id`),
|
||||
UNIQUE KEY `schedule_user_id` (`schedule_user_id`),
|
||||
FULLTEXT (`schedule_name`),
|
||||
KEY `schedule_invoice_id` (`schedule_invoice_id`)
|
||||
";
|
||||
|
||||
@ -960,6 +971,17 @@ EOF;
|
||||
),
|
||||
'_file' => 'myplugin',
|
||||
),
|
||||
'schedule_name' =>
|
||||
array(
|
||||
'_status' => 'missing_index',
|
||||
'_valid' =>
|
||||
array(
|
||||
'type' => 'FULLTEXT',
|
||||
'keyname' => 'schedule_name',
|
||||
'field' => 'schedule_name',
|
||||
),
|
||||
'_file' => 'myplugin',
|
||||
),
|
||||
),
|
||||
);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user