Skip to content

Commit

Permalink
Refs #3906
Browse files Browse the repository at this point in the history
 * Speeding up the suggestion list by only selecting visitors that have a value set for the requested segment
  • Loading branch information
mattab committed Apr 21, 2013
1 parent ea240af commit 3069828
Show file tree
Hide file tree
Showing 10 changed files with 38 additions and 38 deletions.
6 changes: 1 addition & 5 deletions core/Segment.php
Expand Up @@ -91,13 +91,10 @@ protected function getCleanedExpression($expression)
throw new Exception("You do not have enough permission to access the segment " . $name);
}

// $this->segmentsHumanReadable[] = $segment['name'] . " " .
// $this->getNameForMatchType($matchType) .
// $value;

// apply presentation filter
if (isset($segment['sqlFilter'])
&& !empty($segment['sqlFilter'])
&& $matchType != Piwik_SegmentExpression::MATCH_IS_NOT_NULL
) {
$value = call_user_func($segment['sqlFilter'], $value, $segment['sqlSegment'], $matchType, $name);

Expand Down Expand Up @@ -184,7 +181,6 @@ public function getSelectQuery($select, $from, $where = false, $bind = array(),
} else {
$sql = $this->buildSelectQuery($select, $from, $where, $orderBy, $groupBy);
}

return array(
'sql' => $sql,
'bind' => $bind
Expand Down
12 changes: 11 additions & 1 deletion core/SegmentExpression.php
Expand Up @@ -27,6 +27,9 @@ class Piwik_SegmentExpression
const MATCH_CONTAINS = '=@';
const MATCH_DOES_NOT_CONTAIN = '!@';

// Note: undocumented for now, only used in API.getSuggestedValuesForSegment
const MATCH_IS_NOT_NULL = '::';

// Special case, since we look up Page URLs/Page titles in a sub SQL query
const MATCH_ACTIONS_CONTAINS = 'IN';

Expand Down Expand Up @@ -66,6 +69,7 @@ public function parseSubExpressions()
. self::MATCH_LESS_OR_EQUAL . '|'
. self::MATCH_LESS . '|'
. self::MATCH_CONTAINS . '|'
. self::MATCH_IS_NOT_NULL . '|'
. self::MATCH_DOES_NOT_CONTAIN
. '){1}(.+)/';
$match = preg_match($pattern, $operand, $matches);
Expand Down Expand Up @@ -180,6 +184,11 @@ protected function getSqlMatchFromDefinition($def, &$availableTables)
$value = '%' . $this->escapeLikeString($value) . '%';
break;

case self::MATCH_IS_NOT_NULL:
$sqlMatch = 'IS NOT NULL AND ('.$field.' <> \'\' OR '.$field.' = 0)';
$value = null;
break;

case self::MATCH_ACTIONS_CONTAINS:
// this match type is not accessible from the outside
// (it won't be matched in self::parseSubExpressions())
Expand All @@ -193,7 +202,8 @@ protected function getSqlMatchFromDefinition($def, &$availableTables)
break;
}

if ($matchType === self::MATCH_ACTIONS_CONTAINS) {
if ($matchType === self::MATCH_ACTIONS_CONTAINS
|| is_null($value)) {
$sqlExpression = "$field $sqlMatch";
} else {
$sqlExpression = "$field $sqlMatch ?";
Expand Down
10 changes: 6 additions & 4 deletions plugins/API/API.php
Expand Up @@ -1663,15 +1663,17 @@ public function getSuggestedValuesForSegment($segmentName, $idSite)
&date=$startDate,today
&format=original
&serialize=0
&flat=1
&segment=";
&flat=1";

// Select non empty fields only
$requestLastVisits.= "&segment=$segmentName" . Piwik_SegmentExpression::MATCH_IS_NOT_NULL . "null";

// By default Live fetches all actions for all visitors, but we'd rather do this only when required
if(!$doesSegmentNeedActionsInfo) {
$requestLastVisits .= "&doNotFetchActions=1";
$requestLastVisits .= "&filter_limit=10000";
} else {
$requestLastVisits .= "&filter_limit=1000";
} else {
$requestLastVisits .= "&filter_limit=500";
}

$request = new Piwik_API_Request($requestLastVisits);
Expand Down
6 changes: 0 additions & 6 deletions plugins/Live/API.php
Expand Up @@ -398,7 +398,6 @@ private function loadLastVisitorDetailsFromDatabase($idSite, $period = false, $d
GROUP BY sub.idvisit
ORDER BY $orderByParent
";

try {
$data = Piwik_FetchAll($sql, $subQuery['bind']);
} catch (Exception $e) {
Expand Down Expand Up @@ -432,11 +431,6 @@ private function cleanVisitorDetails(&$visitorDetails, $idSite)
/**
* @param $visitorDetailsArray
* @param $actionsLimit
* @param $actionDetail
* @param $ecommerceDetail
* @param $ecommerceConversion
* @param $detail
* @param $details
* @param $timezone
* @return array
*/
Expand Down
@@ -1,4 +1,2 @@
<?xml version="1.0" encoding="utf-8" ?>
<result>
<row>Unknown</row>
</result>
<result />
Expand Up @@ -42,7 +42,7 @@

<visitLocalTime>12:34:06</visitLocalTime>
<visitLocalHour>12</visitLocalHour>
<visitServerHour>11</visitServerHour>




Expand Down Expand Up @@ -180,7 +180,7 @@

<visitLocalTime>12:34:06</visitLocalTime>
<visitLocalHour>12</visitLocalHour>
<visitServerHour>12</visitServerHour>




Expand Down Expand Up @@ -301,7 +301,7 @@

<visitLocalTime>12:34:06</visitLocalTime>
<visitLocalHour>12</visitLocalHour>
<visitServerHour>11</visitServerHour>




Expand Down Expand Up @@ -422,7 +422,7 @@

<visitLocalTime>12:34:06</visitLocalTime>
<visitLocalHour>12</visitLocalHour>
<visitServerHour>12</visitServerHour>




Expand Down Expand Up @@ -543,7 +543,7 @@

<visitLocalTime>12:34:06</visitLocalTime>
<visitLocalHour>12</visitLocalHour>
<visitServerHour>11</visitServerHour>




Expand Down Expand Up @@ -681,7 +681,7 @@

<visitLocalTime>12:34:06</visitLocalTime>
<visitLocalHour>12</visitLocalHour>
<visitServerHour>12</visitServerHour>




Expand Down Expand Up @@ -802,7 +802,7 @@

<visitLocalTime>12:34:06</visitLocalTime>
<visitLocalHour>12</visitLocalHour>
<visitServerHour>11</visitServerHour>




Expand Down Expand Up @@ -923,7 +923,7 @@

<visitLocalTime>12:34:06</visitLocalTime>
<visitLocalHour>12</visitLocalHour>
<visitServerHour>12</visitServerHour>




Expand Down Expand Up @@ -1044,7 +1044,7 @@

<visitLocalTime>12:34:06</visitLocalTime>
<visitLocalHour>12</visitLocalHour>
<visitServerHour>11</visitServerHour>




Expand Down Expand Up @@ -1182,7 +1182,7 @@

<visitLocalTime>12:34:06</visitLocalTime>
<visitLocalHour>12</visitLocalHour>
<visitServerHour>12</visitServerHour>




Expand Down
Expand Up @@ -43,7 +43,7 @@

<visitLocalTime>12:34:06</visitLocalTime>
<visitLocalHour>12</visitLocalHour>
<visitServerHour>12</visitServerHour>




Expand Down Expand Up @@ -227,7 +227,7 @@

<visitLocalTime>12:34:06</visitLocalTime>
<visitLocalHour>12</visitLocalHour>
<visitServerHour>11</visitServerHour>




Expand Down
Expand Up @@ -32,7 +32,7 @@

<visitLocalTime>12:34:06</visitLocalTime>
<visitLocalHour>12</visitLocalHour>
<visitServerHour>13</visitServerHour>




Expand Down Expand Up @@ -135,7 +135,7 @@

<visitLocalTime>12:34:06</visitLocalTime>
<visitLocalHour>12</visitLocalHour>
<visitServerHour>11</visitServerHour>




Expand Down
Expand Up @@ -70,7 +70,7 @@

<visitLocalTime>12:34:06</visitLocalTime>
<visitLocalHour>12</visitLocalHour>
<visitServerHour>6</visitServerHour>




Expand Down Expand Up @@ -277,7 +277,7 @@

<visitLocalTime>12:34:06</visitLocalTime>
<visitLocalHour>12</visitLocalHour>
<visitServerHour>2</visitServerHour>




Expand Down
Expand Up @@ -146,7 +146,7 @@

<visitLocalTime>12:34:06</visitLocalTime>
<visitLocalHour>12</visitLocalHour>
<visitServerHour>7</visitServerHour>




Expand Down Expand Up @@ -472,7 +472,7 @@

<visitLocalTime>12:34:06</visitLocalTime>
<visitLocalHour>12</visitLocalHour>
<visitServerHour>2</visitServerHour>




Expand Down Expand Up @@ -680,7 +680,7 @@

<visitLocalTime>12:34:06</visitLocalTime>
<visitLocalHour>12</visitLocalHour>
<visitServerHour>0</visitServerHour>




Expand Down

0 comments on commit 3069828

Please sign in to comment.