From 7cf52a2ab5cc47301d94f7c290a79d77454e38ec Mon Sep 17 00:00:00 2001
From: ale <ale@incal.net>
Date: Fri, 19 Feb 2021 16:26:21 +0000
Subject: [PATCH] Add support for github.com/stuttter/ludicrousdb

It is a replacement for HyperDB.

Controlled by defining R2DB_USE_LUDICROUSDB to non-null in db-config.php.
---
 db-backends.php | 19 +++++++++++++++++--
 1 file changed, 17 insertions(+), 2 deletions(-)

diff --git a/db-backends.php b/db-backends.php
index ace5b2a..b6df992 100644
--- a/db-backends.php
+++ b/db-backends.php
@@ -10,7 +10,7 @@ $r2db_hash_map = new Flexihash(null, R2DB_FLEXIHASH_REPLICAS);
  *
  * Implements a consistent hashing scheme using Flexihash.
  */
-function noblogs_db_callback($query, $wpdb) {
+function noblogs_hyperdb_callback($query, $wpdb) {
   global $r2db_hash_map;
   if (preg_match("/^{$wpdb->base_prefix}(\d+)_/", $wpdb->table, $matches)) {
     $blog_id = $matches[1];
@@ -18,7 +18,22 @@ function noblogs_db_callback($query, $wpdb) {
   }
 }
 
-$wpdb->add_callback('noblogs_db_callback');
+/* Same as above but with a slightly different function
+   signature for https://github.com/stuttter/ludicrousdb */
+function noblogs_ludicrousdb_callback($table, $wpdb) {
+  global $r2db_hash_map;
+  if (preg_match("/^{$wpdb->base_prefix}(\d+)_/", $table, $matches)) {
+    $blog_id = $matches[1];
+    return $r2db_hash_map->lookup($blog_id);
+  }
+  return "global";
+}
+
+if (defined('R2DB_USE_LUDICROUSDB')) {
+  $wpdb->add_callback('noblogs_ludicrousdb_callback');
+} else {
+  $wpdb->add_callback('noblogs_hyperdb_callback');
+}
 
 /* Load backend shards and add them to FlexiHash / $wpdb. */
 function noblogs_load_backends() {
-- 
GitLab