# Delete most recent 24 hours from FTL's database, leave even older data intact (don't wipe out all history)
deleted=$(pihole-FTL sqlite3 "${DBFILE}""DELETE FROM query_storage WHERE timestamp >= strftime('%s','now')-86400; select changes() from query_storage limit 1")
deleted=$(pihole-FTL sqlite3 -ni "${DBFILE}""DELETE FROM query_storage WHERE timestamp >= strftime('%s','now')-86400; select changes() from query_storage limit 1")
if ! pihole-FTL sqlite3 "${gravityDBfile}" < "${gravityDBschema}";then
if ! pihole-FTL sqlite3 -ni "${gravityDBfile}" < "${gravityDBschema}";then
echo -e "${CROSS} Unable to create ${gravityDBfile}"
return1
fi
@ -99,7 +99,7 @@ gravity_swap_databases() {
echo -ne "${INFO}${str}..."
# The index is intentionally not UNIQUE as poor quality adlists may contain domains more than once
output=$({ pihole-FTL sqlite3 "${gravityTEMPfile}""CREATE INDEX idx_gravity ON gravity (domain, adlist_id);";} 2>&1)
output=$({ pihole-FTL sqlite3 -ni "${gravityTEMPfile}""CREATE INDEX idx_gravity ON gravity (domain, adlist_id);";} 2>&1)
status="$?"
if[["${status}" -ne 0]];then
@ -135,7 +135,7 @@ gravity_swap_databases() {
# Update timestamp when the gravity table was last updated successfully
update_gravity_timestamp(){
output=$({printf".timeout 30000\\nINSERT OR REPLACE INTO info (property,value) values ('updated',cast(strftime('%%s', 'now') as int));"| pihole-FTL sqlite3 "${gravityDBfile}";} 2>&1)
output=$({printf".timeout 30000\\nINSERT OR REPLACE INTO info (property,value) values ('updated',cast(strftime('%%s', 'now') as int));"| pihole-FTL sqlite3 -ni "${gravityDBfile}";} 2>&1)
status="$?"
if[["${status}" -ne 0]];then
@ -179,7 +179,7 @@ database_table_from_file() {
# Get MAX(id) from domainlist when INSERTing into this table
if[["${table}"=="domainlist"]];then
rowid="$(pihole-FTL sqlite3 "${gravityDBfile}""SELECT MAX(id) FROM domainlist;")"
rowid="$(pihole-FTL sqlite3 -ni "${gravityDBfile}""SELECT MAX(id) FROM domainlist;")"
if[[ -z "$rowid"]];then
rowid=0
fi
@ -209,7 +209,7 @@ database_table_from_file() {
# Store domains in database table specified by ${table}
# Use printf as .mode and .import need to be on separate lines
# see https://unix.stackexchange.com/a/445615/83260
# Check if a column with name ${2} exists in gravity table with name ${1}
gravity_column_exists(){
output=$({printf".timeout 30000\\nSELECT EXISTS(SELECT * FROM pragma_table_info('%s') WHERE name='%s');\\n""${1}""${2}"| pihole-FTL sqlite3 "${gravityTEMPfile}";} 2>&1)
output=$({printf".timeout 30000\\nSELECT EXISTS(SELECT * FROM pragma_table_info('%s') WHERE name='%s');\\n""${1}""${2}"| pihole-FTL sqlite3 -ni "${gravityTEMPfile}";} 2>&1)
if[["${output}"=="1"]];then
return0# Bash 0 is success
fi
@ -244,7 +244,7 @@ database_adlist_number() {
return;
fi
output=$({printf".timeout 30000\\nUPDATE adlist SET number = %i, invalid_domains = %i WHERE id = %i;\\n""${2}""${3}""${1}"| pihole-FTL sqlite3 "${gravityTEMPfile}";} 2>&1)
output=$({printf".timeout 30000\\nUPDATE adlist SET number = %i, invalid_domains = %i WHERE id = %i;\\n""${2}""${3}""${1}"| pihole-FTL sqlite3 -ni "${gravityTEMPfile}";} 2>&1)
status="$?"
if[["${status}" -ne 0]];then
@ -260,7 +260,7 @@ database_adlist_status() {
return;
fi
output=$({printf".timeout 30000\\nUPDATE adlist SET status = %i WHERE id = %i;\\n""${2}""${1}"| pihole-FTL sqlite3 "${gravityTEMPfile}";} 2>&1)
output=$({printf".timeout 30000\\nUPDATE adlist SET status = %i WHERE id = %i;\\n""${2}""${1}"| pihole-FTL sqlite3 -ni "${gravityTEMPfile}";} 2>&1)
status="$?"
if[["${status}" -ne 0]];then
@ -378,8 +378,8 @@ gravity_DownloadBlocklists() {
# Retrieve source URLs from gravity database
# We source only enabled adlists, SQLite3 stores boolean values as 0 (false) or 1 (true)