From 8fa66377a1c97d42d83d91ef0821f37f1b885617 Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Tue, 6 Dec 2016 16:21:56 +0100 Subject: [statistics/locations/..] Cache calculated locationid of machine in machine table We now have three columns for the locationid: - subnetlocationid Updated whenever the clientip of a client changes on bootup, or when locations/subnets are edited in the locations module. - fixedlocationid Takes the role of the old locationid field - set when a machine is placed in a room via roomplanner, set to NULL otherwise. - locationid Set to fixedlocationid if it's not NULL, to subnetlocationid otherwise. The field is updated by a BEFORE UPDATE trigger. --- modules-available/statistics/inc/filter.inc.php | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) (limited to 'modules-available/statistics/inc/filter.inc.php') diff --git a/modules-available/statistics/inc/filter.inc.php b/modules-available/statistics/inc/filter.inc.php index 03dba6c3..6af6eed1 100644 --- a/modules-available/statistics/inc/filter.inc.php +++ b/modules-available/statistics/inc/filter.inc.php @@ -214,13 +214,11 @@ class LocationFilter extends Filter { settype($this->argument, 'int'); if ($this->argument === 0) { - $joins[] = 'LEFT JOIN subnet s ON (INET_ATON(machine.clientip) BETWEEN s.startaddr AND s.endaddr)'; - return 'machine.locationid IS NULL AND s.locationid IS NULL'; + $neg = $this->operator === '=' ? '' : 'NOT'; + return "machine.locationid IS $neg NULL"; } else { - $joins[] = ' LEFT JOIN subnet ON (INET_ATON(clientip) BETWEEN startaddr AND endaddr AND machine.locationid IS NULL) '; $args['lid'] = $this->argument; - $neg = $this->operator == '=' ? '' : 'NOT'; - return "$neg ((subnet.locationid = :lid) OR (machine.locationid = :lid))"; + return "machine.locationid {$this->operator} :lid"; } } } -- cgit v1.2.3-55-g7522