Skip to content
Permalink
Browse files

fixed #1115 daemon hung at CALL PQ with recursive JSON attribute enco…

…ded as string; added regression to test 359
  • Loading branch information
tomatolog committed Dec 6, 2019
1 parent ce2e4b4 commit 535589ba8a37baf5c6056afb5ff969fd70476feb
Showing with 42 additions and 18 deletions.
  1. +16 −9 src/searchd.cpp
  2. +13 −1 src/sphinxjson.cpp
  3. +2 −0 src/sphinxjson.h
  4. +1 −1 src/sphinxpq.cpp
  5. +2 −4 src/sphinxutils.cpp
  6. +2 −2 src/sphinxutils.h
  7. +1 −1 test/test_359/model.bin
  8. +5 −0 test/test_359/test.xml
@@ -11128,9 +11128,15 @@ static bool ParseBsonDocument ( const VecTraits_T<BYTE>& dDoc, const SchemaItemH
case SPH_ATTR_JSON:
assert ( pItem->m_iStr!=-1 );
{
// just save bson blob
BYTE * pDst = tStrings.ReserveBlob ( dChild.StandaloneSize(), pItem->m_iStr );
dChild.BsonToBson ( pDst );
if ( dChild.IsAssoc() || dChild.IsArray() )
{
// just save bson blob
BYTE * pDst = tStrings.ReserveBlob ( dChild.StandaloneSize(), pItem->m_iStr );
dChild.BsonToBson ( pDst );
} else
{
sMsg.Warn ( "JSON item (%s) should be object or array, got=%s", sName.cstr(), JsonTypeName ( dChild.GetType() ) );
}
}
break;
case SPH_ATTR_STRING:
@@ -11156,15 +11162,16 @@ static bool ParseBsonDocument ( const VecTraits_T<BYTE>& dDoc, const SchemaItemH
dMva[pItem->m_iMva] = iOff;
} else
{
sMsg.Warn ( "MVA item should be array" );
sMsg.Warn ( "MVA item (%s) should be array, got %s", sName.cstr(), JsonTypeName ( dChild.GetType() ) );
}
default:
break;
}
}
}
else if ( !sIdAlias.IsEmpty() && sIdAlias==sName )
} else if ( !sIdAlias.IsEmpty() && sIdAlias==sName )
{
((CSphMatch &)tDoc).SetAttr ( tIdLoc, (DocID_t)dChild.Int() );
}
}
return true;
}
@@ -11708,9 +11715,9 @@ static void PQLocalMatch ( const BlobVec_t &dDocs, const CSphString& sIndex, con

// PQ work with sequential document numbers, 0 element unused


// add document
pIndex->AddDocument ( dFields, tDoc, true, sTokenFilterOpts, dStrings.Begin (), dMva, sError, sWarning, pAccum );sMsg.Err ( sError );
pIndex->AddDocument ( dFields, tDoc, true, sTokenFilterOpts, dStrings.Begin (), dMva, sError, sWarning, pAccum );
sMsg.Err ( sError );
sMsg.Warn ( sWarning );

if ( !sMsg.ErrEmpty () )
@@ -11732,7 +11739,7 @@ static void PQLocalMatch ( const BlobVec_t &dDocs, const CSphString& sIndex, con
}

void PercolateMatchDocuments ( const BlobVec_t & dDocs, const PercolateOptions_t & tOpts,
CSphSessionAccum & tAcc, CPqResult &tResult )
CSphSessionAccum & tAcc, CPqResult & tResult )
{
CSphString sIndex = tOpts.m_sIndex;
CSphString sWarning, sError;
@@ -3288,4 +3288,16 @@ bool bson::cJsonToBsonLinear ( const cJSON * pNode, CSphVector<BYTE> &dData, Str
pNode = pNode->next;
}
}
*/
*/

const char * g_dTypeNames[JSON_TOTAL] = {
"EOF", "INT32", "INT64", "DOUBLE", "STRING",
"STRING_VECTOR", "INT32_VECTOR", "INT64_VECTOR", "DOUBLE_VECTOR", "MIXED_VECTOR",
"OBJECT", "BOOL", "BOOL", "NULL", "ROOT_OBJECT"
};

const char * JsonTypeName ( ESphJsonType eType )
{
assert ( eType>=JSON_EOF && eType<JSON_TOTAL );
return g_dTypeNames[eType];
}
@@ -288,6 +288,8 @@ uint64_t sphJsonPackTypeOffset ( ESphJsonType eType, uint64_t uOffset );
/// internal cJSON init
void sphInitCJson();

const char * JsonTypeName ( ESphJsonType eType );

struct cJSON;

/// simple cJSON wrapper
@@ -2515,7 +2515,7 @@ void MergePqResults ( const VecTraits_T<CPqResult *> &dChunks, CPqResult &dRes,
{
auto dOldMsgs = std::move(dRes.m_dResult.m_sMessages);
dRes = std::move ( *dChunks[0] );
dRes.m_dResult.m_sMessages = std::move(dOldMsgs);
dRes.m_dResult.m_sMessages.AddStringsFrom ( dOldMsgs );
return;
}

@@ -3787,19 +3787,17 @@ Warner_c& Warner_c::operator= ( Warner_c && rhs ) noexcept
}


bool Warner_c::Err ( const char * sFmt, ... )
void Warner_c::Err ( const char * sFmt, ... )
{
va_list ap;
va_start ( ap, sFmt );
m_sErrors.vSprintf ( sFmt, ap );
va_end ( ap );
return false;
}

bool Warner_c::Err ( const CSphString &sMsg )
void Warner_c::Err ( const CSphString &sMsg )
{
m_sErrors << sMsg;
return false;
}

void Warner_c::Warn ( const char * sFmt, ... )
@@ -462,8 +462,8 @@ class Warner_c : public ISphNoncopyable

// append message as error.
// always return false (in order to simplify pattern {error='foo'; return false;})
bool Err ( const char * sFmt, ... );
bool Err ( const CSphString &sMsg );
void Err ( const char * sFmt, ... );
void Err ( const CSphString &sMsg );
StringBuilder_c& Err() { return m_sErrors; }
void Warn ( const char * sFmt, ... );
void Warn ( const CSphString &sMsg );
@@ -1 +1 @@
a:1:{i:0;a:34:{i:0;a:2:{s:8:"sphinxql";s:19:"TRUNCATE rtindex pq";s:14:"total_affected";i:0;}i:1;a:2:{s:8:"sphinxql";s:76:"INSERT INTO pq (query, filters) VALUES ('', 'json_data.text.status.state=0')";s:14:"total_affected";i:1;}i:2;a:2:{s:8:"sphinxql";s:88:"INSERT INTO pq (query, filters) VALUES ('', 'json_data.text.status.favorited=\'false\'')";s:14:"total_affected";i:1;}i:3;a:3:{s:8:"sphinxql";s:113:"CALL PQ ('pq', ('{"id":21,"json_data":{"text":{"status":{"state":0}}}}'), 1 as docs, 1 as query, 'id' as docs_id)";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:5:{s:2:"id";s:13:"1677721600001";s:9:"documents";s:2:"21";s:5:"query";s:0:"";s:4:"tags";s:0:"";s:7:"filters";s:29:"json_data.text.status.state=0";}}}i:4;a:2:{s:8:"sphinxql";s:19:"TRUNCATE rtindex pq";s:14:"total_affected";i:0;}i:5;a:2:{s:8:"sphinxql";s:88:"INSERT INTO pq (query, filters) VALUES ('', 'json_data.text.status.favorited=\'false\'')";s:14:"total_affected";i:1;}i:6;a:2:{s:8:"sphinxql";s:76:"INSERT INTO pq (query, filters) VALUES ('', 'json_data.text.status.state=0')";s:14:"total_affected";i:1;}i:7;a:3:{s:8:"sphinxql";s:113:"CALL PQ ('pq', ('{"id":21,"json_data":{"text":{"status":{"state":0}}}}'), 1 as docs, 1 as query, 'id' as docs_id)";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:5:{s:2:"id";s:13:"1677721600004";s:9:"documents";s:2:"21";s:5:"query";s:0:"";s:4:"tags";s:0:"";s:7:"filters";s:29:"json_data.text.status.state=0";}}}i:8;a:2:{s:8:"sphinxql";s:19:"TRUNCATE rtindex pq";s:14:"total_affected";i:0;}i:9;a:2:{s:8:"sphinxql";s:88:"INSERT INTO pq (query, filters) VALUES ('', 'json_data.text.status.favorited=\'false\'')";s:14:"total_affected";i:1;}i:10;a:2:{s:8:"sphinxql";s:87:"INSERT INTO pq (query, filters) VALUES ('', 'json_data.text.status.staff=\'got some\'')";s:14:"total_affected";i:1;}i:11;a:2:{s:8:"sphinxql";s:76:"INSERT INTO pq (query, filters) VALUES ('', 'json_data.text.status.state=0')";s:14:"total_affected";i:1;}i:12;a:3:{s:8:"sphinxql";s:113:"CALL PQ ('pq', ('{"id":21,"json_data":{"text":{"status":{"state":0}}}}'), 1 as docs, 1 as query, 'id' as docs_id)";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:5:{s:2:"id";s:13:"1677721600007";s:9:"documents";s:2:"21";s:5:"query";s:0:"";s:4:"tags";s:0:"";s:7:"filters";s:29:"json_data.text.status.state=0";}}}i:13;a:2:{s:8:"sphinxql";s:19:"TRUNCATE rtindex pq";s:14:"total_affected";i:0;}i:14;a:2:{s:8:"sphinxql";s:80:"INSERT INTO pq (query, filters) VALUES ('test', 'json_data.text.status.state=0')";s:14:"total_affected";i:1;}i:15;a:2:{s:8:"sphinxql";s:92:"INSERT INTO pq (query, filters) VALUES ('test', 'json_data.text.status.favorited=\'false\'')";s:14:"total_affected";i:1;}i:16;a:3:{s:8:"sphinxql";s:132:"CALL PQ ('pq', ('{"id":21,"json_data":{"text":{"status":{"state":0}}}, "title":"test me"}'), 1 as docs, 1 as query, 'id' as docs_id)";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:5:{s:2:"id";s:13:"1677721600008";s:9:"documents";s:2:"21";s:5:"query";s:4:"test";s:4:"tags";s:0:"";s:7:"filters";s:29:"json_data.text.status.state=0";}}}i:17;a:2:{s:8:"sphinxql";s:19:"TRUNCATE rtindex pq";s:14:"total_affected";i:0;}i:18;a:2:{s:8:"sphinxql";s:92:"INSERT INTO pq (query, filters) VALUES ('test', 'json_data.text.status.favorited=\'false\'')";s:14:"total_affected";i:1;}i:19;a:2:{s:8:"sphinxql";s:80:"INSERT INTO pq (query, filters) VALUES ('test', 'json_data.text.status.state=0')";s:14:"total_affected";i:1;}i:20;a:3:{s:8:"sphinxql";s:132:"CALL PQ ('pq', ('{"id":21,"json_data":{"text":{"status":{"state":0}}}, "title":"test me"}'), 1 as docs, 1 as query, 'id' as docs_id)";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:5:{s:2:"id";s:13:"1677721600011";s:9:"documents";s:2:"21";s:5:"query";s:4:"test";s:4:"tags";s:0:"";s:7:"filters";s:29:"json_data.text.status.state=0";}}}i:21;a:2:{s:8:"sphinxql";s:19:"TRUNCATE rtindex pq";s:14:"total_affected";i:0;}i:22;a:2:{s:8:"sphinxql";s:92:"INSERT INTO pq (query, filters) VALUES ('test', 'json_data.text.status.favorited=\'false\'')";s:14:"total_affected";i:1;}i:23;a:2:{s:8:"sphinxql";s:91:"INSERT INTO pq (query, filters) VALUES ('test', 'json_data.text.status.staff=\'got some\'')";s:14:"total_affected";i:1;}i:24;a:2:{s:8:"sphinxql";s:80:"INSERT INTO pq (query, filters) VALUES ('test', 'json_data.text.status.state=0')";s:14:"total_affected";i:1;}i:25;a:3:{s:8:"sphinxql";s:132:"CALL PQ ('pq', ('{"id":21,"json_data":{"text":{"status":{"state":0}}}, "title":"test me"}'), 1 as docs, 1 as query, 'id' as docs_id)";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:5:{s:2:"id";s:13:"1677721600014";s:9:"documents";s:2:"21";s:5:"query";s:4:"test";s:4:"tags";s:0:"";s:7:"filters";s:29:"json_data.text.status.state=0";}}}i:26;a:2:{s:8:"sphinxql";s:43:"INSERT INTO pq1 (query) VALUES ('@title c')";s:14:"total_affected";i:1;}i:27;a:2:{s:8:"sphinxql";s:76:"CALL PQ('pq1', ('{\"title\":\"a\",\"content\":\"c\"}'),1 as docs,1 as query)";s:10:"total_rows";i:0;}i:28;a:2:{s:8:"sphinxql";s:60:"CALL PQ('pq1', ('{\"content\":\"c\"}'),1 as docs,1 as query)";s:10:"total_rows";i:0;}i:29;a:3:{s:8:"sphinxql";s:58:"CALL PQ('pq1', ('{\"title\":\"c\"}'),1 as docs,1 as query)";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:5:{s:2:"id";s:13:"1677721600015";s:9:"documents";s:1:"1";s:5:"query";s:8:"@title c";s:4:"tags";s:0:"";s:7:"filters";s:0:"";}}}i:30;a:2:{s:8:"sphinxql";s:51:"INSERT INTO pq2 (query) VALUES ('abc SENTENCE def')";s:14:"total_affected";i:1;}i:31;a:2:{s:8:"sphinxql";s:77:"CALL PQ('pq2', 'The abc? Def or not.', 0 as docs_json, 1 as query, 1 as docs)";s:10:"total_rows";i:0;}i:32;a:3:{s:8:"sphinxql";s:79:"CALL PQ('pq2', 'The abc or def is not.', 0 as docs_json, 1 as query, 1 as docs)";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:5:{s:2:"id";s:13:"1677721600016";s:9:"documents";s:1:"1";s:5:"query";s:16:"abc SENTENCE def";s:4:"tags";s:0:"";s:7:"filters";s:0:"";}}}i:33;a:2:{s:8:"sphinxql";s:65:"CALL PQ('pq2', 'abc? Def', 0 as docs_json, 1 as query, 1 as docs)";s:10:"total_rows";i:0;}}}
a:1:{i:0;a:36:{i:0;a:2:{s:8:"sphinxql";s:19:"TRUNCATE rtindex pq";s:14:"total_affected";i:0;}i:1;a:2:{s:8:"sphinxql";s:76:"INSERT INTO pq (query, filters) VALUES ('', 'json_data.text.status.state=0')";s:14:"total_affected";i:1;}i:2;a:2:{s:8:"sphinxql";s:88:"INSERT INTO pq (query, filters) VALUES ('', 'json_data.text.status.favorited=\'false\'')";s:14:"total_affected";i:1;}i:3;a:3:{s:8:"sphinxql";s:113:"CALL PQ ('pq', ('{"id":21,"json_data":{"text":{"status":{"state":0}}}}'), 1 as docs, 1 as query, 'id' as docs_id)";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:5:{s:2:"id";s:13:"1677721600001";s:9:"documents";s:2:"21";s:5:"query";s:0:"";s:4:"tags";s:0:"";s:7:"filters";s:29:"json_data.text.status.state=0";}}}i:4;a:2:{s:8:"sphinxql";s:19:"TRUNCATE rtindex pq";s:14:"total_affected";i:0;}i:5;a:2:{s:8:"sphinxql";s:88:"INSERT INTO pq (query, filters) VALUES ('', 'json_data.text.status.favorited=\'false\'')";s:14:"total_affected";i:1;}i:6;a:2:{s:8:"sphinxql";s:76:"INSERT INTO pq (query, filters) VALUES ('', 'json_data.text.status.state=0')";s:14:"total_affected";i:1;}i:7;a:3:{s:8:"sphinxql";s:113:"CALL PQ ('pq', ('{"id":21,"json_data":{"text":{"status":{"state":0}}}}'), 1 as docs, 1 as query, 'id' as docs_id)";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:5:{s:2:"id";s:13:"1677721600004";s:9:"documents";s:2:"21";s:5:"query";s:0:"";s:4:"tags";s:0:"";s:7:"filters";s:29:"json_data.text.status.state=0";}}}i:8;a:2:{s:8:"sphinxql";s:19:"TRUNCATE rtindex pq";s:14:"total_affected";i:0;}i:9;a:2:{s:8:"sphinxql";s:88:"INSERT INTO pq (query, filters) VALUES ('', 'json_data.text.status.favorited=\'false\'')";s:14:"total_affected";i:1;}i:10;a:2:{s:8:"sphinxql";s:87:"INSERT INTO pq (query, filters) VALUES ('', 'json_data.text.status.staff=\'got some\'')";s:14:"total_affected";i:1;}i:11;a:2:{s:8:"sphinxql";s:76:"INSERT INTO pq (query, filters) VALUES ('', 'json_data.text.status.state=0')";s:14:"total_affected";i:1;}i:12;a:3:{s:8:"sphinxql";s:113:"CALL PQ ('pq', ('{"id":21,"json_data":{"text":{"status":{"state":0}}}}'), 1 as docs, 1 as query, 'id' as docs_id)";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:5:{s:2:"id";s:13:"1677721600007";s:9:"documents";s:2:"21";s:5:"query";s:0:"";s:4:"tags";s:0:"";s:7:"filters";s:29:"json_data.text.status.state=0";}}}i:13;a:2:{s:8:"sphinxql";s:19:"TRUNCATE rtindex pq";s:14:"total_affected";i:0;}i:14;a:2:{s:8:"sphinxql";s:80:"INSERT INTO pq (query, filters) VALUES ('test', 'json_data.text.status.state=0')";s:14:"total_affected";i:1;}i:15;a:2:{s:8:"sphinxql";s:92:"INSERT INTO pq (query, filters) VALUES ('test', 'json_data.text.status.favorited=\'false\'')";s:14:"total_affected";i:1;}i:16;a:3:{s:8:"sphinxql";s:132:"CALL PQ ('pq', ('{"id":21,"json_data":{"text":{"status":{"state":0}}}, "title":"test me"}'), 1 as docs, 1 as query, 'id' as docs_id)";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:5:{s:2:"id";s:13:"1677721600008";s:9:"documents";s:2:"21";s:5:"query";s:4:"test";s:4:"tags";s:0:"";s:7:"filters";s:29:"json_data.text.status.state=0";}}}i:17;a:2:{s:8:"sphinxql";s:19:"TRUNCATE rtindex pq";s:14:"total_affected";i:0;}i:18;a:2:{s:8:"sphinxql";s:92:"INSERT INTO pq (query, filters) VALUES ('test', 'json_data.text.status.favorited=\'false\'')";s:14:"total_affected";i:1;}i:19;a:2:{s:8:"sphinxql";s:80:"INSERT INTO pq (query, filters) VALUES ('test', 'json_data.text.status.state=0')";s:14:"total_affected";i:1;}i:20;a:3:{s:8:"sphinxql";s:132:"CALL PQ ('pq', ('{"id":21,"json_data":{"text":{"status":{"state":0}}}, "title":"test me"}'), 1 as docs, 1 as query, 'id' as docs_id)";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:5:{s:2:"id";s:13:"1677721600011";s:9:"documents";s:2:"21";s:5:"query";s:4:"test";s:4:"tags";s:0:"";s:7:"filters";s:29:"json_data.text.status.state=0";}}}i:21;a:2:{s:8:"sphinxql";s:19:"TRUNCATE rtindex pq";s:14:"total_affected";i:0;}i:22;a:2:{s:8:"sphinxql";s:92:"INSERT INTO pq (query, filters) VALUES ('test', 'json_data.text.status.favorited=\'false\'')";s:14:"total_affected";i:1;}i:23;a:2:{s:8:"sphinxql";s:91:"INSERT INTO pq (query, filters) VALUES ('test', 'json_data.text.status.staff=\'got some\'')";s:14:"total_affected";i:1;}i:24;a:2:{s:8:"sphinxql";s:80:"INSERT INTO pq (query, filters) VALUES ('test', 'json_data.text.status.state=0')";s:14:"total_affected";i:1;}i:25;a:3:{s:8:"sphinxql";s:132:"CALL PQ ('pq', ('{"id":21,"json_data":{"text":{"status":{"state":0}}}, "title":"test me"}'), 1 as docs, 1 as query, 'id' as docs_id)";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:5:{s:2:"id";s:13:"1677721600014";s:9:"documents";s:2:"21";s:5:"query";s:4:"test";s:4:"tags";s:0:"";s:7:"filters";s:29:"json_data.text.status.state=0";}}}i:26;a:2:{s:8:"sphinxql";s:43:"INSERT INTO pq1 (query) VALUES ('@title c')";s:14:"total_affected";i:1;}i:27;a:2:{s:8:"sphinxql";s:76:"CALL PQ('pq1', ('{\"title\":\"a\",\"content\":\"c\"}'),1 as docs,1 as query)";s:10:"total_rows";i:0;}i:28;a:2:{s:8:"sphinxql";s:60:"CALL PQ('pq1', ('{\"content\":\"c\"}'),1 as docs,1 as query)";s:10:"total_rows";i:0;}i:29;a:3:{s:8:"sphinxql";s:58:"CALL PQ('pq1', ('{\"title\":\"c\"}'),1 as docs,1 as query)";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:5:{s:2:"id";s:13:"1677721600015";s:9:"documents";s:1:"1";s:5:"query";s:8:"@title c";s:4:"tags";s:0:"";s:7:"filters";s:0:"";}}}i:30;a:2:{s:8:"sphinxql";s:51:"INSERT INTO pq2 (query) VALUES ('abc SENTENCE def')";s:14:"total_affected";i:1;}i:31;a:2:{s:8:"sphinxql";s:77:"CALL PQ('pq2', 'The abc? Def or not.', 0 as docs_json, 1 as query, 1 as docs)";s:10:"total_rows";i:0;}i:32;a:3:{s:8:"sphinxql";s:79:"CALL PQ('pq2', 'The abc or def is not.', 0 as docs_json, 1 as query, 1 as docs)";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:5:{s:2:"id";s:13:"1677721600016";s:9:"documents";s:1:"1";s:5:"query";s:16:"abc SENTENCE def";s:4:"tags";s:0:"";s:7:"filters";s:0:"";}}}i:33;a:2:{s:8:"sphinxql";s:65:"CALL PQ('pq2', 'abc? Def', 0 as docs_json, 1 as query, 1 as docs)";s:10:"total_rows";i:0;}i:34;a:2:{s:8:"sphinxql";s:100:"CALL PQ ('pq', ('{"id":21,"json_data":\"{\\"text\\":0}\"}'), 1 as docs, 1 as query, 'id' as docs_id)";s:10:"total_rows";i:0;}i:35;a:3:{s:8:"sphinxql";s:13:"SHOW WARNINGS";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:3:{s:5:"Level";s:7:"warning";s:4:"Code";s:4:"1000";s:7:"Message";s:59:"JSON item (json_data) should be object or array, got=STRING";}}}}}
@@ -96,6 +96,11 @@ index pq2
<sphinxql>CALL PQ('pq2', 'The abc? Def or not.', 0 as docs_json, 1 as query, 1 as docs)</sphinxql>
<sphinxql>CALL PQ('pq2', 'The abc or def is not.', 0 as docs_json, 1 as query, 1 as docs)</sphinxql>
<sphinxql>CALL PQ('pq2', 'abc? Def', 0 as docs_json, 1 as query, 1 as docs)</sphinxql>

<!-- regression - daemon hung on recursive JSON attribute encoded as string -->
<sphinxql>CALL PQ ('pq', ('{"id":21,"json_data":\"{\\"text\\":0}\"}'), 1 as docs, 1 as query, 'id' as docs_id)</sphinxql>
<sphinxql>SHOW WARNINGS</sphinxql>

</sphqueries>

</test>

0 comments on commit 535589b

Please sign in to comment.
You can’t perform that action at this time.