aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRobin Appelman <robin@icewind.nl>2025-06-10 16:15:05 +0200
committerRobin Appelman <robin@icewind.nl>2025-06-10 16:15:05 +0200
commit26903926a2eed87d6a1664df15eb221426e97dd3 (patch)
tree799cb593c84cfe65c6697b9089b865e0337909b0
parent6d8b2634f238524b7a04aa902c4df60efbd3366e (diff)
downloadnextcloud-server-shard-key-hint-partition.tar.gz
nextcloud-server-shard-key-hint-partition.zip
fix: allow hinting the shard keys for joined tablesshard-key-hint-partition
Signed-off-by: Robin Appelman <robin@icewind.nl>
-rw-r--r--lib/private/DB/QueryBuilder/Partitioned/PartitionedQueryBuilder.php15
1 files changed, 15 insertions, 0 deletions
diff --git a/lib/private/DB/QueryBuilder/Partitioned/PartitionedQueryBuilder.php b/lib/private/DB/QueryBuilder/Partitioned/PartitionedQueryBuilder.php
index 2942eeccdf7..8b051561a2e 100644
--- a/lib/private/DB/QueryBuilder/Partitioned/PartitionedQueryBuilder.php
+++ b/lib/private/DB/QueryBuilder/Partitioned/PartitionedQueryBuilder.php
@@ -444,4 +444,19 @@ class PartitionedQueryBuilder extends ShardedQueryBuilder {
public function getPartitionCount(): int {
return count($this->splitQueries) + 1;
}
+
+ public function hintShardKey(string $column, mixed $value, bool $overwrite = false): self {
+ if (str_contains($column, '.')) {
+ [$alias, $column] = explode('.', $column);
+ $partition = $this->getPartition($alias);
+ if ($partition) {
+ $this->splitQueries[$partition->name]->query->hintShardKey($column, $value, $overwrite);
+ } else {
+ parent::hintShardKey($column, $value, $overwrite);
+ }
+ } else {
+ parent::hintShardKey($column, $value, $overwrite);
+ }
+ return $this;
+ }
}