Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ go 1.26.0
require (
charm.land/bubbletea/v2 v2.0.7
charm.land/fang/v2 v2.0.1
charm.land/lipgloss/v2 v2.0.3
charm.land/lipgloss/v2 v2.0.4
github.com/charmbracelet/x/term v0.2.2
github.com/gofrs/flock v0.13.0
github.com/google/go-github/v88 v88.0.0
Expand All @@ -14,7 +14,7 @@ require (
github.com/rivo/uniseg v0.4.7
github.com/spf13/cobra v1.10.2
github.com/stretchr/testify v1.11.1
go.starlark.net v0.0.0-20260522144826-ec58d4b459e2
go.starlark.net v0.0.0-20260613233743-8ba36ccb83fb
go.uber.org/mock v0.6.0
gopkg.in/yaml.v3 v3.0.1
)
Expand Down Expand Up @@ -52,7 +52,7 @@ require (
require (
github.com/RoaringBitmap/roaring/v2 v2.18.2 // indirect
github.com/bits-and-blooms/bitset v1.24.4 // indirect
github.com/dal-go/dalgo v0.46.1
github.com/dal-go/dalgo v0.62.2
github.com/mschoch/smat v0.2.0 // indirect
github.com/strongo/random v0.0.1 // indirect
)
6 changes: 6 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@ charm.land/fang/v2 v2.0.1 h1:zQCM8JQJ1JnQX/66B5jlCYBUxL2as5JXQZ2KJ6EL0mY=
charm.land/fang/v2 v2.0.1/go.mod h1:S1GmkpcvK+OB5w9caywUnJcsMew45Ot8FXqoz8ALrII=
charm.land/lipgloss/v2 v2.0.3 h1:yM2zJ4Cf5Y51b7RHIwioil4ApI/aypFXXVHSwlM6RzU=
charm.land/lipgloss/v2 v2.0.3/go.mod h1:7myLU9iG/3xluAWzpY/fSxYYHCgoKTie7laxk6ATwXA=
charm.land/lipgloss/v2 v2.0.4 h1:lcPeVtcp23SNra7lHy8iYE4UC2aIipVQ47sbGyyxR5Q=
charm.land/lipgloss/v2 v2.0.4/go.mod h1:0653x8epbZSzdDfO/XPS1a/uYPOBeSsCssOpJOqDzik=
github.com/RoaringBitmap/roaring/v2 v2.18.2 h1:oPq3Cgx//iDuJQVp6xSInAKW34J9CEwE5GmLI2z+Eic=
github.com/RoaringBitmap/roaring/v2 v2.18.2/go.mod h1:eq4wdNXxtJIS/oikeCzdX1rBzek7ANzbth041hrU8Q4=
github.com/aymanbagabas/go-udiff v0.4.1 h1:OEIrQ8maEeDBXQDoGCbbTTXYJMYRCRO1fnodZ12Gv5o=
Expand Down Expand Up @@ -40,6 +42,8 @@ github.com/dal-go/dalgo v0.46.0 h1:j/FWUr6Gawm59pxi6cgFoGKeg+D7iy1FPww0LgbzliA=
github.com/dal-go/dalgo v0.46.0/go.mod h1:HHMUuCMutAlYEblDTVws7jeZs56jvOCbOuxVs6I01tE=
github.com/dal-go/dalgo v0.46.1 h1:evVl54N6bU2L4bHhNlnAzoBFgugZSqoPcLB6LiflcjM=
github.com/dal-go/dalgo v0.46.1/go.mod h1:HHMUuCMutAlYEblDTVws7jeZs56jvOCbOuxVs6I01tE=
github.com/dal-go/dalgo v0.62.2 h1:rA+k9QCgS0UnZV0oonvDtA+QoM3Wj1doVBWo1higBTw=
github.com/dal-go/dalgo v0.62.2/go.mod h1:wwaibB/UlzwAY1r9KZw5JCis+aroIwAu5WQJ/aoWZiU=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/gofrs/flock v0.13.0 h1:95JolYOvGMqeH31+FC7D2+uULf6mG61mEZ/A8dRYMzw=
Expand Down Expand Up @@ -99,6 +103,8 @@ github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e h1:JVG44RsyaB9T2KIHavM
github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e/go.mod h1:RbqR21r5mrJuqunuUZ/Dhy/avygyECGrLceyNeo4LiM=
go.starlark.net v0.0.0-20260522144826-ec58d4b459e2 h1:3cIeOhZXLdLHnBoLyKdJu4SEAEuM/av/VFzB5twLo8k=
go.starlark.net v0.0.0-20260522144826-ec58d4b459e2/go.mod h1:Iue6g6iirlfLoVi/DYCi5/x0h/bAOuWF3dULTKpt2Vo=
go.starlark.net v0.0.0-20260613233743-8ba36ccb83fb h1:NGUBN0jbH0IR3msRslALnoxlySm+6YvVKvVDjdDJrlA=
go.starlark.net v0.0.0-20260613233743-8ba36ccb83fb/go.mod h1:Iue6g6iirlfLoVi/DYCi5/x0h/bAOuWF3dULTKpt2Vo=
go.uber.org/mock v0.6.0 h1:hyF9dfmbgIX5EfOdasqLsWD6xqpNZlXblLB/Dbnwv3Y=
go.uber.org/mock v0.6.0/go.mod h1:KiVJ4BqZJaMj4svdfmHM0AUx4NJYO8ZNpPnZn1Z+BBU=
go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg=
Expand Down
6 changes: 4 additions & 2 deletions pkg/dalgo2fsingitdb/coverage_gaps_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -363,7 +363,7 @@ func TestEvaluateComparison_Operators(t *testing.T) {
func TestEvaluateComparison_UnsupportedOperator(t *testing.T) {
t.Parallel()
c := dal.NewComparison(
dal.NewFieldRef("name"),
dal.NewFieldRef("", "name"),
"INVALID_OP",
dal.NewConstant("x"),
)
Expand Down Expand Up @@ -391,7 +391,7 @@ func TestEvaluateComparison_LeftExprError(t *testing.T) {
func TestEvaluateComparison_RightExprError(t *testing.T) {
t.Parallel()
c := dal.NewComparison(
dal.NewFieldRef("name"),
dal.NewFieldRef("", "name"),
dal.Equal,
unsupportedExpr{},
)
Expand Down Expand Up @@ -1330,6 +1330,7 @@ type nilFromQuery struct {

func (nilFromQuery) From() dal.FromSource { return nil }
func (nilFromQuery) Where() dal.Condition { return nil }
func (nilFromQuery) Having() dal.Condition { return nil }
func (nilFromQuery) GroupBy() []dal.Expression { return nil }
func (nilFromQuery) OrderBy() []dal.OrderExpression { return nil }
func (nilFromQuery) Columns() []dal.Column { return nil }
Expand Down Expand Up @@ -1487,6 +1488,7 @@ type nonCollectionRefFromQuery struct {

func (nonCollectionRefFromQuery) From() dal.FromSource { return wrappedFromSource{} }
func (nonCollectionRefFromQuery) Where() dal.Condition { return nil }
func (nonCollectionRefFromQuery) Having() dal.Condition { return nil }
func (nonCollectionRefFromQuery) GroupBy() []dal.Expression { return nil }
func (nonCollectionRefFromQuery) OrderBy() []dal.OrderExpression { return nil }
func (nonCollectionRefFromQuery) Columns() []dal.Column { return nil }
Expand Down
6 changes: 3 additions & 3 deletions pkg/dalgo2ingitdb/coverage_gaps_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -1320,7 +1320,7 @@ func TestEvaluateComparison_AllOperators(t *testing.T) {
}
for _, tc := range tests {
cmp := dal.Comparison{
Left: dal.NewFieldRef("v"),
Left: dal.NewFieldRef("", "v"),
Operator: tc.op,
Right: dal.Constant{Value: tc.rhs},
}
Expand All @@ -1339,7 +1339,7 @@ func TestEvaluateComparison_UnsupportedOperator(t *testing.T) {
t.Parallel()
data := map[string]any{"v": 1}
cmp := dal.Comparison{
Left: dal.NewFieldRef("v"),
Left: dal.NewFieldRef("", "v"),
Operator: dal.Operator("UNKNOWN"),
Right: dal.Constant{Value: 1},
}
Expand All @@ -1351,7 +1351,7 @@ func TestEvaluateComparison_UnsupportedOperator(t *testing.T) {

func TestResolveExpression_ID(t *testing.T) {
t.Parallel()
ref := dal.NewFieldRef("$id")
ref := dal.NewFieldRef("", "$id")
got, err := resolveExpression(ref, map[string]any{}, "my-key")
if err != nil {
t.Fatalf("resolveExpression $id: %v", err)
Expand Down
2 changes: 1 addition & 1 deletion pkg/dalgo2ingitdb/missing_coverage_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -504,7 +504,7 @@ func TestEvaluateComparison_LeftResolveError(t *testing.T) {
func TestEvaluateComparison_RightResolveError(t *testing.T) {
t.Parallel()
cmp := dal.Comparison{
Left: dal.NewFieldRef("v"),
Left: dal.NewFieldRef("", "v"),
Operator: dal.Equal,
Right: unsupportedExpr{},
}
Expand Down
21 changes: 21 additions & 0 deletions pkg/dalgo2ingitdb/query.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,10 @@ func executeQueryToRecordsReader(_ context.Context, r readonlyTx, query dal.Quer
// collectionFromQuery already validated that query is a StructuredQuery.
sq, _ := query.(dal.StructuredQuery)

if err = checkSupportedQueryShape(sq); err != nil {
return nil, err
}

records, err := readAllRecordsFromDisk(colDef)
if err != nil {
return nil, err
Expand All @@ -45,6 +49,23 @@ func executeQueryToRecordsReader(_ context.Context, r readonlyTx, query dal.Quer
return newSliceRecordsReader(records), nil
}

// checkSupportedQueryShape reports dal.ErrNotSupported for query shapes this
// driver does not implement: column projection (SelectColumns), GROUP BY
// aggregation, and HAVING. The driver supports SELECT * / SELECT keys-only with
// WHERE / ORDER BY / LIMIT; callers that need projection or aggregation are
// expected to handle dal.ErrNotSupported (the dalgo end2end suite skips on it).
func checkSupportedQueryShape(sq dal.StructuredQuery) error {
switch {
case len(sq.Columns()) > 0:
return fmt.Errorf("dalgo2ingitdb: column projection: %w", dal.ErrNotSupported)
case len(sq.GroupBy()) > 0:
return fmt.Errorf("dalgo2ingitdb: GROUP BY: %w", dal.ErrNotSupported)
case sq.Having() != nil:
return fmt.Errorf("dalgo2ingitdb: HAVING: %w", dal.ErrNotSupported)
}
return nil
}

// collectionFromQuery resolves the single collection a structured query reads
// from, validating the FROM clause and that the collection exists with a record
// file. Shared by the records-reader and recordset-reader query paths.
Expand Down
5 changes: 5 additions & 0 deletions pkg/dalgo2ingitdb/tx_readonly.go
Original file line number Diff line number Diff line change
Expand Up @@ -160,6 +160,11 @@ func (r readonlyTx) ExecuteQueryToRecordsetReader(_ context.Context, query dal.Q
if err != nil {
return nil, err
}
// collectionFromQuery already validated that query is a StructuredQuery.
sq, _ := query.(dal.StructuredQuery)
if err = checkSupportedQueryShape(sq); err != nil {
return nil, err
}
stored, err := readAllStoredRecords(colDef)
if err != nil {
return nil, err
Expand Down