]> git.proxmox.com Git - ceph.git/blob - ceph/src/rocksdb/examples/column_families_example.cc
update ceph source to reef 18.1.2
[ceph.git] / ceph / src / rocksdb / examples / column_families_example.cc
1 // Copyright (c) 2011-present, Facebook, Inc. All rights reserved.
2 // This source code is licensed under both the GPLv2 (found in the
3 // COPYING file in the root directory) and Apache 2.0 License
4 // (found in the LICENSE.Apache file in the root directory).
5 #include <cstdio>
6 #include <string>
7 #include <vector>
8
9 #include "rocksdb/db.h"
10 #include "rocksdb/options.h"
11 #include "rocksdb/slice.h"
12
13 #if defined(OS_WIN)
14 std::string kDBPath = "C:\\Windows\\TEMP\\rocksdb_column_families_example";
15 #else
16 std::string kDBPath = "/tmp/rocksdb_column_families_example";
17 #endif
18
19 using ROCKSDB_NAMESPACE::ColumnFamilyDescriptor;
20 using ROCKSDB_NAMESPACE::ColumnFamilyHandle;
21 using ROCKSDB_NAMESPACE::ColumnFamilyOptions;
22 using ROCKSDB_NAMESPACE::DB;
23 using ROCKSDB_NAMESPACE::DBOptions;
24 using ROCKSDB_NAMESPACE::Options;
25 using ROCKSDB_NAMESPACE::ReadOptions;
26 using ROCKSDB_NAMESPACE::Slice;
27 using ROCKSDB_NAMESPACE::Status;
28 using ROCKSDB_NAMESPACE::WriteBatch;
29 using ROCKSDB_NAMESPACE::WriteOptions;
30
31 int main() {
32 // open DB
33 Options options;
34 options.create_if_missing = true;
35 DB* db;
36 Status s = DB::Open(options, kDBPath, &db);
37 assert(s.ok());
38
39 // create column family
40 ColumnFamilyHandle* cf;
41 s = db->CreateColumnFamily(ColumnFamilyOptions(), "new_cf", &cf);
42 assert(s.ok());
43
44 // close DB
45 s = db->DestroyColumnFamilyHandle(cf);
46 assert(s.ok());
47 delete db;
48
49 // open DB with two column families
50 std::vector<ColumnFamilyDescriptor> column_families;
51 // have to open default column family
52 column_families.push_back(ColumnFamilyDescriptor(
53 ROCKSDB_NAMESPACE::kDefaultColumnFamilyName, ColumnFamilyOptions()));
54 // open the new one, too
55 column_families.push_back(
56 ColumnFamilyDescriptor("new_cf", ColumnFamilyOptions()));
57 std::vector<ColumnFamilyHandle*> handles;
58 s = DB::Open(DBOptions(), kDBPath, column_families, &handles, &db);
59 assert(s.ok());
60
61 // put and get from non-default column family
62 s = db->Put(WriteOptions(), handles[1], Slice("key"), Slice("value"));
63 assert(s.ok());
64 std::string value;
65 s = db->Get(ReadOptions(), handles[1], Slice("key"), &value);
66 assert(s.ok());
67
68 // atomic write
69 WriteBatch batch;
70 batch.Put(handles[0], Slice("key2"), Slice("value2"));
71 batch.Put(handles[1], Slice("key3"), Slice("value3"));
72 batch.Delete(handles[0], Slice("key"));
73 s = db->Write(WriteOptions(), &batch);
74 assert(s.ok());
75
76 // drop column family
77 s = db->DropColumnFamily(handles[1]);
78 assert(s.ok());
79
80 // close db
81 for (auto handle : handles) {
82 s = db->DestroyColumnFamilyHandle(handle);
83 assert(s.ok());
84 }
85 delete db;
86
87 return 0;
88 }