/[sql]/www-sql2php
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Contents of /www-sql2php

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.1.1.1 - (show annotations) (vendor branch)
Mon Mar 6 07:13:36 2000 UTC (24 years ago) by dpavlin
Branch: DbP, MAIN
CVS Tags: r0, HEAD
Changes since 1.1: +0 -0 lines
initial import

1 #!/usr/local/bin/perl -w
2
3 # www-sql2php
4 #
5 # This is filter which converts www-sql files into php3
6 # Reports are dumped to STDERR
7 #
8 # 2000-01-10 Dobrica Pavlinusic <dpavlin@rot13.org>
9 #
10 # Warnings:
11 # - parser it's pretty stiff about multi-line www-sql tabs. Only allowed
12 # multiline tags are: print_rows, query
13 # - like operators in PostgreSQL ARE case sensitive -- your appl. may not
14 # work because of that!
15 # - you WILL NEED TO CHANGE links and/or missed form actions by hand!
16 # - www-sql permits variables with slash (-) in name, php doesn't!
17
18 # configuration part
19
20 $db_user=$ENV{'USER'}; # connect to database as current user
21 $php_prefix='?php'; # type of php code prefix ('?' is also possible)
22
23 # end of configuration part
24
25
26 # report subroutine (future flag -q will shut this down)
27 sub r { print STDERR @_,"\n"; }
28
29 # read whole file into $wsql
30 @wsql=<>; $wsql=join("",@wsql);
31
32 # non-buffered output
33 $|=1;
34
35 # start relacements
36 $php=$php_prefix;
37
38 #---- variables convert
39 $wsql=~s#\.sql\?#\.php_que_#smg; # protect vars in a href calls
40
41 while ($wsql=~ s#(<!\s*sql.+)\@(\w+)\.(\d+)#$1\$row_${2}[$3]#sm) {
42 $conv{var_db_handle}++;
43 }
44 while ($wsql=~ s#(<!\s*sql.+)\?(\w+)#$1\$${2}#sm) {
45 $conv{var_mysql_escape}++;
46 }
47 while ($wsql=~ s,(<!\s*sql.+)\#(\w+),$1rawUrlEncode(\$${2}),sm) {
48 $conv{var_http_escape}++;
49 }
50
51
52 #---- database
53 $patt='<!\s*sql\s+database\s+(\w+)\s*>';
54 while ($wsql=~ m,$patt,mi) {
55 $database=$1;
56 $wsql=~s#$patt##mi;
57 $conv{database}++;
58 }
59
60 #---- connect FIX: user/password opt. args
61 $patt='<!\s*sql\s+connect\s*>';
62 while ($wsql=~ m,$patt,mi) {
63 die "can't find database name!" if (!defined($database));
64 $wsql=~s#$patt#
65 <$php \$conn = pg_connect("dbname=$database user=$db_user"); ?>
66 #mi;
67 $conv{connect}++;
68 }
69
70 #---- print
71 $patt1='<!\s*sql\s+print\s+([^"][^>]+)\s*>'; # without quotes
72 $patt2='<!\s*sql\s+print\s+("[^"]+")\s*>'; # with quotes
73 while ($wsql=~m,$patt1,mi) {
74 $wsql=~s#$patt1#<$php echo $1 ?>#mi;
75 $conv{print1}++;
76 }
77 while ($wsql=~m,$patt2,mi) {
78 $wsql=~s#$patt2#<$php echo $1 ?>#mi;
79 $conv{print2}++;
80 }
81
82 #---- query
83
84 # ugly clugde to replace \" inside sql queryies with '
85 $wsql=~s#\\"#_qm_#smg;
86
87 $patt='<!\s*sql\s+query\s+"([^"]+)"\s*(\w*)\s*>';
88 while ($wsql=~ m,<!\s*sql\s+query\s+"([^"]+)"\s*(\w*)\s*>,smi) {
89 die "can't find database name!" if (!defined($database));
90 r "can't find connect, you should insert one!" if (! $conv{connect}>0);
91 $query=$1;
92 if (defined($2)) {
93 $q_handle=$2;
94 } else {
95 $q_handle="tmp";
96 }
97 $wsql=~s#$patt#
98 <$php
99 \$result_${q_handle}=pg_Exec(\$conn,"$query");
100 \$NUM_FIELDS=pg_NumFields(\$result_${q_handle});
101 \$NUM_ROWS=pg_NumRows(\$result_${q_handle});
102 \$AFFECTED_ROWS=pg_CmdTuples(\$result_${q_handle});
103 // \$INSERT_ID=pg_GetLastOid(\$result_${q_handle}); // FIX
104 if (\$NUM_ROWS > 0) {
105 \$row_${q_handle}=pg_fetch_row(\$result_${q_handle},0);
106 }
107 ?>
108 #smi;
109 $handles{$q_handle}++;
110 $conv{query}++;
111 }
112
113 #---- print_rows
114 $patt='<!\s*sql\s+print_rows\s+(\w+)\s+"([^"]+)"\s*>';
115 while ($wsql=~ m,$patt,smi) {
116 die "can't find database name!" if (!defined($database));
117 r "can't find connect, you should insert one!" if (! $conv{connect} > 0);
118 $q_handle=$1;
119 $format=$2;
120 $wsql=~s#$patt#
121 <$php
122 for (\$k = 0; \$k < pg_numrows(\$result_${q_handle}); \$k++) {
123 \$row_${q_handle}=pg_fetch_row(\$result_${q_handle},\$k);
124 echo "$format";
125 } //for ?>
126 #smi;
127 $handles{$q_handle}++;
128 $conv{print_rows}++;
129 }
130
131 #---- include
132 while ($wsql=~ m,<!\s*sql\s+include\s+(\S+)\s*>,mi) {
133 $include=$1;
134 $wsql=~s#<!\s*sql\s+include\s+\S+\s*>#
135 <$php include("$include"); ?>
136 #mi;
137 r "Convert include file $include also!";
138 $conv{include}++;
139 }
140
141 #---- if
142 $patt='<!\s*sql\s+if\s+([^>]+)\s*>';
143 $wsql=~s#\\>#_gt_#smg;
144 while ($wsql=~ m,$patt,mi) {
145 $wsql=~s#$patt#<$php if ($1): ?>#mi;
146 $conv{if}++;
147 }
148 $wsql=~s#_gt_#>#smg;
149
150 #---- elsif
151 $patt='<!\s*sql\s+elsif\s+([^>]+)\s*>';
152 $wsql=~s#\\>#_gt_#smg;
153 while ($wsql=~ m,$patt,mi) {
154 $wsql=~s#$patt#<$php elseif ($1): ?>#mi;
155 $conv{elsif}++;
156 }
157 $wsql=~s#_gt_#>#smg;
158
159 #---- else
160 $patt='<!\s*sql\s+else\s*>';
161 while ($wsql=~ m,$patt,mi) {
162 $wsql=~s#$patt#<$php else: ?>#mi;
163 $conv{else}++;
164 }
165
166 #---- endif
167 $patt='<!\s*sql\s+endif\s*>';
168 while ($wsql=~ m,$patt,mi) {
169 $wsql=~s#$patt#<$php endif; ?>#mi;
170 $conv{endif}++;
171 }
172
173 #---- ftime
174 $patt='<!\s*sql\s+ftime\s+([^>]+?)\s*([+-]*)(\d*)\s*>';
175 while ($wsql=~ m,$patt,mi) {
176 if (defined($2)) {
177 $op=$2;
178 } else {
179 $op="+";
180 }
181 $wsql=~s#$patt#<$php echo strftime($1,time()${op}$3) ?>#mi;
182 $conv{ftime}++;
183 }
184
185 #---- qselect
186 $patt='<!\s*sql\s+qselect\s+(\w+)\s+(\w+)\s*(\w*)\s*>';
187 while ($wsql=~ m,$patt,smi) {
188 die "can't find database name!" if (!defined($database));
189 r "can't find connect, you should insert one!" if (! $conv{connect} > 0);
190 ($q_handle,$formvar)=($1,$2);
191 warn "FIX: default value for qselect isn't impmeneted!" if (defined($3));
192 $wsql=~s#$patt#
193 <$php
194 echo "<select name=\\\"$formvar\\\">\n";
195 for (\$k = 0; \$k < pg_numrows(\$result_${q_handle}); \$k++) {
196 \$row_${q_handle}=pg_fetch_row(\$result_${q_handle},\$k);
197 echo "<option value=\\\"\$row_${q_handle}[0]\\\">\$row_${q_handle}[1]</option>\n";
198 } //for
199 echo "</select>\n"; ?>
200 #smi;
201 $handles{$q_handle}++;
202 $conv{qselect}++;
203 }
204
205 #---- setdefault
206 $patt='<!\s*sql\s+setdefault\s+(\S+)[\s=](\S+)\s*>';
207 while ($wsql=~ m,$patt,mi) {
208 ($name,$value)=($1,$2);
209 $wsql=~s#$patt#<$php if (!isset(\$$name)) { \$$name = $value; } ?>#mi;
210 $conv{setdefault}++;
211 }
212
213 #---- set
214 $patt='<!\s*sql\s+set\s+(\S+)[\s=](\S+)\s*>';
215 while ($wsql=~ m,$patt,mi) {
216 ($name,$value)=($1,$2);
217 $wsql=~s#$patt#<$php \$$name = $value ?>#mi;
218 $conv{set}++;
219 }
220
221 #---- setexpr
222 $patt='<!\s*sql\s+setexpr\s+(\S+)[\s=]([^>]+)\s*>';
223 while ($wsql=~ m,$patt,mi) {
224 ($name,$value)=($1,$2);
225 $wsql=~s#$patt#<$php \$$name = $value ?>#mi;
226 $conv{setexpr}++;
227 }
228
229
230
231 # report some statistics
232
233 r "Database used: $database" if (defined($database));
234 r "Handle usage:";
235 foreach $key (sort keys %handles) { r " $key: $handles{$key}"; }
236 r "Converted www-sql tags:";
237 foreach $key (sort keys %conv) { r " $key: $conv{$key}"; }
238 r "THERE ARE UNCONVERTED TAGS IN OUTPUT!" if ($wsql=~m,<!\s*sql,);
239
240 # fix escaped chars bach
241 $wsql=~s#_qm_#\\"#smg;
242 $wsql=~s#_que_#\?#smg;
243
244 # fix form action which points to .sql
245 $wsql=~s#(form\s+action="*\w+)\.sql"*#$1.php#smg;
246
247 # dump converted www-sql onto STDOUT
248 print "$wsql";
249
250 print '<?php include("debug.inc") ?>';
251

  ViewVC Help
Powered by ViewVC 1.1.26