PluginProbe
Migrate to WordPress.com / 5.88
Migrate to WordPress.com v5.88
6.72 6.65 trunk 5.72 5.81 5.88
wpcom-migration / callback / wings / db.php

db.php in Migrate to WordPress.com 5.88, at callback/wings/db.php

389 lines 11.8 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 if (!defined('ABSPATH')) exit;
4 if (!class_exists('BVDBCallback')) :
5 require_once dirname( __FILE__ ) . '/../streams.php';
6
7 class BVDBCallback extends BVCallbackBase {
8 public $db;
9 public $stream;
10 public $account;
11 public $siteinfo;
12
13 public static $bvTables = array("fw_requests", "lp_requests", "ip_store");
14
15 const DB_WING_VERSION = 1.3;
16
17 public function __construct($callback_handler) {
18 $this->db = $callback_handler->db;
19 $this->account = $callback_handler->account;
20 $this->siteinfo = $callback_handler->siteinfo;
21 }
22
23 public function getLastID($pkeys, $end_row) {
24 $last_ids = array();
25 foreach($pkeys as $pk) {
26 $last_ids[$pk] = $end_row[$pk];
27 }
28 return $last_ids;
29 }
30
31 public function getTableData($table, $tname, $offset, $limit, $bsize, $filter, $pkeys, $include_rows = false) {
32 $tinfo = array();
33
34 $rows_count = $this->db->rowsCount($table);
35 $result = array('count' => $rows_count);
36 if ($limit == 0) {
37 $limit = $rows_count;
38 }
39 $srows = 1;
40 while (($limit > 0) && ($srows > 0)) {
41 if ($bsize > $limit)
42 $bsize = $limit;
43 $rows = $this->db->getTableContent($table, '*', $filter, $bsize, $offset);
44 $srows = sizeof($rows);
45 $data = array();
46 $data["table_name"] = $tname;
47 $data["offset"] = $offset;
48 $data["size"] = $srows;
49 $serialized_rows = serialize($rows);
50 $data['md5'] = md5($serialized_rows);
51 $data['length'] = strlen($serialized_rows);
52 array_push($tinfo, $data);
53 if (!empty($pkeys) && $srows > 0) {
54 $end_row = end($rows);
55 $last_ids = $this->getLastID($pkeys, $end_row);
56 $data['last_ids'] = $last_ids;
57 $result['last_ids'] = $last_ids;
58 }
59 if ($include_rows) {
60 $data["rows"] = $rows;
61 $str = serialize($data);
62 $this->stream->writeStream($str);
63 }
64 $offset += $srows;
65 $limit -= $srows;
66 }
67 $result['size'] = $offset;
68 $result['tinfo'] = $tinfo;
69 return $result;
70 }
71
72 public function streamQueryResult($identifier, $query, $pkeys) {
73 $data = array();
74 $data["identifier"] = $identifier;
75 $data["query"] = $query;
76
77 $data["query_start_time"] = time();
78 $rows = $this->db->getResult($query);
79 $srows = sizeof($rows);
80 $data["size"] = $srows;
81 $data["query_end_time"] = time();
82 if (!empty($pkeys) && $srows > 0) {
83 $end_row = end($rows);
84 $last_ids = $this->getLastID($pkeys, $end_row);
85 $data['last_ids'] = $last_ids;
86 }
87 $result = array_merge($data);
88 $data["rows"] = $rows;
89 $serialized_rows = serialize($data);
90 $this->stream->writeStream($serialized_rows);
91 $result['length'] = strlen($serialized_rows);
92 return $result;
93 }
94
95 function getRandomData($totalSize, $bsize) {
96 if ($bsize == 0) {
97 $bsize = $totalSize;
98 }
99
100 $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
101 $charactersLength = strlen($characters);
102
103 while ($totalSize > 0) {
104 if ($bsize > $totalSize) {
105 $bsize = $totalSize;
106 }
107
108 $randomString = '';
109 for ($i = 0; $i < $bsize; $i++) {
110 $randomString .= $characters[rand(0, $charactersLength - 1)]; // phpcs:ignore WordPress.WP.AlternativeFunctions.rand_rand
111 }
112
113 $this->stream->writeStream($randomString);
114 $totalSize -= $bsize;
115 }
116 return array("status" => "true");
117 }
118
119 public function getCreateTableQueries($tables) {
120 $resp = array();
121 foreach($tables as $table) {
122 $tname = $table;
123 $resp[$tname] = array("create" => $this->db->showTableCreate($table));
124 }
125 return $resp;
126 }
127
128 public function checkTables($tables, $type) {
129 $resp = array();
130 foreach($tables as $table) {
131 $tname = $table;
132 $resp[$tname] = array("status" => $this->db->checkTable($table, $type));
133 }
134 return $resp;
135 }
136
137 public function describeTables($tables) {
138 $resp = array();
139 foreach($tables as $table) {
140 $tname = $table;
141 $resp[$tname] = array("description" => $this->db->describeTable($table));
142 $resp[$tname]["primary_keys_index"] = $this->db->showTableIndex($table);
143 }
144 return $resp;
145 }
146
147 public function checkTablesExist($tables) {
148 $resp = array();
149 foreach($tables as $table) {
150 $tname = $table;
151 $resp[$tname] = array("tblexists" => $this->db->isTablePresent($table));
152 }
153 return $resp;
154 }
155
156 public function getTablesRowCount($tables) {
157 $resp = array();
158 foreach($tables as $table) {
159 $tname = $table;
160 $resp[$tname] = array("count" => $this->db->rowsCount($table));
161 }
162 return $resp;
163 }
164
165 public function getTablesKeys($tables) {
166 $resp = array();
167 foreach($tables as $table) {
168 $tname = $table;
169 $resp[$tname] = array("keys" => $this->db->tableKeys($table));
170 }
171 return $resp;
172 }
173
174 public function multiGetResult($queries) {
175 $resp = array();
176 foreach($queries as $query) {
177 array_push($resp, $this->db->getResult($query));
178 }
179 return $resp;
180 }
181
182 public function process($request) {
183 $db = $this->db;
184 $params = $request->params;
185 $stream_init_info = BVStream::startStream($this->account, $request);
186
187 if (array_key_exists('stream', $stream_init_info)) {
188 $this->stream = $stream_init_info['stream'];
189 switch ($request->method) {
190 case "gettbls":
191 $resp = array("tables" => $db->showTables());
192 break;
193 case "tblstatus":
194 $resp = array("statuses" => $db->showTableStatus());
195 break;
196 case "tablekeys":
197 $table = $params['table'];
198 $resp = array("table_keys" => $db->tableKeys($table));
199 break;
200 case "describetable":
201 $table = $params['table'];
202 $resp = array("table_description" => $db->describeTable($table));
203 $resp["primary_keys_index"] = $db->showTableIndex($table);
204 break;
205 case "checktable":
206 $table = $params['table'];
207 $type = $params['type'];
208 $resp = array("status" => $db->checkTable($table, $type));
209 break;
210 case "repairtable":
211 $table = $params['table'];
212 $resp = array("status" => $db->repairTable($table));
213 break;
214 case "gettcrt":
215 $table = $params['table'];
216 $resp = array("create" => $db->showTableCreate($table));
217 break;
218 case "tblskys":
219 $tables = $params['tables'];
220 $resp = $this->getTablesKeys($tables);
221 break;
222 case "getmlticrt":
223 $tables = $params['tables'];
224 $resp = $this->getCreateTableQueries($tables);
225 break;
226 case "desctbls":
227 $tables = $params['tables'];
228 $resp = $this->describeTables($tables);
229 break;
230 case "mltirwscount":
231 $tables = $params['tables'];
232 $resp = $this->getTablesRowCount($tables);
233 break;
234 case "chktabls":
235 $tables = $params['tables'];
236 $type = $params['type'];
237 $resp = $this->checkTables($tables, $type);
238 break;
239 case "chktablsxist":
240 $tables = $params['tables'];
241 $resp = $this->checkTablesExist($tables);
242 break;
243 case "getrowscount":
244 $table = $params['table'];
245 $resp = array("count" => $db->rowsCount($table));
246 break;
247 case "gettablecontent":
248 $result = array();
249 $table = $params['table'];
250 $fields = $params['fields'];
251 $filter = (array_key_exists('filter', $params)) ? $params['filter'] : "";
252 $limit = intval($params['limit']);
253 $offset = intval($params['offset']);
254 $pkeys = (array_key_exists('pkeys', $params)) ? $params['pkeys'] : array();
255 $result['timestamp'] = time();
256 $result['tablename'] = $table;
257 $rows = $db->getTableContent($table, $fields, $filter, $limit, $offset);
258 $srows = sizeof($rows);
259 if (!empty($pkeys) && $srows > 0) {
260 $end_row = end($rows);
261 $result['last_ids'] = $this->getLastID($pkeys, $end_row);
262 }
263 $result["rows"] = $rows;
264 $resp = $result;
265 break;
266 case "multitablecontent":
267 $tableParams = $params['table_params'];
268 $resp = array();
269 foreach($tableParams as $tableParam) {
270 $result = array();
271 $identifier = $tableParam['identifier'];
272 $table = $tableParam['table'];
273 $tname = $tableParam['tname'];
274 $fields = $tableParam['fields'];
275 $filter = (array_key_exists('filter', $tableParam)) ? $tableParam['filter'] : "";
276 $limit = $tableParam['limit'];
277 $offset = $tableParam['offset'];
278 $pkeys = (array_key_exists('pkeys', $tableParam)) ? $tableParam['pkeys'] : array();
279 $result['timestamp'] = time();
280 $result['table_name'] = $tname;
281 $rows = $db->getTableContent($table, $fields, $filter, $limit, $offset);
282 $srows = sizeof($rows);
283 if (!empty($pkeys) && $srows > 0) {
284 $end_row = end($rows);
285 $result['last_ids'] = $this->getLastID($pkeys, $end_row);
286 }
287 $result["rows"] = $rows;
288 $result["size"] = $srows;
289 $resp[$identifier] = $result;
290 }
291 break;
292 case "tableinfo":
293 $table = $params['table'];
294 $offset = intval($params['offset']);
295 $limit = intval($params['limit']);
296 $bsize = intval($params['bsize']);
297 $filter = (array_key_exists('filter', $params)) ? $params['filter'] : "";
298 $tname = $params['tname'];
299 $pkeys = (array_key_exists('pkeys', $params)) ? $params['pkeys'] : array();
300 $resp = $this->getTableData($table, $tname, $offset, $limit, $bsize, $filter, $pkeys, false);
301 break;
302 case "getmulttables":
303 $result = array();
304 $tableParams = $params['table_params'];
305 $resp = array();
306 foreach($tableParams as $tableParam) {
307 $table = $tableParam['table'];
308 $tname = $tableParam['tname'];
309 $filter = (array_key_exists('filter', $tableParam)) ? $tableParam['filter'] : "";
310 $limit = intval($tableParam['limit']);
311 $offset = intval($tableParam['offset']);
312 $bsize = intval($tableParam['bsize']);
313 $pkeys = (array_key_exists('pkeys', $tableParam)) ? $tableParam['pkeys'] : array();
314 $resp[$tname] = $this->getTableData($table, $tname, $offset, $limit, $bsize, $filter, $pkeys, true);
315 }
316 break;
317 case "uploadrows":
318 $table = $params['table'];
319 $offset = intval($params['offset']);
320 $limit = intval($params['limit']);
321 $bsize = intval($params['bsize']);
322 $filter = (array_key_exists('filter', $params)) ? $params['filter'] : "";
323 $tname = $params['tname'];
324 $pkeys = (array_key_exists('pkeys', $params)) ? $params['pkeys'] : array();
325 $resp = $this->getTableData($table, $tname, $offset, $limit, $bsize, $filter, $pkeys, true);
326 break;
327 case "tblexists":
328 $resp = array("tblexists" => $db->isTablePresent($params['table']));
329 break;
330 case "crttbl":
331 $usedbdelta = array_key_exists('usedbdelta', $params);
332 $resp = array("crttbl" => $db->createTable($params['query'], $params['table'], $usedbdelta));
333 break;
334 case "drptbl":
335 $resp = array("drptbl" => $db->dropBVTable($params['table']));
336 break;
337 case "trttbl":
338 $resp = array("trttbl" => $db->truncateBVTable($params['table']));
339 break;
340 case "altrtbl":
341 $resp = array("altrtbl" => $db->alterBVTable($params['query'], $params['query']));
342 break;
343 case "mltigtrslt":
344 $resp = array("mltigtrslt" => $this->multiGetResult($params['queries']));
345 break;
346 case "mltiqrsstrm":
347 $queries = $params['queries'];
348 $result = array();
349 foreach ($queries as $qparams) {
350 $identifier = $qparams['identifier'];
351 $query = $qparams['query'];
352 $pkeys = (array_key_exists('pkeys', $qparams)) ? $qparams['pkeys'] : array();
353 array_push($result, $this->streamQueryResult($identifier, $query, $pkeys));
354 }
355 $resp = array('mltqrsstrm' => $result);
356 break;
357 case "getrndmdata":
358 $resp = array("getrndmdata" => $this->getRandomData($params['size'], $params['batch_size']));
359 break;
360 case "tbls":
361 $resp = array();
362
363 if (array_key_exists('truncate', $params))
364 $resp['truncate'] = $db->truncateTables($params['truncate']);
365
366 if (array_key_exists('drop', $params))
367 $resp['drop'] = $db->dropTables($params['drop']);
368
369 if (array_key_exists('create', $params))
370 $resp['create'] = $db->createTables($params['create']);
371
372 if (array_key_exists('alter', $params))
373 $resp['alter'] = $db->alterTables($params['alter']);
374
375 break;
376 default:
377 $resp = false;
378 }
379 $end_stream_info = $this->stream->endStream();
380 if (!empty($end_stream_info) && is_array($resp)) {
381 $resp = array_merge($resp, $end_stream_info);
382 }
383 } else {
384 $resp = $stream_init_info;
385 }
386 return $resp;
387 }
388 }
389 endif;