From e585ab2ce30e5278e79968d1017d0c2579be1954 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20Vo=C5=99=C3=AD=C5=A1ek?= Date: Tue, 5 Jul 2022 19:38:48 +0200 Subject: [PATCH] fix Oracle long string literal to CLOB split --- src/Persistence/Sql/Oracle/ExpressionTrait.php | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/Persistence/Sql/Oracle/ExpressionTrait.php b/src/Persistence/Sql/Oracle/ExpressionTrait.php index 3324df70c..684d0d406 100644 --- a/src/Persistence/Sql/Oracle/ExpressionTrait.php +++ b/src/Persistence/Sql/Oracle/ExpressionTrait.php @@ -46,13 +46,17 @@ protected function updateRenderBeforeExecute(array $render): array $newParamBase = $this->paramBase; $newParams = []; $sql = preg_replace_callback( - '~\'(?:\'\'|\\\\\'|[^\'])*+\'\K|:\w+~s', + '~\'(?:\'\'|\\\\\'|[^\'])*+\'|:\w+~s', function ($matches) use ($params, &$newParams, &$newParamBase) { - if ($matches[0] === '') { - return ''; + if (str_starts_with($matches[0], '\'')) { + $value = str_replace('\'\'', '\'', substr($matches[0], 1, -1)); + if (strlen($value) <= 4000) { + return $matches[0]; + } + } else { + $value = $params[$matches[0]]; } - $value = $params[$matches[0]]; if (is_string($value) && strlen($value) > 4000) { $expr = $this->convertLongStringToClobExpr($value); unset($value);