Skip to content

Commit 6c6aaa2

Browse files
committed
3WiFi: Improve case sensitive search and API query performance
Use indexes of ESSID and WiFiKey columns along with binary search. Also improve upload check queries the same way.
1 parent 84e61ff commit 6c6aaa2

File tree

2 files changed

+13
-9
lines changed

2 files changed

+13
-9
lines changed

3wifi.php

+10-6
Original file line numberDiff line numberDiff line change
@@ -316,8 +316,10 @@ function GenerateFindQuery($cmtid, $ipaddr, $BSSID, $ESSID, $Auth, $Name, $Key,
316316
}
317317
if (FilterWildcards($ESSID, $Wildcards, false) != '' || empty($ESSID))
318318
{
319-
if (HasWildcards($ESSID, $Wildcards)) $where .= ' AND '.$binary.' `ESSID` LIKE \''.UniStrWildcard($ESSID, $Wildcards).'\'';
320-
else $where .= ' AND '.$binary.' `ESSID` = \''.$ESSID.'\'';
319+
if (HasWildcards($ESSID, $Wildcards)) $idx = '`ESSID` LIKE \''.UniStrWildcard($ESSID, $Wildcards).'\'';
320+
else $idx = '`ESSID` = \''.$ESSID.'\'';
321+
322+
$where .= ' AND '.$idx.($sens ? ' AND '.$binary.' '.$idx : '');
321323
}
322324
if (FilterWildcards($Auth, $Wildcards, false) != '' || empty($Auth))
323325
{
@@ -331,8 +333,10 @@ function GenerateFindQuery($cmtid, $ipaddr, $BSSID, $ESSID, $Auth, $Name, $Key,
331333
}
332334
if (FilterWildcards($Key, $Wildcards, false) != '' || empty($Key))
333335
{
334-
if (HasWildcards($Key, $Wildcards)) $where .= ' AND '.$binary.' `WiFiKey` LIKE \''.UniStrWildcard($Key, $Wildcards).'\'';
335-
else $where .= ' AND '.$binary.' `WiFiKey` = \''.$Key.'\'';
336+
if (HasWildcards($Key, $Wildcards)) $idx = '`WiFiKey` LIKE \''.UniStrWildcard($Key, $Wildcards).'\'';
337+
else $idx = '`WiFiKey` = \''.$Key.'\'';
338+
339+
$where .= ' AND '.$idx.($sens ? ' AND '.$binary.' '.$idx : '');
336340
}
337341
if (FilterWildcards($WPS, $Wildcards, false) != '' || empty($WPS))
338342
{
@@ -1732,7 +1736,7 @@ function highlightWords($text, array $words)
17321736
$ess = $db->real_escape_string($essid[$i]);
17331737
if ($sens)
17341738
{
1735-
$where .= " AND BINARY ESSID = '$ess'";
1739+
$where .= " AND ESSID = '$ess' AND BINARY ESSID = '$ess'";
17361740
}
17371741
else
17381742
{
@@ -1780,7 +1784,7 @@ function highlightWords($text, array $words)
17801784
$ess = $db->real_escape_string($essid[$i]);
17811785
if ($sens)
17821786
{
1783-
$where = "BINARY ESSID = '$ess'";
1787+
$where = "ESSID = '$ess' AND BINARY ESSID = '$ess'";
17841788
}
17851789
else
17861790
{

db.php

+3-3
Original file line numberDiff line numberDiff line change
@@ -465,7 +465,7 @@ function db_add_ap($row, $cmtid, $uid, $ipaddr)
465465
ON DUPLICATE KEY UPDATE
466466
`cmtid`=$cmtid,`IP`=$addr,`Port`=$port,`Authorization`=$auth,`name`=$name,`RadioOff`=$radio,`Hidden`=$hide,`NoBSSID`=$NoBSSID,`BSSID`=$bssid,`ESSID`=$essid,`Security`=$sec,`WiFiKey`=$key,`WPSPIN`=$wps,`LANIP`=$lanip,`LANMask`=$lanmsk,`WANIP`=$wanip,`WANMask`=$wanmsk,`WANGateway`=$gate,`DNS1`=$DNS[0],`DNS2`=$DNS[1],`DNS3`=$DNS[2];");
467467
// Берём id точки из таблицы base в любом случае (могут быть расхождения с mem_base)
468-
$res = $db->query("SELECT id FROM ".BASE_TABLE." WHERE NoBSSID=$NoBSSID AND BSSID=$bssid AND BINARY ESSID=$essid AND BINARY WiFiKey=$key AND WPSPIN=$wps");
468+
$res = $db->query("SELECT id FROM ".BASE_TABLE." WHERE NoBSSID=$NoBSSID AND BSSID=$bssid AND ESSID=$essid AND WiFiKey=$key AND BINARY ESSID=$essid AND BINARY WiFiKey=$key AND WPSPIN=$wps");
469469
$row = $res->fetch_row();
470470
$res->close();
471471
$id = (int)$row[0];
@@ -524,7 +524,7 @@ function db_ap_exist($NoBSSID, $bssid, $essid, $key)
524524
$essid = $db->real_escape_string($essid);
525525
$key = $db->real_escape_string($key);
526526
// Проверяем, есть ли эта точка в базе (по BSSID/ESSID/WiFiKey)
527-
if ($res = QuerySql("SELECT `id` FROM BASE_TABLE WHERE `NoBSSID`=$NoBSSID AND `BSSID`=$bssid AND BINARY `ESSID`='$essid' AND BINARY `WiFiKey`='$key' LIMIT 1"))
527+
if ($res = QuerySql("SELECT id FROM BASE_TABLE WHERE `NoBSSID`=$NoBSSID AND `BSSID`=$bssid AND `ESSID`='$essid' AND `WiFiKey`='$key' AND BINARY `ESSID`='$essid' AND BINARY `WiFiKey`='$key' LIMIT 1"))
528528
{
529529
$result = $res->num_rows;
530530
$res->close();
@@ -540,7 +540,7 @@ function db_ap_checkempty($NoBSSID, $bssid, $essid, $sec, $wps)
540540
$sec = str2sec($sec);
541541
$wps = (($wps == '') ? 1 : (int)$wps);
542542
// Проверяем, есть ли эта точка в базе (с непустым ключом)
543-
if ($res = QuerySql("SELECT `id` FROM BASE_TABLE WHERE `NoBSSID`=$NoBSSID AND `BSSID`=$bssid AND BINARY `ESSID`='$essid' AND `Security`=$sec AND `WiFiKey`!='' AND `WPSPIN`=$wps LIMIT 1"))
543+
if ($res = QuerySql("SELECT id FROM BASE_TABLE WHERE `NoBSSID`=$NoBSSID AND `BSSID`=$bssid AND `ESSID`='$essid' AND BINARY `ESSID`='$essid' AND `Security`=$sec AND `WiFiKey`!='' AND `WPSPIN`=$wps LIMIT 1"))
544544
{
545545
$result = $res->num_rows;
546546
$res->close();

0 commit comments

Comments
 (0)