#! /usr/bin/env pike import .util; constant datadir = "/usr/share/games/fortunes"; int main() { array(string) datafiles = filter(get_dir(datadir), lambda(string fname){ return Stdio.is_file(combine_path(datadir, fname)) && !String.count(fname, ".dat"); }); // datafiles = map(datafiles, lambda(string fname){ return combine_path(datadir, fname); }); // write("%O\n", datafiles); // create tables mapping my_cnf = ini(combine_path(getenv("HOME"), ".my.cnf"))->client; if(!my_cnf || !my_cnf->user || !my_cnf->password || !my_cnf->database) throw(({"Error: check $HOME/.my.cnf", backtrace()})); string sqlspec = sprintf("mysql://%s\:%s@%s/%s", my_cnf->user, my_cnf->password, my_cnf->host || "localhost", my_cnf->database); Sql.Sql db = Sql.Sql(sqlspec); array(string) tables = db->list_tables(); if(has_value(tables, "fortunes")) { db->query("drop table fortunes"); } if(has_value(tables, "ftopics")) { db->query("drop table ftopics"); } db->query("create table fortunes (id int unsigned auto_increment primary key, topic_id int unsigned not null, data blob)"); db->query("create table ftopics (topic_id int unsigned auto_increment primary key, topic varchar(31))"); mapping(string:int) counts = ([]); foreach(datafiles, string fname) { // fill fortune tables werror("Processing file %s...\n", fname); db->query("insert into ftopics set topic=%s", fname); int topic_id = db->master_sql->insert_id(); array(string) fdatas = Stdio.read_file(combine_path(datadir, fname)) / "%\n" - ({""}); //int count = 0; foreach(fdatas, string data) { db->query("insert into fortunes set topic_id=%d, data=%s", topic_id, data); werror("%d\tentries inserted\r", ++counts[fname]); } werror("\nFile %s done.\n", fname); } // raport końcowy ;-) werror("Total of %d fortunes inserted.\n", `+(@values(counts))); return 0; }