TRI_vector_pointer_t* TRI_GetCurrentRangesStatementWalkerAql (TRI_aql_statement_walker_t* const walker) {
    TRI_aql_scope_t* scope = TRI_GetCurrentScopeStatementWalkerAql(walker);

    assert(scope);

    return scope->_ranges;
}
void TRI_IgnoreCurrentLimitStatementWalkerAql (TRI_aql_statement_walker_t* const walker) {
  TRI_aql_scope_t* scope = TRI_GetCurrentScopeStatementWalkerAql(walker);

  assert(scope);
  if (scope->_limit._status == TRI_AQL_LIMIT_UNDEFINED) {
    scope->_limit._status = TRI_AQL_LIMIT_IGNORE;
    LOG_TRACE("setting limit status to ignorable");
  }
}
void TRI_RestrictCurrentLimitStatementWalkerAql (TRI_aql_statement_walker_t* const walker) {
  TRI_aql_scope_t* scope = TRI_GetCurrentScopeStatementWalkerAql(walker);

  assert(scope);
  if (scope->_limit._hasFilter) {
    scope->_limit._status = TRI_AQL_LIMIT_IGNORE;
    LOG_TRACE("limit given up because of additional filter");
  }
  else if (scope->_limit._status == TRI_AQL_LIMIT_UNDEFINED) {
    scope->_limit._hasFilter = true;
    LOG_TRACE("setting limit status to use-in-for-loop");
  }
}
void TRI_SetCurrentLimitStatementWalkerAql (TRI_aql_statement_walker_t* const walker,
                                            const int64_t offset,
                                            const int64_t limit) {
  TRI_aql_scope_t* scope = TRI_GetCurrentScopeStatementWalkerAql(walker);

  assert(scope);

  if (scope->_limit._status == TRI_AQL_LIMIT_UNDEFINED) {
    // never overwrite a previously picked up limit
    scope->_limit._limit   = limit;
    scope->_limit._offset  = offset;
    scope->_limit._status  = TRI_AQL_LIMIT_USE;
  }
}
void TRI_SetCurrentRangesStatementWalkerAql (TRI_aql_statement_walker_t* const walker,
        TRI_vector_pointer_t* ranges) {
    TRI_aql_scope_t* scope = TRI_GetCurrentScopeStatementWalkerAql(walker);

    assert(scope);

    if (ranges != NULL) { // ranges may be NULL
        TRI_vector_pointer_t* oldRanges = scope->_ranges;

        if (oldRanges != NULL) {
            // free old value
            TRI_FreeAccessesAql(oldRanges);
        }

        // set to new value
        scope->_ranges = ranges;
    }
}