private $oNormalizer;
private $oTransliterator;
- private $aCountryRestriction;
public function __construct(&$oDB)
{
public function checkStatus()
{
- $sSQL = "SELECT word_id FROM word WHERE word_token == 'a'";
+ $sSQL = 'SELECT word_id FROM word WHERE word_id is not null limit 1';
$iWordID = $this->oDB->getOne($sSQL);
if ($iWordID === false) {
- throw new Exception('Query failed', 703);
+ throw new \Exception('Query failed', 703);
}
if (!$iWordID) {
- throw new Exception('No value', 704);
+ throw new \Exception('No value', 704);
}
}
- public function setCountryRestriction($aCountries)
- {
- $this->aCountryRestriction = $aCountries;
- }
-
-
public function normalizeString($sTerm)
{
if ($this->oNormalizer === null) {
private function addTokensFromDB(&$oValidTokens, $aTokens, $sNormQuery)
{
// Check which tokens we have, get the ID numbers
- $sSQL = 'SELECT word_id, word_token, type';
- $sSQL .= " info->>'cc' as country, info->>'postcode' as postcode,";
+ $sSQL = 'SELECT word_id, word_token, type, word,';
$sSQL .= " info->>'op' as operator,";
- $sSQL .= " info->>'class' as class, info->>'type' as type,";
+ $sSQL .= " info->>'class' as class, info->>'type' as ctype,";
$sSQL .= " info->>'count' as count";
$sSQL .= ' FROM word WHERE word_token in (';
$sSQL .= join(',', $this->oDB->getDBQuotedList($aTokens)).')';
foreach ($aDBWords as $aWord) {
$iId = (int) $aWord['word_id'];
+ $sTok = $aWord['word_token'];
switch ($aWord['type']) {
- 'C': // country name tokens
- if ($aWord['country'] === null
- || ($this->aCountryRestriction
- && !in_array($aWord['country'], $this->aCountryRestriction))
- ) {
- continue;
+ case 'C': // country name tokens
+ if ($aWord['word'] !== null) {
+ $oValidTokens->addToken(
+ $sTok,
+ new Token\Country($iId, $aWord['word'])
+ );
}
- $oToken = new Token\Country($iId, $aWord['country'])
break;
- 'H': // house number tokens
- $oToken = new Token\HouseNumber($iId, $aWord['word_token']);
+ case 'H': // house number tokens
+ $oValidTokens->addToken($sTok, new Token\HouseNumber($iId, $aWord['word_token']));
break;
- 'P': // postcode tokens
+ case 'P': // postcode tokens
// Postcodes are not normalized, so they may have content
// that makes SQL injection possible. Reject postcodes
// that would need special escaping.
- if ($aWord['postcode'] === null
- || pg_escape_string($aWord['postcode']) == $aWord['postcode']
+ if ($aWord['word'] !== null
+ && pg_escape_string($aWord['word']) == $aWord['word']
) {
- continue;
- }
- $sNormPostcode = $this->normalizeString($aWord['postcode']);
- if (strpos($sNormQuery, $sNormPostcode) === false) {
- continue;
+ $sNormPostcode = $this->normalizeString($aWord['word']);
+ if (strpos($sNormQuery, $sNormPostcode) !== false) {
+ $oValidTokens->addToken(
+ $sTok,
+ new Token\Postcode($iId, $aWord['word'], null)
+ );
+ }
}
- $oToken = new Token\Postcode($iId, $aWord['postcode'], null);
break;
- 'S': // tokens for classification terms (special phrases)
- if ($aWord['class'] === null || $aWord['type'] === null
- ) {
- continue;
+ case 'S': // tokens for classification terms (special phrases)
+ if ($aWord['class'] !== null && $aWord['ctype'] !== null) {
+ $oValidTokens->addToken($sTok, new Token\SpecialTerm(
+ $iId,
+ $aWord['class'],
+ $aWord['ctype'],
+ (isset($aWord['operator'])) ? Operator::NEAR : Operator::NONE
+ ));
}
- $oToken = new Token\SpecialTerm(
- $iId,
- $aWord['class'],
- $aWord['type'],
- $aWord['op'] ? Operator::NEAR : Operator::NONE
- );
break;
- 'W': // full-word tokens
- $oToken = new Token\Word(
+ case 'W': // full-word tokens
+ $oValidTokens->addToken($sTok, new Token\Word(
$iId,
(int) $aWord['count'],
substr_count($aWord['word_token'], ' ')
- );
+ ));
break;
- 'w': // partial word terms
- $oToken = new Token\Partial(
+ case 'w': // partial word terms
+ $oValidTokens->addToken($sTok, new Token\Partial(
$iId,
$aWord['word_token'],
(int) $aWord['count']
- );
+ ));
break;
default:
- continue;
+ break;
}
-
- $oValidTokens->addToken($aWord['word_token'], $oToken);
}
}