From 033b9590bdf562a21a45b85e9cfaefee0db754e1 Mon Sep 17 00:00:00 2001 From: Sarah Hoffmann Date: Sun, 12 Jun 2016 14:58:05 +0200 Subject: [PATCH] use chksql everywhere in lib/ Replaces manual PEAR error checks and adds the chksql wrapper where the error checks were still missing. --- lib/Geocode.php | 86 ++++++++++++++++++------------------------ lib/PlaceLookup.php | 26 +++---------- lib/ReverseGeocode.php | 46 +++++++--------------- lib/lib.php | 35 +++-------------- 4 files changed, 60 insertions(+), 133 deletions(-) diff --git a/lib/Geocode.php b/lib/Geocode.php index 0c3c5f73..aa65cb69 100644 --- a/lib/Geocode.php +++ b/lib/Geocode.php @@ -514,12 +514,8 @@ $sSQL .= " order by importance desc"; if (CONST_Debug) { echo "
"; var_dump($sSQL); } - $aSearchResults = $this->oDB->getAll($sSQL); - - if (PEAR::IsError($aSearchResults)) - { - failInternalError("Could not get details for place.", $sSQL, $aSearchResults); - } + $aSearchResults = chksql($this->oDB->getAll($sSQL); + "Could not get details for place."); return $aSearchResults; } @@ -883,19 +879,13 @@ $sViewboxCentreSQL .= ")'::geometry,4326)"; $sSQL = "select st_buffer(".$sViewboxCentreSQL.",".(float)($_GET['routewidth']/69).")"; - $this->sViewboxSmallSQL = $this->oDB->getOne($sSQL); - if (PEAR::isError($this->sViewboxSmallSQL)) - { - failInternalError("Could not get small viewbox.", $sSQL, $this->sViewboxSmallSQL); - } + $this->sViewboxSmallSQL = chksql($this->oDB->getOne($sSQL); + "Could not get small viewbox."); $this->sViewboxSmallSQL = "'".$this->sViewboxSmallSQL."'::geometry"; $sSQL = "select st_buffer(".$sViewboxCentreSQL.",".(float)($_GET['routewidth']/30).")"; - $this->sViewboxLargeSQL = $this->oDB->getOne($sSQL); - if (PEAR::isError($this->sViewboxLargeSQL)) - { - failInternalError("Could not get large viewbox.", $sSQL, $this->sViewboxLargeSQL); - } + $this->sViewboxLargeSQL = chksql($this->oDB->getOne($sSQL), + "Could not get large viewbox."); $this->sViewboxLargeSQL = "'".$this->sViewboxLargeSQL."'::geometry"; $bBoundingBoxSearch = $this->bBoundedSearch; } @@ -961,11 +951,11 @@ foreach($aSpecialTermsRaw as $aSpecialTerm) { $sQuery = str_replace($aSpecialTerm[0], ' ', $sQuery); - $sToken = $this->oDB->getOne("select make_standard_name('".$aSpecialTerm[1]."') as string"); + $sToken = chksql($this->oDB->getOne("select make_standard_name('".$aSpecialTerm[1]."') as string")); $sSQL = 'select * from (select word_id,word_token, word, class, type, country_code, operator'; $sSQL .= ' from word where word_token in (\' '.$sToken.'\')) as x where (class is not null and class not in (\'place\')) or country_code is not null'; if (CONST_Debug) var_Dump($sSQL); - $aSearchWords = $this->oDB->getAll($sSQL); + $aSearchWords = chksql($this->oDB->getAll($sSQL)); $aNewSearches = array(); foreach($aSearches as $aSearch) { @@ -1010,13 +1000,8 @@ $aTokens = array(); foreach($aPhrases as $iPhrase => $sPhrase) { - $aPhrase = $this->oDB->getRow("select make_standard_name('".pg_escape_string($sPhrase)."') as string"); - if (PEAR::isError($aPhrase)) - { - userError("Illegal query string (not an UTF-8 string): ".$sPhrase); - if (CONST_Debug) var_dump($aPhrase); - exit; - } + $aPhrase = chksql($this->oDB->getRow("select make_standard_name('".pg_escape_string($sPhrase)."') as string"), + "Cannot nomralize query string (is it an UTF-8 string?)"); if (trim($aPhrase['string'])) { $aPhrases[$iPhrase] = $aPhrase; @@ -1043,11 +1028,14 @@ if (CONST_Debug) var_Dump($sSQL); $aValidTokens = array(); - if (sizeof($aTokens)) $aDatabaseWords = $this->oDB->getAll($sSQL); - else $aDatabaseWords = array(); - if (PEAR::IsError($aDatabaseWords)) + if (sizeof($aTokens)) + { + $aDatabaseWords = chksql($this->oDB->getAll($sSQL), + "Could not get word tokens."); + } + else { - failInternalError("Could not get word tokens.", $sSQL, $aDatabaseWords); + $aDatabaseWords = array(); } $aPossibleMainWordIDs = array(); $aWordFrequencyScores = array(); @@ -1264,7 +1252,7 @@ $sSQL .= " and _st_intersects($this->sViewboxSmallSQL, geometry)"; $sSQL .= " order by st_area(geometry) desc limit 1"; if (CONST_Debug) var_dump($sSQL); - $aPlaceIDs = $this->oDB->getCol($sSQL); + $aPlaceIDs = chksql($this->oDB->getCol($sSQL)); } else { @@ -1276,7 +1264,7 @@ if (!$bBoundingBoxSearch && !$aSearch['fLon']) continue; if (!$aSearch['sClass']) continue; $sSQL = "select count(*) from pg_tables where tablename = 'place_classtype_".$aSearch['sClass']."_".$aSearch['sType']."'"; - if ($this->oDB->getOne($sSQL)) + if (chksql($this->oDB->getOne($sSQL))) { $sSQL = "select place_id from place_classtype_".$aSearch['sClass']."_".$aSearch['sType']." ct"; if ($sCountryCodesSQL) $sSQL .= " join placex using (place_id)"; @@ -1289,7 +1277,7 @@ if ($sViewboxCentreSQL) $sSQL .= " order by st_distance($sViewboxCentreSQL, ct.centroid) asc"; $sSQL .= " limit $this->iLimit"; if (CONST_Debug) var_dump($sSQL); - $aPlaceIDs = $this->oDB->getCol($sSQL); + $aPlaceIDs = chksql($this->oDB->getCol($sSQL)); // If excluded place IDs are given, it is fair to assume that // there have been results in the small box, so no further @@ -1304,7 +1292,7 @@ if ($sViewboxCentreSQL) $sSQL .= " order by st_distance($sViewboxCentreSQL, ct.centroid) asc"; $sSQL .= " limit $this->iLimit"; if (CONST_Debug) var_dump($sSQL); - $aPlaceIDs = $this->oDB->getCol($sSQL); + $aPlaceIDs = chksql($this->oDB->getCol($sSQL)); } } else @@ -1315,7 +1303,7 @@ if ($sViewboxCentreSQL) $sSQL .= " order by st_distance($sViewboxCentreSQL, centroid) asc"; $sSQL .= " limit $this->iLimit"; if (CONST_Debug) var_dump($sSQL); - $aPlaceIDs = $this->oDB->getCol($sSQL); + $aPlaceIDs = chksql($this->oDB->getCol($sSQL)); } } } @@ -1426,10 +1414,8 @@ $sSQL .= " limit ".$this->iLimit; if (CONST_Debug) { var_dump($sSQL); } - $aViewBoxPlaceIDs = $this->oDB->getAll($sSQL); - if (PEAR::IsError($aViewBoxPlaceIDs)) - { - failInternalError("Could not get places for search terms.", $sSQL, $aViewBoxPlaceIDs); + $aViewBoxPlaceIDs = chksql($this->oDB->getAll($sSQL)); + "Could not get places for search terms."); } //var_dump($aViewBoxPlaceIDs); // Did we have an viewbox matches? @@ -1464,7 +1450,7 @@ } $sSQL .= " limit $this->iLimit"; if (CONST_Debug) var_dump($sSQL); - $aPlaceIDs = $this->oDB->getCol($sSQL); + $aPlaceIDs = chksql($this->oDB->getCol($sSQL)); // if nothing found, search in the interpolation line table if(!sizeof($aPlaceIDs)) @@ -1486,7 +1472,7 @@ //$sSQL .= " limit $this->iLimit"; if (CONST_Debug) var_dump($sSQL); //get place IDs - $aPlaceIDs = $this->oDB->getCol($sSQL, 0); + $aPlaceIDs = chksql($this->oDB->getCol($sSQL, 0)); } // If nothing found try the aux fallback table @@ -1499,7 +1485,7 @@ } //$sSQL .= " limit $this->iLimit"; if (CONST_Debug) var_dump($sSQL); - $aPlaceIDs = $this->oDB->getCol($sSQL); + $aPlaceIDs = chksql($this->oDB->getCol($sSQL)); } //if nothing was found in placex or location_property_aux, then search in Tiger data for this housenumber(location_property_tiger) @@ -1521,7 +1507,7 @@ //$sSQL .= " limit $this->iLimit"; if (CONST_Debug) var_dump($sSQL); //get place IDs - $aPlaceIDs = $this->oDB->getCol($sSQL, 0); + $aPlaceIDs = chksql($this->oDB->getCol($sSQL, 0)); } // Fallback to the road (if no housenumber was found) @@ -1548,18 +1534,18 @@ if ($sCountryCodesSQL) $sSQL .= " and calculated_country_code in ($sCountryCodesSQL)"; $sSQL .= " order by rank_search asc limit $this->iLimit"; if (CONST_Debug) var_dump($sSQL); - $aClassPlaceIDs = $this->oDB->getCol($sSQL); + $aClassPlaceIDs = chksql($this->oDB->getCol($sSQL)); } if (!$aSearch['sOperator'] || $aSearch['sOperator'] == 'near') // & in { $sSQL = "select count(*) from pg_tables where tablename = 'place_classtype_".$aSearch['sClass']."_".$aSearch['sType']."'"; - $bCacheTable = $this->oDB->getOne($sSQL); + $bCacheTable = chksql($this->oDB->getOne($sSQL)); $sSQL = "select min(rank_search) from placex where place_id in ($sPlaceIDs)"; if (CONST_Debug) var_dump($sSQL); - $this->iMaxRank = ((int)$this->oDB->getOne($sSQL)); + $this->iMaxRank = ((int)chksql($this->oDB->getOne($sSQL))); // For state / country level searches the normal radius search doesn't work very well $sPlaceGeom = false; @@ -1568,7 +1554,7 @@ // Try and get a polygon to search in instead $sSQL = "select geometry from placex where place_id in ($sPlaceIDs) and rank_search < $this->iMaxRank + 5 and st_geometrytype(geometry) in ('ST_Polygon','ST_MultiPolygon') order by rank_search asc limit 1"; if (CONST_Debug) var_dump($sSQL); - $sPlaceGeom = $this->oDB->getOne($sSQL); + $sPlaceGeom = chksql($this->oDB->getOne($sSQL)); } if ($sPlaceGeom) @@ -1580,7 +1566,7 @@ $this->iMaxRank += 5; $sSQL = "select place_id from placex where place_id in ($sPlaceIDs) and rank_search < $this->iMaxRank"; if (CONST_Debug) var_dump($sSQL); - $aPlaceIDs = $this->oDB->getCol($sSQL); + $aPlaceIDs = chksql($this->oDB->getCol($sSQL)); $sPlaceIDs = join(',',$aPlaceIDs); } @@ -1619,7 +1605,7 @@ if ($this->iOffset) $sSQL .= " offset $this->iOffset"; $sSQL .= " limit $this->iLimit"; if (CONST_Debug) var_dump($sSQL); - $aClassPlaceIDs = array_merge($aClassPlaceIDs, $this->oDB->getCol($sSQL)); + $aClassPlaceIDs = array_merge($aClassPlaceIDs, chksql($this->oDB->getCol($sSQL))); } else { @@ -1641,7 +1627,7 @@ if ($this->iOffset) $sSQL .= " offset $this->iOffset"; $sSQL .= " limit $this->iLimit"; if (CONST_Debug) var_dump($sSQL); - $aClassPlaceIDs = array_merge($aClassPlaceIDs, $this->oDB->getCol($sSQL)); + $aClassPlaceIDs = array_merge($aClassPlaceIDs, chksql($this->oDB->getCol($sSQL))); } } } @@ -1685,7 +1671,7 @@ $sSQL .= ") UNION select place_id from location_property_osmline where place_id in (".join(',',array_keys($aResultPlaceIDs)).")"; $sSQL .= " and (30 between $this->iMinAddressRank and $this->iMaxAddressRank)"; if (CONST_Debug) var_dump($sSQL); - $aFilteredPlaceIDs = $this->oDB->getCol($sSQL); + $aFilteredPlaceIDs = chksql($this->oDB->getCol($sSQL)); $tempIDs = array(); foreach($aFilteredPlaceIDs as $placeID) { diff --git a/lib/PlaceLookup.php b/lib/PlaceLookup.php index be60ff07..831f6ef6 100644 --- a/lib/PlaceLookup.php +++ b/lib/PlaceLookup.php @@ -100,7 +100,7 @@ function setOSMID($sType, $iID) { $sSQL = "select place_id from placex where osm_type = '".pg_escape_string($sType)."' and osm_id = ".(int)$iID." order by type = 'postcode' asc"; - $this->iPlaceID = $this->oDB->getOne($sSQL); + $this->iPlaceID = chksql($this->oDB->getOne($sSQL)); } function lookupPlace($details) @@ -175,13 +175,7 @@ $sSQL .= " from placex where place_id = ".(int)$this->iPlaceID; } - $aPlace = $this->oDB->getRow($sSQL); - - - if (PEAR::IsError($aPlace)) - { - failInternalError("Could not lookup place.", $sSQL, $aPlace); - } + $aPlace = chksql($this->oDB->getRow($sSQL), "Could not lookup place"); if (!$aPlace['place_id']) return null; @@ -248,13 +242,7 @@ if (!$bAll) $sSQL .= " WHERE isaddress OR type = 'country_code'"; $sSQL .= " order by rank_address desc,isaddress desc"; - $aAddressLines = $this->oDB->getAll($sSQL); - if (PEAR::IsError($aAddressLines)) - { - var_dump($aAddressLines); - exit; - } - return $aAddressLines; + return chksql($this->oDB->getAll($sSQL)); } function getAddressNames($housenumber = -1) @@ -332,12 +320,8 @@ $sSQL .= $sFrom; } - $aPointPolygon = $this->oDB->getRow($sSQL); - if (PEAR::IsError($aPointPolygon)) - { - echo var_dump($aPointPolygon); - failInternalError("Could not get outline.", $sSQL, $aPointPolygon); - } + $aPointPolygon = chksql($this->oDB->getRow($sSQL), + "Could not get outline"); if ($aPointPolygon['place_id']) { diff --git a/lib/ReverseGeocode.php b/lib/ReverseGeocode.php index 05093af3..4eeb5cc4 100644 --- a/lib/ReverseGeocode.php +++ b/lib/ReverseGeocode.php @@ -148,11 +148,8 @@ $sSQL .= ' OR ST_DWithin('.$sPointSQL.', centroid, '.$fSearchDiam.'))'; $sSQL .= ' ORDER BY ST_distance('.$sPointSQL.', geometry) ASC limit 1'; if (CONST_Debug) var_dump($sSQL); - $aPlace = $this->oDB->getRow($sSQL); - if (PEAR::IsError($aPlace)) - { - failInternalError("Could not determine closest place.", $sSQL, $aPlace); - } + $aPlace = chksql($this->oDB->getRow($sSQL), + "Could not determine closest place."); $iPlaceID = $aPlace['place_id']; $iParentPlaceID = $aPlace['parent_place_id']; $bIsInUnitedStates = ($aPlace['calculated_country_code'] == 'us'); @@ -172,17 +169,14 @@ $sSQL = preg_replace('/limit 1/', 'limit 100', $sSQL); var_dump($sSQL); - $aAllHouses = $this->oDB->getAll($sSQL); + $aAllHouses = chksql($this->oDB->getAll($sSQL)); foreach($aAllHouses as $i) { echo $i['housenumber'] . ' | ' . $i['distance'] * 1000 . ' | ' . $i['lat'] . ' | ' . $i['lon']. ' | '. "
\n"; } } - $aPlaceLine = $this->oDB->getRow($sSQL); - if (PEAR::IsError($aPlaceLine)) - { - failInternalError("Could not determine closest housenumber on an osm interpolation line.", $sSQL, $aPlaceLine); - } + $aPlaceLine = chksql($this->oDB->getRow($sSQL), + "Could not determine closest housenumber on an osm interpolation line."); if ($aPlaceLine) { if (CONST_Debug) var_dump('found housenumber in interpolation lines table', $aPlaceLine); @@ -192,20 +186,14 @@ // if the placex house or the interpolated house are closer to the searched point // distance between point and placex house $sSQL = 'SELECT ST_distance('.$sPointSQL.', house.geometry) as distance FROM placex as house WHERE house.place_id='.$iPlaceID; - $aDistancePlacex = $this->oDB->getRow($sSQL); - if (PEAR::IsError($aDistancePlacex)) - { - failInternalError("Could not determine distance between searched point and placex house.", $sSQL, $aDistancePlacex); - } + $aDistancePlacex = chksql($this->oDB->getRow($sSQL), + "Could not determine distance between searched point and placex house."); $fDistancePlacex = $aDistancePlacex['distance']; // distance between point and interpolated house (fraction on interpolation line) $sSQL = 'SELECT ST_distance('.$sPointSQL.', ST_LineInterpolatePoint(linegeo, '.$aPlaceLine['fraction'].')) as distance'; $sSQL .= ' FROM location_property_osmline WHERE place_id = '.$aPlaceLine['place_id']; - $aDistanceInterpolation = $this->oDB->getRow($sSQL); - if (PEAR::IsError($aDistanceInterpolation)) - { - failInternalError("Could not determine distance between searched point and interpolated house.", $sSQL, $aDistanceInterpolation); - } + $aDistanceInterpolation = chksql($this->oDB->getRow($sSQL), + "Could not determine distance between searched point and interpolated house."); $fDistanceInterpolation = $aDistanceInterpolation['distance']; if ($fDistanceInterpolation < $fDistancePlacex) { @@ -244,18 +232,15 @@ $sSQL = preg_replace('/limit 1/', 'limit 100', $sSQL); var_dump($sSQL); - $aAllHouses = $this->oDB->getAll($sSQL); + $aAllHouses = chksql($this->oDB->getAll($sSQL)); foreach($aAllHouses as $i) { echo $i['housenumber'] . ' | ' . $i['distance'] * 1000 . ' | ' . $i['lat'] . ' | ' . $i['lon']. ' | '. "
\n"; } } - $aPlaceTiger = $this->oDB->getRow($sSQL); - if (PEAR::IsError($aPlaceTiger)) - { - failInternalError("Could not determine closest Tiger place.", $sSQL, $aPlaceTiger); - } + $aPlaceTiger = chksql($this->oDB->getRow($sSQL), + "Could not determine closest Tiger place."); if ($aPlaceTiger) { if (CONST_Debug) var_dump('found Tiger housenumber', $aPlaceTiger); @@ -279,11 +264,8 @@ $sSQL .= " WHERE place_id = $iPlaceID"; $sSQL .= " ORDER BY abs(cached_rank_address - $iMaxRank) asc,cached_rank_address desc,isaddress desc,distance desc"; $sSQL .= ' LIMIT 1'; - $iPlaceID = $this->oDB->getOne($sSQL); - if (PEAR::IsError($iPlaceID)) - { - failInternalError("Could not get parent for place.", $sSQL, $iPlaceID); - } + $iPlaceID = chksql($this->oDB->getOne($sSQL), + "Could not get parent for place."); if (!$iPlaceID) { $iPlaceID = $aPlace['place_id']; diff --git a/lib/lib.php b/lib/lib.php index 9f017fc4..ec5b9b1f 100644 --- a/lib/lib.php +++ b/lib/lib.php @@ -177,12 +177,7 @@ { // Try an exact match on the gb_postcode table $sSQL = 'select \'AA\', ST_X(ST_Centroid(geometry)) as lon,ST_Y(ST_Centroid(geometry)) as lat from gb_postcode where postcode = \''.$sPostcode.'\''; - $aNearPostcodes = $oDB->getAll($sSQL); - if (PEAR::IsError($aNearPostcodes)) - { - var_dump($sSQL, $aNearPostcodes); - exit; - } + $aNearPostcodes = chksql($oDB->getAll($sSQL)); if (sizeof($aNearPostcodes)) { @@ -655,12 +650,7 @@ if (!$bRaw) $sSQL .= " WHERE isaddress OR type = 'country_code'"; $sSQL .= " order by rank_address desc,isaddress desc"; - $aAddressLines = $oDB->getAll($sSQL); - if (PEAR::IsError($aAddressLines)) - { - var_dump($aAddressLines); - exit; - } + $aAddressLines = chksql($oDB->getAll($sSQL)); if ($bRaw) return $aAddressLines; //echo "
";
 		//var_dump($aAddressLines);
@@ -758,12 +748,7 @@
 			$sSQL .= ' OR ST_DWithin('.$sPointSQL.', ST_Centroid(geometry), '.$fSearchDiam.'))';
 			$sSQL .= ' ORDER BY ST_distance('.$sPointSQL.', geometry) ASC limit 1';
 			//var_dump($sSQL);
-			$aPlace = $oDB->getRow($sSQL);
-			if (PEAR::IsError($aPlace))
-			{
-				var_Dump($sSQL, $aPlace);
-				exit;
-			}
+			$aPlace = chksql($oDB->getRow($sSQL));
 			$iPlaceID = $aPlace['place_id'];
 		}
 
@@ -771,22 +756,12 @@
 		if ($iPlaceID)
 		{
 			$sSQL = "select address_place_id from place_addressline where cached_rank_address <= $iMaxRank and place_id = $iPlaceID order by cached_rank_address desc,isaddress desc,distance desc limit 1";
-			$iPlaceID = $oDB->getOne($sSQL);
-			if (PEAR::IsError($iPlaceID))
-			{
-				var_Dump($sSQL, $iPlaceID);
-				exit;
-			}
+			$iPlaceID = chksql($oDB->getOne($sSQL));
 
 			if ($iPlaceID && $aPlace['place_id'] && $iMaxRank < 28)
 			{
 				$sSQL = "select address_place_id from place_addressline where cached_rank_address <= $iMaxRank and place_id = ".$aPlace['place_id']." order by cached_rank_address desc,isaddress desc,distance desc";
-				$iPlaceID = $oDB->getOne($sSQL);
-				if (PEAR::IsError($iPlaceID))
-				{
-					var_Dump($sSQL, $iPlaceID);
-					exit;
-				}
+				$iPlaceID = chksql($oDB->getOne($sSQL));
 			}
 			if (!$iPlaceID)
 			{
-- 
2.39.5