|
|
@@ -37,7 +37,7 @@ class Route_FixCrmProcesInitIdx extends RouteBase {
|
|
|
<div class="container">
|
|
|
<div class="alert alert-success">
|
|
|
Zaktualizowano uprawnienia
|
|
|
- <br><span style="opacity:0.6;">(<?php echo number_format($procExecTime, 6); ?>s)</span>
|
|
|
+ <br><span style="font-style:italic; opacity:0.4;">(<?php echo number_format($procExecTime, 6); ?> s)</span>
|
|
|
</div>
|
|
|
</div>
|
|
|
<?php
|
|
|
@@ -65,6 +65,266 @@ class Route_FixCrmProcesInitIdx extends RouteBase {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ public function test1Action() {
|
|
|
+ $sql = <<<SQL
|
|
|
+ select count(*) as cnt, p.`ID`, group_concat(i.`idx_PROCES_INIT_ID`), group_concat(i.`idx_PROCES_WITH_GROUPS_ID`)
|
|
|
+ from `CRM_PROCES` p
|
|
|
+ left join `CRM_PROCES_idx` i on(i.`ID`=p.`ID`)
|
|
|
+ where i.`ID`=p.`ID`
|
|
|
+ group by p.`ID`
|
|
|
+ order by cnt desc
|
|
|
+SQL;
|
|
|
+ $db = DB::getDB();
|
|
|
+ if ($db->has_errors()) {
|
|
|
+ throw new Exception("DB Errors: " . implode("\n<br>", $db->get_errors()));
|
|
|
+ }
|
|
|
+ $res = $db->query($sql);
|
|
|
+ if ($db->has_errors()) {
|
|
|
+ throw new Exception("DB Errors: " . implode("\n<br>", $db->get_errors()));
|
|
|
+ }
|
|
|
+ while ($r = $db->fetch($res)) {
|
|
|
+ echo'<pre>';print_r($r);echo'</pre>';
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public function test2Action() {
|
|
|
+ $sqlList = array();
|
|
|
+ $sqlList['RemoveTableGroupToInit'] = "DROP TABLE IF EXISTS `CRM_PROCES_idx_GROUPS_to_INIT`";
|
|
|
+ $sqlList['InstallTableGroupToInit'] = <<<SQL
|
|
|
+ CREATE TABLE IF NOT EXISTS `CRM_PROCES_idx_GROUPS_to_INIT` (
|
|
|
+ `PROCES_INIT_ID` int(11) NOT NULL
|
|
|
+ , `GROUP_ID` int(11) NOT NULL
|
|
|
+ , KEY `PROCES_INIT_ID` (`PROCES_INIT_ID`)
|
|
|
+ , KEY `GROUP_ID` (`GROUP_ID`)
|
|
|
+ , UNIQUE KEY `uniq__GROUP_to_INIT` (`PROCES_INIT_ID`,`GROUP_ID`)
|
|
|
+ ) ENGINE=MyISAM DEFAULT CHARSET=latin2;
|
|
|
+SQL;
|
|
|
+ $sqlList['UpdateTableGroupToInit'] = <<<SQL
|
|
|
+ insert ignore into `CRM_PROCES_idx_GROUPS_to_INIT` (`PROCES_INIT_ID`,`GROUP_ID`)
|
|
|
+ select i.`ID` as PROCES_INIT_ID, z.`ID` as GROUP_ID
|
|
|
+ from `CRM_PROCES_idx` i
|
|
|
+ join `CRM_WSKAZNIK` wsk on(wsk.`ID_PROCES`=i.`idx_PROCES_WITH_GROUPS_ID`
|
|
|
+ and wsk.`A_STATUS` in('NORMAL', 'WAITING')
|
|
|
+ )
|
|
|
+ join `CRM_LISTA_ZASOBOW` as z on(z.`ID`=wsk.`ID_ZASOB`
|
|
|
+ and z.`TYPE` in('STANOWISKO','PODMIOT','DZIAL')
|
|
|
+ and z.`A_STATUS` in('NORMAL', 'WAITING')
|
|
|
+ )
|
|
|
+ join `CRM_PRZYPADEK` przyp on(przyp.`ID`=wsk.`ID_PRZYPADEK`
|
|
|
+ and przyp.`FORM_TREAT` & 8 -- has perm X
|
|
|
+ )
|
|
|
+ where i.`TYPE` in('PROCES_INIT', 'GOTO_AND_RETURN')
|
|
|
+SQL;
|
|
|
+ $db = DB::getDB();
|
|
|
+ if ($db->has_errors()) {
|
|
|
+ throw new Exception("DB Errors: " . implode("\n<br>", $db->get_errors()));
|
|
|
+ }
|
|
|
+ $DBG_TIME = true;//('1' == V::get('DBG_TIME', '', $_GET));
|
|
|
+ $dbgExecTime = new DebugExecutionTime();
|
|
|
+ if ($DBG_TIME) $dbgExecTime->activate();
|
|
|
+ $dbgExecTime->log('start');
|
|
|
+ foreach ($sqlList as $sqlName => $sql) {
|
|
|
+ $res = $db->query($sql);
|
|
|
+ if ($db->has_errors()) {
|
|
|
+ throw new Exception("DB Errors at sql '{$sqlName}': " . implode("\n<br>", $db->get_errors()));
|
|
|
+ }
|
|
|
+ if($DBG_TIME) $dbgExecTime->log("end-{$sqlName}");
|
|
|
+ }
|
|
|
+ if($DBG_TIME) $dbgExecTime->printDebug();
|
|
|
+ }
|
|
|
+
|
|
|
+ public function runDebugAction() {
|
|
|
+ $sqlList = array();
|
|
|
+// SET @conf_last_exec_start_key = 'tbl_indexer_CRM_PROCES_last_exec_start';
|
|
|
+// SET @conf_last_exec_end_key = 'tbl_indexer_CRM_PROCES_last_exec_end';
|
|
|
+ $sqlList['0-prepare-while-1-rm'] = "DROP PROCEDURE if exists `update_proces_init_idx_rec__while1`";
|
|
|
+ $sqlList['0-prepare-while-1-create'] = <<<SQL
|
|
|
+CREATE PROCEDURE `update_proces_init_idx_rec__while1`()
|
|
|
+BEGIN
|
|
|
+
|
|
|
+ update `CRM_PROCES_idx` as p set p.`idx_PROCES_INIT_ID`=IF(p.`TYPE`='PROCES_INIT', p.`ID`, 0);
|
|
|
+ SET @i = 0;
|
|
|
+ SET @loopLomit = 100;
|
|
|
+ SET @pinitCnt = 1;
|
|
|
+ WHILE @i < @loopLomit and @pinitCnt > 0 DO
|
|
|
+ update `CRM_PROCES_idx` as p join `CRM_PROCES_idx` as pp on(pp.`ID`=p.`PARENT_ID`)
|
|
|
+ set p.`idx_PROCES_INIT_ID`=pp.`idx_PROCES_INIT_ID`
|
|
|
+ where p.`idx_PROCES_INIT_ID`=0 and pp.`idx_PROCES_INIT_ID`>0;
|
|
|
+ SET @pinitCnt = ROW_COUNT();
|
|
|
+ SET @i = @i + 1;
|
|
|
+ END WHILE;
|
|
|
+END
|
|
|
+SQL;
|
|
|
+ $sqlList['0-prepare-while-2-rm'] = "DROP PROCEDURE if exists `update_proces_init_idx_rec__while2`";
|
|
|
+ $sqlList['0-prepare-while-2-create'] = <<<SQL
|
|
|
+CREATE PROCEDURE `update_proces_init_idx_rec__while2`()
|
|
|
+BEGIN
|
|
|
+
|
|
|
+ SET @i = 0;
|
|
|
+ SET @loopLomit = 100;
|
|
|
+ SET @groupCnt = 1;
|
|
|
+ WHILE @i < @loopLomit and @groupCnt > 0 DO
|
|
|
+ update `CRM_PROCES_idx` as p join `CRM_PROCES_idx` as pp on(pp.`ID`=p.`PARENT_ID`)
|
|
|
+ set p.`idx_PROCES_WITH_GROUPS_ID`=pp.`idx_PROCES_WITH_GROUPS_ID`
|
|
|
+ where p.`idx_PROCES_WITH_GROUPS_ID` is null
|
|
|
+ and pp.`idx_PROCES_WITH_GROUPS_ID` is not null
|
|
|
+ and pp.`idx_PROCES_WITH_GROUPS_ID`>0;
|
|
|
+ SET @groupCnt = ROW_COUNT();
|
|
|
+ SET @i = @i + 1;
|
|
|
+ END WHILE;
|
|
|
+
|
|
|
+END
|
|
|
+SQL;
|
|
|
+ $sqlList__TEST_PERF_NO_DIFF['0-prepare-while-2-create'] = <<<SQL
|
|
|
+CREATE PROCEDURE `update_proces_init_idx_rec__while2`()
|
|
|
+BEGIN
|
|
|
+
|
|
|
+ SET @i = 0;
|
|
|
+ SET @loopLomit = 100;
|
|
|
+ SET @groupCnt = 1;
|
|
|
+ WHILE @i < @loopLomit and @groupCnt > 0 DO
|
|
|
+ update `CRM_PROCES_idx` as p
|
|
|
+ join `CRM_PROCES_idx` as pp on(pp.`ID`=p.`PARENT_ID`
|
|
|
+ and pp.`idx_PROCES_WITH_GROUPS_ID` is not null
|
|
|
+ and pp.`idx_PROCES_WITH_GROUPS_ID`>0
|
|
|
+ )
|
|
|
+ set p.`idx_PROCES_WITH_GROUPS_ID`=pp.`idx_PROCES_WITH_GROUPS_ID`
|
|
|
+ where p.`idx_PROCES_WITH_GROUPS_ID` is null
|
|
|
+ ;
|
|
|
+ SET @groupCnt = ROW_COUNT();
|
|
|
+ SET @i = @i + 1;
|
|
|
+ END WHILE;
|
|
|
+
|
|
|
+END
|
|
|
+SQL;
|
|
|
+ $sqlList['1-set-start-time-in-config'] = <<<SQL
|
|
|
+ replace into `CRM_CONFIG` (`conf_key`, `conf_val`) values ('tbl_indexer_CRM_PROCES_last_exec_start', NOW());
|
|
|
+SQL;
|
|
|
+ $sqlList['2-truncate-table'] = <<<SQL
|
|
|
+ truncate table `CRM_PROCES_idx`;
|
|
|
+ -- delete from `CRM_PROCES_idx`;
|
|
|
+SQL;
|
|
|
+ $sqlList['3-fill-CRM_PROCES_idx'] = <<<SQL
|
|
|
+-- select 'insert into `CRM_PROCES_idx`...';
|
|
|
+ insert into `CRM_PROCES_idx` (`ID`,`TYPE`,`PARENT_ID`,`idx_PROCES_INIT_ID`)
|
|
|
+ select p.`ID`, p.`TYPE`, p.`PARENT_ID`, IF(p.`TYPE`='PROCES_INIT', p.`ID`, 0) as idx_PROCES_INIT_ID
|
|
|
+ from `CRM_PROCES` p
|
|
|
+ where p.`A_STATUS` in('NORMAL','WAITING')
|
|
|
+ ;
|
|
|
+SQL;
|
|
|
+ $sqlList['4-while-1'] = <<<SQL
|
|
|
+ call `update_proces_init_idx_rec__while1`();
|
|
|
+SQL;
|
|
|
+ $sqlList['5-before-while-2'] = <<<SQL
|
|
|
+ update `CRM_PROCES_idx` i
|
|
|
+ join `CRM_WSKAZNIK` as wsk on(wsk.`ID_PROCES`=i.`ID`
|
|
|
+ and wsk.`A_STATUS` in('NORMAL', 'WAITING')
|
|
|
+ )
|
|
|
+ join `CRM_LISTA_ZASOBOW` as z on(z.`ID`=wsk.`ID_ZASOB`
|
|
|
+ and z.`TYPE` in('STANOWISKO','PODMIOT','DZIAL')
|
|
|
+ and z.`A_STATUS` in('NORMAL', 'WAITING')
|
|
|
+ )
|
|
|
+ join `CRM_PRZYPADEK` przyp on(przyp.`ID`=wsk.`ID_PRZYPADEK`
|
|
|
+ and przyp.`FORM_TREAT` & 8 -- has perm X
|
|
|
+ )
|
|
|
+ set
|
|
|
+ i.`idx_PROCES_WITH_GROUPS_ID`=i.`ID`
|
|
|
+ where i.`idx_PROCES_INIT_ID`>0;
|
|
|
+SQL;
|
|
|
+ $sqlList['6-while-2'] = <<<SQL
|
|
|
+ call `update_proces_init_idx_rec__while2`();
|
|
|
+SQL;
|
|
|
+ $sqlList['7-goto_and_return'] = <<<SQL
|
|
|
+ insert ignore into `CRM_PROCES_idx` (`ID`,`TYPE`,`PARENT_ID`,`idx_PROCES_INIT_ID`,`idx_PROCES_WITH_GROUPS_ID`)
|
|
|
+ select g.`ID`, 'GOTO_AND_RETURN' as `TYPE`, p.`ID` as PARENT_ID, g.`ID` as idx_PROCES_INIT_ID
|
|
|
+ , pi.`idx_PROCES_WITH_GROUPS_ID`
|
|
|
+ from `CRM_PROCES` p
|
|
|
+ join `CRM_PROCES_idx` pi on(pi.`ID`=p.`ID`)
|
|
|
+ join `CRM_PROCES` g on(g.`ID`=p.`IF_TRUE_GOTO`
|
|
|
+ and g.`TYPE`='PROCES_INIT'
|
|
|
+ and g.`A_STATUS` in('NORMAL','WAITING')
|
|
|
+ and p.`IF_TRUE_GOTO_FLAG`='GOTO_AND_RETURN'
|
|
|
+ and p.`IF_TRUE_GOTO`>0
|
|
|
+ )
|
|
|
+ where p.`A_STATUS` in('NORMAL','WAITING')
|
|
|
+ and 0=(select IF(i.`idx_PROCES_WITH_GROUPS_ID` is null, 0, -1) from `CRM_PROCES_idx` i where i.`ID`=g.`ID`)
|
|
|
+ ;
|
|
|
+-- SET @groupCnt = ROW_COUNT();
|
|
|
+
|
|
|
+SQL;
|
|
|
+ $sqlList['8-update-idx_PROCES_WITH_GROUPS_ID-zero-where-null'] = <<<SQL
|
|
|
+ update `CRM_PROCES_idx`
|
|
|
+ set `idx_PROCES_WITH_GROUPS_ID`=0
|
|
|
+ where `idx_PROCES_WITH_GROUPS_ID` is null
|
|
|
+ and `TYPE`='PROCES_INIT'
|
|
|
+ ;
|
|
|
+
|
|
|
+SQL;
|
|
|
+ $sqlList['9-fix-goto_and_return'] = <<<SQL
|
|
|
+ insert ignore into `CRM_PROCES_idx` (`ID`,`TYPE`,`PARENT_ID`,`idx_PROCES_INIT_ID`,`idx_PROCES_WITH_GROUPS_ID`)
|
|
|
+ select i.`ID`, 'GOTO_AND_RETURN' as `TYPE`, i.`PARENT_ID`, i.`idx_PROCES_INIT_ID`, pi.`idx_PROCES_WITH_GROUPS_ID`
|
|
|
+ from `CRM_PROCES_idx` i
|
|
|
+ join `CRM_PROCES_idx` pi on(pi.`idx_PROCES_INIT_ID`=i.`idx_PROCES_INIT_ID`)
|
|
|
+ where i.`idx_PROCES_WITH_GROUPS_ID` is null
|
|
|
+ and pi.`idx_PROCES_WITH_GROUPS_ID` is not null
|
|
|
+ and pi.`idx_PROCES_WITH_GROUPS_ID`>0
|
|
|
+ and i.`TYPE`!='GOTO_AND_RETURN'
|
|
|
+ ;
|
|
|
+
|
|
|
+SQL;
|
|
|
+ $sqlList['10-delete-where-!idx_PROCES_WITH_GROUPS_ID'] = <<<SQL
|
|
|
+-- select 'delete idx_PROCES_WITH_GROUPS_ID...';
|
|
|
+ delete from `CRM_PROCES_idx` where `idx_PROCES_WITH_GROUPS_ID` is null or `idx_PROCES_WITH_GROUPS_ID`=0;
|
|
|
+SQL;
|
|
|
+ $sqlList['11-update-CRM_PROCES-idx_PROCES_INIT_ID'] = <<<SQL
|
|
|
+-- select 'update `CRM_PROCES`...';
|
|
|
+ update `CRM_PROCES` p
|
|
|
+ set p.`idx_PROCES_INIT_ID`=coalesce((select i.`idx_PROCES_INIT_ID` from `CRM_PROCES_idx` i where i.`ID`=p.`ID` limit 1), 0)
|
|
|
+ ;
|
|
|
+
|
|
|
+SQL;
|
|
|
+ $sqlList['11-clear-CRM_PROCES_idx_GROUPS_to_INIT'] = <<<SQL
|
|
|
+-- select 'update `CRM_PROCES_idx_GROUPS_to_INIT`...';
|
|
|
+ truncate table `CRM_PROCES_idx_GROUPS_to_INIT`;
|
|
|
+SQL;
|
|
|
+ $sqlList['11-fill-CRM_PROCES_idx_GROUPS_to_INIT'] = <<<SQL
|
|
|
+ insert ignore into `CRM_PROCES_idx_GROUPS_to_INIT` (`PROCES_INIT_ID`,`GROUP_ID`)
|
|
|
+ select i.`ID` as PROCES_INIT_ID, z.`ID` as GROUP_ID
|
|
|
+ from `CRM_PROCES_idx` i
|
|
|
+ join `CRM_WSKAZNIK` wsk on(wsk.`ID_PROCES`=i.`idx_PROCES_WITH_GROUPS_ID`
|
|
|
+ and wsk.`A_STATUS` in('NORMAL', 'WAITING')
|
|
|
+ )
|
|
|
+ join `CRM_LISTA_ZASOBOW` as z on(z.`ID`=wsk.`ID_ZASOB`
|
|
|
+ and z.`TYPE` in('STANOWISKO','PODMIOT','DZIAL')
|
|
|
+ and z.`A_STATUS` in('NORMAL', 'WAITING')
|
|
|
+ )
|
|
|
+ join `CRM_PRZYPADEK` przyp on(przyp.`ID`=wsk.`ID_PRZYPADEK`
|
|
|
+ and przyp.`FORM_TREAT` & 8 -- has perm X
|
|
|
+ )
|
|
|
+ where i.`TYPE` in('PROCES_INIT', 'GOTO_AND_RETURN');
|
|
|
+
|
|
|
+SQL;
|
|
|
+ $sqlList['12-set-end-time-in-config'] = <<<SQL
|
|
|
+ replace into `CRM_CONFIG` (`conf_key`, `conf_val`) values ('tbl_indexer_CRM_PROCES_last_exec_end', NOW());
|
|
|
+SQL;
|
|
|
+ $db = DB::getDB();
|
|
|
+ if ($db->has_errors()) {
|
|
|
+ throw new Exception("DB Errors: " . implode("\n<br>", $db->get_errors()));
|
|
|
+ }
|
|
|
+ $DBG_TIME = true;//('1' == V::get('DBG_TIME', '', $_GET));
|
|
|
+ $dbgExecTime = new DebugExecutionTime();
|
|
|
+ if ($DBG_TIME) $dbgExecTime->activate();
|
|
|
+ $dbgExecTime->log('start');
|
|
|
+ foreach ($sqlList as $sqlName => $sql) {
|
|
|
+ $res = $db->query($sql);
|
|
|
+ if ($db->has_errors()) {
|
|
|
+ throw new Exception("DB Errors at sql '{$sqlName}': " . implode("\n<br>", $db->get_errors()));
|
|
|
+ }
|
|
|
+ if($DBG_TIME) $dbgExecTime->log("execute sql {$sqlName}");
|
|
|
+ }
|
|
|
+ if($DBG_TIME) $dbgExecTime->printDebug();
|
|
|
+ }
|
|
|
+
|
|
|
public function reinstallAction() {
|
|
|
$this->reinstall();
|
|
|
die('OK');
|
|
|
@@ -80,12 +340,22 @@ class Route_FixCrmProcesInitIdx extends RouteBase {
|
|
|
, `TYPE` varchar(32) NOT NULL DEFAULT ''
|
|
|
, `idx_PROCES_INIT_ID` int(11) NOT NULL DEFAULT '0'
|
|
|
, `idx_PROCES_WITH_GROUPS_ID` int(11) NULL DEFAULT NULL
|
|
|
- , `idx_PATH` text NOT NULL
|
|
|
+ -- , `idx_PATH` text NOT NULL
|
|
|
, KEY `ID` (`ID`)
|
|
|
, KEY `PARENT_ID` (`PARENT_ID`)
|
|
|
, KEY `idx_PROCES_INIT_ID` (`idx_PROCES_INIT_ID`)
|
|
|
, KEY `idx_PROCES_WITH_GROUPS_ID` (`idx_PROCES_WITH_GROUPS_ID`)
|
|
|
- -- , UNIQUE KEY `uniq__idx_PROCES_WITH_GROUPS_ID` (`ID`,`idx_PROCES_WITH_GROUPS_ID`)
|
|
|
+ , UNIQUE KEY `uniq__idx_PROCES_WITH_GROUPS_ID` (`ID`,`idx_PROCES_WITH_GROUPS_ID`)
|
|
|
+ ) ENGINE=MyISAM DEFAULT CHARSET=latin2;
|
|
|
+SQL;
|
|
|
+ $sqlList['RemoveTableGroupToInit'] = "DROP TABLE IF EXISTS `CRM_PROCES_idx_GROUPS_to_INIT`";
|
|
|
+ $sqlList['InstallTableGroupToInit'] = <<<SQL
|
|
|
+ CREATE TABLE IF NOT EXISTS `CRM_PROCES_idx_GROUPS_to_INIT` (
|
|
|
+ `PROCES_INIT_ID` int(11) NOT NULL
|
|
|
+ , `GROUP_ID` int(11) NOT NULL
|
|
|
+ , KEY `PROCES_INIT_ID` (`PROCES_INIT_ID`)
|
|
|
+ , KEY `GROUP_ID` (`GROUP_ID`)
|
|
|
+ , UNIQUE KEY `uniq__GROUP_to_INIT` (`PROCES_INIT_ID`,`GROUP_ID`)
|
|
|
) ENGINE=MyISAM DEFAULT CHARSET=latin2;
|
|
|
SQL;
|
|
|
$sqlList['RemoveProcedure'] = "DROP PROCEDURE if exists `update_proces_init_idx_rec`";
|
|
|
@@ -93,29 +363,24 @@ SQL;
|
|
|
CREATE PROCEDURE `update_proces_init_idx_rec`()
|
|
|
BEGIN
|
|
|
SET @enabled = FALSE;
|
|
|
- SET @conf_last_exec_key = 'tbl_indexer_CRM_PROCES_last_exec';
|
|
|
- -- call debug_msg(@enabled, 'init procedure...');
|
|
|
+ SET @conf_last_exec_start_key = 'tbl_indexer_CRM_PROCES_last_exec_start';
|
|
|
+ SET @conf_last_exec_end_key = 'tbl_indexer_CRM_PROCES_last_exec_end';
|
|
|
-- if already runnig mysql will throw "Commands out of sync; you can't run this command now"
|
|
|
- -- IF '1'=(select IF(`conf_val` < DATE_SUB(NOW(), INTERVAL 1 MINUTE), '1', '0') from `CRM_CONFIG` where `conf_key`=@conf_last_exec_key limit 1) THEN BEGIN
|
|
|
- replace into `CRM_CONFIG` (`conf_key`, `conf_val`) values (@conf_last_exec_key, NOW());
|
|
|
+ replace into `CRM_CONFIG` (`conf_key`, `conf_val`) values (@conf_last_exec_start_key, NOW());
|
|
|
|
|
|
- -- lock tables `CRM_PROCES_idx` WRITE, `CRM_PROCES` WRITE, `CRM_CONFIG` READ, `CRM_WSKAZNIK` READ, `CRM_LISTA_ZASOBOW` READ;
|
|
|
- -- lock table `CRM_PROCES_idx` WRITE;
|
|
|
--- select sleep(2);
|
|
|
-select 'truncate->delete...';
|
|
|
+-- select 'truncate->delete...';
|
|
|
truncate table `CRM_PROCES_idx`;
|
|
|
-- delete from `CRM_PROCES_idx`;
|
|
|
|
|
|
-select 'insert into `CRM_PROCES_idx`...';
|
|
|
+-- select 'insert into `CRM_PROCES_idx`...';
|
|
|
insert into `CRM_PROCES_idx` (`ID`,`TYPE`,`PARENT_ID`,`idx_PROCES_INIT_ID`)
|
|
|
select p.`ID`, p.`TYPE`, p.`PARENT_ID`, IF(p.`TYPE`='PROCES_INIT', p.`ID`, 0) as idx_PROCES_INIT_ID
|
|
|
from `CRM_PROCES` p
|
|
|
where p.`A_STATUS` in('NORMAL','WAITING')
|
|
|
;
|
|
|
|
|
|
-select 'while 1...';
|
|
|
+-- select 'while 1...';
|
|
|
update `CRM_PROCES_idx` as p set p.`idx_PROCES_INIT_ID`=IF(p.`TYPE`='PROCES_INIT', p.`ID`, 0);
|
|
|
- -- call debug_msg(@enabled, (select concat_ws(' ', "all idx_PROCES_INIT_ID cleared", ROW_COUNT())));
|
|
|
SET @i = 0;
|
|
|
SET @loopLomit = 100;
|
|
|
SET @pinitCnt = 1;
|
|
|
@@ -127,15 +392,19 @@ select 'while 1...';
|
|
|
SET @i = @i + 1;
|
|
|
END WHILE;
|
|
|
|
|
|
-select 'while 2...';
|
|
|
+-- select 'while 2... search stanowiska';
|
|
|
update `CRM_PROCES_idx` i
|
|
|
join `CRM_WSKAZNIK` as wsk on(wsk.`ID_PROCES`=i.`ID`
|
|
|
and wsk.`A_STATUS` in('NORMAL', 'WAITING')
|
|
|
+ -- TODO: and wsk.`` like 'X' - IF(przyp.`FORM_TREAT` & 8, 1, 0) as PERM_X
|
|
|
)
|
|
|
join `CRM_LISTA_ZASOBOW` as z on(z.`ID`=wsk.`ID_ZASOB`
|
|
|
and z.`TYPE` in('STANOWISKO','PODMIOT','DZIAL')
|
|
|
and z.`A_STATUS` in('NORMAL', 'WAITING')
|
|
|
)
|
|
|
+ join `CRM_PRZYPADEK` przyp on(przyp.`ID`=wsk.`ID_PRZYPADEK`
|
|
|
+ and przyp.`FORM_TREAT` & 8 -- has perm X
|
|
|
+ )
|
|
|
set
|
|
|
i.`idx_PROCES_WITH_GROUPS_ID`=i.`ID`
|
|
|
where i.`idx_PROCES_INIT_ID`>0;
|
|
|
@@ -152,8 +421,8 @@ select 'while 2...';
|
|
|
SET @i = @i + 1;
|
|
|
END WHILE;
|
|
|
|
|
|
-select 'GOTO_AND_RETURN...';
|
|
|
- insert into `CRM_PROCES_idx` (`ID`,`TYPE`,`PARENT_ID`,`idx_PROCES_INIT_ID`,`idx_PROCES_WITH_GROUPS_ID`)
|
|
|
+-- select 'GOTO_AND_RETURN...';
|
|
|
+ insert ignore into `CRM_PROCES_idx` (`ID`,`TYPE`,`PARENT_ID`,`idx_PROCES_INIT_ID`,`idx_PROCES_WITH_GROUPS_ID`)
|
|
|
select g.`ID`, 'GOTO_AND_RETURN' as `TYPE`, p.`ID` as PARENT_ID, g.`ID` as idx_PROCES_INIT_ID
|
|
|
, pi.`idx_PROCES_WITH_GROUPS_ID`
|
|
|
from `CRM_PROCES` p
|
|
|
@@ -167,7 +436,6 @@ select 'GOTO_AND_RETURN...';
|
|
|
where p.`A_STATUS` in('NORMAL','WAITING')
|
|
|
and 0=(select IF(i.`idx_PROCES_WITH_GROUPS_ID` is null, 0, -1) from `CRM_PROCES_idx` i where i.`ID`=g.`ID`)
|
|
|
;
|
|
|
- SET @groupCnt = ROW_COUNT();
|
|
|
|
|
|
update `CRM_PROCES_idx`
|
|
|
set `idx_PROCES_WITH_GROUPS_ID`=0
|
|
|
@@ -185,22 +453,33 @@ select 'GOTO_AND_RETURN...';
|
|
|
and i.`TYPE`!='GOTO_AND_RETURN'
|
|
|
;
|
|
|
|
|
|
-select 'delete idx_PROCES_WITH_GROUPS_ID...';
|
|
|
+-- select 'delete idx_PROCES_WITH_GROUPS_ID...';
|
|
|
delete from `CRM_PROCES_idx` where `idx_PROCES_WITH_GROUPS_ID` is null or `idx_PROCES_WITH_GROUPS_ID`=0;
|
|
|
|
|
|
--- TODO: multiple rows for proces id - goto_and_return
|
|
|
-select 'update `CRM_PROCES`...';
|
|
|
+-- select 'update `CRM_PROCES`...';
|
|
|
update `CRM_PROCES` p
|
|
|
- set p.`idx_PROCES_INIT_ID`=(select i.`idx_PROCES_INIT_ID` from `CRM_PROCES_idx` i where i.`ID`=p.`ID` limit 1)
|
|
|
--- update `CRM_PROCES` p
|
|
|
--- join `CRM_PROCES_idx` i on(i.`ID`=p.`ID`)
|
|
|
--- set p.`idx_PROCES_INIT_ID`=i.`idx_PROCES_INIT_ID`
|
|
|
- -- , p.`idx_PROCES_WITH_GROUPS_ID`=i.`idx_PROCES_WITH_GROUPS_ID`
|
|
|
+ set p.`idx_PROCES_INIT_ID`=coalesce((select i.`idx_PROCES_INIT_ID` from `CRM_PROCES_idx` i where i.`ID`=p.`ID` limit 1), 0)
|
|
|
;
|
|
|
|
|
|
- -- unlock tables;
|
|
|
+-- select 'update `CRM_PROCES_idx_GROUPS_to_INIT`...';
|
|
|
+ truncate table `CRM_PROCES_idx_GROUPS_to_INIT`;
|
|
|
+ insert ignore into `CRM_PROCES_idx_GROUPS_to_INIT` (`PROCES_INIT_ID`,`GROUP_ID`)
|
|
|
+ select i.`ID` as PROCES_INIT_ID, z.`ID` as GROUP_ID
|
|
|
+ from `CRM_PROCES_idx` i
|
|
|
+ join `CRM_WSKAZNIK` wsk on(wsk.`ID_PROCES`=i.`idx_PROCES_WITH_GROUPS_ID`
|
|
|
+ and wsk.`A_STATUS` in('NORMAL', 'WAITING')
|
|
|
+ )
|
|
|
+ join `CRM_LISTA_ZASOBOW` as z on(z.`ID`=wsk.`ID_ZASOB`
|
|
|
+ and z.`TYPE` in('STANOWISKO','PODMIOT','DZIAL')
|
|
|
+ and z.`A_STATUS` in('NORMAL', 'WAITING')
|
|
|
+ )
|
|
|
+ join `CRM_PRZYPADEK` przyp on(przyp.`ID`=wsk.`ID_PRZYPADEK`
|
|
|
+ and przyp.`FORM_TREAT` & 8 -- has perm X
|
|
|
+ )
|
|
|
+ where i.`TYPE` in('PROCES_INIT', 'GOTO_AND_RETURN');
|
|
|
+
|
|
|
+ replace into `CRM_CONFIG` (`conf_key`, `conf_val`) values (@conf_last_exec_end_key, NOW());
|
|
|
|
|
|
- -- END; END IF;
|
|
|
END ;
|
|
|
|
|
|
SQL;
|