diff --git a/contrib/asn.sql b/contrib/asn.sql new file mode 100644 index 0000000..213a857 --- /dev/null +++ b/contrib/asn.sql @@ -0,0 +1,11 @@ +BEGIN; +CREATE TABLE IF NOT EXISTS asn_import (range_start INTEGER, range_end INTEGER, id INTEGER, country STRING, description TEXT); +CREATE TABLE IF NOT EXISTS asns (range_start INTEGER, range_end INTEGER, id INTEGER, country STRING, owner_id INTEGER); +CREATE UNIQUE INDEX IF NOT EXISTS asn_import_range_id ON asn_import (range_start, range_end); +CREATE UNIQUE INDEX IF NOT EXISTS asns_range_id ON asns (range_start, range_end); +CREATE INDEX IF NOT EXISTS asns_id_idx ON asns (id); +CREATE INDEX IF NOT EXISTS asns_owner_id_idx ON asns (owner_id); +CREATE TABLE IF NOT EXISTS owners (id INTEGER PRIMARY KEY, description TEXT); +CREATE TABLE IF NOT EXISTS status (id INTEGER PRIMARY KEY, blocked BOOLEAN DEFAULT FALSE); +DELETE FROM asn_import; +COMMIT; diff --git a/contrib/asn_2.sql b/contrib/asn_2.sql new file mode 100644 index 0000000..0152b85 --- /dev/null +++ b/contrib/asn_2.sql @@ -0,0 +1,12 @@ +BEGIN; +INSERT INTO owners (description) SELECT DISTINCT asn_import.description FROM asn_import LEFT JOIN owners ON asn_import.description = owners.description WHERE owners.description IS NULL; +INSERT INTO asns (range_start, range_end, id, country, owner_id) + SELECT asn_import.range_start, asn_import.range_end, asn_import.id, asn_import.country, owners.id + FROM asn_import + LEFT JOIN owners + ON owners.description = asn_import.description +ON CONFLICT DO UPDATE SET id = excluded.id, country = excluded.country, owner_id = excluded.owner_id; +DROP TABLE asn_import; +DROP INDEX asns_range_id; +COMMIT; +VACUUM; diff --git a/contrib/asn_database.sh b/contrib/asn_database.sh index d9f3e7d..1997fa0 100755 --- a/contrib/asn_database.sh +++ b/contrib/asn_database.sh @@ -1,11 +1,10 @@ #!/bin/sh set -e +cr="$(dirname "$(readlink -f "$0")")" db="${1:-$PWD/asn.sqlite3}" -sqlite3 "$db" "CREATE TABLE IF NOT EXISTS asn (range_start INTEGER, range_end INTEGER, id INTEGER, country STRING, description TEXT);" -sqlite3 "$db" "CREATE INDEX IF NOT EXISTS asn_id_idx ON asn (id);" -sqlite3 "$db" "CREATE TABLE IF NOT EXISTS status (id INTEGER PRIMARY KEY, blocked BOOLEAN DEFAULT FALSE);" -sqlite3 "$db" "DELETE from asn;" -wget https://iptoasn.com/data/ip2asn-v4-u32.tsv.gz -O - | gunzip | sqlite3 -tabs "$db" ".import '|cat -' asn" +cat "$cr/asn.sql" | sqlite3 "$db" +wget https://iptoasn.com/data/ip2asn-v4-u32.tsv.gz -O - | gunzip | sqlite3 -tabs "$db" ".import '|cat -' asn_import" +cat "$cr/asn_2.sql" | sqlite3 "$db" echo "ASN database created/updated at $db"