From b4dfdf6492767606a5dab90b65658a1d15908b5a Mon Sep 17 00:00:00 2001 From: Carl Schwan Date: Fri, 23 Jan 2026 14:50:57 +0100 Subject: [PATCH] refactor: Prefer using IFunctionBuilder than createFunction Signed-off-by: Carl Schwan --- lib/private/Comments/Manager.php | 2 +- .../DB/QueryBuilder/FunctionBuilder/FunctionBuilder.php | 6 ++++++ lib/private/DB/QueryBuilder/QueryBuilder.php | 2 +- lib/private/Files/Cache/CacheQueryBuilder.php | 4 ++-- .../FilesMetadata/Service/MetadataRequestService.php | 4 ++-- lib/public/DB/QueryBuilder/IFunctionBuilder.php | 6 ++++++ lib/public/DB/QueryBuilder/IQueryBuilder.php | 7 ++++--- 7 files changed, 22 insertions(+), 9 deletions(-) diff --git a/lib/private/Comments/Manager.php b/lib/private/Comments/Manager.php index 84737897bb4a2..58d05a64d1238 100644 --- a/lib/private/Comments/Manager.php +++ b/lib/private/Comments/Manager.php @@ -798,7 +798,7 @@ public function getLastCommentDateByActor( $query = $this->dbConn->getQueryBuilder(); $query->select('actor_id') - ->selectAlias($query->createFunction('MAX(' . $query->getColumnName('creation_timestamp') . ')'), 'last_comment') + ->selectAlias($query->func()->max('creation_timestamp'), 'last_comment') ->from('comments') ->where($query->expr()->eq('object_type', $query->createNamedParameter($objectType))) ->andWhere($query->expr()->eq('object_id', $query->createNamedParameter($objectId))) diff --git a/lib/private/DB/QueryBuilder/FunctionBuilder/FunctionBuilder.php b/lib/private/DB/QueryBuilder/FunctionBuilder/FunctionBuilder.php index 48dc1da6330b8..f4ded03c2f727 100644 --- a/lib/private/DB/QueryBuilder/FunctionBuilder/FunctionBuilder.php +++ b/lib/private/DB/QueryBuilder/FunctionBuilder/FunctionBuilder.php @@ -13,6 +13,7 @@ use OCP\DB\QueryBuilder\IQueryBuilder; use OCP\DB\QueryBuilder\IQueryFunction; use OCP\IDBConnection; +use Override; class FunctionBuilder implements IFunctionBuilder { /** @var IDBConnection|Connection */ @@ -105,4 +106,9 @@ public function greatest($x, $y): IQueryFunction { public function least($x, $y): IQueryFunction { return new QueryFunction('LEAST(' . $this->helper->quoteColumnName($x) . ', ' . $this->helper->quoteColumnName($y) . ')'); } + + #[Override] + public function now(): IQueryFunction { + return new QueryFunction('NOW()'); + } } diff --git a/lib/private/DB/QueryBuilder/QueryBuilder.php b/lib/private/DB/QueryBuilder/QueryBuilder.php index 82fc6f84117c8..e88af61a7056a 100644 --- a/lib/private/DB/QueryBuilder/QueryBuilder.php +++ b/lib/private/DB/QueryBuilder/QueryBuilder.php @@ -990,7 +990,7 @@ public function addGroupBy(...$groupBy) { * * * @param string $column The column into which the value should be inserted. - * @param IParameter|string $value The value that should be inserted into the column. + * @param IParameter|IQueryFunction|string $value The value that should be inserted into the column. * * @return $this This QueryBuilder instance. */ diff --git a/lib/private/Files/Cache/CacheQueryBuilder.php b/lib/private/Files/Cache/CacheQueryBuilder.php index 5492452273bba..3174974b6f5ee 100644 --- a/lib/private/Files/Cache/CacheQueryBuilder.php +++ b/lib/private/Files/Cache/CacheQueryBuilder.php @@ -29,8 +29,8 @@ public function __construct( public function selectTagUsage(): self { $this ->select('systemtag.name', 'systemtag.id', 'systemtag.visibility', 'systemtag.editable', 'systemtag.etag', 'systemtag.color') - ->selectAlias($this->createFunction('COUNT(filecache.fileid)'), 'number_files') - ->selectAlias($this->createFunction('MAX(filecache.fileid)'), 'ref_file_id') + ->selectAlias($this->func()->count('filecache.fileid'), 'number_files') + ->selectAlias($this->func()->max('filecache.fileid'), 'ref_file_id') ->from('filecache', 'filecache') ->leftJoin('filecache', 'systemtag_object_mapping', 'systemtagmap', $this->expr()->andX( $this->expr()->eq('filecache.fileid', $this->expr()->castColumn('systemtagmap.objectid', IQueryBuilder::PARAM_INT)), diff --git a/lib/private/FilesMetadata/Service/MetadataRequestService.php b/lib/private/FilesMetadata/Service/MetadataRequestService.php index c308ae1c9c88f..94b5a5ced2ef5 100644 --- a/lib/private/FilesMetadata/Service/MetadataRequestService.php +++ b/lib/private/FilesMetadata/Service/MetadataRequestService.php @@ -63,7 +63,7 @@ public function store(IFilesMetadata $filesMetadata): void { ->setValue('file_id', $qb->createNamedParameter($filesMetadata->getFileId(), IQueryBuilder::PARAM_INT)) ->setValue('json', $qb->createNamedParameter(json_encode($filesMetadata->jsonSerialize()))) ->setValue('sync_token', $qb->createNamedParameter($this->generateSyncToken())) - ->setValue('last_update', (string)$qb->createFunction('NOW()')); + ->setValue('last_update', $qb->func()->now()); $qb->executeStatement(); } @@ -159,7 +159,7 @@ public function updateMetadata(IFilesMetadata $filesMetadata): int { ->hintShardKey('files_metadata', $this->getStorageId($filesMetadata)) ->set('json', $qb->createNamedParameter(json_encode($filesMetadata->jsonSerialize()))) ->set('sync_token', $qb->createNamedParameter($this->generateSyncToken())) - ->set('last_update', $qb->createFunction('NOW()')) + ->set('last_update', $qb->func()->now()) ->where( $expr->andX( $expr->eq('file_id', $qb->createNamedParameter($filesMetadata->getFileId(), IQueryBuilder::PARAM_INT)), diff --git a/lib/public/DB/QueryBuilder/IFunctionBuilder.php b/lib/public/DB/QueryBuilder/IFunctionBuilder.php index 480ec1cb1ac8c..1d10e5a4dcf1f 100644 --- a/lib/public/DB/QueryBuilder/IFunctionBuilder.php +++ b/lib/public/DB/QueryBuilder/IFunctionBuilder.php @@ -170,4 +170,10 @@ public function greatest($x, $y): IQueryFunction; * @since 18.0.0 */ public function least($x, $y): IQueryFunction; + + /** + * Get the current date and time as a UNIX timestamp. + * @since 34.0.0 + */ + public function now(): IQueryFunction; } diff --git a/lib/public/DB/QueryBuilder/IQueryBuilder.php b/lib/public/DB/QueryBuilder/IQueryBuilder.php index b1c483522ee44..438c72a683ef4 100644 --- a/lib/public/DB/QueryBuilder/IQueryBuilder.php +++ b/lib/public/DB/QueryBuilder/IQueryBuilder.php @@ -770,7 +770,7 @@ public function addGroupBy(...$groupBy); * * * @param string $column The column into which the value should be inserted. - * @param IParameter|string $value The value that should be inserted into the column. + * @param IParameter|IQueryFunction|string $value The value that should be inserted into the column. * * @return $this This QueryBuilder instance. * @since 8.2.0 @@ -1001,9 +1001,10 @@ public function createPositionalParameter($value, $type = self::PARAM_STR); public function createParameter($name); /** - * Creates a new function + * Creates a new function. * - * Attention: Column names inside the call have to be quoted before hand + * @warning Column names inside the call have to be quoted beforehand. In most + * case you can use the IFunctionBuilder instead. * * Example: *