1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124
|
<?xml version="1.0" encoding="utf-8"?>
<test>
<name>query vs stack overflow</name>
<skip_indexer/>
<config>
searchd
{
<searchd_settings/>
workers = threads
thread_stack = 320K
binlog_path =
}
index test
{
type = rt
path = <data_path/>/test
rt_field = text
rt_attr_uint = idd
rt_mem_limit = 16M
}
</config>
<db_create>
CREATE TABLE `test`
(
`document_id` int(11) NOT NULL default '0',
`text` varchar(25) NOT NULL default '',
`idd` int(11) NOT NULL default '0'
)
</db_create>
<db_drop>
DROP TABLE IF EXISTS `test`
</db_drop>
<custom_test><![CDATA[
global $sd_address, $sd_sphinxql_port;
$results = array();
$sockStr = "$sd_address:$sd_sphinxql_port";
if ($sd_address == "localhost")
$sockStr = "127.0.0.1:$sd_sphinxql_port";
$sock = @mysql_connect ($sockStr,'','', true );
if ( $sock === false )
{
$results[] = "error: can't connect to searchd: " . @mysql_errno ( $sock ) . " : " . @mysql_error ( $sock );
return;
}
$query = "INSERT INTO test VALUES (1, 'word1 word10', 1 )";
$results[] = $query;
$res = mysql_query ( $query, $sock );
if ($res===true)
$results[] = "total affected ".mysql_affected_rows($sock);
else if ($res===false)
$results[] = "error ".@mysql_errno($sock)." : ".@mysql_error ($sock);
else
$results[] = "total found ".mysql_num_rows ($res);
$match = '"word1 word2"~30 ';
for ( $i=3; $i<520; $i++ )
$match = $match . ' | "word' . $i . ' word' . ( $i+1 ) . '"~30 ';
$query = "SELECT * FROM test WHERE MATCH('$match')";
$results[] = $query;
$res = mysql_query ( $query, $sock );
if ($res===true)
$results[] = "total affected ".mysql_affected_rows($sock);
else if ($res===false)
$results[] = "error ".@mysql_errno($sock)." : ".@mysql_error ($sock);
else
$results[] = "total found ".mysql_num_rows ($res);
// regression ext query crash on snippet generation
$match = 'fast ';
for ( $i=1; $i<1520; $i++ )
$match = $match . " | ( word word$i )";
$query = "CALL SNIPPETS ( 'fast path word word1000', 'test', '$match', 1 as query_mode, 0 as limit )";
$results[] = 'snippets fast-path ext query stack overflow';
$res = mysql_query ( $query, $sock );
if ($res===true)
$results[] = "total affected ".mysql_affected_rows($sock);
else if ($res===false)
$results[] = "error ".@mysql_errno($sock)." : ".@mysql_error ($sock);
else
{
while ($row = @mysql_fetch_array($res, MYSQL_ASSOC))
{
$foo = array();
foreach ($row as $key => $value)
$foo[$key] = $value;
$results[] = $foo;
}
}
$query = "CALL SNIPPETS ( 'not a fast path is going here word word1000 and might be others', 'test', '$match', 1 as query_mode, 40 as limit )";
$results[] = 'snippets ext query stack overflow';
$res = mysql_query ( $query, $sock );
if ($res===true)
$results[] = "total affected ".mysql_affected_rows($sock);
else if ($res===false)
$results[] = "error ".@mysql_errno($sock)." : ".@mysql_error ($sock);
else
{
while ($row = @mysql_fetch_array($res, MYSQL_ASSOC))
{
$foo = array();
foreach ($row as $key => $value)
$foo[$key] = $value;
$results[] = $foo;
}
}
]]></custom_test>
</test>
|