Сравнить две структуры таблиц 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, время: 22:39. |