From 923afe3b8711245f85f31a975897335871f16fa4 Mon Sep 17 00:00:00 2001 From: SDGDen Date: Wed, 4 Mar 2026 13:26:09 +0100 Subject: [PATCH] db script fixes, maybe it works this time? --- deploy.sh | 2 +- prepdb.sh | 46 +++++++++++++++++++++------ stacks/npm/data/database-post.sqlite | Bin 0 -> 114688 bytes 3 files changed, 37 insertions(+), 11 deletions(-) create mode 100644 stacks/npm/data/database-post.sqlite diff --git a/deploy.sh b/deploy.sh index 998059b..81c83c0 100644 --- a/deploy.sh +++ b/deploy.sh @@ -197,7 +197,7 @@ replace_string_recursive "/opt/stacks" "?onlyofficeJWT?" $onlyofficeJWT # install mailcow to /opt/stacks/mailcow so it shows up in dockge -apt install -y git openssl curl gawk coreutils grep jq +apt install -y git openssl curl gawk coreutils grep jq sqlite3 umask 0022 #cd /opt/stacks #git clone https://github.com/mailcow/mailcow-dockerized mailcow diff --git a/prepdb.sh b/prepdb.sh index 56df47e..c359189 100644 --- a/prepdb.sh +++ b/prepdb.sh @@ -10,12 +10,13 @@ replace_in_sqlite_db() { return 1 fi - echo "Starting replacement of '$OLD_STRING' with '$NEW_STRING' in '$DB_PATH'..." + # Check if jq is installed + if ! command -v jq &> /dev/null; then + echo "Error: 'jq' is not installed. Please install it first (e.g., 'sudo apt install jq')." + return 1 + fi - # Enable the json1 extension - sqlite3 "$DB_PATH" "SELECT load_extension('json1');" || { - echo "Warning: json1 extension not available. JSON fields will not be processed." - } + echo "Starting replacement of '$OLD_STRING' with '$NEW_STRING' in all string-based columns in '$DB_PATH'..." # Escape single quotes in the strings for SQL local OLD_STRING_ESC=$(echo "$OLD_STRING" | sed "s/'/''/g") @@ -38,7 +39,7 @@ replace_in_sqlite_db() { # Check if the column is a string-based type (TEXT, VARCHAR, CHAR, CLOB, etc.) if [[ "$COLUMN_TYPE" =~ [Tt][Ee][Xx][Tt]|[Vv][Aa][Rr][Cc][Hh][Aa][Rr]|[Cc][Hh][Aa][Rr]|[Cc][Ll][Oo][Bb]|[Ss][Tt][Rr][Ii][Nn][Gg] ]]; then - echo " Updating column: $COLUMN (type: $COLUMN_TYPE)" + echo " Processing column: $COLUMN (type: $COLUMN_TYPE)" # Check if the column contains JSON data local IS_JSON=$(sqlite3 "$DB_PATH" " @@ -47,14 +48,39 @@ replace_in_sqlite_db() { ") if [ "$IS_JSON" -gt 0 ]; then - echo " Detected JSON data in column $COLUMN. Using json_replace()." + echo " Detected JSON data in column $COLUMN. Processing with jq..." - # Use json_replace() to handle JSON strings + # Create a temporary table to store updated JSON + sqlite3 "$DB_PATH" " + CREATE TABLE IF NOT EXISTS temp_$TABLE (rowid INTEGER PRIMARY KEY, new_$COLUMN TEXT); + " + + # Export JSON data, modify with jq, and store in temp table + sqlite3 "$DB_PATH" "SELECT rowid, $COLUMN FROM $TABLE WHERE json_valid($COLUMN) = 1;" | while read -r ROWID JSON_DATA; do + # Skip the header line (rowid|column) + if [ "$ROWID" != "rowid" ]; then + # Replace the string in the JSON using jq + local MODIFIED_JSON + MODIFIED_JSON=$(echo "$JSON_DATA" | jq --arg old_str "$OLD_STRING" --arg new_str "$NEW_STRING" ' + walk(if type == "string" then gsub($old_str; $new_str) else . end) + ') + + # Insert the modified JSON into the temp table + sqlite3 "$DB_PATH" " + INSERT INTO temp_$TABLE (rowid, new_$COLUMN) VALUES ($ROWID, '$MODIFIED_JSON'); + " + fi + done + + # Update the original table with the modified JSON sqlite3 "$DB_PATH" " UPDATE $TABLE - SET $COLUMN = json_replace($COLUMN, '$OLD_STRING_ESC', '$NEW_STRING_ESC') - WHERE json_valid($COLUMN) = 1; + SET $COLUMN = (SELECT new_$COLUMN FROM temp_$TABLE WHERE temp_$TABLE.rowid = $TABLE.rowid) + WHERE rowid IN (SELECT rowid FROM temp_$TABLE); " + + # Drop the temporary table + sqlite3 "$DB_PATH" "DROP TABLE temp_$TABLE;" else echo " Column $COLUMN is not JSON. Using replace()." diff --git a/stacks/npm/data/database-post.sqlite b/stacks/npm/data/database-post.sqlite new file mode 100644 index 0000000000000000000000000000000000000000..8bf369fd797954d8247dcdf49efb0fb756d1d5e2 GIT binary patch literal 114688 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 Lt%BOyr|