Implement continuation tokens

This commit is contained in:
Pijus Kamandulis
2026-01-29 21:45:46 +02:00
parent cae6fda95c
commit d3d238fa98
7 changed files with 309 additions and 18 deletions

View File

@@ -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 {

View File

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