mirror of
https://github.com/pikami/cosmium.git
synced 2026-01-31 15:22:58 +00:00
Implement continuation tokens
This commit is contained in:
@@ -5,18 +5,46 @@ import (
|
||||
"github.com/pikami/cosmium/parsers"
|
||||
)
|
||||
|
||||
func ExecuteQuery(query parsers.SelectStmt, documents rowTypeIterator) []RowType {
|
||||
type ExecuteQueryResult struct {
|
||||
Rows []RowType
|
||||
HasMorePages bool
|
||||
}
|
||||
|
||||
func ExecuteQuery(
|
||||
query parsers.SelectStmt,
|
||||
documents rowTypeIterator,
|
||||
offset int,
|
||||
limit int,
|
||||
) ExecuteQueryResult {
|
||||
resultIter := executeQuery(query, &rowTypeToRowContextIterator{documents: documents, query: query})
|
||||
result := make([]RowType, 0)
|
||||
for {
|
||||
|
||||
result := &ExecuteQueryResult{
|
||||
Rows: make([]RowType, 0),
|
||||
HasMorePages: false,
|
||||
}
|
||||
|
||||
for i := 0; i < offset; i++ {
|
||||
_, status := resultIter.Next()
|
||||
if status != datastore.StatusOk {
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
for i := 0; i < limit; i++ {
|
||||
row, status := resultIter.Next()
|
||||
if status != datastore.StatusOk {
|
||||
break
|
||||
}
|
||||
|
||||
result = append(result, row)
|
||||
result.Rows = append(result.Rows, row)
|
||||
}
|
||||
return result
|
||||
|
||||
_, status := resultIter.Next()
|
||||
if status == datastore.StatusOk {
|
||||
result.HasMorePages = true
|
||||
}
|
||||
|
||||
return *result
|
||||
}
|
||||
|
||||
func executeQuery(query parsers.SelectStmt, documents rowIterator) rowTypeIterator {
|
||||
|
||||
@@ -38,10 +38,10 @@ func testQueryExecute(
|
||||
expectedData []memoryexecutor.RowType,
|
||||
) {
|
||||
iter := NewTestDocumentIterator(data)
|
||||
result := memoryexecutor.ExecuteQuery(query, iter)
|
||||
result := memoryexecutor.ExecuteQuery(query, iter, 0, 1000)
|
||||
|
||||
if !reflect.DeepEqual(result, expectedData) {
|
||||
t.Errorf("execution result does not match expected data.\nExpected: %+v\nGot: %+v", expectedData, result)
|
||||
if !reflect.DeepEqual(result.Rows, expectedData) {
|
||||
t.Errorf("execution result does not match expected data.\nExpected: %+v\nGot: %+v", expectedData, result.Rows)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user