PageFinder::___getQueryJoinPath PHP Method

___getQueryJoinPath() protected method

Special case when requested value is path or URL
protected ___getQueryJoinPath ( DatabaseQuerySelect $query, $selector )
$query DatabaseQuerySelect
    protected function ___getQueryJoinPath(DatabaseQuerySelect $query, $selector)
    {
        $database = $this->wire('database');
        // determine whether we will include use of multi-language page names
        if ($this->modules->isInstalled('LanguageSupportPageNames') && count(wire('languages'))) {
            $langNames = array();
            foreach (wire('languages') as $language) {
                if (!$language->isDefault()) {
                    $langNames[$language->id] = "name" . (int) $language->id;
                }
            }
        } else {
            $langNames = null;
        }
        if ($this->modules->isInstalled('PagePaths') && !$langNames) {
            // @todo add support to PagePaths module for LanguageSupportPageNames
            $pagePaths = $this->modules->get('PagePaths');
            /** @var PagePaths $pagePaths */
            $pagePaths->getMatchQuery($query, $selector);
            return;
        }
        if ($selector->operator !== '=') {
            throw new PageFinderSyntaxException("Operator '{$selector->operator}' is not supported for path or url unless: 1) non-multi-language; 2) you install the PagePaths module.");
        }
        if ($selector->value == '/') {
            $parts = array();
            $query->where("pages.id=1");
        } else {
            $selectorValue = $selector->value;
            if ($langNames) {
                $selectorValue = wire('modules')->get('LanguageSupportPageNames')->updatePath($selectorValue);
            }
            $parts = explode('/', rtrim($selectorValue, '/'));
            $part = $database->escapeStr(array_pop($parts));
            $sql = "pages.name='{$part}'";
            if ($langNames) {
                foreach ($langNames as $name) {
                    $sql .= " OR pages.{$name}='{$part}'";
                }
            }
            $query->where($sql);
            if (!count($parts)) {
                $query->where("pages.parent_id=1");
            }
        }
        $alias = 'pages';
        $lastAlias = 'pages';
        while ($n = count($parts)) {
            $part = $database->escapeStr(array_pop($parts));
            if (strlen($part)) {
                $alias = "parent{$n}";
                //$query->join("pages AS $alias ON ($lastAlias.parent_id=$alias.id AND $alias.name='$part')");
                $sql = "pages AS {$alias} ON ({$lastAlias}.parent_id={$alias}.id AND ({$alias}.name='{$part}'";
                if ($langNames) {
                    foreach ($langNames as $id => $name) {
                        // $status = "status" . (int) $id;
                        // $sql .= " OR ($alias.$name='$part' AND $alias.$status>0) ";
                        $sql .= " OR {$alias}.{$name}='{$part}'";
                    }
                }
                $sql .= '))';
                $query->join($sql);
            } else {
                $query->join("pages AS rootparent ON ({$alias}.parent_id=rootparent.id AND rootparent.id=1)");
            }
            $lastAlias = $alias;
        }
    }