Initial revision
[mir.git] / dbscripts / wizard.pl
1 #!/usr/bin/perl
2
3 #
4 # wizard
5 #
6
7 use DBI;
8
9 $0=~m#[^/]+$#;
10 $cmdpath=$`;
11 if ($cmdpath eq "") { $cmdpath="./"; }
12 unshift(@INC,$cmdpath."lib");
13
14 require "codec.pl";
15 require "subst.pl";
16
17 sub USAGE {
18         print "USAGE: wizard.pl dsn user passwd table dir\n";
19         exit(0);
20         }
21
22 $dsn=shift(@ARGV) || &USAGE;
23 if (($dsn eq "-h") || ($dsn eq "--help")) { &USAGE; }
24 $user=shift(@ARGV) || &USAGE;
25 $passwd=shift(@ARGV) || &USAGE;
26 if ($passwd eq "-") { $passwd=""; }
27 $table=shift(@ARGV) || &USAGE;
28 $dir=shift(@ARGV) || &USAGE;
29
30 $dbh=DBI->connect($dsn,$user,$passwd);
31 if (!defined $dsn) {
32         print "Error: cannot connect $dsn\n";
33         &USAGE;
34         }
35
36 $tables=$dbh->table_info;
37 while ($hash=$tables->fetchrow_hashref) {
38         #print $$hash{'TABLE_NAME'}."\n";
39
40         if ($$hash{'TABLE_NAME'} eq $table) {
41
42                 $sth=$dbh->prepare("show fields from ".$$hash{'TABLE_NAME'});
43                 $sth->execute;
44                 while ($fieldhash=$sth->fetchrow_hashref) {
45                         #print "\t".$$fieldhash{'Field'}.":".$$fieldhash{'Type'}."\n";
46                         push(@data,[$$fieldhash{'Field'},$$fieldhash{'Type'}]);
47                         }
48                 $sth->finish;   
49                 }
50         }
51
52 $$env{'fields'}{'_data'}=\@data;
53 $$env{'fields'}{'_pos'}=0;
54 $$env{'fields'}{'_size'}=scalar(@data);
55
56 $$env{'tablename'}=$table;
57
58 print "prosessing files in $dir\n";
59
60 chdir $dir;
61
62 if (opendir(DIR,".")) {
63         while ($file=readdir(DIR)) {
64                 next unless (-f $file);
65                 if ($file=~/\.template$/) {
66                         $newfile=$`;
67                         print "\t$file -> $newfile\n";
68                         if (open(IN,$file)) {
69                                 if (open(OUT,">$newfile")) {
70                                         &Subst::process(*IN,*OUT,$env);
71                                         close(OUT);
72                                         }
73                                 close(IN);      
74                                 }
75                         }
76                 }
77         closedir(DIR);
78         }                       
79
80
81
82         
83