log->header("SELECT title, nfo, size, files, filename, nuked, nukereason, category, predate, source, requestid, g.name FROM " . $table . " p LEFT OUTER JOIN groups g ON p.groups_id = g.id INTO OUTFILE '" . $path . "' FIELDS TERMINATED BY '\\t\\t' ENCLOSED BY \"'\" LINES TERMINATED BY '\\r\\n';n"); $pdo->queryExec("SELECT title, nfo, size, files, filename, nuked, nukereason, category, predate, source, requestid, g.name FROM " . $table . " p LEFT OUTER JOIN groups g ON p.groups_id = g.id INTO OUTFILE '" . $path . "' FIELDS TERMINATED BY '\t\t' ENCLOSED BY \"'\" LINES TERMINATED BY '\r\n'"); } else if (isset($argv[1]) && ($argv[1] == 'local' || $argv[1] == 'remote') && isset($argv[2]) && is_file($argv[2])) { if (!preg_match('/^\//', $path)) { $path = require_once getcwd() . '/' . $argv[2]; } if (isset($argv[3])) { $table = $argv[3]; } else { $table = 'predb'; } // Truncate predb_imports to clear any old data $pdo->queryExec("TRUNCATE TABLE predb_imports"); // Import file into predb_imports if ($argv[1] == 'remote') { echo $pdo->log->header("LOAD DATA LOCAL INFILE '" . $path . "' IGNORE into table predb_imports FIELDS TERMINATED BY '\\t\\t' ENCLOSED BY \"'\" LINES TERMINATED BY '\\r\\n' (title, nfo, size, files, filename, nuked, nukereason, category, predate, source, requestid, groupname);"); $pdo->queryExec("LOAD DATA LOCAL INFILE '" . $path . "' IGNORE into table predb_imports FIELDS TERMINATED BY '\t\t' ENCLOSED BY \"'\" LINES TERMINATED BY '\r\n' (title, nfo, size, files, filename, nuked, nukereason, category, predate, source, requestid, groupname)"); } else { echo $pdo->log->header("LOAD DATA INFILE '" . $path . "' IGNORE into table predb_imports FIELDS TERMINATED BY '\\t\\t' ENCLOSED BY \"'\" LINES TERMINATED BY '\\r\\n' (title, nfo, size, files, filename, nuked, nukereason, category, predate, source, requestid, groupname);"); $pdo->queryExec("LOAD DATA INFILE '" . $path . "' IGNORE into table predb_imports FIELDS TERMINATED BY '\t\t' ENCLOSED BY \"'\" LINES TERMINATED BY '\r\n' (title, nfo, size, files, filename, nuked, nukereason, category, predate, source, requestid, groupname)"); } // Remove any titles where length <=8 echo $pdo->log->info("Deleting any records where title <=8 from Temporary Table"); $pdo->queryExec("DELETE FROM predb_imports WHERE LENGTH(title) <= 8"); // Add any groups that do not currently exist $sqlAddGroups = <<queryExec($sqlAddGroups); // Drop triggers on predb echo $pdo->log->info("Dropping predb_hashes triggers"); $pdo->queryExec("DROP TRIGGER IF EXISTS insert_hashes"); $pdo->queryExec("DROP TRIGGER IF EXISTS update_hashes"); $pdo->queryExec("DROP TRIGGER IF EXISTS delete_hashes"); // Insert and update table $sqlInsert = << 0, t.nuked, predb.nuked), predb.nukereason = IF(t.nuked > 0, t.nukereason, predb.nukereason), predb.category = IF(predb.category IS NULL, t.category, predb.category), predb.requestid = IF(predb.requestid = 0, t.requestid, predb.requestid), predb.groups_id = IF(g.id IS NOT NULL, g.id, 0); SQL_INSERT; echo $pdo->log->primary($sqlInsert); $pdo->queryExec($sqlInsert); // Add hashes g echo $pdo->log->info("Adding predb_hashes entries"); echo $pdo->log->info("Stage 1: UNHEX(MD5(TITLE))"); $pdo->queryExec("INSERT IGNORE INTO predb_hashes (hash, predb_id) SELECT UNHEX(md5(title)), id from predb;"); echo $pdo->log->info("Stage 1: UNHEX(MD5(MD5(TITLE)))"); $pdo->queryExec("INSERT IGNORE INTO predb_hashes (hash, predb_id) SELECT UNHEX(md5(md5(title))), id from predb;"); echo $pdo->log->info("Stage 1: UNHEX(SHA1(TITLE))"); $pdo->queryExec("INSERT IGNORE INTO predb_hashes (hash, predb_id) SELECT UNHEX(sha1(title)), id from predb;"); // Re-add triggers on predb echo $pdo->log->info("Adding predb_hashes triggers"); $pdo->queryExec("CREATE TRIGGER insert_hashes AFTER INSERT ON predb FOR EACH ROW BEGIN INSERT INTO predb_hashes (hash, predb_id) VALUES (UNHEX(MD5(NEW.title)), NEW.id), (UNHEX(MD5(MD5(NEW.title))), NEW.id), ( UNHEX(SHA1(NEW.title)), NEW.id); END;"); $pdo->queryExec("CREATE TRIGGER update_hashes AFTER UPDATE ON predb FOR EACH ROW BEGIN IF NEW.title != OLD.title THEN DELETE FROM predb_hashes WHERE hash IN ( UNHEX(md5(OLD.title)), UNHEX(md5(md5(OLD.title))), UNHEX(sha1(OLD.title)) ) AND predb_id = OLD.id; INSERT INTO predb_hashes (hash, predb_id) VALUES ( UNHEX(MD5(NEW.title)), NEW.id ), ( UNHEX(MD5(MD5(NEW.title))), NEW.id ), ( UNHEX(SHA1(NEW.title)), NEW.id ); END IF; END;"); $pdo->queryExec("CREATE TRIGGER delete_hashes BEGIN DELETE FROM predb_hashes WHERE hash IN ( UNHEX(md5(OLD.title)), UNHEX(md5(md5(OLD.title))), UNHEX(sha1(OLD.title)) ) AND predb_id = OLD.id; END;"); $pdo->queryExec("TRUNCATE TABLE predb_imports"); } else { exit($pdo->log->error("\nThis script can export or import a predb dump file. You may use the full path, or a relative path.\n" . "For importing, the script insert new rows and update existing matched rows. For databases not on the local system, use remote, else use local.\n" . "For exporting, the path must be writeable by mysql, any existing file[predb_dump.csv] will be overwritten.\n\n" . "php dump_predb.php export /path/to/write/to ...: To export.\n" . "php dump_predb.php [remote | local] /path/to/filename ...: To import.\n")); }