src/Versioned.php
protected function augmentSQLVersioned(SQLSelect $query)
    {
        $baseTable = $this->baseTable();
        foreach ($query->getFrom() as $alias => $join) {
            if (!$this->isTableVersioned($alias)) {
                continue;
            }

            if ($alias != $baseTable) {
                // Make sure join includes version as well
                $query->setJoinFilter(
                    $alias,
                    "\"{$alias}_Versions\".\"RecordID\" = \"{$baseTable}_Versions\".\"RecordID\""
                    . " AND \"{$alias}_Versions\".\"Version\" = \"{$baseTable}_Versions\".\"Version\""
                );
            }

            // Rewrite all usages of `Table` to `Table_Versions`
            $query->renameTable($alias, $alias . '_Versions');
            // However, add an alias back to the base table in case this must later be joined.
            // See ApplyVersionFilters for example which joins _Versions back onto draft table.
            $query->renameTable($alias . '_Draft', $alias);
        }

        // Add all <basetable>_Versions columns
        foreach (Config::inst()->get(static::class, 'db_for_versions_table') as $name => $type) {
            $query->selectField(sprintf('"%s_Versions"."%s"', $baseTable, $name), $name);
        }

        // Alias the record ID as the row ID, and ensure ID filters are aliased correctly
        $query->selectField("\"{$baseTable}_Versions\".\"RecordID\"", "ID");
        $query->replaceText("\"{$baseTable}_Versions\".\"ID\"", "\"{$baseTable}_Versions\".\"RecordID\"");

        // However, if doing count, undo rewrite of "ID" column
        $query->replaceText(
            "count(DISTINCT \"{$baseTable}_Versions\".\"RecordID\")",
            "count(DISTINCT \"{$baseTable}_Versions\".\"ID\")"
        );

        // Filter deleted versions, which are all unqueryable
        $query->addWhere(["\"{$baseTable}_Versions\".\"WasDeleted\"" => 0]);
    }
protected function augmentSQLVersioned(SQLSelect $query)
    {
        $baseTable = $this->baseTable();
        foreach ($query->getFrom() as $alias => $join) {
            if (!$this->isTableVersioned($alias)) {
                continue;
            }

            if ($alias != $baseTable) {
                // Make sure join includes version as well
                $query->setJoinFilter(
                    $alias,
                    "\"{$alias}_Versions\".\"RecordID\" = \"{$baseTable}_Versions\".\"RecordID\""
                    . " AND \"{$alias}_Versions\".\"Version\" = \"{$baseTable}_Versions\".\"Version\""
                );
            }

            // Rewrite all usages of `Table` to `Table_Versions`
            $query->renameTable($alias, $alias . '_Versions');
            // However, add an alias back to the base table in case this must later be joined.
            // See ApplyVersionFilters for example which joins _Versions back onto draft table.
            $query->renameTable($alias . '_Draft', $alias);
        }

        // Add all <basetable>_Versions columns
        foreach (Config::inst()->get(static::class, 'db_for_versions_table') as $name => $type) {
            $query->selectField(sprintf('"%s_Versions"."%s"', $baseTable, $name), $name);
        }

        // Alias the record ID as the row ID, and ensure ID filters are aliased correctly
        $query->selectField("\"{$baseTable}_Versions\".\"RecordID\"", "ID");
        $query->replaceText("\"{$baseTable}_Versions\".\"ID\"", "\"{$baseTable}_Versions\".\"RecordID\"");

        // However, if doing count, undo rewrite of "ID" column
        $query->replaceText(
            "count(DISTINCT \"{$baseTable}_Versions\".\"RecordID\")",
            "count(DISTINCT \"{$baseTable}_Versions\".\"ID\")"
        );

        // Filter deleted versions, which are all unqueryable
        $query->addWhere(["\"{$baseTable}_Versions\".\"WasDeleted\"" => 0]);
    }
protected function augmentSQLVersioned ( SQLSelect $ query ) { $ baseTable = $ this -> baseTable ( ) ; foreach ( $ query -> getFrom ( ) as $ alias => $ join ) { if ( ! $ this -> isTableVersioned ( $ alias ) ) { continue ; } if ( $ alias != $ baseTable ) { // Make sure join includes version as well $ query -> setJoinFilter ( $ alias , "\"{$alias}_Versions\".\"RecordID\" = \"{$baseTable}_Versions\".\"RecordID\"" . " AND \"{$alias}_Versions\".\"Version\" = \"{$baseTable}_Versions\".\"Version\"" ) ; } // Rewrite all usages of `Table` to `Table_Versions` $ query -> renameTable ( $ alias , $ alias . '_Versions' ) ; // However, add an alias back to the base table in case this must later be joined. // See ApplyVersionFilters for example which joins _Versions back onto draft table. $ query -> renameTable ( $ alias . '_Draft' , $ alias ) ; } // Add all <basetable>_Versions columns foreach ( Config :: inst ( ) -> get ( static :: class , 'db_for_versions_table' ) as $ name => $ type ) { $ query -> selectField ( sprintf ( '"%s_Versions"."%s"' , $ baseTable , $ name ) , $ name ) ; } // Alias the record ID as the row ID, and ensure ID filters are aliased correctly $ query -> selectField ( "\"{$baseTable}_Versions\".\"RecordID\"" , "ID" ) ; $ query -> replaceText ( "\"{$baseTable}_Versions\".\"ID\"" , "\"{$baseTable}_Versions\".\"RecordID\"" ) ; // However, if doing count, undo rewrite of "ID" column $ query -> replaceText ( "count(DISTINCT \"{$baseTable}_Versions\".\"RecordID\")" , "count(DISTINCT \"{$baseTable}_Versions\".\"ID\")" ) ; // Filter deleted versions, which are all unqueryable $ query -> addWhere ( [ "\"{$baseTable}_Versions\".\"WasDeleted\"" => 0 ] ) ; }
Augment SQL to select from `_Versions` table instead.

@param SQLSelect $query
Augment SQL to select from _Versions table instead .