Сравнить две структуры таблиц MySQL
Имеется две структуры одной и тоже таблицы:
CREATE TABLE `portal-files` ( `id` int(10) NOT NULL AUTO_INCREMENT, `mandt` char(3) NOT NULL DEFAULT '000' COMMENT 'Мандат', `filename` varchar(256) DEFAULT '' COMMENT 'Имя файла', `size` int(11) DEFAULT '0' COMMENT 'Размер файла, байт', `mimetype` char(64) DEFAULT '' COMMENT 'Тип данных', `ernam` int(10) DEFAULT '0' COMMENT 'Идентификатор пользователя, добавившего файл', `erdat` int(10) DEFAULT '0' COMMENT 'Время добавления', `ispack` tinyint(1) DEFAULT '0' COMMENT 'Время добавления', `del` tinyint(1) DEFAULT '0' COMMENT 'Флаг удаления (если = 1, то файл удален)', `modname` varchar(128) DEFAULT '' COMMENT 'Имя модуля, к которому относится файл', `xdata` varchar(256) DEFAULT '' COMMENT 'Параметры для проверки прав', PRIMARY KEY (`id`), KEY `Index 2` (`mandt`,`size`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='Список файлов' CREATE TABLE `portal-files` ( `id` int(10) NOT NULL auto_increment, `mandt` char(3) NOT NULL default '000' COMMENT 'Мандат', `filename` varchar(256) default '' COMMENT 'Имя файла', `size` int(11) default '0' COMMENT 'Размер файла, байт', `mimetype` char(64) default '' COMMENT 'Тип данных', `ernam` int(10) default '0' COMMENT 'Идентификатор пользователя, добавившего файл', `erdat` int(10) default '0' COMMENT 'Время добавления', `ispack` tinyint(1) default '0' COMMENT 'Время добавления', `del` tinyint(1) default '0' COMMENT 'Флаг удаления (если = 1, то файл удален)', `modname` varchar(128) default '' COMMENT 'Имя модуля, к которому относится файл', `xdata` varchar(256) default '' COMMENT 'Параметры для проверки прав', PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='Список файлов' Как можно заметить, это две структуры одной и той же таблицы. Эту информацию возвращает один и тот же код. Однако описание отличаются. В частности некоторые ключевые слова в разных регистрах. К тому же PRIMARY KEY (`id`) в одном случае один пробел между 'KEY' и '(', в другом два. Мне же нужно на Javascript-е сравнить эти два описания и вернуть результат: одинаковая структура или нет? Может кто-то может предложить умную идею по реализации? p.s. пишу здесь, так как реализация нужна на JS. Надеюсь что народ предложит красивое решение, которого я не вижу.:) |
Shasoft,
Сравнить чисто как текст, учитывая разницу в пробелах или сравнивать как структуру данных ? * Тогда межсловные пробелы не будут не учитывацо, кроме структур заключенных в общие кавычки |
Как структуру. Нужно учитывать не только пробелы, но и разный регистр ключевых слов.
В общем для сравнения разделил текст на лексемы двух типов: с учетом регистра (обрамлены символами ' или `) и без учета регистра (всё остальное). Разбиваю текст на эти лексемы и потом уже их сравниваю. Вроде работает.
// Разобьем текст на лексемы
function _parse(text)
{
var res=[];
res.pushS=function(s){
if( s.length>0 )
this.push(s);
};
//
var s="";
for(var i=0;i<text.length;i++)
{
var ch=text.charAt(i);
switch(ch)
{ // регистрозависимый текст
case "'":
case "`":
{
res.pushS(s);
var e=text.indexOf(ch,i+1);
res.pushS( text.substring(i+1,e) );
s = "";
//
i = e;
}
break;
// Символы окончания лексемы
case " ":
case "\r":
case "\n":
{
res.pushS(s.toLowerCase());
s="";
}
break;
// Просто добавляем символ к лексеме
default:
{
s+=ch;
}
break;
}
}
res.pushS(s);
//
return res;
}
|
| Часовой пояс GMT +3, время: 06:24. |