private function getMetadata(XMLAMetadataRequest $metadataRequest, array $patternValues = array())
 {
     $context = new XMLAConnectionContext($this->xmlaConnection);
     $predicateList = array();
     $compiledPatterns = array();
     foreach ($patternValues as $key => $value) {
         $column = $metadataRequest->getColumn($key);
         if ($column === NULL) {
             throw new OLAPException("Metadata Request {$metadataRequest->getName()} does not support column {$key}");
         }
         if (empty($value)) {
             continue;
         }
         if ($value instanceof Wildcard) {
             $pattern = $value->getPattern();
             if (strstr($pattern, '%') === FALSE && strstr($pattern, '_') === FALSE) {
                 $compiledPatterns[$key] = $pattern;
             } else {
                 $predicateList[$key] = XMLAUtil::wildcardToRegexp(array($pattern));
             }
         } else {
             $compiledPatterns[$key] = $value;
         }
     }
     $requestString = $this->xmlaConnection->generateRequest($context, $metadataRequest, $compiledPatterns);
     $root = $this->xmlaConnection->executeMetadataRequest($requestString, $metadataRequest->isCachable());
     $rowList = array();
     foreach ($root->childNodes as $row) {
         if ($row->namespaceURI != 'urn:schemas-microsoft-com:xml-analysis:rowset') {
             continue;
         }
         $valueList = array();
         foreach ($predicateList as $key => $pattern) {
             $value = XMLAUtil::stringElement($row, $key);
             if (preg_match("#{$pattern}#", $value) == 0) {
                 continue 2;
             }
         }
         foreach ($metadataRequest->getColumns() as $column) {
             $valueList[] = XMLAUtil::stringElement($row, $column->xmlaName);
         }
         $rowList[] = $valueList;
     }
     $headerList = $metadataRequest->getColumnNames();
     // @todo return olap4jConnection.factory.newFixedResultSet(olap4jConnection, headerList, rowList);
     //return;
     return new ResultSet($headerList, $rowList);
 }