Commit 5a6ff7f7 authored by Jeremy Mikola's avatar Jeremy Mikola

Use wire protocol version constants for feature detection

This removes some copypasta from existing Database and Collection code.
parent bca7df7f
......@@ -309,10 +309,7 @@ class Collection
$readPreference = new ReadPreference(ReadPreference::RP_PRIMARY);
$server = $this->manager->selectServer($readPreference);
$serverInfo = $server->getInfo();
$maxWireVersion = isset($serverInfo['maxWireVersion']) ? $serverInfo['maxWireVersion'] : 0;
return ($maxWireVersion >= 2)
return (FeatureDetection::isSupported($server, FeatureDetection::API_CREATEINDEXES_CMD))
? $this->createIndexesCommand($server, $indexes)
: $this->createIndexesLegacy($server, $indexes);
}
......@@ -1019,10 +1016,7 @@ class Collection
$readPreference = new ReadPreference(ReadPreference::RP_PRIMARY);
$server = $this->manager->selectServer($readPreference);
$serverInfo = $server->getInfo();
$maxWireVersion = isset($serverInfo['maxWireVersion']) ? $serverInfo['maxWireVersion'] : 0;
return ($maxWireVersion >= 3)
return (FeatureDetection::isSupported($server, FeatureDetection::API_LISTINDEXES_CMD))
? $this->listIndexesCommand($server)
: $this->listIndexesLegacy($server);
}
......
......@@ -101,10 +101,7 @@ class Database
$readPreference = new ReadPreference(ReadPreference::RP_PRIMARY);
$server = $this->manager->selectServer($readPreference);
$serverInfo = $server->getInfo();
$maxWireVersion = isset($serverInfo['maxWireVersion']) ? $serverInfo['maxWireVersion'] : 0;
return ($maxWireVersion >= 3)
return (FeatureDetection::isSupported($server, FeatureDetection::API_LISTCOLLECTIONS_CMD))
? $this->listCollectionsCommand($server, $options)
: $this->listCollectionsLegacy($server, $options);
}
......
<?php
namespace MongoDB;
use MongoDB\Driver\Server;
/**
* Utility class for detecting features based on wire protocol versions.
*
* @internal
*/
class FeatureDetection
{
const API_LISTCOLLECTIONS_CMD = 3;
const API_LISTINDEXES_CMD = 3;
const API_CREATEINDEXES_CMD = 2;
/**
* Return whether the server supports a particular feature.
*
* @param Server $server Server to check
* @param integer $feature Feature constant (i.e. wire protocol version)
* @return boolean
*/
static public function isSupported(Server $server, $feature)
{
$info = $server->getInfo();
$maxWireVersion = isset($info['maxWireVersion']) ? (integer) $info['maxWireVersion'] : 0;
$minWireVersion = isset($info['minWireVersion']) ? (integer) $info['minWireVersion'] : 0;
return ($minWireVersion <= $feature && $maxWireVersion >= $feature);
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment