From c7d06858b67d1f0b6faa7da9fb3f30c734cf9aa5 Mon Sep 17 00:00:00 2001 From: SDGDen Date: Thu, 5 Mar 2026 01:34:55 +0100 Subject: [PATCH] sync db --- prepdb.sh | 38 ++++++++++++++++++++++++++++---- stacks/npm/data/database.sqlite | Bin 114688 -> 0 bytes 2 files changed, 34 insertions(+), 4 deletions(-) delete mode 100644 stacks/npm/data/database.sqlite diff --git a/prepdb.sh b/prepdb.sh index 7b1b76a..f0f16a0 100644 --- a/prepdb.sh +++ b/prepdb.sh @@ -10,7 +10,13 @@ replace_in_sqlite_db() { exit 1 fi - echo "Starting safe 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')." + exit 1 + fi + + echo "Starting JSON-aware replacement of '$OLD_STRING' with '$NEW_STRING' in '$DB_PATH'..." # Create a backup of the original database local BACKUP_PATH="${DB_PATH}.bak" @@ -20,18 +26,42 @@ replace_in_sqlite_db() { local DUMP_PATH="${DB_PATH}.sql" sqlite3 "$DB_PATH" ".dump" > "$DUMP_PATH" - # Replace strings in the SQL dump - sed -i "s|$OLD_STRING|$NEW_STRING|g" "$DUMP_PATH" + # Create a temporary file for the modified SQL dump + local MODIFIED_DUMP_PATH="${DB_PATH}.modified.sql" + + # Process the SQL dump line by line + while IFS= read -r line; do + # Check if the line contains JSON data (simplistic check for quotes and brackets) + if [[ "$line" =~ [\"{][^"\{]*["\}][^"\{]*$OLD_STRING[^"\{]*[\}"] ]]; then + # Use jq to replace strings in JSON fields + echo "$line" | jq --arg old_str "$OLD_STRING" --arg new_str "$NEW_STRING" ' + walk(if type == "string" then gsub($old_str; $new_str) else . end) + ' > /dev/null 2>&1 + + # If jq fails (not valid JSON), fall back to sed + if [ $? -ne 0 ]; then + echo "$line" | sed "s|$OLD_STRING|$NEW_STRING|g" + else + echo "$line" | jq --arg old_str "$OLD_STRING" --arg new_str "$NEW_STRING" ' + walk(if type == "string" then gsub($old_str; $new_str) else . end) + ' + fi + else + # Use sed for non-JSON fields + echo "$line" | sed "s|$OLD_STRING|$NEW_STRING|g" + fi + done < "$DUMP_PATH" > "$MODIFIED_DUMP_PATH" # Create a new database from the modified SQL dump local NEW_DB_PATH="${DB_PATH}.new" - sqlite3 "$NEW_DB_PATH" < "$DUMP_PATH" + sqlite3 "$NEW_DB_PATH" < "$MODIFIED_DUMP_PATH" # Replace the original database with the new one mv "$NEW_DB_PATH" "$DB_PATH" # Clean up temporary files rm "$DUMP_PATH" + rm "$MODIFIED_DUMP_PATH" echo "Replacement completed in '$DB_PATH'. Original database backed up to '$BACKUP_PATH'." } diff --git a/stacks/npm/data/database.sqlite b/stacks/npm/data/database.sqlite deleted file mode 100644 index e4ab44d21c09d5b77add3e2bfdb6a89e9d0ba8a2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 114688 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