mirror of
https://github.com/pi-hole/FTL.git
synced 2024-10-26 16:52:18 +02:00
Do not use AUTOINCREMENT as it will add gaps between the IDs even if nothing is actually INSERTed as we chose the OR IGNORE path.
Signed-off-by: DL6ER <dl6er@dl6er.de>
This commit is contained in:
@@ -554,9 +554,9 @@ bool optimize_queries_table(sqlite3 *db)
|
||||
SQL_bool(db, "BEGIN TRANSACTION;");
|
||||
|
||||
// Create link tables for domain, client, and forward strings
|
||||
SQL_bool(db, "CREATE TABLE domain_by_id (id INTEGER PRIMARY KEY AUTOINCREMENT, domain TEXT NOT NULL);");
|
||||
SQL_bool(db, "CREATE TABLE client_by_id (id INTEGER PRIMARY KEY AUTOINCREMENT, ip TEXT NOT NULL, name TEXT);");
|
||||
SQL_bool(db, "CREATE TABLE forward_by_id (id INTEGER PRIMARY KEY AUTOINCREMENT, forward TEXT NOT NULL);");
|
||||
SQL_bool(db, "CREATE TABLE domain_by_id (id INTEGER PRIMARY KEY, domain TEXT NOT NULL);");
|
||||
SQL_bool(db, "CREATE TABLE client_by_id (id INTEGER PRIMARY KEY, ip TEXT NOT NULL, name TEXT);");
|
||||
SQL_bool(db, "CREATE TABLE forward_by_id (id INTEGER PRIMARY KEY, forward TEXT NOT NULL);");
|
||||
|
||||
// Create UNIQUE index for the new tables
|
||||
SQL_bool(db, "CREATE UNIQUE INDEX domain_by_id_domain_idx ON domain_by_id(domain);");
|
||||
@@ -572,7 +572,7 @@ bool optimize_queries_table(sqlite3 *db)
|
||||
// be converted to TEXT form (this is very inefficient)
|
||||
// We have to turn off defensive mode to do this.
|
||||
SQL_bool(db, "PRAGMA writable_schema = ON;");
|
||||
SQL_bool(db, "UPDATE sqlite_master SET sql = 'CREATE TABLE \"query_storage\" ( id INTEGER PRIMARY KEY AUTOINCREMENT, timestamp INTEGER NOT NULL, type INTEGER NOT NULL, status INTEGER NOT NULL, domain INTEGER NOT NULL, client INTEGER NOT NULL, forward INTEGER , additional_info TEXT)' WHERE type = 'table' AND name = 'query_storage';");
|
||||
SQL_bool(db, "UPDATE sqlite_master SET sql = 'CREATE TABLE \"query_storage\" (id INTEGER PRIMARY KEY AUTOINCREMENT, timestamp INTEGER NOT NULL, type INTEGER NOT NULL, status INTEGER NOT NULL, domain INTEGER NOT NULL, client INTEGER NOT NULL, forward INTEGER , additional_info TEXT)' WHERE type = 'table' AND name = 'query_storage';");
|
||||
SQL_bool(db, "PRAGMA writable_schema = OFF;");
|
||||
|
||||
// Create VIEW queries so user scripts continue to work despite our
|
||||
@@ -604,7 +604,7 @@ bool create_addinfo_table(sqlite3 *db)
|
||||
SQL_bool(db, "BEGIN TRANSACTION;");
|
||||
|
||||
// Create link table for additional_info column
|
||||
SQL_bool(db, "CREATE TABLE addinfo_by_id (id INTEGER PRIMARY KEY AUTOINCREMENT, type INTEGER NOT NULL, content NOT NULL);");
|
||||
SQL_bool(db, "CREATE TABLE addinfo_by_id (id INTEGER PRIMARY KEY, type INTEGER NOT NULL, content NOT NULL);");
|
||||
|
||||
// Create UNIQUE index for the new tables
|
||||
SQL_bool(db, "CREATE UNIQUE INDEX addinfo_by_id_idx ON addinfo_by_id(type,content);");
|
||||
@@ -615,7 +615,7 @@ bool create_addinfo_table(sqlite3 *db)
|
||||
// be converted to TEXT form (this is very inefficient)
|
||||
// We have to turn off defensive mode to do this.
|
||||
SQL_bool(db, "PRAGMA writable_schema = ON;");
|
||||
SQL_bool(db, "UPDATE sqlite_master SET sql = 'CREATE TABLE \"query_storage\" ( id INTEGER PRIMARY KEY AUTOINCREMENT, timestamp INTEGER NOT NULL, type INTEGER NOT NULL, status INTEGER NOT NULL, domain INTEGER NOT NULL, client INTEGER NOT NULL, forward INTEGER, additional_info INTEGER)' WHERE type = 'table' AND name = 'query_storage';");
|
||||
SQL_bool(db, "UPDATE sqlite_master SET sql = 'CREATE TABLE \"query_storage\" (id INTEGER PRIMARY KEY AUTOINCREMENT, timestamp INTEGER NOT NULL, type INTEGER NOT NULL, status INTEGER NOT NULL, domain INTEGER NOT NULL, client INTEGER NOT NULL, forward INTEGER, additional_info INTEGER)' WHERE type = 'table' AND name = 'query_storage';");
|
||||
SQL_bool(db, "PRAGMA writable_schema = OFF;");
|
||||
|
||||
// Create VIEW queries so user scripts continue to work despite our
|
||||
|
||||
@@ -588,15 +588,16 @@
|
||||
[[ "${lines[@]}" == *"CREATE TABLE IF NOT EXISTS \"network_addresses\" (network_id INTEGER NOT NULL, ip TEXT UNIQUE NOT NULL, lastSeen INTEGER NOT NULL DEFAULT (cast(strftime('%s', 'now') as int)), name TEXT, nameUpdated INTEGER, FOREIGN KEY(network_id) REFERENCES network(id));"* ]]
|
||||
[[ "${lines[@]}" == *"CREATE TABLE aliasclient (id INTEGER PRIMARY KEY NOT NULL, name TEXT NOT NULL, comment TEXT);"* ]]
|
||||
# Depending on the version of sqlite3, ftl can be enquoted or not...
|
||||
[[ "${lines[@]}" == *"INSERT INTO"?*"ftl"?*"VALUES(0,10);"* ]] # Expecting FTL database version 10
|
||||
[[ "${lines[@]}" == *"INSERT INTO"?*"ftl"?*"VALUES(0,11);"* ]] # Expecting FTL database version 11
|
||||
# vvv This has been added in version 10 vvv
|
||||
[[ "${lines[@]}" == *"CREATE VIEW queries AS SELECT id, timestamp, type, status, CASE typeof(domain) WHEN 'integer' THEN (SELECT domain FROM domain_by_id d WHERE d.id = q.domain) ELSE domain END domain,CASE typeof(client) WHEN 'integer' THEN (SELECT ip FROM client_by_id c WHERE c.id = q.client) ELSE client END client,CASE typeof(forward) WHEN 'integer' THEN (SELECT forward FROM forward_by_id f WHERE f.id = q.forward) ELSE forward END forward,CASE typeof(additional_info) WHEN 'integer' THEN (SELECT content FROM addinfo a WHERE a.id = q.additional_info) ELSE additional_info END additional_info FROM query_storage q;"* ]]
|
||||
[[ "${lines[@]}" == *"CREATE TABLE domain_by_id (id INTEGER PRIMARY KEY AUTOINCREMENT, domain TEXT NOT NULL);"* ]]
|
||||
[[ "${lines[@]}" == *"CREATE TABLE client_by_id (id INTEGER PRIMARY KEY AUTOINCREMENT, ip TEXT NOT NULL, name TEXT);"* ]]
|
||||
[[ "${lines[@]}" == *"CREATE TABLE forward_by_id (id INTEGER PRIMARY KEY AUTOINCREMENT, forward TEXT NOT NULL);"* ]]
|
||||
[[ "${lines[@]}" == *"CREATE TABLE addinfo_by_id (id INTEGER PRIMARY KEY AUTOINCREMENT, type INTEGER NOT NULL, content NOT NULL);"* ]]
|
||||
[[ "${lines[@]}" == *"CREATE VIEW queries AS SELECT id, timestamp, type, status, CASE typeof(domain) WHEN 'integer' THEN (SELECT domain FROM domain_by_id d WHERE d.id = q.domain) ELSE domain END domain,CASE typeof(client) WHEN 'integer' THEN (SELECT ip FROM client_by_id c WHERE c.id = q.client) ELSE client END client,CASE typeof(forward) WHEN 'integer' THEN (SELECT forward FROM forward_by_id f WHERE f.id = q.forward) ELSE forward END forward,CASE typeof(additional_info) WHEN 'integer' THEN (SELECT content FROM addinfo_by_id a WHERE a.id = q.additional_info) ELSE additional_info END additional_info FROM query_storage q;"* ]]
|
||||
[[ "${lines[@]}" == *"CREATE TABLE domain_by_id (id INTEGER PRIMARY KEY, domain TEXT NOT NULL);"* ]]
|
||||
[[ "${lines[@]}" == *"CREATE TABLE client_by_id (id INTEGER PRIMARY KEY, ip TEXT NOT NULL, name TEXT);"* ]]
|
||||
[[ "${lines[@]}" == *"CREATE TABLE forward_by_id (id INTEGER PRIMARY KEY, forward TEXT NOT NULL);"* ]]
|
||||
[[ "${lines[@]}" == *"CREATE UNIQUE INDEX domain_by_id_domain_idx ON domain_by_id(domain);"* ]]
|
||||
[[ "${lines[@]}" == *"CREATE UNIQUE INDEX client_by_id_client_idx ON client_by_id(ip,name);"* ]]
|
||||
# vvv This has been added in version 11 vvv
|
||||
[[ "${lines[@]}" == *"CREATE TABLE addinfo_by_id (id INTEGER PRIMARY KEY, type INTEGER NOT NULL, content NOT NULL);"* ]]
|
||||
[[ "${lines[@]}" == *"CREATE UNIQUE INDEX addinfo_by_id_idx ON addinfo_by_id(type,content);"* ]]
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user