Skip to content

Commit

Permalink
high amount of rows
Browse files Browse the repository at this point in the history
  • Loading branch information
chirst committed Jun 28, 2024
1 parent 4816865 commit a487c34
Show file tree
Hide file tree
Showing 3 changed files with 79 additions and 2 deletions.
3 changes: 1 addition & 2 deletions db/db_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ func TestExecute(t *testing.T) {
if createRes.Err != nil {
t.Fatal(createRes.Err.Error())
}
expectedTotal := 5000
expectedTotal := 100_000
for i := 0; i < expectedTotal; i += 1 {
insertSql := "INSERT INTO test (junk) VALUES ('asdf')"
insertRes := db.Execute(insertSql)
Expand All @@ -84,6 +84,5 @@ func TestExecute(t *testing.T) {
if gotT := len(selectRes.ResultRows) - 1; expectedTotal != gotT {
t.Fatalf("expected %d got %d", expectedTotal, gotT)
}

})
}
3 changes: 3 additions & 0 deletions kv/kv.go
Original file line number Diff line number Diff line change
Expand Up @@ -138,6 +138,7 @@ func (kv *KV) splitPage(page *pager.Page) (left, right *pager.Page) {
hasParent, _ := page.GetParentPageNumber()
_, parentLeftPageNumber := page.GetLeftPageNumber()
_, parentRightPageNumber := page.GetRightPageNumber()
parentType := page.GetType()
entries := page.GetEntries()
// If it is splitting the root page should make two new nodes so the
// root can keep the same page number. Otherwise will only need to split
Expand All @@ -148,9 +149,11 @@ func (kv *KV) splitPage(page *pager.Page) (left, right *pager.Page) {
}
leftEntries := entries[:len(entries)/2]
leftPage.SetEntries(leftEntries)
leftPage.SetType(parentType)
rightPage := kv.pager.NewPage()
rightEntries := entries[len(entries)/2:]
rightPage.SetEntries(rightEntries)
rightPage.SetType(parentType)
// Set relative left page's right page
if parentLeftPageNumber != 0 {
kv.pager.GetPage(parentLeftPageNumber).SetRightPageNumber(leftPage.GetNumber())
Expand Down
75 changes: 75 additions & 0 deletions kv/kv_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -58,4 +58,79 @@ func TestKv(t *testing.T) {
t.Errorf("expected value %v got %v", rv, res)
}
})

t.Run("test bulk insert and get", func(t *testing.T) {
kv, _ := New(true)
amount := 500_000
kv.BeginWriteTransaction()
for i := 1; i <= amount; i += 1 {
k, err := EncodeKey(i)
if err != nil {
t.Fatal(err.Error())
}
v, err := Encode([]any{i})
if err != nil {
t.Fatal(err.Error())
}
err = kv.Set(1, k, v)
if err != nil {
t.Fatal(err.Error())
}
}
kv.EndWriteTransaction()

midProbe := amount / 2
mpk, err := EncodeKey(midProbe)
if err != nil {
t.Fatal(err.Error())
}
mr, _, err := kv.Get(1, mpk)
if err != nil {
t.Fatal(err.Error())
}
mrv, err := Decode(mr)
if err != nil {
t.Fatal(err.Error())
}
mrvi := mrv[0].(int)
if mrvi != midProbe {
t.Fatalf("want mid to be %d got %d", midProbe, mrv)
}

leftProbe := 1
lpk, err := EncodeKey(leftProbe)
if err != nil {
t.Fatal(err.Error())
}
lr, _, err := kv.Get(1, lpk)
if err != nil {
t.Fatal(err.Error())
}
lrv, err := Decode(lr)
if err != nil {
t.Fatal(err.Error())
}
lrvi := lrv[0].(int)
if lrvi != leftProbe {
t.Fatalf("want left to be %d got %d", leftProbe, lrv)
}

rightProbe := amount
rpk, err := EncodeKey(rightProbe)
if err != nil {
t.Fatal(err.Error())
}
rr, _, err := kv.Get(1, rpk)
if err != nil {
t.Fatal(err.Error())
}
rrv, err := Decode(rr)
if err != nil {
t.Fatal(err.Error())
}
rrvi := rrv[0].(int)
if rrvi != rightProbe {
t.Fatalf("want right to be %d got %d", rightProbe, rrv)
}
})
}

0 comments on commit a487c34

Please sign in to comment.