mirror of
				https://github.com/taigrr/bitcask
				synced 2025-01-18 04:03:17 -08:00 
			
		
		
		
	Add DeleteAll function (#116)
This commit is contained in:
		
							parent
							
								
									be3fd71ebe
								
							
						
					
					
						commit
						ca06e332d6
					
				
							
								
								
									
										17
									
								
								bitcask.go
									
									
									
									
									
								
							
							
						
						
									
										17
									
								
								bitcask.go
									
									
									
									
									
								
							| @ -193,6 +193,23 @@ func (b *Bitcask) Delete(key []byte) error { | |||||||
| 	return nil | 	return nil | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | // DeleteAll deletes all the keys. If an I/O error occurs the error is returned. | ||||||
|  | func (b *Bitcask) DeleteAll() (err error) { | ||||||
|  | 	b.mu.RLock() | ||||||
|  | 	defer b.mu.RUnlock() | ||||||
|  | 
 | ||||||
|  | 	b.trie.ForEach(func(node art.Node) bool { | ||||||
|  | 		_, _, err = b.put(node.Key(), []byte{}) | ||||||
|  | 		if err != nil { | ||||||
|  | 			return false | ||||||
|  | 		} | ||||||
|  | 		return true | ||||||
|  | 	}) | ||||||
|  | 	b.trie = art.New() | ||||||
|  | 
 | ||||||
|  | 	return | ||||||
|  | } | ||||||
|  | 
 | ||||||
| // Scan performs a prefix scan of keys matching the given prefix and calling | // Scan performs a prefix scan of keys matching the given prefix and calling | ||||||
| // the function `f` with the keys found. If the function returns an error | // the function `f` with the keys found. If the function returns an error | ||||||
| // no further keys are processed and the first error returned. | // no further keys are processed and the first error returned. | ||||||
|  | |||||||
| @ -133,6 +133,25 @@ func TestAll(t *testing.T) { | |||||||
| 	}) | 	}) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | func TestDeleteAll(t *testing.T) { | ||||||
|  | 	assert := assert.New(t) | ||||||
|  | 	testdir, _ := ioutil.TempDir("", "bitcask") | ||||||
|  | 	db, _ := Open(testdir) | ||||||
|  | 	_ = db.Put([]byte("foo"), []byte("foo")) | ||||||
|  | 	_ = db.Put([]byte("bar"), []byte("bar")) | ||||||
|  | 	_ = db.Put([]byte("baz"), []byte("baz")) | ||||||
|  | 	assert.Equal(3, db.Len()) | ||||||
|  | 	err := db.DeleteAll() | ||||||
|  | 	assert.NoError(err) | ||||||
|  | 	assert.Equal(0, db.Len()) | ||||||
|  | 	_, err = db.Get([]byte("foo")) | ||||||
|  | 	assert.Equal(ErrKeyNotFound, err) | ||||||
|  | 	_, err = db.Get([]byte("bar")) | ||||||
|  | 	assert.Equal(ErrKeyNotFound, err) | ||||||
|  | 	_, err = db.Get([]byte("baz")) | ||||||
|  | 	assert.Equal(ErrKeyNotFound, err) | ||||||
|  | } | ||||||
|  | 
 | ||||||
| func TestReopen1(t *testing.T) { | func TestReopen1(t *testing.T) { | ||||||
| 	assert := assert.New(t) | 	assert := assert.New(t) | ||||||
| 	for i := 0; i < 10; i ++ { | 	for i := 0; i < 10; i ++ { | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user