From fa1331b3e8667a6bbac0df725a1e188e9ad8ad22 Mon Sep 17 00:00:00 2001 From: SDGDen Date: Wed, 4 Mar 2026 13:31:27 +0100 Subject: [PATCH] it should work this time. for the love of god. --- prepdb.sh | 82 +++++---------------------- stacks/npm/data/database-post.sqlite | Bin 114688 -> 0 bytes 2 files changed, 14 insertions(+), 68 deletions(-) delete mode 100644 stacks/npm/data/database-post.sqlite diff --git a/prepdb.sh b/prepdb.sh index c359189..6519f8a 100644 --- a/prepdb.sh +++ b/prepdb.sh @@ -10,15 +10,9 @@ replace_in_sqlite_db() { return 1 fi - # 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 + echo "Starting brute-force replacement of '$OLD_STRING' with '$NEW_STRING' in '$DB_PATH'..." - 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 + # Escape single quotes for SQL local OLD_STRING_ESC=$(echo "$OLD_STRING" | sed "s/'/''/g") local NEW_STRING_ESC=$(echo "$NEW_STRING" | sed "s/'/''/g") @@ -31,71 +25,23 @@ replace_in_sqlite_db() { echo "Processing table: $TABLE" # Get a list of all columns in the table - sqlite3 "$DB_PATH" "PRAGMA table_info($TABLE);" | awk -F'|' '{print $2","$3}' | while IFS=, read -r COLUMN COLUMN_TYPE; do - # Skip empty lines - if [ -z "$COLUMN" ]; then - continue - fi + local COLUMNS + COLUMNS=$(sqlite3 "$DB_PATH" "PRAGMA table_info($TABLE);" | awk -F'|' '{print $2}' | grep -v '^$') - # 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 " Processing column: $COLUMN (type: $COLUMN_TYPE)" + # Loop through each column + for COLUMN in $COLUMNS; do + echo " Processing column: $COLUMN" - # Check if the column contains JSON data - local IS_JSON=$(sqlite3 "$DB_PATH" " - SELECT COUNT(*) FROM $TABLE - WHERE json_valid($COLUMN) = 1 LIMIT 1; - ") - - if [ "$IS_JSON" -gt 0 ]; then - echo " Detected JSON data in column $COLUMN. Processing with jq..." - - # 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 = (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()." - - # Use replace() for non-JSON strings - sqlite3 "$DB_PATH" " - UPDATE $TABLE - SET $COLUMN = replace($COLUMN, '$OLD_STRING_ESC', '$NEW_STRING_ESC') - WHERE $COLUMN LIKE '%$OLD_STRING_ESC%'; - " - fi - fi + # Update every cell in the column, casting to TEXT to force string replacement + sqlite3 "$DB_PATH" " + UPDATE $TABLE + SET $COLUMN = replace(CAST($COLUMN AS TEXT), '$OLD_STRING_ESC', '$NEW_STRING_ESC') + WHERE CAST($COLUMN AS TEXT) LIKE '%$OLD_STRING_ESC%'; + " done done - echo "Replacement completed for all string-based columns (including JSON) in '$DB_PATH'." + echo "replacement of '$OLD_STRING' with '$NEW_STRING' completed in '$DB_PATH'." } #set script directory diff --git a/stacks/npm/data/database-post.sqlite b/stacks/npm/data/database-post.sqlite deleted file mode 100644 index 8bf369fd797954d8247dcdf49efb0fb756d1d5e2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 114688 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 Lt%BOyr|