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 ?> |