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); }