2
2
3
3
define ('MEME_BID_AS_AID ' , 'm0.bid AS aid ' );
4
4
5
- // Main function to process memelang query and return results
6
- function memeQuery ($ memeString ) {
7
- try {
8
- $ sqlQuery = memeSQL ($ memeString );
9
-
10
- switch (DB_TYPE ) {
11
- case 'sqlite3 ' : return memeSQLite3 ($ sqlQuery );
12
- case 'mysql ' : return memeMySQL ($ sqlQuery );
13
- case 'postgres ' : return memePostgres ($ sqlQuery );
14
- default : throw new Exception ("Unsupported database type: " . DB_TYPE );
15
- }
16
- } catch (Exception $ e ) {
17
- return "Error: " . $ e ->getMessage ();
18
- }
19
- }
20
-
21
5
// Translate a Memelang query (which may contain multiple commands) into SQL
22
- function memeSQL ($ memeString ) {
6
+ function memeSQL ($ memeString, $ table = DB_TABLE_MEME ) {
23
7
$ queries =[];
24
8
$ memeCommands =memeDecode ($ memeString );
25
- foreach ($ memeCommands as $ memeCommand ) $ queries []=memeCmdSQL ($ memeCommand );
9
+ foreach ($ memeCommands as $ memeCommand ) $ queries []=memeCmdSQL ($ memeCommand, $ table );
26
10
return implode (' UNION ALL ' , $ queries );
27
11
}
28
12
29
13
// Translate one Memelang command into SQL
30
- function memeCmdSQL ($ memeCommand ) {
31
- $ table =DB_TABLE_MEME ;
14
+ function memeCmdSQL ($ memeCommand , $ table =DB_TABLE_MEME ) {
32
15
$ querySettings = ['all ' => false ];
33
16
$ trueGroup = [];
34
17
$ falseGroup = [];
@@ -100,7 +83,7 @@ function memeCmdSQL($memeCommand) {
100
83
$ cteCount ++;
101
84
102
85
foreach ($ bidGroup as $ memeStatement ) {
103
- list ($ select , $ where )=memeSelectWhere ($ memeStatement );
86
+ list ($ select , $ where )=memeSelectWhere ($ memeStatement, $ table );
104
87
if (empty ($ wheres )) $ wheres []=$ where ;
105
88
else $ wheres []=substr ($ where , strpos ($ where , 'qnt ' )-4 , 99 );
106
89
}
@@ -119,7 +102,7 @@ function memeCmdSQL($memeCommand) {
119
102
$ cteCount ++;
120
103
$ orSQL = [];
121
104
foreach ($ orGroup as $ memeStatement ) {
122
- $ orSQL []=implode (' WHERE ' , memeSelectWhere ($ memeStatement ))
105
+ $ orSQL []=implode (' WHERE ' , memeSelectWhere ($ memeStatement, $ table ))
123
106
.($ cteCount >0 ? ' AND m0.aid IN (SELECT aid FROM z ' .($ cteCount -1 ).') ' : '' );
124
107
}
125
108
$ cteSQL [$ cteCount ] = "z $ cteCount AS ( " .implode (' UNION ALL ' , $ orSQL ).') ' ;
@@ -131,7 +114,7 @@ function memeCmdSQL($memeCommand) {
131
114
if ($ trueCount <1 ) throw new Exception ('A query with a false statements must contain at least one non-OR true statement. ' );
132
115
133
116
$ falseSQL =[];
134
- foreach ($ falseGroup as $ memeStatement ) $ falseSQL []="aid NOT IN ( " . implode (' WHERE ' , memeSelectWhere ($ memeStatement , true )).') ' ;
117
+ foreach ($ falseGroup as $ memeStatement ) $ falseSQL []="aid NOT IN ( " . implode (' WHERE ' , memeSelectWhere ($ memeStatement , $ table , true )).') ' ;
135
118
136
119
$ fsql ="SELECT aid FROM z $ cteCount WHERE " .implode (' AND ' , $ falseSQL );
137
120
$ cteSQL [++$ cteCount ] = "z $ cteCount AS ( $ fsql) " ;
@@ -152,7 +135,7 @@ function memeCmdSQL($memeCommand) {
152
135
// otherwise select the matching and the GET fields
153
136
else {
154
137
foreach ($ getGroup as $ memeStatement )
155
- $ selectSQL []=implode (' WHERE ' , memeSelectWhere ($ memeStatement ))." AND m0.aid IN (SELECT aid FROM z {$ cteCount }) " ;
138
+ $ selectSQL []=implode (' WHERE ' , memeSelectWhere ($ memeStatement, $ table ))." AND m0.aid IN (SELECT aid FROM z {$ cteCount }) " ;
156
139
}
157
140
158
141
foreach ($ cteOut as $ cteNum )
@@ -163,7 +146,7 @@ function memeCmdSQL($memeCommand) {
163
146
164
147
165
148
// Translate an $memeStatement array of ARBQ into an SQL WHERE clause
166
- function memeSelectWhere ($ memeStatement , $ aidOnly =false ) {
149
+ function memeSelectWhere ($ memeStatement , $ table = DB_TABLE_MEME , $ aidOnly =false ) {
167
150
global $ OPRSTR ;
168
151
169
152
$ wheres = [];
@@ -272,7 +255,7 @@ function memeSelectWhere($memeStatement, $aidOnly=false) {
272
255
}
273
256
274
257
return [
275
- 'SELECT ' .implode (', ' , $ selects ).' FROM ' . DB_TABLE_MEME . ' m0 ' .implode (' ' , $ joins ),
258
+ 'SELECT ' .implode (', ' , $ selects )." FROM $ table m0 " .implode (' ' , $ joins ),
276
259
implode (' AND ' , $ wheres )
277
260
];
278
261
}
@@ -311,4 +294,4 @@ function memeDBOut ($memeTriples, $set=[]) {
311
294
print memeEncode (memeDbDecode ($ memeTriples ), $ set );
312
295
}
313
296
314
- ?>
297
+ ?>
0 commit comments