From 0ac788c88291d336e0534a39a6145789ff6912ef Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Carlos=20Sol=C3=ADs?= <csolisr@azkware.net>
Date: Mon, 10 Feb 2025 03:25:56 +0000
Subject: [PATCH] feat: Add parameter to reserve intensive optimizations

---
 friendica-clean-database.sh | 135 ++++++++++++++++++------------------
 1 file changed, 69 insertions(+), 66 deletions(-)

diff --git a/friendica-clean-database.sh b/friendica-clean-database.sh
index ce256b7..ca35b81 100755
--- a/friendica-clean-database.sh
+++ b/friendica-clean-database.sh
@@ -7,8 +7,9 @@ phpversion=php8.2
 dbengine=mariadb
 db=friendica
 dboptimizer=mariadb-optimize
+intense_optimizations=${1:-"0"}
 
-bash -c "cd ${folder} && sudo -u ${user} ${phpversion} bin/console.php maintenance 1 \"Database maintenance\"" #&> /dev/null;
+bash -c "cd ${folder} && sudo -u ${user} ${phpversion} bin/console.php maintenance 1 \"Database maintenance\"" #&> /dev/null
 
 echo "tmp_post_origin_deleted"
 tmp_post_origin_deleted_q="${limit}"
@@ -289,77 +290,79 @@ until [[ "${tmp_item_uri_not_valid_q}" -lt "${limit}" ]]; do
 done
 wait
 
-echo "tmp_item_uri_duplicate"
-tmp_item_uri_duplicate_q="${limit}"
-tmp_item_uri_duplicate_current_id=0
-until [[ "${tmp_item_uri_duplicate_q}" -lt "${limit}" ]]; do
-	initial_i=$(date +%s)
-	tmp_item_uri_duplicate_q=0
-	while read -r id; do
-		if [[ -s "${id}" ]]; then
-			"${dbengine}" "${db}" -N -B -q -e \
-				"DELETE FROM \`item-uri\` WHERE \`id\` = ${id}" &
-			if [[ $(jobs -r -p | wc -l) -ge $(($(getconf _NPROCESSORS_ONLN) * 1)) ]]; then
-				wait -n
+if [[ "${intense_optimizations}" -gt 0 ]]; then
+	echo "tmp_item_uri_duplicate"
+	tmp_item_uri_duplicate_q="${limit}"
+	tmp_item_uri_duplicate_current_id=0
+	until [[ "${tmp_item_uri_duplicate_q}" -lt "${limit}" ]]; do
+		initial_i=$(date +%s)
+		tmp_item_uri_duplicate_q=0
+		while read -r id; do
+			if [[ -s "${id}" ]]; then
+				"${dbengine}" "${db}" -N -B -q -e \
+					"DELETE FROM \`item-uri\` WHERE \`id\` = ${id}" &
+				if [[ $(jobs -r -p | wc -l) -ge $(($(getconf _NPROCESSORS_ONLN) * 1)) ]]; then
+					wait -n
+				fi
+				tmp_item_uri_duplicate_q=$((tmp_item_uri_duplicate_q + 1))
+				tmp_item_uri_duplicate_current_id="${id}"
 			fi
-			tmp_item_uri_duplicate_q=$((tmp_item_uri_duplicate_q + 1))
-			tmp_item_uri_duplicate_current_id="${id}"
-		fi
-	done < <("${dbengine}" "${db}" -N -B -q -e \
-		"SELECT t1.\`id\` FROM \`item-uri\` t1 INNER JOIN \`item-uri\` t2 WHERE t1.\`id\` > ${tmp_item_uri_duplicate_current_id} \
+		done < <("${dbengine}" "${db}" -N -B -q -e \
+			"SELECT t1.\`id\` FROM \`item-uri\` t1 INNER JOIN \`item-uri\` t2 WHERE t1.\`id\` > ${tmp_item_uri_duplicate_current_id} \
 			AND t1.\`id\` < t2.\`id\` AND t1.\`uri\` = t2.\`uri\` LIMIT ${limit}")
-	final_i=$(($(date +%s) - initial_i))
-	echo "${tmp_item_uri_duplicate_q} item(s) deleted until ${tmp_item_uri_duplicate_current_id} in ${final_i}s"
-done
-wait
+		final_i=$(($(date +%s) - initial_i))
+		echo "${tmp_item_uri_duplicate_q} item(s) deleted until ${tmp_item_uri_duplicate_current_id} in ${final_i}s"
+	done
+	wait
 
-echo "tmp_post_media_duplicate"
-tmp_post_media_duplicate_q="${limit}"
-tmp_post_media_duplicate_current_id=0
-until [[ "${tmp_post_media_duplicate_q}" -lt "${limit}" ]]; do
-	initial_i=$(date +%s)
-	tmp_post_media_duplicate_q=0
-	while read -r id; do
-		if [[ -s "${id}" ]]; then
-			"${dbengine}" "${db}" -N -B -q -e \
-				"DELETE FROM \`post-media\` WHERE \`id\` = ${id}" &
-			if [[ $(jobs -r -p | wc -l) -ge $(($(getconf _NPROCESSORS_ONLN) * 1)) ]]; then
-				wait -n
+	echo "tmp_post_media_duplicate"
+	tmp_post_media_duplicate_q="${limit}"
+	tmp_post_media_duplicate_current_id=0
+	until [[ "${tmp_post_media_duplicate_q}" -lt "${limit}" ]]; do
+		initial_i=$(date +%s)
+		tmp_post_media_duplicate_q=0
+		while read -r id; do
+			if [[ -s "${id}" ]]; then
+				"${dbengine}" "${db}" -N -B -q -e \
+					"DELETE FROM \`post-media\` WHERE \`id\` = ${id}" &
+				if [[ $(jobs -r -p | wc -l) -ge $(($(getconf _NPROCESSORS_ONLN) * 1)) ]]; then
+					wait -n
+				fi
+				tmp_post_media_duplicate_q=$((tmp_post_media_duplicate_q + 1))
+				tmp_post_media_duplicate_current_id="${id}"
 			fi
-			tmp_post_media_duplicate_q=$((tmp_post_media_duplicate_q + 1))
-			tmp_post_media_duplicate_current_id="${id}"
-		fi
-	done < <("${dbengine}" "${db}" -N -B -q -e \
-		"SELECT u1.\`id\` FROM \`post-media\` u1 INNER JOIN \`post-media\` u2 WHERE u1.\`id\` > ${tmp_post_media_duplicate_current_id} \
+		done < <("${dbengine}" "${db}" -N -B -q -e \
+			"SELECT u1.\`id\` FROM \`post-media\` u1 INNER JOIN \`post-media\` u2 WHERE u1.\`id\` > ${tmp_post_media_duplicate_current_id} \
 			AND u1.\`id\` < u2.\`id\` AND u1.\`uri-id\` = u2.\`uri-id\` AND u1.\`url\`= u2.\`url\` LIMIT ${limit}")
-	final_i=$(($(date +%s) - initial_i))
-	echo "${tmp_post_media_duplicate_q} item(s) deleted until ${tmp_post_media_duplicate_current_id} in ${final_i}s"
-done
-wait
+		final_i=$(($(date +%s) - initial_i))
+		echo "${tmp_post_media_duplicate_q} item(s) deleted until ${tmp_post_media_duplicate_current_id} in ${final_i}s"
+	done
+	wait
 
-echo "tmp_post_user_duplicate"
-tmp_post_user_duplicate_q="${limit}"
-tmp_post_user_duplicate_current_id=0
-until [[ "${tmp_post_user_duplicate_q}" -lt "${limit}" ]]; do
-	initial_i=$(date +%s)
-	tmp_post_user_duplicate_q=0
-	while read -r id; do
-		if [[ -s "${id}" ]]; then
-			"${dbengine}" "${db}" -N -B -q -e \
-				"DELETE FROM \`post-user\` WHERE \`id\` = ${id}" &
-			if [[ $(jobs -r -p | wc -l) -ge $(($(getconf _NPROCESSORS_ONLN) * 1)) ]]; then
-				wait -n
+	echo "tmp_post_user_duplicate"
+	tmp_post_user_duplicate_q="${limit}"
+	tmp_post_user_duplicate_current_id=0
+	until [[ "${tmp_post_user_duplicate_q}" -lt "${limit}" ]]; do
+		initial_i=$(date +%s)
+		tmp_post_user_duplicate_q=0
+		while read -r id; do
+			if [[ -s "${id}" ]]; then
+				"${dbengine}" "${db}" -N -B -q -e \
+					"DELETE FROM \`post-user\` WHERE \`id\` = ${id}" &
+				if [[ $(jobs -r -p | wc -l) -ge $(($(getconf _NPROCESSORS_ONLN) * 1)) ]]; then
+					wait -n
+				fi
+				tmp_post_user_duplicate_q=$((tmp_post_user_duplicate_q + 1))
+				tmp_post_user_duplicate_current_id="${id}"
 			fi
-			tmp_post_user_duplicate_q=$((tmp_post_user_duplicate_q + 1))
-			tmp_post_user_duplicate_current_id="${id}"
-		fi
-	done < <("${dbengine}" "${db}" -N -B -q -e \
-		"SELECT v1.\`id\` FROM \`post-user\` v1 INNER JOIN \`post-media\` v2 WHERE v1.\`id\` > ${tmp_post_user_duplicate_current_id} \
+		done < <("${dbengine}" "${db}" -N -B -q -e \
+			"SELECT v1.\`id\` FROM \`post-user\` v1 INNER JOIN \`post-media\` v2 WHERE v1.\`id\` > ${tmp_post_user_duplicate_current_id} \
 				AND v1.\`id\` < v2.\`id\` AND v1.\`uri-id\` = v2.\`uri-id\` LIMIT ${limit}")
-	final_i=$(($(date +%s) - initial_i))
-	echo "${tmp_post_user_duplicate_q} item(s) deleted until ${tmp_post_user_duplicate_current_id} in ${final_i}s"
-done
-wait
+		final_i=$(($(date +%s) - initial_i))
+		echo "${tmp_post_user_duplicate_q} item(s) deleted until ${tmp_post_user_duplicate_current_id} in ${final_i}s"
+	done
+	wait
 
-"${dboptimizer}" "${db}"                                                              #&> /dev/null;
-bash -c "cd ${folder} && sudo -u ${user} ${phpversion} bin/console.php maintenance 0" #&> /dev/null;
+	"${dboptimizer}" "${db}" #&> /dev/null
+fi
+bash -c "cd ${folder} && sudo -u ${user} ${phpversion} bin/console.php maintenance 0" #&> /dev/null