/** * @test */ public function queryRestrictionsAreReevaluatedOnSettingsChangeForExecute() { $GLOBALS['TCA']['pages']['ctrl'] = ['tstamp' => 'tstamp', 'versioningWS' => true, 'delete' => 'deleted', 'crdate' => 'crdate', 'enablecolumns' => ['disabled' => 'hidden']]; $this->connection->quoteIdentifier(Argument::cetera())->willReturnArgument(0); $this->connection->quoteIdentifiers(Argument::cetera())->willReturnArgument(0); $this->connection->getExpressionBuilder()->willReturn(GeneralUtility::makeInstance(ExpressionBuilder::class, $this->connection->reveal())); $concreteQueryBuilder = GeneralUtility::makeInstance(\Doctrine\DBAL\Query\QueryBuilder::class, $this->connection->reveal()); $subject = GeneralUtility::makeInstance(QueryBuilder::class, $this->connection->reveal(), null, $concreteQueryBuilder); $subject->select('*')->from('pages')->where('uid=1'); $subject->getQueryContext()->setIgnoreEnableFields(true)->setIgnoredEnableFields(['disabled']); $expectedSQL = 'SELECT * FROM pages WHERE (uid=1) AND (pages.deleted = 0)'; $this->connection->executeQuery($expectedSQL, Argument::cetera())->shouldBeCalled(); $subject->execute(); $subject->getQueryContext()->setIgnoreEnableFields(false); $expectedSQL = 'SELECT * FROM pages WHERE (uid=1) AND ((pages.hidden = 0) AND (pages.deleted = 0))'; $this->connection->executeQuery($expectedSQL, Argument::cetera())->shouldBeCalled(); $subject->execute(); }
/** * Gets an ExpressionBuilder used for object-oriented construction of query expressions. * This producer method is intended for convenient inline usage. Example: * * For more complex expression construction, consider storing the expression * builder object in a local variable. * * @return ExpressionBuilder */ public function expr() : ExpressionBuilder { return $this->connection->getExpressionBuilder(); }