You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
91 lines
3.4 KiB
91 lines
3.4 KiB
//
|
|
// DISCLAIMER
|
|
//
|
|
// Copyright 2017 ArangoDB GmbH, Cologne, Germany
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
//
|
|
// Copyright holder is ArangoDB GmbH, Cologne, Germany
|
|
//
|
|
// Author Ewout Prangsma
|
|
//
|
|
|
|
package driver
|
|
|
|
import (
|
|
"context"
|
|
"io"
|
|
"time"
|
|
)
|
|
|
|
// QueryExtra holds Query extra information
|
|
type QueryExtra interface {
|
|
// GetStatistics returns Query statistics
|
|
GetStatistics() QueryStatistics
|
|
|
|
// GetProfileRaw returns raw profile information in json
|
|
GetProfileRaw() ([]byte, bool, error)
|
|
|
|
// PlanRaw returns raw plan
|
|
GetPlanRaw() ([]byte, bool, error)
|
|
}
|
|
|
|
// Statistics returned with the query cursor
|
|
type QueryStatistics interface {
|
|
// the total number of data-modification operations successfully executed.
|
|
WritesExecuted() int64
|
|
// The total number of data-modification operations that were unsuccessful
|
|
WritesIgnored() int64
|
|
// The total number of documents iterated over when scanning a collection without an index.
|
|
ScannedFull() int64
|
|
// The total number of documents iterated over when scanning a collection using an index.
|
|
ScannedIndex() int64
|
|
// the total number of documents that were removed after executing a filter condition in a FilterNode
|
|
Filtered() int64
|
|
// Returns the numer of results before the last LIMIT in the query was applied.
|
|
// A valid return value is only available when the has been created with a context that was
|
|
// prepared with `WithFullCount`. Additionally this will also not return a valid value if
|
|
// the context was prepared with `WithStream`.
|
|
FullCount() int64
|
|
// Execution time of the query (wall-clock time). value will be set from the outside
|
|
ExecutionTime() time.Duration
|
|
}
|
|
|
|
// Cursor is returned from a query, used to iterate over a list of documents.
|
|
// Note that a Cursor must always be closed to avoid holding on to resources in the server while they are no longer needed.
|
|
type Cursor interface {
|
|
io.Closer
|
|
|
|
// HasMore returns true if the next call to ReadDocument does not return a NoMoreDocuments error.
|
|
HasMore() bool
|
|
|
|
// ReadDocument reads the next document from the cursor.
|
|
// The document data is stored into result, the document meta data is returned.
|
|
// If the cursor has no more documents, a NoMoreDocuments error is returned.
|
|
// Note: If the query (resulting in this cursor) does not return documents,
|
|
// then the returned DocumentMeta will be empty.
|
|
ReadDocument(ctx context.Context, result interface{}) (DocumentMeta, error)
|
|
|
|
// Count returns the total number of result documents available.
|
|
// A valid return value is only available when the cursor has been created with a context that was
|
|
// prepared with `WithQueryCount` and not with `WithQueryStream`.
|
|
Count() int64
|
|
|
|
// Statistics returns the query execution statistics for this cursor.
|
|
// This might not be valid if the cursor has been created with a context that was
|
|
// prepared with `WithQueryStream`
|
|
Statistics() QueryStatistics
|
|
|
|
// Extra returns the query extras for this cursor.
|
|
Extra() QueryExtra
|
|
}
|
|
|