aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--core/Command/Maintenance/Install.php4
-rw-r--r--lib/private/Authentication/Token/DefaultTokenMapper.php2
-rw-r--r--lib/private/Comments/Manager.php19
-rw-r--r--lib/private/DB/QueryBuilder/ExpressionBuilder/ExpressionBuilder.php23
-rw-r--r--lib/private/DB/QueryBuilder/ExpressionBuilder/OCIExpressionBuilder.php24
-rw-r--r--lib/private/DB/QueryBuilder/QueryBuilder.php32
-rw-r--r--lib/private/DB/QueryBuilder/QuoteHelper.php2
-rw-r--r--lib/private/Files/Config/UserMountCache.php7
-rw-r--r--lib/private/Repair/NC12/UpdateLanguageCodes.php3
-rw-r--r--lib/private/Repair/NC13/RepairInvalidPaths.php8
-rw-r--r--lib/private/Share/Share.php6
-rw-r--r--lib/private/User/Manager.php3
-rw-r--r--lib/public/DB/QueryBuilder/IExpressionBuilder.php18
-rw-r--r--tests/lib/Comments/ManagerTest.php50
-rw-r--r--tests/lib/DB/QueryBuilder/FunctionBuilderTest.php8
-rw-r--r--tests/lib/DB/QueryBuilder/QueryBuilderTest.php50
-rw-r--r--tests/lib/Files/Cache/QuerySearchHelperTest.php41
-rw-r--r--tests/lib/Files/Config/UserMountCacheTest.php2
-rw-r--r--tests/lib/Repair/NC12/UpdateLanguageCodesTest.php3
-rw-r--r--tests/lib/Share/ShareTest.php8
20 files changed, 215 insertions, 98 deletions
diff --git a/core/Command/Maintenance/Install.php b/core/Command/Maintenance/Install.php
index fa6262d24ad..342614236d7 100644
--- a/core/Command/Maintenance/Install.php
+++ b/core/Command/Maintenance/Install.php
@@ -61,6 +61,7 @@ class Install extends Command {
->addOption('database-user', null, InputOption::VALUE_REQUIRED, 'User name to connect to the database')
->addOption('database-pass', null, InputOption::VALUE_OPTIONAL, 'Password of the database user', null)
->addOption('database-table-prefix', null, InputOption::VALUE_OPTIONAL, 'Prefix for all tables (default: oc_)', null)
+ ->addOption('database-table-space', null, InputOption::VALUE_OPTIONAL, 'Table space of the database (oci only)', null)
->addOption('admin-user', null, InputOption::VALUE_REQUIRED, 'User name of the admin account', 'admin')
->addOption('admin-pass', null, InputOption::VALUE_REQUIRED, 'Password of the admin account')
->addOption('data-dir', null, InputOption::VALUE_REQUIRED, 'Path to data directory', \OC::$SERVERROOT."/data");
@@ -171,6 +172,9 @@ class Install extends Command {
'adminpass' => $adminPassword,
'directory' => $dataDir
];
+ if ($db === 'oci') {
+ $options['dbtablespace'] = $input->getParameterOption('--database-table-space', '');
+ }
return $options;
}
diff --git a/lib/private/Authentication/Token/DefaultTokenMapper.php b/lib/private/Authentication/Token/DefaultTokenMapper.php
index a23be624542..35bb83b85f4 100644
--- a/lib/private/Authentication/Token/DefaultTokenMapper.php
+++ b/lib/private/Authentication/Token/DefaultTokenMapper.php
@@ -156,7 +156,7 @@ class DefaultTokenMapper extends Mapper {
public function deleteByName($name) {
$qb = $this->db->getQueryBuilder();
$qb->delete('authtoken')
- ->where($qb->expr()->eq('name', $qb->createNamedParameter($name)));
+ ->where($qb->expr()->eq('name', $qb->createNamedParameter($name), IQueryBuilder::PARAM_STR));
$qb->execute();
}
diff --git a/lib/private/Comments/Manager.php b/lib/private/Comments/Manager.php
index 4645adc6c5b..078e1eef4d3 100644
--- a/lib/private/Comments/Manager.php
+++ b/lib/private/Comments/Manager.php
@@ -411,9 +411,12 @@ class Manager implements ICommentsManager {
*/
public function getNumberOfUnreadCommentsForFolder($folderId, IUser $user) {
$qb = $this->dbConn->getQueryBuilder();
- $query = $qb->select('fileid', $qb->createFunction(
- 'COUNT(' . $qb->getColumnName('c.id') . ')')
- )->from('comments', 'c')
+ $query = $qb->select('f.fileid')
+ ->selectAlias(
+ $qb->createFunction('COUNT(' . $qb->getColumnName('c.id') . ')'),
+ 'num_ids'
+ )
+ ->from('comments', 'c')
->innerJoin('c', 'filecache', 'f', $qb->expr()->andX(
$qb->expr()->eq('c.object_type', $qb->createNamedParameter('files')),
$qb->expr()->eq('f.fileid', $qb->expr()->castColumn('c.object_id', IQueryBuilder::PARAM_INT))
@@ -431,9 +434,13 @@ class Manager implements ICommentsManager {
->groupBy('f.fileid');
$resultStatement = $query->execute();
- return array_map(function ($count) {
- return (int)$count;
- }, $resultStatement->fetchAll(\PDO::FETCH_KEY_PAIR));
+
+ $results = [];
+ while ($row = $resultStatement->fetch()) {
+ $results[$row['fileid']] = (int) $row['num_ids'];
+ }
+ $resultStatement->closeCursor();
+ return $results;
}
/**
diff --git a/lib/private/DB/QueryBuilder/ExpressionBuilder/ExpressionBuilder.php b/lib/private/DB/QueryBuilder/ExpressionBuilder/ExpressionBuilder.php
index f172260df79..a32ae4a1827 100644
--- a/lib/private/DB/QueryBuilder/ExpressionBuilder/ExpressionBuilder.php
+++ b/lib/private/DB/QueryBuilder/ExpressionBuilder/ExpressionBuilder.php
@@ -31,6 +31,7 @@ use OC\DB\QueryBuilder\QueryFunction;
use OC\DB\QueryBuilder\QuoteHelper;
use OCP\DB\QueryBuilder\IExpressionBuilder;
use OCP\DB\QueryBuilder\ILiteral;
+use OCP\DB\QueryBuilder\IQueryBuilder;
use OCP\DB\QueryBuilder\IQueryFunction;
use OCP\IDBConnection;
@@ -351,6 +352,28 @@ class ExpressionBuilder implements IExpressionBuilder {
}
/**
+ * Creates a $x = '' statement, because Oracle needs a different check
+ *
+ * @param string $x The field in string format to be inspected by the comparison.
+ * @return string
+ * @since 13.0.0
+ */
+ public function emptyString($x) {
+ return $this->eq($x, $this->literal('', IQueryBuilder::PARAM_STR));
+ }
+
+ /**
+ * Creates a `$x <> ''` statement, because Oracle needs a different check
+ *
+ * @param string $x The field in string format to be inspected by the comparison.
+ * @return string
+ * @since 13.0.0
+ */
+ public function nonEmptyString($x) {
+ return $this->neq($x, $this->literal('', IQueryBuilder::PARAM_STR));
+ }
+
+ /**
* Binary AND Operator copies a bit to the result if it exists in both operands.
*
* @param string|ILiteral $x The field or value to check
diff --git a/lib/private/DB/QueryBuilder/ExpressionBuilder/OCIExpressionBuilder.php b/lib/private/DB/QueryBuilder/ExpressionBuilder/OCIExpressionBuilder.php
index 179ce72e8e1..693d2faecff 100644
--- a/lib/private/DB/QueryBuilder/ExpressionBuilder/OCIExpressionBuilder.php
+++ b/lib/private/DB/QueryBuilder/ExpressionBuilder/OCIExpressionBuilder.php
@@ -138,6 +138,28 @@ class OCIExpressionBuilder extends ExpressionBuilder {
}
/**
+ * Creates a $x = '' statement, because Oracle needs a different check
+ *
+ * @param string $x The field in string format to be inspected by the comparison.
+ * @return string
+ * @since 13.0.0
+ */
+ public function emptyString($x) {
+ return $this->isNull($x);
+ }
+
+ /**
+ * Creates a `$x <> ''` statement, because Oracle needs a different check
+ *
+ * @param string $x The field in string format to be inspected by the comparison.
+ * @return string
+ * @since 13.0.0
+ */
+ public function nonEmptyString($x) {
+ return $this->isNotNull($x);
+ }
+
+ /**
* Returns a IQueryFunction that casts the column to the given type
*
* @param string $column
@@ -166,6 +188,6 @@ class OCIExpressionBuilder extends ExpressionBuilder {
public function iLike($x, $y, $type = null) {
$x = $this->helper->quoteColumnName($x);
$y = $this->helper->quoteColumnName($y);
- return new QueryFunction('REGEXP_LIKE('.$x.', \'^\' || REPLACE('.$y.', \'%\', \'.*\') || \'$\', \'i\')');
+ return new QueryFunction('REGEXP_LIKE(' . $x . ', \'^\' || REPLACE(REPLACE(' . $y . ', \'%\', \'.*\'), \'_\', \'.\') || \'$\', \'i\')');
}
}
diff --git a/lib/private/DB/QueryBuilder/QueryBuilder.php b/lib/private/DB/QueryBuilder/QueryBuilder.php
index 217789ce728..3fc827c9680 100644
--- a/lib/private/DB/QueryBuilder/QueryBuilder.php
+++ b/lib/private/DB/QueryBuilder/QueryBuilder.php
@@ -560,7 +560,7 @@ class QueryBuilder implements IQueryBuilder {
public function from($from, $alias = null) {
$this->queryBuilder->from(
$this->getTableName($from),
- $alias
+ $this->quoteAlias($alias)
);
return $this;
@@ -585,9 +585,9 @@ class QueryBuilder implements IQueryBuilder {
*/
public function join($fromAlias, $join, $alias, $condition = null) {
$this->queryBuilder->join(
- $fromAlias,
+ $this->quoteAlias($fromAlias),
$this->getTableName($join),
- $alias,
+ $this->quoteAlias($alias),
$condition
);
@@ -613,9 +613,9 @@ class QueryBuilder implements IQueryBuilder {
*/
public function innerJoin($fromAlias, $join, $alias, $condition = null) {
$this->queryBuilder->innerJoin(
- $fromAlias,
+ $this->quoteAlias($fromAlias),
$this->getTableName($join),
- $alias,
+ $this->quoteAlias($alias),
$condition
);
@@ -641,9 +641,9 @@ class QueryBuilder implements IQueryBuilder {
*/
public function leftJoin($fromAlias, $join, $alias, $condition = null) {
$this->queryBuilder->leftJoin(
- $fromAlias,
+ $this->quoteAlias($fromAlias),
$this->getTableName($join),
- $alias,
+ $this->quoteAlias($alias),
$condition
);
@@ -669,9 +669,9 @@ class QueryBuilder implements IQueryBuilder {
*/
public function rightJoin($fromAlias, $join, $alias, $condition = null) {
$this->queryBuilder->rightJoin(
- $fromAlias,
+ $this->quoteAlias($fromAlias),
$this->getTableName($join),
- $alias,
+ $this->quoteAlias($alias),
$condition
);
@@ -1193,4 +1193,18 @@ class QueryBuilder implements IQueryBuilder {
return $this->helper->quoteColumnName($tableAlias . $column);
}
+
+ /**
+ * Returns the column name quoted and with table alias prefix as needed by the implementation
+ *
+ * @param string $alias
+ * @return string
+ */
+ public function quoteAlias($alias) {
+ if ($alias === '' || $alias === null) {
+ return $alias;
+ }
+
+ return $this->helper->quoteColumnName($alias);
+ }
}
diff --git a/lib/private/DB/QueryBuilder/QuoteHelper.php b/lib/private/DB/QueryBuilder/QuoteHelper.php
index 705c3a89712..8821863ed07 100644
--- a/lib/private/DB/QueryBuilder/QuoteHelper.php
+++ b/lib/private/DB/QueryBuilder/QuoteHelper.php
@@ -70,7 +70,7 @@ class QuoteHelper {
list($alias, $columnName) = explode('.', $string, 2);
if ($columnName === '*') {
- return $string;
+ return '`' . $alias . '`.*';
}
return '`' . $alias . '`.`' . $columnName . '`';
diff --git a/lib/private/Files/Config/UserMountCache.php b/lib/private/Files/Config/UserMountCache.php
index 7ecad6e8cfb..9466aaf6c89 100644
--- a/lib/private/Files/Config/UserMountCache.php
+++ b/lib/private/Files/Config/UserMountCache.php
@@ -365,6 +365,11 @@ class UserMountCache implements IUserMountCache {
$result = $query->execute();
- return $result->fetchAll(\PDO::FETCH_KEY_PAIR);
+ $results = [];
+ while ($row = $result->fetch()) {
+ $results[$row['user_id']] = $row['size'];
+ }
+ $result->closeCursor();
+ return $results;
}
}
diff --git a/lib/private/Repair/NC12/UpdateLanguageCodes.php b/lib/private/Repair/NC12/UpdateLanguageCodes.php
index 891473f51a7..f4a1204543b 100644
--- a/lib/private/Repair/NC12/UpdateLanguageCodes.php
+++ b/lib/private/Repair/NC12/UpdateLanguageCodes.php
@@ -23,6 +23,7 @@
namespace OC\Repair\NC12;
+use OCP\DB\QueryBuilder\IQueryBuilder;
use OCP\IConfig;
use OCP\IDBConnection;
use OCP\Migration\IOutput;
@@ -80,7 +81,7 @@ class UpdateLanguageCodes implements IRepairStep {
->set('configvalue', $qb->createNamedParameter($newCode))
->where($qb->expr()->eq('appid', $qb->createNamedParameter('core')))
->andWhere($qb->expr()->eq('configkey', $qb->createNamedParameter('lang')))
- ->andWhere($qb->expr()->eq('configvalue', $qb->createNamedParameter($oldCode)))
+ ->andWhere($qb->expr()->eq('configvalue', $qb->createNamedParameter($oldCode), IQueryBuilder::PARAM_STR))
->execute();
$output->info('Changed ' . $affectedRows . ' setting(s) from "' . $oldCode . '" to "' . $newCode . '" in preferences table.');
diff --git a/lib/private/Repair/NC13/RepairInvalidPaths.php b/lib/private/Repair/NC13/RepairInvalidPaths.php
index 5a4187949a7..29a0e1ed157 100644
--- a/lib/private/Repair/NC13/RepairInvalidPaths.php
+++ b/lib/private/Repair/NC13/RepairInvalidPaths.php
@@ -64,17 +64,19 @@ class RepairInvalidPaths implements IRepairStep {
);
//select f.path, f.parent,p.path from oc_filecache f inner join oc_filecache p on f.parent=p.fileid and p.path!='' where f.path != p.path || '/' || f.name;
- $query = $builder->select('f.fileid', 'f.path', 'p.path AS parent_path', 'f.name', 'f.parent', 'f.storage', 'p.storage as parent_storage')
+ $builder->select('f.fileid', 'f.path', 'f.name', 'f.parent', 'f.storage')
+ ->selectAlias('p.path', 'parent_path')
+ ->selectAlias('p.storage', 'parent_storage')
->from('filecache', 'f')
->innerJoin('f', 'filecache', 'p', $builder->expr()->andX(
$builder->expr()->eq('f.parent', 'p.fileid'),
- $builder->expr()->neq('p.name', $builder->createNamedParameter(''))
+ $builder->expr()->nonEmptyString('p.name')
))
->where($builder->expr()->neq('f.path', $computedPath))
->setMaxResults(self::MAX_ROWS);
do {
- $result = $query->execute();
+ $result = $builder->execute();
$rows = $result->fetchAll();
foreach ($rows as $row) {
yield $row;
diff --git a/lib/private/Share/Share.php b/lib/private/Share/Share.php
index 8938c6f3066..93117bf3c7e 100644
--- a/lib/private/Share/Share.php
+++ b/lib/private/Share/Share.php
@@ -338,6 +338,7 @@ class Share extends Constants {
}
}
}
+ $result->closeCursor();
}
}
@@ -1460,8 +1461,9 @@ class Share extends Constants {
->from('share')
->where($qb->expr()->eq('id', $qb->createParameter('shareId')))
->setParameter(':shareId', $shareId);
- $result = $qb->execute();
- $result = $result->fetch();
+ $dbResult = $qb->execute();
+ $result = $dbResult->fetch();
+ $dbResult->closeCursor();
if (empty($result)) {
throw new \Exception('Share not found');
diff --git a/lib/private/User/Manager.php b/lib/private/User/Manager.php
index ded807a223b..8f3c98d4b5e 100644
--- a/lib/private/User/Manager.php
+++ b/lib/private/User/Manager.php
@@ -34,6 +34,7 @@
namespace OC\User;
use OC\Hooks\PublicEmitter;
+use OCP\DB\QueryBuilder\IQueryBuilder;
use OCP\IUser;
use OCP\IUserBackend;
use OCP\IUserManager;
@@ -436,7 +437,7 @@ class Manager extends PublicEmitter implements IUserManager {
->from('preferences')
->where($queryBuilder->expr()->eq('appid', $queryBuilder->createNamedParameter('core')))
->andWhere($queryBuilder->expr()->eq('configkey', $queryBuilder->createNamedParameter('enabled')))
- ->andWhere($queryBuilder->expr()->eq('configvalue', $queryBuilder->createNamedParameter('false')));
+ ->andWhere($queryBuilder->expr()->eq('configvalue', $queryBuilder->createNamedParameter('false'), IQueryBuilder::PARAM_STR));
$query = $queryBuilder->execute();
diff --git a/lib/public/DB/QueryBuilder/IExpressionBuilder.php b/lib/public/DB/QueryBuilder/IExpressionBuilder.php
index c123875b803..eab93b52f8a 100644
--- a/lib/public/DB/QueryBuilder/IExpressionBuilder.php
+++ b/lib/public/DB/QueryBuilder/IExpressionBuilder.php
@@ -305,6 +305,24 @@ interface IExpressionBuilder {
*/
public function notIn($x, $y, $type = null);
+ /**
+ * Creates a $x = '' statement, because Oracle needs a different check
+ *
+ * @param string $x The field in string format to be inspected by the comparison.
+ * @return string
+ * @since 13.0.0
+ */
+ public function emptyString($x);
+
+ /**
+ * Creates a `$x <> ''` statement, because Oracle needs a different check
+ *
+ * @param string $x The field in string format to be inspected by the comparison.
+ * @return string
+ * @since 13.0.0
+ */
+ public function nonEmptyString($x);
+
/**
* Creates a bitwise AND comparison
diff --git a/tests/lib/Comments/ManagerTest.php b/tests/lib/Comments/ManagerTest.php
index 24c634be137..b04f3bd567e 100644
--- a/tests/lib/Comments/ManagerTest.php
+++ b/tests/lib/Comments/ManagerTest.php
@@ -307,29 +307,9 @@ class ManagerTest extends TestCase {
}
public function testGetNumberOfUnreadCommentsForFolder() {
- // 2 comment for 1111 with 1 before read marker
- // 2 comments for 1112 with no read marker
- // 1 comment for 1113 before read marker
- // 1 comment for 1114 with no read marker
- $this->addDatabaseEntry(0, 0, null, null, '1112');
- for ($i = 1; $i < 5; $i++) {
- $this->addDatabaseEntry(0, 0, null, null, '111' . $i);
- }
- $this->addDatabaseEntry(0, 0, (new \DateTime())->modify('-2 days'), null, '1111');
- $user = $this->createMock(IUser::class);
- $user->expects($this->any())
- ->method('getUID')
- ->will($this->returnValue('comment_test'));
-
- $manager = $this->getManager();
-
- $manager->setReadMark('files', '1111', (new \DateTime())->modify('-1 days'), $user);
- $manager->setReadMark('files', '1113', (new \DateTime()), $user);
-
$query = $this->connection->getQueryBuilder();
$query->insert('filecache')
->values([
- 'fileid' => $query->createParameter('fileid'),
'parent' => $query->createNamedParameter(1000),
'size' => $query->createNamedParameter(10),
'mtime' => $query->createNamedParameter(10),
@@ -338,17 +318,37 @@ class ManagerTest extends TestCase {
'path_hash' => $query->createParameter('path'),
]);
- for ($i = 1111; $i < 1115; $i++) {
+ $fileIds = [];
+ for ($i = 0; $i < 4; $i++) {
$query->setParameter('path', 'path_' . $i);
- $query->setParameter('fileid', $i);
$query->execute();
+ $fileIds[] = $query->getLastInsertId();
}
+ // 2 comment for 1111 with 1 before read marker
+ // 2 comments for 1112 with no read marker
+ // 1 comment for 1113 before read marker
+ // 1 comment for 1114 with no read marker
+ $this->addDatabaseEntry(0, 0, null, null, $fileIds[1]);
+ for ($i = 0; $i < 4; $i++) {
+ $this->addDatabaseEntry(0, 0, null, null, $fileIds[$i]);
+ }
+ $this->addDatabaseEntry(0, 0, (new \DateTime())->modify('-2 days'), null, $fileIds[0]);
+ $user = $this->createMock(IUser::class);
+ $user->expects($this->any())
+ ->method('getUID')
+ ->will($this->returnValue('comment_test'));
+
+ $manager = $this->getManager();
+
+ $manager->setReadMark('files', (string) $fileIds[0], (new \DateTime())->modify('-1 days'), $user);
+ $manager->setReadMark('files', (string) $fileIds[2], (new \DateTime()), $user);
+
$amount = $manager->getNumberOfUnreadCommentsForFolder(1000, $user);
$this->assertEquals([
- '1111' => 1,
- '1112' => 2,
- '1114' => 1,
+ $fileIds[0] => 1,
+ $fileIds[1] => 2,
+ $fileIds[3] => 1,
], $amount);
}
diff --git a/tests/lib/DB/QueryBuilder/FunctionBuilderTest.php b/tests/lib/DB/QueryBuilder/FunctionBuilderTest.php
index c270e105fc1..e89da0fbc92 100644
--- a/tests/lib/DB/QueryBuilder/FunctionBuilderTest.php
+++ b/tests/lib/DB/QueryBuilder/FunctionBuilderTest.php
@@ -44,6 +44,8 @@ class FunctionBuilderTest extends TestCase {
$query = $this->connection->getQueryBuilder();
$query->select($query->func()->concat($query->createNamedParameter('foo'), new Literal("'bar'")));
+ $query->from('appconfig')
+ ->setMaxResults(1);
$this->assertEquals('foobar', $query->execute()->fetchColumn());
}
@@ -52,6 +54,8 @@ class FunctionBuilderTest extends TestCase {
$query = $this->connection->getQueryBuilder();
$query->select($query->func()->md5($query->createNamedParameter('foobar')));
+ $query->from('appconfig')
+ ->setMaxResults(1);
$this->assertEquals(md5('foobar'), $query->execute()->fetchColumn());
}
@@ -60,6 +64,8 @@ class FunctionBuilderTest extends TestCase {
$query = $this->connection->getQueryBuilder();
$query->select($query->func()->substring($query->createNamedParameter('foobar'), new Literal(2), $query->createNamedParameter(2)));
+ $query->from('appconfig')
+ ->setMaxResults(1);
$this->assertEquals('oo', $query->execute()->fetchColumn());
}
@@ -68,6 +74,8 @@ class FunctionBuilderTest extends TestCase {
$query = $this->connection->getQueryBuilder();
$query->select($query->func()->substring($query->createNamedParameter('foobar'), new Literal(2)));
+ $query->from('appconfig')
+ ->setMaxResults(1);
$this->assertEquals('oobar', $query->execute()->fetchColumn());
}
diff --git a/tests/lib/DB/QueryBuilder/QueryBuilderTest.php b/tests/lib/DB/QueryBuilder/QueryBuilderTest.php
index 150c772b26c..e264fde6ec7 100644
--- a/tests/lib/DB/QueryBuilder/QueryBuilderTest.php
+++ b/tests/lib/DB/QueryBuilder/QueryBuilderTest.php
@@ -472,15 +472,15 @@ class QueryBuilderTest extends \Test\TestCase {
public function dataFrom() {
return [
['data', null, null, null, [['table' => '`*PREFIX*data`', 'alias' => null]], '`*PREFIX*data`'],
- ['data', 't', null, null, [['table' => '`*PREFIX*data`', 'alias' => 't']], '`*PREFIX*data` t'],
+ ['data', 't', null, null, [['table' => '`*PREFIX*data`', 'alias' => '`t`']], '`*PREFIX*data` `t`'],
['data1', null, 'data2', null, [
['table' => '`*PREFIX*data1`', 'alias' => null],
['table' => '`*PREFIX*data2`', 'alias' => null]
], '`*PREFIX*data1`, `*PREFIX*data2`'],
['data', 't1', 'data', 't2', [
- ['table' => '`*PREFIX*data`', 'alias' => 't1'],
- ['table' => '`*PREFIX*data`', 'alias' => 't2']
- ], '`*PREFIX*data` t1, `*PREFIX*data` t2'],
+ ['table' => '`*PREFIX*data`', 'alias' => '`t1`'],
+ ['table' => '`*PREFIX*data`', 'alias' => '`t2`']
+ ], '`*PREFIX*data` `t1`, `*PREFIX*data` `t2`'],
];
}
@@ -515,18 +515,18 @@ class QueryBuilderTest extends \Test\TestCase {
return [
[
'd1', 'data2', null, null,
- ['d1' => [['joinType' => 'inner', 'joinTable' => '`*PREFIX*data2`', 'joinAlias' => null, 'joinCondition' => null]]],
- '`*PREFIX*data1` d1 INNER JOIN `*PREFIX*data2` ON '
+ ['`d1`' => [['joinType' => 'inner', 'joinTable' => '`*PREFIX*data2`', 'joinAlias' => null, 'joinCondition' => null]]],
+ '`*PREFIX*data1` `d1` INNER JOIN `*PREFIX*data2` ON '
],
[
'd1', 'data2', 'd2', null,
- ['d1' => [['joinType' => 'inner', 'joinTable' => '`*PREFIX*data2`', 'joinAlias' => 'd2', 'joinCondition' => null]]],
- '`*PREFIX*data1` d1 INNER JOIN `*PREFIX*data2` d2 ON '
+ ['`d1`' => [['joinType' => 'inner', 'joinTable' => '`*PREFIX*data2`', 'joinAlias' => '`d2`', 'joinCondition' => null]]],
+ '`*PREFIX*data1` `d1` INNER JOIN `*PREFIX*data2` `d2` ON '
],
[
- 'd1', 'data2', 'd2', 'd1.`field1` = d2.`field2`',
- ['d1' => [['joinType' => 'inner', 'joinTable' => '`*PREFIX*data2`', 'joinAlias' => 'd2', 'joinCondition' => 'd1.`field1` = d2.`field2`']]],
- '`*PREFIX*data1` d1 INNER JOIN `*PREFIX*data2` d2 ON d1.`field1` = d2.`field2`'
+ 'd1', 'data2', 'd2', '`d1`.`field1` = `d2`.`field2`',
+ ['`d1`' => [['joinType' => 'inner', 'joinTable' => '`*PREFIX*data2`', 'joinAlias' => '`d2`', 'joinCondition' => '`d1`.`field1` = `d2`.`field2`']]],
+ '`*PREFIX*data1` `d1` INNER JOIN `*PREFIX*data2` `d2` ON `d1`.`field1` = `d2`.`field2`'
],
];
@@ -596,18 +596,18 @@ class QueryBuilderTest extends \Test\TestCase {
return [
[
'd1', 'data2', null, null,
- ['d1' => [['joinType' => 'left', 'joinTable' => '`*PREFIX*data2`', 'joinAlias' => null, 'joinCondition' => null]]],
- '`*PREFIX*data1` d1 LEFT JOIN `*PREFIX*data2` ON '
+ ['`d1`' => [['joinType' => 'left', 'joinTable' => '`*PREFIX*data2`', 'joinAlias' => null, 'joinCondition' => null]]],
+ '`*PREFIX*data1` `d1` LEFT JOIN `*PREFIX*data2` ON '
],
[
'd1', 'data2', 'd2', null,
- ['d1' => [['joinType' => 'left', 'joinTable' => '`*PREFIX*data2`', 'joinAlias' => 'd2', 'joinCondition' => null]]],
- '`*PREFIX*data1` d1 LEFT JOIN `*PREFIX*data2` d2 ON '
+ ['`d1`' => [['joinType' => 'left', 'joinTable' => '`*PREFIX*data2`', 'joinAlias' => '`d2`', 'joinCondition' => null]]],
+ '`*PREFIX*data1` `d1` LEFT JOIN `*PREFIX*data2` `d2` ON '
],
[
- 'd1', 'data2', 'd2', 'd1.`field1` = d2.`field2`',
- ['d1' => [['joinType' => 'left', 'joinTable' => '`*PREFIX*data2`', 'joinAlias' => 'd2', 'joinCondition' => 'd1.`field1` = d2.`field2`']]],
- '`*PREFIX*data1` d1 LEFT JOIN `*PREFIX*data2` d2 ON d1.`field1` = d2.`field2`'
+ 'd1', 'data2', 'd2', '`d1`.`field1` = `d2`.`field2`',
+ ['`d1`' => [['joinType' => 'left', 'joinTable' => '`*PREFIX*data2`', 'joinAlias' => '`d2`', 'joinCondition' => '`d1`.`field1` = `d2`.`field2`']]],
+ '`*PREFIX*data1` `d1` LEFT JOIN `*PREFIX*data2` `d2` ON `d1`.`field1` = `d2`.`field2`'
],
];
}
@@ -646,18 +646,18 @@ class QueryBuilderTest extends \Test\TestCase {
return [
[
'd1', 'data2', null, null,
- ['d1' => [['joinType' => 'right', 'joinTable' => '`*PREFIX*data2`', 'joinAlias' => null, 'joinCondition' => null]]],
- '`*PREFIX*data1` d1 RIGHT JOIN `*PREFIX*data2` ON '
+ ['`d1`' => [['joinType' => 'right', 'joinTable' => '`*PREFIX*data2`', 'joinAlias' => null, 'joinCondition' => null]]],
+ '`*PREFIX*data1` `d1` RIGHT JOIN `*PREFIX*data2` ON '
],
[
'd1', 'data2', 'd2', null,
- ['d1' => [['joinType' => 'right', 'joinTable' => '`*PREFIX*data2`', 'joinAlias' => 'd2', 'joinCondition' => null]]],
- '`*PREFIX*data1` d1 RIGHT JOIN `*PREFIX*data2` d2 ON '
+ ['`d1`' => [['joinType' => 'right', 'joinTable' => '`*PREFIX*data2`', 'joinAlias' => '`d2`', 'joinCondition' => null]]],
+ '`*PREFIX*data1` `d1` RIGHT JOIN `*PREFIX*data2` `d2` ON '
],
[
- 'd1', 'data2', 'd2', 'd1.`field1` = d2.`field2`',
- ['d1' => [['joinType' => 'right', 'joinTable' => '`*PREFIX*data2`', 'joinAlias' => 'd2', 'joinCondition' => 'd1.`field1` = d2.`field2`']]],
- '`*PREFIX*data1` d1 RIGHT JOIN `*PREFIX*data2` d2 ON d1.`field1` = d2.`field2`'
+ 'd1', 'data2', 'd2', '`d1`.`field1` = `d2`.`field2`',
+ ['`d1`' => [['joinType' => 'right', 'joinTable' => '`*PREFIX*data2`', 'joinAlias' => '`d2`', 'joinCondition' => '`d1`.`field1` = `d2`.`field2`']]],
+ '`*PREFIX*data1` `d1` RIGHT JOIN `*PREFIX*data2` `d2` ON `d1`.`field1` = `d2`.`field2`'
],
];
}
diff --git a/tests/lib/Files/Cache/QuerySearchHelperTest.php b/tests/lib/Files/Cache/QuerySearchHelperTest.php
index f458ef039e1..850cee066a1 100644
--- a/tests/lib/Files/Cache/QuerySearchHelperTest.php
+++ b/tests/lib/Files/Cache/QuerySearchHelperTest.php
@@ -129,6 +129,8 @@ class QuerySearchHelperTest extends TestCase {
$builder->insert('filecache')
->values($values)
->execute();
+
+ return $builder->getLastInsertId();
}
private function search(ISearchOperator $operator) {
@@ -139,34 +141,34 @@ class QuerySearchHelperTest extends TestCase {
public function comparisonProvider() {
return [
- [new SearchComparison(ISearchComparison::COMPARE_GREATER_THAN, 'mtime', 125), [1002]],
- [new SearchComparison(ISearchComparison::COMPARE_LESS_THAN, 'mtime', 125), [1001]],
+ [new SearchComparison(ISearchComparison::COMPARE_GREATER_THAN, 'mtime', 125), [1]],
+ [new SearchComparison(ISearchComparison::COMPARE_LESS_THAN, 'mtime', 125), [0]],
[new SearchComparison(ISearchComparison::COMPARE_EQUAL, 'size', 125), []],
- [new SearchComparison(ISearchComparison::COMPARE_EQUAL, 'size', 50), [1001, 1002]],
- [new SearchComparison(ISearchComparison::COMPARE_EQUAL, 'name', 'foobar'), [1001]],
- [new SearchComparison(ISearchComparison::COMPARE_LIKE, 'name', 'foo%'), [1001, 1002]],
- [new SearchComparison(ISearchComparison::COMPARE_EQUAL, 'mimetype', 'image/jpg'), [1001]],
- [new SearchComparison(ISearchComparison::COMPARE_LIKE, 'mimetype', 'image/%'), [1001, 1002]],
+ [new SearchComparison(ISearchComparison::COMPARE_EQUAL, 'size', 50), [0, 1]],
+ [new SearchComparison(ISearchComparison::COMPARE_EQUAL, 'name', 'foobar'), [0]],
+ [new SearchComparison(ISearchComparison::COMPARE_LIKE, 'name', 'foo%'), [0, 1]],
+ [new SearchComparison(ISearchComparison::COMPARE_EQUAL, 'mimetype', 'image/jpg'), [0]],
+ [new SearchComparison(ISearchComparison::COMPARE_LIKE, 'mimetype', 'image/%'), [0, 1]],
[new SearchBinaryOperator(ISearchBinaryOperator::OPERATOR_AND, [
new SearchComparison(ISearchComparison::COMPARE_EQUAL, 'size', 50),
- new SearchComparison(ISearchComparison::COMPARE_LESS_THAN, 'mtime', 125), [1001]
- ]), [1001]],
+ new SearchComparison(ISearchComparison::COMPARE_LESS_THAN, 'mtime', 125), [0]
+ ]), [0]],
[new SearchBinaryOperator(ISearchBinaryOperator::OPERATOR_OR, [
new SearchComparison(ISearchComparison::COMPARE_EQUAL, 'mtime', 100),
new SearchComparison(ISearchComparison::COMPARE_EQUAL, 'mtime', 150),
- ]), [1001, 1002]],
+ ]), [0, 1]],
[new SearchBinaryOperator(ISearchBinaryOperator::OPERATOR_NOT, [
new SearchComparison(ISearchComparison::COMPARE_EQUAL, 'mtime', 150),
- ]), [1001]],
+ ]), [0]],
[new SearchBinaryOperator(ISearchBinaryOperator::OPERATOR_NOT, [
new SearchComparison(ISearchComparison::COMPARE_GREATER_THAN, 'mtime', 125),
- ]), [1001]],
+ ]), [0]],
[new SearchBinaryOperator(ISearchBinaryOperator::OPERATOR_NOT, [
new SearchComparison(ISearchComparison::COMPARE_LESS_THAN, 'mtime', 125),
- ]), [1002]],
+ ]), [1]],
[new SearchBinaryOperator(ISearchBinaryOperator::OPERATOR_NOT, [
new SearchComparison(ISearchComparison::COMPARE_LIKE, 'name', '%bar'),
- ]), [1002]],
+ ]), [1]],
];
}
@@ -178,22 +180,25 @@ class QuerySearchHelperTest extends TestCase {
* @param array $fileIds
*/
public function testComparison(ISearchOperator $operator, array $fileIds) {
- $this->addCacheEntry([
+ $fileId = [];
+ $fileId[] = $this->addCacheEntry([
'path' => 'foobar',
- 'fileid' => 1001,
'mtime' => 100,
'size' => 50,
'mimetype' => 'image/jpg'
]);
- $this->addCacheEntry([
+ $fileId[] = $this->addCacheEntry([
'path' => 'fooasd',
- 'fileid' => 1002,
'mtime' => 150,
'size' => 50,
'mimetype' => 'image/png'
]);
+ $fileIds = array_map(function($i) use ($fileId) {
+ return $fileId[$i];
+ }, $fileIds);
+
$results = $this->search($operator);
sort($fileIds);
diff --git a/tests/lib/Files/Config/UserMountCacheTest.php b/tests/lib/Files/Config/UserMountCacheTest.php
index f455dc987af..a96b385fcbf 100644
--- a/tests/lib/Files/Config/UserMountCacheTest.php
+++ b/tests/lib/Files/Config/UserMountCacheTest.php
@@ -332,7 +332,7 @@ class UserMountCacheTest extends TestCase {
$id = (int)$this->connection->lastInsertId('*PREFIX*filecache');
$this->fileIds[] = $id;
} else {
- $sql = 'SELECT fileid FROM *PREFIX*filecache WHERE `storage` = ? AND `path_hash` =?';
+ $sql = 'SELECT `fileid` FROM `*PREFIX*filecache` WHERE `storage` = ? AND `path_hash` =?';
$query = $this->connection->prepare($sql);
$query->execute([$storageId, md5($internalPath)]);
return (int)$query->fetchColumn();
diff --git a/tests/lib/Repair/NC12/UpdateLanguageCodesTest.php b/tests/lib/Repair/NC12/UpdateLanguageCodesTest.php
index 4379d1ba589..46422589541 100644
--- a/tests/lib/Repair/NC12/UpdateLanguageCodesTest.php
+++ b/tests/lib/Repair/NC12/UpdateLanguageCodesTest.php
@@ -24,6 +24,7 @@
namespace Test\Repair\NC12;
use OC\Repair\NC12\UpdateLanguageCodes;
+use OCP\DB\QueryBuilder\IQueryBuilder;
use OCP\IConfig;
use OCP\Migration\IOutput;
use Test\TestCase;
@@ -152,7 +153,7 @@ class UpdateLanguageCodesTest extends TestCase {
->where($qb->expr()->eq('userid', $qb->createNamedParameter($user['userid'])))
->andWhere($qb->expr()->eq('appid', $qb->createNamedParameter('core')))
->andWhere($qb->expr()->eq('configkey', $qb->createNamedParameter('lang')))
- ->andWhere($qb->expr()->eq('configvalue', $qb->createNamedParameter($user['configvalue'])))
+ ->andWhere($qb->expr()->eq('configvalue', $qb->createNamedParameter($user['configvalue']), IQueryBuilder::PARAM_STR))
->execute();
}
}
diff --git a/tests/lib/Share/ShareTest.php b/tests/lib/Share/ShareTest.php
index 40e88d597a4..4ce40a2accd 100644
--- a/tests/lib/Share/ShareTest.php
+++ b/tests/lib/Share/ShareTest.php
@@ -1246,7 +1246,9 @@ class ShareTest extends \Test\TestCase {
->setParameter('owner', $this->user1->getUID())
->setParameter('share_type', \OCP\Share::SHARE_TYPE_LINK);
- $res = $qb->execute()->fetchAll();
+ $result = $qb->execute();
+ $res = $result->fetchAll();
+ $result->closeCursor();
$this->assertCount(1, $res);
$id = $res[0]['id'];
@@ -1260,7 +1262,9 @@ class ShareTest extends \Test\TestCase {
->from('share')
->where($qb->expr()->eq('id', $qb->createParameter('id')))
->setParameter('id', $id);
- $hash = $qb->execute()->fetch()['share_with'];
+ $result = $qb->execute();
+ $hash = $result->fetch()['share_with'];
+ $result->closeCursor();
$hasher = \OC::$server->getHasher();