Explorar o código

fixed 32-bit id ranges vs 64-bit daemon

git-svn-id: svn://svn.sphinxsearch.com/sphinx/trunk@662 406a0c4d-033a-0410-8de8-e80135713968
shodan %!s(int64=19) %!d(string=hai) anos
pai
achega
ded8150724
Modificáronse 4 ficheiros con 11 adicións e 5 borrados
  1. 3 3
      api/sphinxapi.php
  2. 1 1
      src/search.cpp
  3. 6 0
      src/searchd.cpp
  4. 1 1
      src/sphinxstd.h

+ 3 - 3
api/sphinxapi.php

@@ -70,8 +70,8 @@ class SphinxClient
 	var $_weights;		///< per-field weights (default is 1 for all fields)
 	var $_sort;			///< match sorting mode (default is SPH_SORT_RELEVANCE)
 	var $_sortby;		///< attribute to sort by (defualt is "")
-	var $_min_id;		///< min ID to match (default is 0)
-	var $_max_id;		///< max ID to match (default is UINT_MAX)
+	var $_min_id;		///< min ID to match (default is 0, which means no limit)
+	var $_max_id;		///< max ID to match (default is 0, which means no limit)
 	var $_filters;		///< search filters
 	var $_groupby;		///< group-by attribute name
 	var $_groupfunc;	///< group-by function (to pre-process group-by attribute value with)
@@ -101,7 +101,7 @@ class SphinxClient
 		$this->_sort		= SPH_SORT_RELEVANCE;
 		$this->_sortby		= "";
 		$this->_min_id		= 0;
-		$this->_max_id		= 0xFFFFFFFF;
+		$this->_max_id		= 0;
 		$this->_filters		= array ();
 		$this->_groupby		= "";
 		$this->_groupfunc	= SPH_GROUPBY_DAY;

+ 1 - 1
src/search.cpp

@@ -331,7 +331,7 @@ int main ( int argc, char ** argv )
 			for ( int i=iStart; i<iMaxIndex; i++ )
 			{
 				CSphMatch & tMatch = pResult->m_dMatches[i];
-				fprintf ( stdout, "%d. document=%u, weight=%d", 1+i, tMatch.m_iDocID, tMatch.m_iWeight );
+				fprintf ( stdout, "%d. document=" DOCID_FMT ", weight=%d", 1+i, tMatch.m_iDocID, tMatch.m_iWeight );
 
 				if ( tMatch.m_pAttrs )
 					ARRAY_FOREACH ( j, pResult->m_tSchema.m_dAttrs )

+ 6 - 0
src/searchd.cpp

@@ -2278,6 +2278,12 @@ void HandleCommandSearch ( int iSock, int iVer, InputBuffer_c & tReq )
 		tQuery.m_iMaxID		= tReq.GetDword ();
 	}
 
+	if ( iVer<0x108 && tQuery.m_iMaxID==0xffffffffUL )
+		tQuery.m_iMaxID = 0; // fixup older clients which send 32-bit UINT_MAX by default
+
+	if ( tQuery.m_iMaxID==0 )
+		tQuery.m_iMaxID = DOCID_MAX;
+
 	// upto v.1.1
 	if ( iVer<=0x101 )
 	{

+ 1 - 1
src/sphinxstd.h

@@ -68,7 +68,7 @@ typedef __int64 int64_t;
 typedef unsigned __int64 uint64_t;
 #define U64C(v) v ## UI64
 #define I64C(v) v ## I64
-#define U64FMT "%UI64d"
+#define U64FMT "%I64d"
 #define I64FMT "%I64d"
 #else // !defined(_MSC_VER)
 typedef long long int64_t;