From bc079a78748c825c2fa5d97d2d6ac88bf617a03e Mon Sep 17 00:00:00 2001 From: SDGDen Date: Thu, 5 Mar 2026 01:26:10 +0100 Subject: [PATCH] db fix again --- prepdb.sh | 52 +++++++++++--------------------- stacks/npm/data/database.sqlite | Bin 118784 -> 0 bytes 2 files changed, 17 insertions(+), 35 deletions(-) delete mode 100644 stacks/npm/data/database.sqlite diff --git a/prepdb.sh b/prepdb.sh index 400a85d..7b1b76a 100644 --- a/prepdb.sh +++ b/prepdb.sh @@ -7,51 +7,33 @@ replace_in_sqlite_db() { # Check if the database file exists if [ ! -f "$DB_PATH" ]; then echo "Error: Database file '$DB_PATH' does not exist." - return 1 + exit 1 fi echo "Starting safe replacement of '$OLD_STRING' with '$NEW_STRING' in '$DB_PATH'..." - # Escape single quotes for SQL - local OLD_STRING_ESC=$(printf "%s" "$OLD_STRING" | sed "s/'/''/g") - local NEW_STRING_ESC=$(printf "%s" "$NEW_STRING" | sed "s/'/''/g") + # Create a backup of the original database + local BACKUP_PATH="${DB_PATH}.bak" + cp "$DB_PATH" "$BACKUP_PATH" - # Begin a transaction for safety - sqlite3 "$DB_PATH" "BEGIN TRANSACTION;" + # Dump the database to SQL + local DUMP_PATH="${DB_PATH}.sql" + sqlite3 "$DB_PATH" ".dump" > "$DUMP_PATH" - # Get a list of all tables in the database - local TABLES - TABLES=$(sqlite3 "$DB_PATH" ".tables") + # Replace strings in the SQL dump + sed -i "s|$OLD_STRING|$NEW_STRING|g" "$DUMP_PATH" - # Loop through each table - for TABLE in $TABLES; do - echo "Processing table: $TABLE" + # Create a new database from the modified SQL dump + local NEW_DB_PATH="${DB_PATH}.new" + sqlite3 "$NEW_DB_PATH" < "$DUMP_PATH" - # Get a list of all non-BLOB columns in the table - sqlite3 "$DB_PATH" "PRAGMA table_info($TABLE);" | awk -F'|' ' - { - if ($3 != "BLOB") { - print $2 - } - }' | while read -r COLUMN; do - # Skip empty lines - if [ -n "$COLUMN" ]; then - echo " Processing column: $COLUMN" + # Replace the original database with the new one + mv "$NEW_DB_PATH" "$DB_PATH" - # Update only rows where the column contains OLD_STRING - 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%'; - " - fi - done - done + # Clean up temporary files + rm "$DUMP_PATH" - # Commit the transaction - sqlite3 "$DB_PATH" "COMMIT;" - - echo "Safe replacement completed in '$DB_PATH'." + echo "Replacement completed in '$DB_PATH'. Original database backed up to '$BACKUP_PATH'." } #set script directory diff --git a/stacks/npm/data/database.sqlite b/stacks/npm/data/database.sqlite deleted file mode 100644 index d8a2dd55990453fb2dc120072beac54653c320f9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 118784 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