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 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139
|
<?xml version="1.0" encoding="utf-8"?>
<test>
<name>attributes update vs workers vs API and SphinxQL</name>
<requires>
<non-rt/>
<non-windows/>
<variant_match/>
</requires>
<config>
indexer
{
mem_limit = 16M
}
searchd
{
<searchd_settings/>
attr_flush_period = 10000
<dynamic>
<variant>workers = threads</variant>
<variant>workers = prefork</variant>
<variant>workers = fork</variant>
</dynamic>
}
source src
{
type = mysql
<sql_settings/>
sql_query = SELECT id, text, 1 as gid, mva1 FROM test_table
sql_attr_uint = gid
<Dynamic>
<Variant>sql_attr_multi = uint mva1 from field mva1</Variant>
<Variant>sql_attr_multi = bigint mva1 from field mva1</Variant>
</Dynamic>
}
index idx
{
source = src
path = <data_path/>/idx
docinfo = extern
}
</config>
<custom_test><![CDATA[
$results = array ();
$restartD = create_function('$client','
$results = array ();
$results[] = StopWaitSearchd ( "config.conf", "searchd.pid" );
$error = "";
$startSta = StartSearchd ( "config.conf", "error.txt", "searchd.pid", $error );
if ( $startSta == 0 || $startSta == 2 )
{
$results[] = "started=ok";
}
else
$results[] = sprintf("start.err=%d local=%s client=%s", $startSta, $error, $client->GetLastError());
global $sd_address, $sd_sphinxql_port;
$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 not connect to searchd: " . @mysql_errno ( $sock ) . " : " . @mysql_error ( $sock );
return;
}
$res = @mysql_query ( "select * from idx" );
while ($row = @mysql_fetch_array($res, MYSQL_ASSOC))
{
$line = "";
foreach ($row as $key => $value)
$line .= $value . "; ";
$results[] = $line;
}
return $results;
');
global $sd_address, $sd_sphinxql_port;
$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;
}
@mysql_query ( 'update idx set mva1=(3,2, 1, 2), mva1=(1, 2) where id=1' );
@mysql_close($sock);
$results = array_merge ( $results, $restartD ( $client ) );
$up = $client->UpdateAttributes ( "idx", array("mva1"), array(1=>array(array(2,3,4)), 3=>array(array(6,7,8))),true);
if ( $up >= 0 )
$results[] = sprintf("up.ok=%d", $up);
else
$results[] = sprintf("up.err=%s", $client->GetLastError());
$results = array_merge ( $results, $restartD ( $client ) );
// final fixup; we don't want to compare times
for ( $i=0; $i<count($results); $i++ )
if ( is_array($results[$i]) )
unset ( $results[$i]["time"] );
]]></custom_test>
<DB_Create>
CREATE TABLE `test_table` (
`id` int(11) DEFAULT NULL,
`text` varchar (255) NOT NULL,
`mva1` varchar(255) NOT NULL
)
</DB_Create>
<DB_Drop>
DROP TABLE IF EXISTS `test_table`
</DB_Drop>
<DB_Insert>
INSERT INTO `test_table` (`id`, `text`, `mva1`) VALUES
(1, 'test1', '1001'),
(2, 'test2', '1002 1023 4456'),
(3, 'test3', '1003 1008 1010'),
(4, 'test4', '1004 1005 1006');
</DB_Insert>
</test>
|