public function queryTablesAsync($options = null)
    {
        $method      = Resources::HTTP_GET;
        $headers     = array();
        $postParams  = array();
        $queryParams = array();
        $path        = 'Tables';

        if (is_null($options)) {
            $options = new QueryTablesOptions();
        } elseif (is_string($options)) {
            $prefix  = $options;
            $options = new QueryTablesOptions();
            $options->setPrefix($prefix);
        } elseif ($options instanceof Filter) {
            $filter  = $options;
            $options = new QueryTablesOptions();
            $options->setFilter($filter);
        }

        $query   = $options->getQuery();
        $next    = $options->getNextTableName();
        $prefix  = $options->getPrefix();

        if (!empty($prefix)) {
            // Append Max char to end '{' is 1 + 'z' in AsciiTable ==> upperBound
            // is prefix + '{'
            $prefixFilter = Filter::applyAnd(
                Filter::applyGe(
                    Filter::applyPropertyName('TableName'),
                    Filter::applyConstant($prefix, EdmType::STRING)
                ),
                Filter::applyLe(
                    Filter::applyPropertyName('TableName'),
                    Filter::applyConstant($prefix . '{', EdmType::STRING)
                )
            );

            if (is_null($query)) {
                $query = new Query();
            }

            if (is_null($query->getFilter())) {
                // use the prefix filter if the query filter is null
                $query->setFilter($prefixFilter);
            } else {
                // combine and use the prefix filter if the query filter exists
                $combinedFilter = Filter::applyAnd(
                    $query->getFilter(),
                    $prefixFilter
                );
                $query->setFilter($combinedFilter);
            }
        }

        $queryParams = $this->addOptionalQuery($queryParams, $query);

        $this->addOptionalQueryParam(
            $queryParams,
            Resources::QP_NEXT_TABLE_NAME,
            $next
        );
        $this->addOptionalHeader(
            $headers,
            Resources::ACCEPT_HEADER,
            $options->getAccept()
        );

        // One can specify the NextTableName option to get table entities starting
        // from the specified name. However, there appears to be an issue in the
        // Azure Table service where this does not engage on the server unless
        // $filter appears in the URL. The current behavior is to just ignore the
        // NextTableName options, which is not expected or easily detectable.
        if (array_key_exists(Resources::QP_NEXT_TABLE_NAME, $queryParams)
            && !array_key_exists(Resources::QP_FILTER, $queryParams)
        ) {
            $queryParams[Resources::QP_FILTER] = Resources::EMPTY_STRING;
        }

        $odataSerializer = $this->odataSerializer;

        return $this->sendAsync(
            $method,
            $headers,
            $queryParams,
            $postParams,
            $path,
            Resources::STATUS_OK,
            Resources::EMPTY_STRING,
            $options
        )->then(function ($response) use ($odataSerializer) {
            $tables = $odataSerializer->parseTableEntries($response->getBody());
            return QueryTablesResult::create(
                HttpFormatter::formatHeaders($response->getHeaders()),
                $tables
            );
        }, null);
    }
public function queryTablesAsync($options = null)
    {
        $method      = Resources::HTTP_GET;
        $headers     = array();
        $postParams  = array();
        $queryParams = array();
        $path        = 'Tables';

        if (is_null($options)) {
            $options = new QueryTablesOptions();
        } elseif (is_string($options)) {
            $prefix  = $options;
            $options = new QueryTablesOptions();
            $options->setPrefix($prefix);
        } elseif ($options instanceof Filter) {
            $filter  = $options;
            $options = new QueryTablesOptions();
            $options->setFilter($filter);
        }

        $query   = $options->getQuery();
        $next    = $options->getNextTableName();
        $prefix  = $options->getPrefix();

        if (!empty($prefix)) {
            // Append Max char to end '{' is 1 + 'z' in AsciiTable ==> upperBound
            // is prefix + '{'
            $prefixFilter = Filter::applyAnd(
                Filter::applyGe(
                    Filter::applyPropertyName('TableName'),
                    Filter::applyConstant($prefix, EdmType::STRING)
                ),
                Filter::applyLe(
                    Filter::applyPropertyName('TableName'),
                    Filter::applyConstant($prefix . '{', EdmType::STRING)
                )
            );

            if (is_null($query)) {
                $query = new Query();
            }

            if (is_null($query->getFilter())) {
                // use the prefix filter if the query filter is null
                $query->setFilter($prefixFilter);
            } else {
                // combine and use the prefix filter if the query filter exists
                $combinedFilter = Filter::applyAnd(
                    $query->getFilter(),
                    $prefixFilter
                );
                $query->setFilter($combinedFilter);
            }
        }

        $queryParams = $this->addOptionalQuery($queryParams, $query);

        $this->addOptionalQueryParam(
            $queryParams,
            Resources::QP_NEXT_TABLE_NAME,
            $next
        );
        $this->addOptionalHeader(
            $headers,
            Resources::ACCEPT_HEADER,
            $options->getAccept()
        );

        // One can specify the NextTableName option to get table entities starting
        // from the specified name. However, there appears to be an issue in the
        // Azure Table service where this does not engage on the server unless
        // $filter appears in the URL. The current behavior is to just ignore the
        // NextTableName options, which is not expected or easily detectable.
        if (array_key_exists(Resources::QP_NEXT_TABLE_NAME, $queryParams)
            && !array_key_exists(Resources::QP_FILTER, $queryParams)
        ) {
            $queryParams[Resources::QP_FILTER] = Resources::EMPTY_STRING;
        }

        $odataSerializer = $this->odataSerializer;

        return $this->sendAsync(
            $method,
            $headers,
            $queryParams,
            $postParams,
            $path,
            Resources::STATUS_OK,
            Resources::EMPTY_STRING,
            $options
        )->then(function ($response) use ($odataSerializer) {
            $tables = $odataSerializer->parseTableEntries($response->getBody());
            return QueryTablesResult::create(
                HttpFormatter::formatHeaders($response->getHeaders()),
                $tables
            );
        }, null);
    }
public function queryTablesAsync ( $ options = null ) { $ method = Resources :: HTTP_GET ; $ headers = array ( ) ; $ postParams = array ( ) ; $ queryParams = array ( ) ; $ path = 'Tables' ; if ( is_null ( $ options ) ) { $ options = new QueryTablesOptions ( ) ; } elseif ( is_string ( $ options ) ) { $ prefix = $ options ; $ options = new QueryTablesOptions ( ) ; $ options -> setPrefix ( $ prefix ) ; } elseif ( $ options instanceof Filter ) { $ filter = $ options ; $ options = new QueryTablesOptions ( ) ; $ options -> setFilter ( $ filter ) ; } $ query = $ options -> getQuery ( ) ; $ next = $ options -> getNextTableName ( ) ; $ prefix = $ options -> getPrefix ( ) ; if ( ! empty ( $ prefix ) ) { // Append Max char to end '{' is 1 + 'z' in AsciiTable ==> upperBound // is prefix + '{' $ prefixFilter = Filter :: applyAnd ( Filter :: applyGe ( Filter :: applyPropertyName ( 'TableName' ) , Filter :: applyConstant ( $ prefix , EdmType :: STRING ) ) , Filter :: applyLe ( Filter :: applyPropertyName ( 'TableName' ) , Filter :: applyConstant ( $ prefix . '{' , EdmType :: STRING ) ) ) ; if ( is_null ( $ query ) ) { $ query = new Query ( ) ; } if ( is_null ( $ query -> getFilter ( ) ) ) { // use the prefix filter if the query filter is null $ query -> setFilter ( $ prefixFilter ) ; } else { // combine and use the prefix filter if the query filter exists $ combinedFilter = Filter :: applyAnd ( $ query -> getFilter ( ) , $ prefixFilter ) ; $ query -> setFilter ( $ combinedFilter ) ; } } $ queryParams = $ this -> addOptionalQuery ( $ queryParams , $ query ) ; $ this -> addOptionalQueryParam ( $ queryParams , Resources :: QP_NEXT_TABLE_NAME , $ next ) ; $ this -> addOptionalHeader ( $ headers , Resources :: ACCEPT_HEADER , $ options -> getAccept ( ) ) ; // One can specify the NextTableName option to get table entities starting // from the specified name. However, there appears to be an issue in the // Azure Table service where this does not engage on the server unless // $filter appears in the URL. The current behavior is to just ignore the // NextTableName options, which is not expected or easily detectable. if ( array_key_exists ( Resources :: QP_NEXT_TABLE_NAME , $ queryParams ) && ! array_key_exists ( Resources :: QP_FILTER , $ queryParams ) ) { $ queryParams [ Resources :: QP_FILTER ] = Resources :: EMPTY_STRING ; } $ odataSerializer = $ this -> odataSerializer ; return $ this -> sendAsync ( $ method , $ headers , $ queryParams , $ postParams , $ path , Resources :: STATUS_OK , Resources :: EMPTY_STRING , $ options ) -> then ( function ( $ response ) use ( $ odataSerializer ) { $ tables = $ odataSerializer -> parseTableEntries ( $ response -> getBody ( ) ) ; return QueryTablesResult :: create ( HttpFormatter :: formatHeaders ( $ response -> getHeaders ( ) ) , $ tables ) ; } , null ) ; }
Creates promise to query the tables in the given storage account.

@param QueryTablesOptions|string|Filter $options Could be optional
parameters, table prefix
or filter to apply.

@return \GuzzleHttp\Promise\PromiseInterface

@see https://docs.microsoft.com/en-us/rest/api/storageservices/query-tables
Creates promise to query the tables in the given storage account .