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

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

Parent Directory Parent Directory | Revision Log Revision Log


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

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