]> source.dussan.org Git - nextcloud-server.git/commitdiff
fix: Adjust parameter type usage and add SQLite support
authorFerdinand Thiessen <opensource@fthiessen.de>
Tue, 20 Aug 2024 09:55:14 +0000 (11:55 +0200)
committerFerdinand Thiessen <opensource@fthiessen.de>
Thu, 17 Oct 2024 16:31:44 +0000 (18:31 +0200)
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
lib/private/DB/QueryBuilder/ExpressionBuilder/SqliteExpressionBuilder.php
lib/private/Security/RateLimiting/Backend/DatabaseBackend.php
lib/private/Share20/DefaultShareProvider.php
lib/private/TextToImage/Db/TaskMapper.php
lib/public/Migration/Attributes/ColumnType.php

index ac4698cdc76b44ee5b1db8071f4edd0b37365eb3..d1ca65b0bdac9c94773ceb84467c64adf8da496b 100644 (file)
@@ -29,7 +29,11 @@ class SqliteExpressionBuilder extends ExpressionBuilder {
         * @return array|IQueryFunction|string
         */
        protected function prepareColumn($column, $type) {
-               if ($type === IQueryBuilder::PARAM_DATE && !is_array($column) && !($column instanceof IParameter) && !($column instanceof ILiteral)) {
+               if ($type !== null
+                       && !is_array($column)
+                       && !($column instanceof IParameter)
+                       && !($column instanceof ILiteral)
+                       && (str_starts_with($type, 'date') || str_starts_with($type, 'time'))) {
                        return $this->castColumn($column, $type);
                }
 
@@ -44,9 +48,21 @@ class SqliteExpressionBuilder extends ExpressionBuilder {
         * @return IQueryFunction
         */
        public function castColumn($column, $type): IQueryFunction {
-               if ($type === IQueryBuilder::PARAM_DATE) {
-                       $column = $this->helper->quoteColumnName($column);
-                       return new QueryFunction('DATETIME(' . $column . ')');
+               switch ($type) {
+                       case IQueryBuilder::PARAM_DATE:
+                       case IQueryBuilder::PARAM_DATE_IMMUTABLE:
+                               $column = $this->helper->quoteColumnName($column);
+                               return new QueryFunction('DATE(' . $column . ')');
+                       case IQueryBuilder::PARAM_DATETIME:
+                       case IQueryBuilder::PARAM_DATETIME_TZ:
+                       case IQueryBuilder::PARAM_DATETIME_IMMUTABLE:
+                       case IQueryBuilder::PARAM_DATETIME_TZ_IMMUTABLE:
+                               $column = $this->helper->quoteColumnName($column);
+                               return new QueryFunction('DATETIME(' . $column . ')');
+                       case IQueryBuilder::PARAM_TIME:
+                       case IQueryBuilder::PARAM_TIME_IMMUTABLE:
+                               $column = $this->helper->quoteColumnName($column);
+                               return new QueryFunction('TIME(' . $column . ')');
                }
 
                return parent::castColumn($column, $type);
index 8adcd8e168ccff16eb0bbbf1b9959f68c3f967e0..b03f5f3d29513d58b42516493131ca089ae7b619 100644 (file)
@@ -42,7 +42,7 @@ class DatabaseBackend implements IBackend {
                $qb = $this->dbConnection->getQueryBuilder();
                $qb->delete(self::TABLE_NAME)
                        ->where(
-                               $qb->expr()->lte('delete_after', $qb->createNamedParameter($currentTime, IQueryBuilder::PARAM_DATE))
+                               $qb->expr()->lte('delete_after', $qb->createNamedParameter($currentTime, IQueryBuilder::PARAM_DATETIME))
                        )
                        ->executeStatement();
 
@@ -87,7 +87,7 @@ class DatabaseBackend implements IBackend {
                $qb->insert(self::TABLE_NAME)
                        ->values([
                                'hash' => $qb->createNamedParameter($identifier, IQueryBuilder::PARAM_STR),
-                               'delete_after' => $qb->createNamedParameter($deleteAfter, IQueryBuilder::PARAM_DATE),
+                               'delete_after' => $qb->createNamedParameter($deleteAfter, IQueryBuilder::PARAM_DATETIME),
                        ]);
 
                if (!$this->config->getSystemValueBool('ratelimit.protection.enabled', true)) {
index af993b7f314c80c90503d1420d5e22e1b10efe09..9c36860cb4577c76628061d5010eaa0de7941c9f 100644 (file)
@@ -222,7 +222,7 @@ class DefaultShareProvider implements IShareProviderWithNotification, IShareProv
                                ->set('attributes', $qb->createNamedParameter($shareAttributes))
                                ->set('item_source', $qb->createNamedParameter($share->getNode()->getId()))
                                ->set('file_source', $qb->createNamedParameter($share->getNode()->getId()))
-                               ->set('expiration', $qb->createNamedParameter($expirationDate, IQueryBuilder::PARAM_DATE))
+                               ->set('expiration', $qb->createNamedParameter($expirationDate, IQueryBuilder::PARAM_DATETIME))
                                ->set('note', $qb->createNamedParameter($share->getNote()))
                                ->set('accepted', $qb->createNamedParameter($share->getStatus()))
                                ->set('reminder_sent', $qb->createNamedParameter($share->getReminderSent(), IQueryBuilder::PARAM_BOOL))
@@ -237,7 +237,7 @@ class DefaultShareProvider implements IShareProviderWithNotification, IShareProv
                                ->set('attributes', $qb->createNamedParameter($shareAttributes))
                                ->set('item_source', $qb->createNamedParameter($share->getNode()->getId()))
                                ->set('file_source', $qb->createNamedParameter($share->getNode()->getId()))
-                               ->set('expiration', $qb->createNamedParameter($expirationDate, IQueryBuilder::PARAM_DATE))
+                               ->set('expiration', $qb->createNamedParameter($expirationDate, IQueryBuilder::PARAM_DATETIME))
                                ->set('note', $qb->createNamedParameter($share->getNote()))
                                ->execute();
 
@@ -252,7 +252,7 @@ class DefaultShareProvider implements IShareProviderWithNotification, IShareProv
                                ->set('uid_initiator', $qb->createNamedParameter($share->getSharedBy()))
                                ->set('item_source', $qb->createNamedParameter($share->getNode()->getId()))
                                ->set('file_source', $qb->createNamedParameter($share->getNode()->getId()))
-                               ->set('expiration', $qb->createNamedParameter($expirationDate, IQueryBuilder::PARAM_DATE))
+                               ->set('expiration', $qb->createNamedParameter($expirationDate, IQueryBuilder::PARAM_DATETIME))
                                ->set('note', $qb->createNamedParameter($share->getNote()))
                                ->execute();
 
@@ -279,7 +279,7 @@ class DefaultShareProvider implements IShareProviderWithNotification, IShareProv
                                ->set('item_source', $qb->createNamedParameter($share->getNode()->getId()))
                                ->set('file_source', $qb->createNamedParameter($share->getNode()->getId()))
                                ->set('token', $qb->createNamedParameter($share->getToken()))
-                               ->set('expiration', $qb->createNamedParameter($expirationDate, IQueryBuilder::PARAM_DATE))
+                               ->set('expiration', $qb->createNamedParameter($expirationDate, IQueryBuilder::PARAM_DATETIME))
                                ->set('note', $qb->createNamedParameter($share->getNote()))
                                ->set('label', $qb->createNamedParameter($share->getLabel()))
                                ->set('hide_download', $qb->createNamedParameter($share->getHideDownload() ? 1 : 0), IQueryBuilder::PARAM_INT)
index b34c749eb663a06ab0fd66cb9f4b2c56fec88469..3d1e2c249a4eea0250124572e1374dec0b66b08a 100644 (file)
@@ -95,11 +95,11 @@ class TaskMapper extends QBMapper {
                $qb = $this->db->getQueryBuilder();
                $qb->select('*')
                        ->from($this->tableName)
-                       ->where($qb->expr()->lt('last_updated', $qb->createPositionalParameter($datetime, IQueryBuilder::PARAM_DATE)));
+                       ->where($qb->expr()->lt('last_updated', $qb->createPositionalParameter($datetime, IQueryBuilder::PARAM_DATETIME)));
                $deletedTasks = $this->findEntities($qb);
                $qb = $this->db->getQueryBuilder();
                $qb->delete($this->tableName)
-                       ->where($qb->expr()->lt('last_updated', $qb->createPositionalParameter($datetime, IQueryBuilder::PARAM_DATE)));
+                       ->where($qb->expr()->lt('last_updated', $qb->createPositionalParameter($datetime, IQueryBuilder::PARAM_DATETIME)));
                $qb->executeStatement();
                return $deletedTasks;
        }
index 57bea9207634f66d1127fddb3af89d9aa65dba5c..ab6044e3ae2c1e1d465eee89fe1620691288396c 100644 (file)
@@ -8,8 +8,6 @@ declare(strict_types=1);
  */
 namespace OCP\Migration\Attributes;
 
-use OCP\DB\Types;
-
 /**
  * enum ColumnType based on OCP\DB\Types
  *
@@ -18,45 +16,45 @@ use OCP\DB\Types;
  */
 enum ColumnType : string {
        /** @since 30.0.0 */
-       case BIGINT = Types::BIGINT;
+       case BIGINT = 'bigint';
        /** @since 30.0.0 */
-       case BINARY = Types::BINARY;
+       case BINARY = 'binary';
        /** @since 30.0.0 */
-       case BLOB = Types::BLOB;
+       case BLOB = 'blob';
        /** @since 30.0.0 */
-       case BOOLEAN = Types::BOOLEAN;
+       case BOOLEAN = 'boolean';
        /**
         * A column created with `DATE` can be used for both `DATE` and `DATE_IMMUTABLE`
         * on the `\OCP\AppFramework\Db\Entity`.
         * @since 30.0.0
         */
-       case DATE = Types::DATE;
+       case DATE = 'date';
        /**
         * A column created with `DATETIME` can be used for both `DATETIME` and `DATETIME_IMMUTABLE`
         * on the `\OCP\AppFramework\Db\Entity`.
         * @since 30.0.0
         */
-       case DATETIME = Types::DATETIME;
+       case DATETIME = 'datetime';
        /**
         * A column created with `DATETIME_TZ` can be used for both `DATETIME_TZ` and `DATETIME_TZ_IMMUTABLE`
         * on the `\OCP\AppFramework\Db\Entity`.
         * @since 31.0.0
         */
-       case DATETIME_TZ = Types::DATETIME_TZ;
+       case DATETIME_TZ = 'datetimetz';
        /** @since 30.0.0 */
-       case DECIMAL = Types::DECIMAL;
+       case DECIMAL = 'decimal';
        /** @since 30.0.0 */
-       case FLOAT = Types::FLOAT;
+       case FLOAT = 'float';
        /** @since 30.0.0 */
-       case INTEGER = Types::INTEGER;
+       case INTEGER = 'integer';
        /** @since 30.0.0 */
-       case SMALLINT = Types::SMALLINT;
+       case SMALLINT = 'smallint';
        /** @since 30.0.0 */
-       case STRING = Types::STRING;
+       case STRING = 'string';
        /** @since 30.0.0 */
-       case TEXT = Types::TEXT;
+       case TEXT = 'text';
        /** @since 30.0.0 */
-       case TIME = Types::TIME;
+       case TIME = 'time';
        /** @since 30.0.0 */
-       case JSON = Types::JSON;
+       case JSON = 'json';
 }