]> mj.ucw.cz Git - pciids.git/blob - feeddb.pl
5f96825eba25c2846700768ce9485f4eabac991f
[pciids.git] / feeddb.pl
1 #!/usr/bin/perl
2
3 #       PciIds web database
4 #       Copyright (C) 2008 Michal Vaner (vorner@ucw.cz)
5 #
6 #       This program is free software; you can redistribute it and/or modify
7 #       it under the terms of the GNU General Public License as published by
8 #       he Free Software Foundation; either version 2 of the License, or
9 #       (at your option) any later version.
10 #
11 #       This program is distributed in the hope that it will be useful,
12 #       but WITHOUT ANY WARRANTY; without even the implied warranty of
13 #       MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14 #
15 #       GNU General Public License for more details.
16 #
17 #       You should have received a copy of the GNU General Public License
18 #       along with this program; if not, write to the Free Software
19 #       Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
20
21 use strict;
22 use warnings;
23 BEGIN {
24         unshift @INC, ".";
25 }
26 use PciIds::Db;
27 use DBI;
28
29 my $dbh = connectDb();
30 my $query = $dbh->prepare( "INSERT INTO locations (id, name, note, parent) VALUES(?, ?, ?, ?);" ) or die "Could not create the query (".DBI->errstr.")\n";
31 my $comment = $dbh->prepare( "INSERT INTO history (location, nodename, nodenote, seen) VALUES(?, ?, ?, '1')" ) or die "Could not create query (".DBI->errstr.")\n";
32 my $update = $dbh->prepare( "UPDATE locations SET mainhistory = ? WHERE id = ?" ) or die "Could not create query (".DBI->errstr.")\n";
33 my( $vendor, $type, $sub, $description, $name );
34
35 $query->execute( "PC", undef, undef, undef ) or die "Could not add toplevel node\n";
36 $query->execute( "PD", undef, undef, undef ) or die "Could not add toplevel node\n";
37
38 sub submit( $ ) {
39         my( $id ) = @_;
40         my $parent = $id;
41         $parent =~ s/\/[^\/]+$//;
42         $query->execute( $id, $name, $description, $parent );
43         $comment->execute( $id, $name, $description );
44         my $com = $dbh->last_insert_id( undef, undef, undef, undef );
45         $update->execute( $com, $id );
46         undef $description;
47 }
48
49 print "Filling database from id file\n";
50
51 foreach( <> ) {
52         chomp;
53         if( s/^\s*#\s*// ) {
54                 $description = $_;
55         } elsif( /^\s*$/ ) {
56                 undef $description;
57         } elsif( /^\t\t/ ) {
58                 if( $vendor =~ /^PC/ ) {
59                         ( $sub, $name ) = /^\s*([0-9a-fA-F]+\s[0-9a-fA-F]+)\s+(.*)$/;
60                         $sub =~ s/\s+//g;
61                 } else {
62                         ( $sub, $name ) = /^\s*([0-9a-fA-F]+)\s+(.*)$/;
63                 }
64                 submit( $vendor.'/'.$type.'/'.$sub );
65         } elsif( /^\t/ ) {
66                 ( $type, $name ) = /^\s*([0-9a-fA-F]+)\s+(.*)$/;
67                 submit( $vendor.'/'.$type );
68         } elsif( /^C\s/ ) {
69                 ( $vendor, $name ) = /^C\s+([0-9a-fA-F]+)\s+(.*)$/;
70                 $vendor = 'PD/'.$vendor;
71                 submit( $vendor );
72         } elsif( /^[0-9a-fA-F]/ ) {
73                 ( $vendor, $name ) = /([0-9a-fA-F]+)\s+(.*)$/;
74                 $vendor = 'PC/'.$vendor;
75                 submit( $vendor );
76         } else {
77                 die "Um what?? $_\n";
78         }
79 }
80 $dbh->commit();
81 $dbh->disconnect;