2 # Try an SQL query on a MySQL or PostgreSQL server
10 \$drh = DBI->install_driver(\$_[0]->{'driver'});
14 'desc' => &text('query_edriver',
15 "<tt>DBD::$_[0]->{'driver'}</tt>") };
18 # Connect to the database server
19 local $dbistr = &make_dbistr($_[0]->{'driver'}, $_[0]->{'db'}, $_[0]->{'host'});
20 local $dbh = $drh->connect($dbistr,
21 $_[0]->{'user'}, $_[0]->{'pass'}, { });
24 'desc' => &text('query_elogin', $drh->errstr) };
28 local $cmd = $dbh->prepare($_[0]->{'sql'});
31 'desc' => &text('query_eprepare', $dbh->errstr) };
33 if (!$cmd->execute()) {
35 'desc' => &text('query_eexecute', $dbh->errstr) };
37 local @r = $cmd->fetchrow();
40 if ($_[0]->{'result'} && $r[0] ne $_[0]->{'result'}) {
42 'desc' => &text('query_ewrong', $r[0]) };
50 print &ui_table_row($text{'query_driver'},
51 &ui_select("driver", $_[0]->{'driver'},
52 [ [ "mysql", "MySQL" ],
53 [ "Pg", "PostgreSQL" ],
54 [ "Oracle", "Oracle" ] ]));
56 print &ui_table_row($text{'query_db'},
57 &ui_textbox("db", $_[0]->{'db'}, 20));
59 print &ui_table_row($text{'query_user'},
60 &ui_textbox("quser", $_[0]->{'user'}, 20));
62 print &ui_table_row($text{'query_pass'},
63 &ui_password("qpass", $_[0]->{'pass'}, 20));
65 print &ui_table_row($text{'query_host'},
66 &ui_opt_textbox("host", $_[0]->{'host'}, 40, $text{'query_local'}), 3);
68 print &ui_table_row($text{'query_sql'},
69 &ui_textbox("sql", $_[0]->{'sql'}, 60), 3);
71 print &ui_table_row($text{'query_result'},
72 &ui_opt_textbox("result", $_[0]->{'result'}, 40,
73 $text{'query_ignore'}), 3);
76 sub parse_query_dialog
78 eval "use DBD::$in{'driver'}";
79 &error(&text('query_edriver', "<tt>DBD::$in{'driver'}</tt>")) if ($@);
80 $_[0]->{'driver'} = $in{'driver'};
82 $in{'db'} =~ /^\S+$/ || &error($text{'query_edb'});
83 $_[0]->{'db'} = $in{'db'};
85 if ($in{'host_def'}) {
86 delete($_[0]->{'host'});
89 &to_ipaddress($in{'host'}) || &to_ip6address($in{'host'}) ||
90 &error($text{'query_ehost'});
91 $_[0]->{'host'} = $in{'host'};
94 $in{'quser'} =~ /^\S*$/ || &error($text{'query_euser'});
95 $_[0]->{'user'} = $in{'quser'};
97 $in{'qpass'} =~ /^\S*$/ || &error($text{'query_epass'});
98 $_[0]->{'pass'} = $in{'qpass'};
100 $in{'sql'} =~ /\S/ || &error($text{'query_esql'});
101 $_[0]->{'sql'} = $in{'sql'};
103 if ($in{'result_def'}) {
104 delete($_[0]->{'result'});
107 $in{'result'} =~ /\S/ || &error($text{'query_eresult'});
108 $_[0]->{'result'} = $in{'result'};
114 local ($driver, $db, $host) = @_;
116 if ($driver eq "mysql") {
117 $rv = "database=$db";
119 elsif ($driver eq "Pg") {
126 $rv .= ";host=$host";