annotate forum/Sources/DbSearch-postgresql.php @ 85:6d7b61434be7 website

Add a copy of this here, just in case!
author Chris Cannam
date Mon, 20 Jan 2014 11:02:36 +0000
parents e3e11437ecea
children
rev   line source
Chris@76 1 <?php
Chris@76 2
Chris@76 3 /**
Chris@76 4 * Simple Machines Forum (SMF)
Chris@76 5 *
Chris@76 6 * @package SMF
Chris@76 7 * @author Simple Machines http://www.simplemachines.org
Chris@76 8 * @copyright 2011 Simple Machines
Chris@76 9 * @license http://www.simplemachines.org/about/smf/license.php BSD
Chris@76 10 *
Chris@76 11 * @version 2.0
Chris@76 12 */
Chris@76 13
Chris@76 14 if (!defined('SMF'))
Chris@76 15 die('Hacking attempt...');
Chris@76 16
Chris@76 17 /* This file contains database functions specific to search related activity.
Chris@76 18
Chris@76 19 void db_search_init()
Chris@76 20 - adds the functions in this file to the $smcFunc array
Chris@76 21
Chris@76 22 boolean smf_db_search_support($search_type)
Chris@76 23 - whether this database type support the search type $search_type
Chris@76 24
Chris@76 25 void smf_db_create_word_search($size)
Chris@76 26 - create the custom word index table
Chris@76 27
Chris@76 28 resource smf_db_search_query($identifier, $db_string, $db_values = array(), $connection = null)
Chris@76 29 - returns the correct query for this search type.
Chris@76 30 */
Chris@76 31
Chris@76 32 // Add the file functions to the $smcFunc array.
Chris@76 33 function db_search_init()
Chris@76 34 {
Chris@76 35 global $smcFunc;
Chris@76 36
Chris@76 37 if (!isset($smcFunc['db_search_query']) || $smcFunc['db_search_query'] != 'smf_db_search_query')
Chris@76 38 $smcFunc += array(
Chris@76 39 'db_search_query' => 'smf_db_search_query',
Chris@76 40 'db_search_support' => 'smf_db_search_support',
Chris@76 41 'db_create_word_search' => 'smf_db_create_word_search',
Chris@76 42 'db_support_ignore' => false,
Chris@76 43 );
Chris@76 44 }
Chris@76 45
Chris@76 46 // Does this database type support this search type?
Chris@76 47 function smf_db_search_support($search_type)
Chris@76 48 {
Chris@76 49 $supported_types = array('custom');
Chris@76 50
Chris@76 51 return in_array($search_type, $supported_types);
Chris@76 52 }
Chris@76 53
Chris@76 54 // Returns the correct query for this search type.
Chris@76 55 function smf_db_search_query($identifier, $db_string, $db_values = array(), $connection = null)
Chris@76 56 {
Chris@76 57 global $smcFunc;
Chris@76 58
Chris@76 59 $replacements = array(
Chris@76 60 'create_tmp_log_search_topics' => array(
Chris@76 61 '~mediumint\(\d\)~i' => 'int',
Chris@76 62 '~unsigned~i' => '',
Chris@76 63 '~TYPE=HEAP~i' => '',
Chris@76 64 ),
Chris@76 65 'create_tmp_log_search_messages' => array(
Chris@76 66 '~mediumint\(\d\)' => 'int',
Chris@76 67 '~unsigned~i' => '',
Chris@76 68 '~TYPE=HEAP~i' => '',
Chris@76 69 ),
Chris@76 70 'drop_tmp_log_search_topics' => array(
Chris@76 71 '~IF\sEXISTS~i' => '',
Chris@76 72 ),
Chris@76 73 'drop_tmp_log_search_messages' => array(
Chris@76 74 '~IF\sEXISTS~i' => '',
Chris@76 75 ),
Chris@76 76 'insert_into_log_messages_fulltext' => array(
Chris@76 77 '~NOT\sRLIKE~i' => '!~*',
Chris@76 78 '~RLIKE~i' => '~*',
Chris@76 79 ),
Chris@76 80 'insert_log_search_results_subject' => array(
Chris@76 81 '~NOT\sRLIKE~i' => '!~*',
Chris@76 82 '~RLIKE~i' => '~*',
Chris@76 83 ),
Chris@76 84 );
Chris@76 85
Chris@76 86 if (isset($replacements[$identifier]))
Chris@76 87 $db_string = preg_replace(array_keys($replacements[$identifier]), array_values($replacements[$identifier]), $db_string);
Chris@76 88 elseif (preg_match('~^\s*INSERT\sIGNORE~i', $db_string) != 0)
Chris@76 89 {
Chris@76 90 $db_string = preg_replace('~^\s*INSERT\sIGNORE~i', 'INSERT', $db_string);
Chris@76 91 // Don't error on multi-insert.
Chris@76 92 $db_values['db_error_skip'] = true;
Chris@76 93 }
Chris@76 94
Chris@76 95 $return = $smcFunc['db_query']('', $db_string,
Chris@76 96 $db_values, $connection
Chris@76 97 );
Chris@76 98
Chris@76 99 return $return;
Chris@76 100 }
Chris@76 101
Chris@76 102 // Highly specific - create the custom word index table!
Chris@76 103 function smf_db_create_word_search($size)
Chris@76 104 {
Chris@76 105 global $smcFunc;
Chris@76 106
Chris@76 107 $size = 'int';
Chris@76 108
Chris@76 109 $smcFunc['db_query']('', '
Chris@76 110 CREATE TABLE {db_prefix}log_search_words (
Chris@76 111 id_word {raw:size} NOT NULL default {string:string_zero},
Chris@76 112 id_msg int NOT NULL default {string:string_zero},
Chris@76 113 PRIMARY KEY (id_word, id_msg)
Chris@76 114 )',
Chris@76 115 array(
Chris@76 116 'size' => $size,
Chris@76 117 'string_zero' => '0',
Chris@76 118 )
Chris@76 119 );
Chris@76 120 }
Chris@76 121
Chris@76 122 ?>