has_errors()) {
throw new Exception("DB Errors: " . implode("\n
", $db->get_errors()));
}
$res = $db->query($sql);
while ($r = $db->fetch($res)) {
$rows[] = $r;
}
echo $sql;
echo'
';print_r($rows);echo'
';
die('OK');
}
public function runAction() {
$sql = "call `update_project_path_idx_rec`();";
// TODO: update fields:
// `IN7_MK_BAZA_DYSTRYBUCJI`.`path`
// `IN7_DZIENNIK_KORESP`.`path`
// `PROBLEMS`.`ID_PROJECT_path`
$db = DB::getDB();
if ($db->has_errors()) {
throw new Exception("DB Errors: " . implode("\n
", $db->get_errors()));
}
$res = $db->query($sql);
if ($db->has_errors()) {
throw new Exception("DB Errors: " . implode("\n
", $db->get_errors()));
}
die('OK');
}
public function reinstallAction() {
// TODO: reinstall triggers for after insert/update `IN7_MK_BAZA_DYSTRYBUCJI`?
// TODO: reinstall triggers for after insert/update `IN7_DZIENNIK_KORESP` and `PROBLEMS`?
// coalesce((select p.`path` from `IN7_MK_BAZA_DYSTRYBUCJI` p where p.`ID`=4480 limit 1), 'Brak projektu')
$sqlList = array();
$sqlList['RemoveTable'] = "DROP TABLE IF EXISTS `_project_path_idx`";
$sqlList['InstallTable'] = "
CREATE TABLE IF NOT EXISTS `_project_path_idx` (
`ID` int(11) NOT NULL
, `P_ID` int(11) NOT NULL DEFAULT '0'
, `idx_PATH` varchar(255) NOT NULL DEFAULT ''
, KEY `ID` (`ID`)
, KEY `P_ID` (`P_ID`)
) ENGINE=MyISAM DEFAULT CHARSET=latin2
";
$sqlList['RemoveProcedure'] = "DROP PROCEDURE if exists `update_project_path_idx_rec`";
$sqlList['CreateProcedure'] = "
CREATE PROCEDURE `update_project_path_idx_rec`()
BEGIN
SET @conf_last_exec_key = 'tbl_indexer_project_last_exec';
replace into `CRM_CONFIG` (`conf_key`, `conf_val`) values (@conf_last_exec_key, NOW());
truncate table `_project_path_idx`;
-- delete from `_project_path_idx`;
insert into `_project_path_idx` (`ID`,`P_ID`)
select p.`ID`, p.`P_ID`
from `IN7_MK_BAZA_DYSTRYBUCJI` p
where 1=1
;
update `_project_path_idx` as p set p.`idx_PATH`=concat('0-', p.`ID`) where p.`P_ID` is null or p.`P_ID`=0;
update `_project_path_idx` as p set p.`idx_PATH`=concat('-1-', p.`ID`) where p.`P_ID`=-1;
SET @i = 0;
SET @loopLomit = 100;
SET @pinitCnt = 1;
WHILE @i < @loopLomit and @pinitCnt > 0 DO
update `_project_path_idx` p join `_project_path_idx` pp on(pp.`ID`=p.`P_ID`)
set p.`idx_PATH`=concat(pp.`idx_PATH`, '-', p.`ID`)
where p.`idx_PATH`='' and pp.`idx_PATH`!='';
SET @pinitCnt = ROW_COUNT();
SET @i = @i + 1;
END WHILE;
END ;
";
$sqlList['RemoveTrigger_BeforeInsertProject'] = "DROP TRIGGER IF EXISTS `_IN7_MK_BAZA_DYSTRYBUCJI_tree_INSERT`";
$sqlList['CreateTrigger_BeforeInsertProject'] = "
CREATE TRIGGER `_IN7_MK_BAZA_DYSTRYBUCJI_tree_INSERT` BEFORE INSERT ON `IN7_MK_BAZA_DYSTRYBUCJI`
FOR EACH ROW BEGIN
-- SET NEW.path = IN7_MK_BAZA_DYSTRYBUCJI_hierarchy_sys_connect_by_path('-', NEW.P_ID);
SET NEW.path = (select CONCAT(
(select IF (NEW.`P_ID`>0,
coalesce(
(select p.`path` from `IN7_MK_BAZA_DYSTRYBUCJI` p where p.`ID`=NEW.`P_ID` limit 1)
, '?')
, NEW.`P_ID`
))
, '-'
, (select AUTO_INCREMENT from information_schema.TABLES where TABLE_SCHEMA=DATABASE() AND TABLE_NAME='IN7_MK_BAZA_DYSTRYBUCJI')
));
END
";
$db = DB::getDB();
if ($db->has_errors()) {
throw new Exception("DB Errors: " . implode("\n
", $db->get_errors()));
}
foreach ($sqlList as $sqlName => $sql) {
$res = $db->query($sql);
if ($db->has_errors()) {
throw new Exception("DB Errors at sql '{$sqlName}': " . implode("\n
", $db->get_errors()));
}
}
die('OK');
}
}
/**
* Old triggers before 2015-06-10:
CREATE TRIGGER `_IN7_MK_BAZA_DYSTRYBUCJI_tree_INSERT` BEFORE INSERT ON `IN7_MK_BAZA_DYSTRYBUCJI`
FOR EACH ROW BEGIN
SET NEW.path = IN7_MK_BAZA_DYSTRYBUCJI_hierarchy_sys_connect_by_path('-', NEW.P_ID);
END
CREATE TRIGGER `_IN7_MK_BAZA_DYSTRYBUCJI_tree_UPDATE` BEFORE UPDATE ON `IN7_MK_BAZA_DYSTRYBUCJI`
FOR EACH ROW BEGIN
IF NEW.P_ID<>OLD.P_ID THEN
SET NEW.path = IN7_MK_BAZA_DYSTRYBUCJI_hierarchy_sys_connect_by_path('-', NEW.P_ID);
update IN7_DZIENNIK_KORESP ik set ik.path=IN7_MK_BAZA_DYSTRYBUCJI_hierarchy_sys_connect_by_path('-', NEW.ID) where path like concat('%',NEW.ID,'%');
-- update PROBLEMS ik set ik.ID_PROJET_path=IN7_MK_BAZA_DYSTRYBUCJI_hierarchy_sys_connect_by_path('-', NEW.ID) where ID_PROJET_path like concat('%',NEW.ID,'%');
END IF;
END
CREATE TRIGGER `_IN7_DZIENNIK_KORESP_tree_INSERT` BEFORE INSERT ON `IN7_DZIENNIK_KORESP`
FOR EACH ROW BEGIN
IF NEW.ID_PROJECT IS NOT NULL THEN
SET NEW.path = IN7_MK_BAZA_DYSTRYBUCJI_hierarchy_sys_connect_by_path('-', NEW.ID_PROJECT);
END IF;
END
CREATE TRIGGER `_IN7_DZIENNIK_KORESP_tree_UPDATE` BEFORE UPDATE ON `IN7_DZIENNIK_KORESP`
FOR EACH ROW BEGIN
IF NEW.ID_PROJECT is null THEN
SET NEW.path = '';
ELSEIF OLD.ID_PROJECT IS NULL or NEW.ID_PROJECT<>OLD.ID_PROJECT THEN
SET NEW.path = IN7_MK_BAZA_DYSTRYBUCJI_hierarchy_sys_connect_by_path('-', NEW.ID_PROJECT);
END IF;
END
CREATE FUNCTION `IN7_MK_BAZA_DYSTRYBUCJI_hierarchy_sys_connect_by_path`(`delimiter` TEXT, `node` INT) RETURNS text CHARSET latin2
READS SQL DATA
BEGIN
DECLARE _path TEXT;
DECLARE _type CHAR(255);
DECLARE _lvl INT;
DECLARE _cpath TEXT;
DECLARE _id INT;
DECLARE _id_cur INT;
DECLARE EXIT HANDLER FOR NOT FOUND RETURN _path;
SET _id = COALESCE(node, @id);
SET _path = _id;
SET _lvl=1;
the_loop: LOOP
SET _lvl =_lvl+1;
IF _lvl>100 THEN
RETURN concat('ERROR',_path);
LEAVE the_loop;
END IF;
SELECT P_ID,M_DIST_TYPE,ID
INTO _id,_type,_id_cur
FROM IN7_MK_BAZA_DYSTRYBUCJI
WHERE id = _id
AND COALESCE(id <> @start_with, TRUE);
SET _path = CONCAT(_id, delimiter, _path);
END LOOP the_loop;
END
CREATE EVENT `_IN7_MK_BAZA_DYSTRYBUCJI__IN7_DZIENNIK_KORESP_tree_event` ON SCHEDULE EVERY 1 DAY STARTS '2015-05-15 05:00:00' ON COMPLETION NOT PRESERVE ENABLE DO BEGIN
update IN7_MK_BAZA_DYSTRYBUCJI set path=IN7_MK_BAZA_DYSTRYBUCJI_hierarchy_sys_connect_by_path('-',ID);
update IN7_DZIENNIK_KORESP set path=IN7_MK_BAZA_DYSTRYBUCJI_hierarchy_sys_connect_by_path('-',ID_PROJECT);
END
*/