Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- function ParseSQLTable($name)
- {
- /*
- CREATE TABLE `cms_users` (
- `id` int(10) unsigned NOT NULL auto_increment,
- `group` int(11) NOT NULL default '0',
- `name` varchar(50) NOT NULL default '',
- `pass` varchar(32) NOT NULL default '',
- `avatar` varchar(30) NOT NULL default '/no-avatar.gif',
- `mail` varchar(40) NOT NULL default '',
- PRIMARY KEY (`id`),
- KEY `group` (`group`,`name`,`pass`)
- ) ENGINE=MyISAM DEFAULT CHARSET=cp1251
- */
- global $db,$cfg;
- $db->query("SHOW CREATE TABLE $name");
- $sql=$db->assoc();
- $sql=end($sql);
- if (!preg_match('#^CREATE TABLE `(.*?)` \((.*)\)(.*)$#si',$sql,$res)) die('Неизвестный формат... Не вдупляю что это =)');
- $table['name']=str_replace($cfg['prefix'],'#',trim($res[1]));
- $table['params']=trim($res[3]);
- $struct=explode(',',$res[2]);
- $i=0;
- $test=0;
- foreach ($struct as $k=>$v)
- {
- if (!isset($struct2[++$i])) $struct2[$i]='';
- $struct2[$i].=trim($v);
- $test=$test + substr_count($v,'(') - substr_count($v,')');
- if ($test > 0) $struct2[$i--].=',';
- }
- foreach ($struct2 as $k=>$v)
- {
- if (!preg_match('#`(.*?)`#',$v,$res)) die($v.' - без понятия где тут название поля');
- if (strpos($v,'KEY')!==false || strpos($v,'INDEX')!==false)
- $table['keys'][$res[1]]=$v;
- else $table['struct'][$res[1]]=$v;
- }
- return $table;
- }
- function tableDiff($my,$remote)
- {
- /*
- // добавить поле
- ALTER TABLE `cms_ank` ADD `test` VARCHAR( 15 ) NOT NULL AFTER `id` ;
- // добавить индекс
- ALTER TABLE `cms_ank` ADD KEY ( `date` )
- ALTER TABLE `cms_ank` ADD KEY `test` ( `date` )
- // изменить поле
- ALTER TABLE `cms_users` CHANGE `group` `group` INT( 11 ) DEFAULT '1' NOT NULL
- // изменить индекс
- ALTER TABLE `cms_users` DROP INDEX `group` ,
- ADD INDEX `group` ( `group` , `name` ) */
- $sql='';
- // структура
- foreach ($remote['struct'] as $name => $text)
- {
- if (!isset($my['struct'][$name]))
- {// если не существует у меня такое поле
- $sql.="ALTER TABLE `$my[name]` ADD $text;\n"; // добавим
- } elseif ($my['struct'][$name] != $text)
- {// если что-то изменено
- $sql.="ALTER TABLE `$my[name]` CHANGE `$name` $text;\n";
- }
- }
- // индексы
- foreach ($remote['keys'] as $name => $text)
- {
- if (!isset($my['keys'][$name]))
- {// если не существует у меня такой индекс
- $sql.="ALTER TABLE `$my[name]` ADD $text;\n"; // добавим
- } elseif ($my['keys'][$name] != $text)
- {// если индекс поменялся
- $sql.="ALTER TABLE `$my[name]` DROP KEY `$name`, ADD $text;\n";
- }
- }
- return $sql;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement