Skip to content

Commit 6d8a633

Browse files
authored
Update tableby.go
Add QueryBy wrapper to skip holes; rename original to QueryByHoles This change clarifies the API behavior around holes caused by deleted rows. The new `QueryBy` provides a user-friendly multi-clause lookup that filters out nil or empty rows, ensuring consistent results for clients. The original implementation is retained as `QueryByHoles` for advanced use cases where raw bucket contents (including holes) are needed. No changes were made to `DeleteBy` as deletion semantics remain unaffected.
1 parent 9959525 commit 6d8a633

File tree

1 file changed

+41
-21
lines changed

1 file changed

+41
-21
lines changed

tableby.go

Lines changed: 41 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,53 @@
11
package table
22

3-
// QueryBy finds all rows matching every (col→val).
3+
// QueryByHoles finds all rows matching every (col→val), including any holes.
4+
// Panics if filters is nil or empty.
5+
// Returns nil for no matches.
6+
func (t *Table) QueryByHoles(filters map[int]string) [][]string {
7+
if filters == nil || len(filters) == 0 {
8+
panic("QueryByHoles: filters must not be nil or empty")
9+
}
10+
var result [][]string
11+
for _, buck := range t.b {
12+
rows := buck.getBy(filters)
13+
if rows != nil {
14+
result = append(result, rows...)
15+
}
16+
}
17+
if len(result) == 0 {
18+
return nil
19+
}
20+
return result
21+
}
22+
23+
// QueryBy finds all rows matching every (col→val), skipping any holes.
424
// Panics if filters is nil or empty.
525
// Returns nil for no matches.
626
func (t *Table) QueryBy(filters map[int]string) [][]string {
7-
if filters == nil || len(filters) == 0 {
8-
panic("QueryBy: filters must not be nil or empty")
9-
}
10-
var result [][]string
11-
for _, buck := range t.b {
12-
rows := buck.getBy(filters)
13-
if rows != nil {
14-
result = append(result, rows...)
15-
}
16-
}
17-
if len(result) == 0 {
18-
return nil
19-
}
20-
return result
27+
raw := t.QueryByHoles(filters)
28+
if raw == nil {
29+
return nil
30+
}
31+
var filtered [][]string
32+
for _, row := range raw {
33+
if row != nil && len(row) > 0 {
34+
filtered = append(filtered, row)
35+
}
36+
}
37+
if len(filtered) == 0 {
38+
return nil
39+
}
40+
return filtered
2141
}
2242

2343
// DeleteBy deletes all rows matching every (col→val).
2444
// Panics if filters is nil or empty.
2545
func (t *Table) DeleteBy(filters map[int]string) {
26-
if filters == nil || len(filters) == 0 {
27-
panic("DeleteBy: filters must not be nil or empty")
28-
}
46+
if filters == nil || len(filters) == 0 {
47+
panic("DeleteBy: filters must not be nil or empty")
48+
}
2949

30-
for i := range t.b {
31-
t.b[i].removeBy(filters)
32-
}
50+
for i := range t.b {
51+
t.b[i].removeBy(filters)
52+
}
3353
}

0 commit comments

Comments
 (0)