/[cvs]/nfo/perl/libs/shortcuts/database.pm
ViewVC logotype

Annotation of /nfo/perl/libs/shortcuts/database.pm

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.1 - (hide annotations)
Wed Apr 9 07:47:52 2003 UTC (21 years, 1 month ago) by joko
Branch: MAIN
renamed from db.pm

1 joko 1.1 ## ---------------------------------------------------------------------------
2     ## $Id: db.pm,v 1.1 2003/04/08 23:09:16 joko Exp $
3     ## ---------------------------------------------------------------------------
4     ## $Log: db.pm,v $
5     ## Revision 1.1 2003/04/08 23:09:16 joko
6     ## initial commit: code from perl/libs/libdb.pm
7     ##
8     ## ---------------------------------------------------------------------------
9    
10     =pod
11    
12     =head1 Background
13    
14     Databases = Everything is sql
15     Perl ~ Everything is a hash ;-)
16    
17    
18     =cut
19    
20    
21    
22     package shortcuts::db;
23    
24     use strict;
25     use warnings;
26    
27     require Exporter;
28     our @ISA = qw( Exporter );
29     our @EXPORT_OK = qw(
30     SQL_INSERT SQL_UPDATE SQL_SELECT
31     hash2sql
32     quotesql
33     dsn2dbname
34     );
35    
36    
37     use constant SQL_INSERT => 10;
38     use constant SQL_UPDATE => 11;
39     use constant SQL_SELECT => 12;
40    
41    
42     use Data::Dumper;
43    
44    
45     # TODO: handle usage of "$crit" in an abstract way somehow
46     sub hash2sql {
47    
48     my $table = shift;
49     my $hash = shift;
50     my $mode = shift;
51     my $crit = shift;
52    
53     my $sql;
54     $mode = SQL_SELECT if ($mode eq 'SQL_SELECT' || $mode eq 'SELECT');
55     $mode = SQL_INSERT if ($mode eq 'SQL_INSERT' || $mode eq 'INSERT');
56     $mode = SQL_UPDATE if ($mode eq 'SQL_UPDATE' || $mode eq 'UPDATE');
57    
58     if ($mode == SQL_SELECT) {
59     $sql = "SELECT #fields# FROM $table";
60     } elsif ($mode == SQL_INSERT) {
61     $sql = "INSERT INTO $table (#fields#) VALUES (#values#)";
62     } elsif ($mode == SQL_UPDATE) {
63     $sql = "UPDATE $table SET #fields-values#";
64     }
65    
66     # FIXME: this wouldn't be valid for 'INSERT' queries
67     if ($crit) {
68     $sql .= " WHERE $crit";
69     }
70    
71     my (@fields, @values);
72     foreach my $key (keys %{$hash}) {
73     push @fields, $key;
74     push @values, $hash->{$key};
75     }
76     # quote each element
77     map { if (defined $_) { $_ = "'$_'" } else { $_ = "null" } } @values;
78    
79     my $fields = join(', ', @fields);
80     my $values = join(', ', @values);
81     my $fields_values = '';
82     my $fc = 0;
83     foreach (@fields) {
84     $fields_values .= $_ . '=' . $values[$fc] . ', ';
85     $fc++;
86     }
87     $fields_values = substr($fields_values, 0, -2);
88    
89     # FIXME: this should only be valid for 'SELECT' queries
90     $fields ||= '*';
91    
92     $sql =~ s/#fields#/$fields/;
93     $sql =~ s/#values#/$values/;
94     $sql =~ s/#fields-values#/$fields_values/;
95    
96     print "shortcuts::db::hash2sql: \$sql=$sql", "\n";
97    
98     return $sql;
99     }
100    
101    
102     sub quotesql {
103     my $string = shift;
104     if ($string) {
105     $string =~ s/'/\\'/g;
106     }
107     return $string;
108     }
109    
110     sub dsn2dbname {
111     my $dsn = shift;
112     $dsn =~ m/database=(.+?);/;
113     my $database_name = $1;
114     return $database_name;
115     }
116    
117     1;
118     __END__

MailToCvsAdmin">MailToCvsAdmin
ViewVC Help
Powered by ViewVC 1.1.26 RSS 2.0 feed