leveldb 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (128) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE.txt +22 -0
  3. data/README.md +95 -0
  4. data/ext/Rakefile +11 -0
  5. data/ext/leveldb/LICENSE +27 -0
  6. data/ext/leveldb/Makefile +206 -0
  7. data/ext/leveldb/build_config.mk +13 -0
  8. data/ext/leveldb/db/builder.cc +88 -0
  9. data/ext/leveldb/db/builder.h +34 -0
  10. data/ext/leveldb/db/c.cc +595 -0
  11. data/ext/leveldb/db/c_test.c +390 -0
  12. data/ext/leveldb/db/corruption_test.cc +359 -0
  13. data/ext/leveldb/db/db_bench.cc +979 -0
  14. data/ext/leveldb/db/db_impl.cc +1485 -0
  15. data/ext/leveldb/db/db_impl.h +203 -0
  16. data/ext/leveldb/db/db_iter.cc +299 -0
  17. data/ext/leveldb/db/db_iter.h +26 -0
  18. data/ext/leveldb/db/db_test.cc +2092 -0
  19. data/ext/leveldb/db/dbformat.cc +140 -0
  20. data/ext/leveldb/db/dbformat.h +227 -0
  21. data/ext/leveldb/db/dbformat_test.cc +112 -0
  22. data/ext/leveldb/db/filename.cc +139 -0
  23. data/ext/leveldb/db/filename.h +80 -0
  24. data/ext/leveldb/db/filename_test.cc +122 -0
  25. data/ext/leveldb/db/leveldb_main.cc +238 -0
  26. data/ext/leveldb/db/log_format.h +35 -0
  27. data/ext/leveldb/db/log_reader.cc +259 -0
  28. data/ext/leveldb/db/log_reader.h +108 -0
  29. data/ext/leveldb/db/log_test.cc +500 -0
  30. data/ext/leveldb/db/log_writer.cc +103 -0
  31. data/ext/leveldb/db/log_writer.h +48 -0
  32. data/ext/leveldb/db/memtable.cc +145 -0
  33. data/ext/leveldb/db/memtable.h +91 -0
  34. data/ext/leveldb/db/repair.cc +389 -0
  35. data/ext/leveldb/db/skiplist.h +379 -0
  36. data/ext/leveldb/db/skiplist_test.cc +378 -0
  37. data/ext/leveldb/db/snapshot.h +66 -0
  38. data/ext/leveldb/db/table_cache.cc +121 -0
  39. data/ext/leveldb/db/table_cache.h +61 -0
  40. data/ext/leveldb/db/version_edit.cc +266 -0
  41. data/ext/leveldb/db/version_edit.h +107 -0
  42. data/ext/leveldb/db/version_edit_test.cc +46 -0
  43. data/ext/leveldb/db/version_set.cc +1443 -0
  44. data/ext/leveldb/db/version_set.h +383 -0
  45. data/ext/leveldb/db/version_set_test.cc +179 -0
  46. data/ext/leveldb/db/write_batch.cc +147 -0
  47. data/ext/leveldb/db/write_batch_internal.h +49 -0
  48. data/ext/leveldb/db/write_batch_test.cc +120 -0
  49. data/ext/leveldb/doc/bench/db_bench_sqlite3.cc +718 -0
  50. data/ext/leveldb/doc/bench/db_bench_tree_db.cc +528 -0
  51. data/ext/leveldb/helpers/memenv/memenv.cc +384 -0
  52. data/ext/leveldb/helpers/memenv/memenv.h +20 -0
  53. data/ext/leveldb/helpers/memenv/memenv_test.cc +232 -0
  54. data/ext/leveldb/include/leveldb/c.h +291 -0
  55. data/ext/leveldb/include/leveldb/cache.h +99 -0
  56. data/ext/leveldb/include/leveldb/comparator.h +63 -0
  57. data/ext/leveldb/include/leveldb/db.h +161 -0
  58. data/ext/leveldb/include/leveldb/env.h +333 -0
  59. data/ext/leveldb/include/leveldb/filter_policy.h +70 -0
  60. data/ext/leveldb/include/leveldb/iterator.h +100 -0
  61. data/ext/leveldb/include/leveldb/options.h +195 -0
  62. data/ext/leveldb/include/leveldb/slice.h +109 -0
  63. data/ext/leveldb/include/leveldb/status.h +106 -0
  64. data/ext/leveldb/include/leveldb/table.h +85 -0
  65. data/ext/leveldb/include/leveldb/table_builder.h +92 -0
  66. data/ext/leveldb/include/leveldb/write_batch.h +64 -0
  67. data/ext/leveldb/issues/issue178_test.cc +92 -0
  68. data/ext/leveldb/port/atomic_pointer.h +224 -0
  69. data/ext/leveldb/port/port.h +19 -0
  70. data/ext/leveldb/port/port_example.h +135 -0
  71. data/ext/leveldb/port/port_posix.cc +54 -0
  72. data/ext/leveldb/port/port_posix.h +157 -0
  73. data/ext/leveldb/port/thread_annotations.h +59 -0
  74. data/ext/leveldb/port/win/stdint.h +24 -0
  75. data/ext/leveldb/table/block.cc +268 -0
  76. data/ext/leveldb/table/block.h +44 -0
  77. data/ext/leveldb/table/block_builder.cc +109 -0
  78. data/ext/leveldb/table/block_builder.h +57 -0
  79. data/ext/leveldb/table/filter_block.cc +111 -0
  80. data/ext/leveldb/table/filter_block.h +68 -0
  81. data/ext/leveldb/table/filter_block_test.cc +128 -0
  82. data/ext/leveldb/table/format.cc +145 -0
  83. data/ext/leveldb/table/format.h +108 -0
  84. data/ext/leveldb/table/iterator.cc +67 -0
  85. data/ext/leveldb/table/iterator_wrapper.h +63 -0
  86. data/ext/leveldb/table/merger.cc +197 -0
  87. data/ext/leveldb/table/merger.h +26 -0
  88. data/ext/leveldb/table/table.cc +275 -0
  89. data/ext/leveldb/table/table_builder.cc +270 -0
  90. data/ext/leveldb/table/table_test.cc +868 -0
  91. data/ext/leveldb/table/two_level_iterator.cc +182 -0
  92. data/ext/leveldb/table/two_level_iterator.h +34 -0
  93. data/ext/leveldb/util/arena.cc +68 -0
  94. data/ext/leveldb/util/arena.h +68 -0
  95. data/ext/leveldb/util/arena_test.cc +68 -0
  96. data/ext/leveldb/util/bloom.cc +95 -0
  97. data/ext/leveldb/util/bloom_test.cc +160 -0
  98. data/ext/leveldb/util/cache.cc +325 -0
  99. data/ext/leveldb/util/cache_test.cc +186 -0
  100. data/ext/leveldb/util/coding.cc +194 -0
  101. data/ext/leveldb/util/coding.h +104 -0
  102. data/ext/leveldb/util/coding_test.cc +196 -0
  103. data/ext/leveldb/util/comparator.cc +81 -0
  104. data/ext/leveldb/util/crc32c.cc +332 -0
  105. data/ext/leveldb/util/crc32c.h +45 -0
  106. data/ext/leveldb/util/crc32c_test.cc +72 -0
  107. data/ext/leveldb/util/env.cc +96 -0
  108. data/ext/leveldb/util/env_posix.cc +698 -0
  109. data/ext/leveldb/util/env_test.cc +104 -0
  110. data/ext/leveldb/util/filter_policy.cc +11 -0
  111. data/ext/leveldb/util/hash.cc +52 -0
  112. data/ext/leveldb/util/hash.h +19 -0
  113. data/ext/leveldb/util/histogram.cc +139 -0
  114. data/ext/leveldb/util/histogram.h +42 -0
  115. data/ext/leveldb/util/logging.cc +81 -0
  116. data/ext/leveldb/util/logging.h +47 -0
  117. data/ext/leveldb/util/mutexlock.h +41 -0
  118. data/ext/leveldb/util/options.cc +29 -0
  119. data/ext/leveldb/util/posix_logger.h +98 -0
  120. data/ext/leveldb/util/random.h +59 -0
  121. data/ext/leveldb/util/status.cc +75 -0
  122. data/ext/leveldb/util/testharness.cc +77 -0
  123. data/ext/leveldb/util/testharness.h +138 -0
  124. data/ext/leveldb/util/testutil.cc +51 -0
  125. data/ext/leveldb/util/testutil.h +53 -0
  126. data/lib/leveldb/version.rb +3 -0
  127. data/lib/leveldb.rb +1006 -0
  128. metadata +228 -0
@@ -0,0 +1,49 @@
1
+ // Copyright (c) 2011 The LevelDB Authors. All rights reserved.
2
+ // Use of this source code is governed by a BSD-style license that can be
3
+ // found in the LICENSE file. See the AUTHORS file for names of contributors.
4
+
5
+ #ifndef STORAGE_LEVELDB_DB_WRITE_BATCH_INTERNAL_H_
6
+ #define STORAGE_LEVELDB_DB_WRITE_BATCH_INTERNAL_H_
7
+
8
+ #include "leveldb/write_batch.h"
9
+
10
+ namespace leveldb {
11
+
12
+ class MemTable;
13
+
14
+ // WriteBatchInternal provides static methods for manipulating a
15
+ // WriteBatch that we don't want in the public WriteBatch interface.
16
+ class WriteBatchInternal {
17
+ public:
18
+ // Return the number of entries in the batch.
19
+ static int Count(const WriteBatch* batch);
20
+
21
+ // Set the count for the number of entries in the batch.
22
+ static void SetCount(WriteBatch* batch, int n);
23
+
24
+ // Return the seqeunce number for the start of this batch.
25
+ static SequenceNumber Sequence(const WriteBatch* batch);
26
+
27
+ // Store the specified number as the seqeunce number for the start of
28
+ // this batch.
29
+ static void SetSequence(WriteBatch* batch, SequenceNumber seq);
30
+
31
+ static Slice Contents(const WriteBatch* batch) {
32
+ return Slice(batch->rep_);
33
+ }
34
+
35
+ static size_t ByteSize(const WriteBatch* batch) {
36
+ return batch->rep_.size();
37
+ }
38
+
39
+ static void SetContents(WriteBatch* batch, const Slice& contents);
40
+
41
+ static Status InsertInto(const WriteBatch* batch, MemTable* memtable);
42
+
43
+ static void Append(WriteBatch* dst, const WriteBatch* src);
44
+ };
45
+
46
+ } // namespace leveldb
47
+
48
+
49
+ #endif // STORAGE_LEVELDB_DB_WRITE_BATCH_INTERNAL_H_
@@ -0,0 +1,120 @@
1
+ // Copyright (c) 2011 The LevelDB Authors. All rights reserved.
2
+ // Use of this source code is governed by a BSD-style license that can be
3
+ // found in the LICENSE file. See the AUTHORS file for names of contributors.
4
+
5
+ #include "leveldb/db.h"
6
+
7
+ #include "db/memtable.h"
8
+ #include "db/write_batch_internal.h"
9
+ #include "leveldb/env.h"
10
+ #include "util/logging.h"
11
+ #include "util/testharness.h"
12
+
13
+ namespace leveldb {
14
+
15
+ static std::string PrintContents(WriteBatch* b) {
16
+ InternalKeyComparator cmp(BytewiseComparator());
17
+ MemTable* mem = new MemTable(cmp);
18
+ mem->Ref();
19
+ std::string state;
20
+ Status s = WriteBatchInternal::InsertInto(b, mem);
21
+ int count = 0;
22
+ Iterator* iter = mem->NewIterator();
23
+ for (iter->SeekToFirst(); iter->Valid(); iter->Next()) {
24
+ ParsedInternalKey ikey;
25
+ ASSERT_TRUE(ParseInternalKey(iter->key(), &ikey));
26
+ switch (ikey.type) {
27
+ case kTypeValue:
28
+ state.append("Put(");
29
+ state.append(ikey.user_key.ToString());
30
+ state.append(", ");
31
+ state.append(iter->value().ToString());
32
+ state.append(")");
33
+ count++;
34
+ break;
35
+ case kTypeDeletion:
36
+ state.append("Delete(");
37
+ state.append(ikey.user_key.ToString());
38
+ state.append(")");
39
+ count++;
40
+ break;
41
+ }
42
+ state.append("@");
43
+ state.append(NumberToString(ikey.sequence));
44
+ }
45
+ delete iter;
46
+ if (!s.ok()) {
47
+ state.append("ParseError()");
48
+ } else if (count != WriteBatchInternal::Count(b)) {
49
+ state.append("CountMismatch()");
50
+ }
51
+ mem->Unref();
52
+ return state;
53
+ }
54
+
55
+ class WriteBatchTest { };
56
+
57
+ TEST(WriteBatchTest, Empty) {
58
+ WriteBatch batch;
59
+ ASSERT_EQ("", PrintContents(&batch));
60
+ ASSERT_EQ(0, WriteBatchInternal::Count(&batch));
61
+ }
62
+
63
+ TEST(WriteBatchTest, Multiple) {
64
+ WriteBatch batch;
65
+ batch.Put(Slice("foo"), Slice("bar"));
66
+ batch.Delete(Slice("box"));
67
+ batch.Put(Slice("baz"), Slice("boo"));
68
+ WriteBatchInternal::SetSequence(&batch, 100);
69
+ ASSERT_EQ(100, WriteBatchInternal::Sequence(&batch));
70
+ ASSERT_EQ(3, WriteBatchInternal::Count(&batch));
71
+ ASSERT_EQ("Put(baz, boo)@102"
72
+ "Delete(box)@101"
73
+ "Put(foo, bar)@100",
74
+ PrintContents(&batch));
75
+ }
76
+
77
+ TEST(WriteBatchTest, Corruption) {
78
+ WriteBatch batch;
79
+ batch.Put(Slice("foo"), Slice("bar"));
80
+ batch.Delete(Slice("box"));
81
+ WriteBatchInternal::SetSequence(&batch, 200);
82
+ Slice contents = WriteBatchInternal::Contents(&batch);
83
+ WriteBatchInternal::SetContents(&batch,
84
+ Slice(contents.data(),contents.size()-1));
85
+ ASSERT_EQ("Put(foo, bar)@200"
86
+ "ParseError()",
87
+ PrintContents(&batch));
88
+ }
89
+
90
+ TEST(WriteBatchTest, Append) {
91
+ WriteBatch b1, b2;
92
+ WriteBatchInternal::SetSequence(&b1, 200);
93
+ WriteBatchInternal::SetSequence(&b2, 300);
94
+ WriteBatchInternal::Append(&b1, &b2);
95
+ ASSERT_EQ("",
96
+ PrintContents(&b1));
97
+ b2.Put("a", "va");
98
+ WriteBatchInternal::Append(&b1, &b2);
99
+ ASSERT_EQ("Put(a, va)@200",
100
+ PrintContents(&b1));
101
+ b2.Clear();
102
+ b2.Put("b", "vb");
103
+ WriteBatchInternal::Append(&b1, &b2);
104
+ ASSERT_EQ("Put(a, va)@200"
105
+ "Put(b, vb)@201",
106
+ PrintContents(&b1));
107
+ b2.Delete("foo");
108
+ WriteBatchInternal::Append(&b1, &b2);
109
+ ASSERT_EQ("Put(a, va)@200"
110
+ "Put(b, vb)@202"
111
+ "Put(b, vb)@201"
112
+ "Delete(foo)@203",
113
+ PrintContents(&b1));
114
+ }
115
+
116
+ } // namespace leveldb
117
+
118
+ int main(int argc, char** argv) {
119
+ return leveldb::test::RunAllTests();
120
+ }