|
|
|
@ -1,7 +1,98 @@ |
|
|
|
|
#include "../rocksdb/db/c.cc" |
|
|
|
|
|
|
|
|
|
#include "c.h" |
|
|
|
|
|
|
|
|
|
#include <rocksdb/db.h> |
|
|
|
|
#include <rocksdb/utilities/checkpoint.h> |
|
|
|
|
#include <rocksdb/utilities/transaction_db.h> |
|
|
|
|
|
|
|
|
|
#include <vector> |
|
|
|
|
|
|
|
|
|
using ROCKSDB_NAMESPACE::Checkpoint; |
|
|
|
|
using ROCKSDB_NAMESPACE::ColumnFamilyDescriptor; |
|
|
|
|
using ROCKSDB_NAMESPACE::ColumnFamilyHandle; |
|
|
|
|
using ROCKSDB_NAMESPACE::ColumnFamilyOptions; |
|
|
|
|
using ROCKSDB_NAMESPACE::CompactRangeOptions; |
|
|
|
|
using ROCKSDB_NAMESPACE::DB; |
|
|
|
|
using ROCKSDB_NAMESPACE::DBOptions; |
|
|
|
|
using ROCKSDB_NAMESPACE::FlushOptions; |
|
|
|
|
using ROCKSDB_NAMESPACE::IngestExternalFileOptions; |
|
|
|
|
using ROCKSDB_NAMESPACE::Iterator; |
|
|
|
|
using ROCKSDB_NAMESPACE::Options; |
|
|
|
|
using ROCKSDB_NAMESPACE::PinnableSlice; |
|
|
|
|
using ROCKSDB_NAMESPACE::ReadOptions; |
|
|
|
|
using ROCKSDB_NAMESPACE::Slice; |
|
|
|
|
using ROCKSDB_NAMESPACE::SstFileWriter; |
|
|
|
|
using ROCKSDB_NAMESPACE::Status; |
|
|
|
|
using ROCKSDB_NAMESPACE::Transaction; |
|
|
|
|
using ROCKSDB_NAMESPACE::TransactionDB; |
|
|
|
|
using ROCKSDB_NAMESPACE::TransactionDBOptions; |
|
|
|
|
using ROCKSDB_NAMESPACE::WriteOptions; |
|
|
|
|
using std::vector; |
|
|
|
|
|
|
|
|
|
// From RocksDB
|
|
|
|
|
extern "C" { |
|
|
|
|
struct rocksdb_t { |
|
|
|
|
DB* rep; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
struct rocksdb_column_family_handle_t { |
|
|
|
|
ColumnFamilyHandle* rep; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
struct rocksdb_compactoptions_t { |
|
|
|
|
CompactRangeOptions rep; |
|
|
|
|
Slice full_history_ts_low; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
struct rocksdb_flushoptions_t { |
|
|
|
|
FlushOptions rep; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
struct rocksdb_ingestexternalfileoptions_t { |
|
|
|
|
IngestExternalFileOptions rep; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
struct rocksdb_iterator_t { |
|
|
|
|
Iterator* rep; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
struct rocksdb_options_t { |
|
|
|
|
Options rep; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
struct rocksdb_pinnableslice_t { |
|
|
|
|
PinnableSlice rep; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
struct rocksdb_readoptions_t { |
|
|
|
|
ReadOptions rep; |
|
|
|
|
// stack variables to set pointers to in ReadOptions
|
|
|
|
|
Slice upper_bound; |
|
|
|
|
Slice lower_bound; |
|
|
|
|
Slice timestamp; |
|
|
|
|
Slice iter_start_ts; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
struct rocksdb_sstfilewriter_t { |
|
|
|
|
SstFileWriter* rep; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
struct rocksdb_transaction_t { |
|
|
|
|
Transaction* rep; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
struct rocksdb_transactiondb_t { |
|
|
|
|
TransactionDB* rep; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
struct rocksdb_transactiondb_options_t { |
|
|
|
|
TransactionDBOptions rep; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
struct rocksdb_writeoptions_t { |
|
|
|
|
WriteOptions rep; |
|
|
|
|
}; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static bool SaveStatus(rocksdb_status_t* target, const Status source) { |
|
|
|
|
target->code = static_cast<rocksdb_status_code_t>(source.code()); |
|
|
|
|
target->subcode = static_cast<rocksdb_status_subcode_t>(source.subcode()); |
|
|
|
@ -42,7 +133,7 @@ rocksdb_t* rocksdb_open_for_read_only_column_families_with_status( |
|
|
|
|
const rocksdb_options_t* const* column_family_options, |
|
|
|
|
rocksdb_column_family_handle_t** column_family_handles, |
|
|
|
|
unsigned char error_if_wal_file_exists, rocksdb_status_t* statusptr) { |
|
|
|
|
std::vector<ColumnFamilyDescriptor> column_families; |
|
|
|
|
vector<ColumnFamilyDescriptor> column_families; |
|
|
|
|
for (int i = 0; i < num_column_families; i++) { |
|
|
|
|
column_families.emplace_back(ColumnFamilyDescriptor( |
|
|
|
|
std::string(column_family_names[i]), |
|
|
|
@ -50,7 +141,7 @@ rocksdb_t* rocksdb_open_for_read_only_column_families_with_status( |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
DB* db; |
|
|
|
|
std::vector<ColumnFamilyHandle*> handles; |
|
|
|
|
vector<ColumnFamilyHandle*> handles; |
|
|
|
|
if (SaveStatus(statusptr, DB::OpenForReadOnly(DBOptions(db_options->rep), |
|
|
|
|
std::string(name), |
|
|
|
|
column_families, &handles, &db, |
|
|
|
@ -81,14 +172,14 @@ rocksdb_t* rocksdb_open_as_secondary_column_families_with_status( |
|
|
|
|
const rocksdb_options_t* const* column_family_options, |
|
|
|
|
rocksdb_column_family_handle_t** column_family_handles, |
|
|
|
|
rocksdb_status_t* statusptr) { |
|
|
|
|
std::vector<ColumnFamilyDescriptor> column_families; |
|
|
|
|
vector<ColumnFamilyDescriptor> column_families; |
|
|
|
|
for (int i = 0; i != num_column_families; ++i) { |
|
|
|
|
column_families.emplace_back( |
|
|
|
|
std::string(column_family_names[i]), |
|
|
|
|
ColumnFamilyOptions(column_family_options[i]->rep)); |
|
|
|
|
} |
|
|
|
|
DB* db; |
|
|
|
|
std::vector<ColumnFamilyHandle*> handles; |
|
|
|
|
vector<ColumnFamilyHandle*> handles; |
|
|
|
|
if (SaveStatus(statusptr, DB::OpenAsSecondary( |
|
|
|
|
DBOptions(db_options->rep), std::string(name), |
|
|
|
|
std::string(secondary_path), column_families, |
|
|
|
@ -127,7 +218,7 @@ rocksdb_transactiondb_t* rocksdb_transactiondb_open_column_families_with_status( |
|
|
|
|
const rocksdb_options_t* const* column_family_options, |
|
|
|
|
rocksdb_column_family_handle_t** column_family_handles, |
|
|
|
|
rocksdb_status_t* statusptr) { |
|
|
|
|
std::vector<ColumnFamilyDescriptor> column_families; |
|
|
|
|
vector<ColumnFamilyDescriptor> column_families; |
|
|
|
|
for (int i = 0; i < num_column_families; i++) { |
|
|
|
|
column_families.emplace_back(ColumnFamilyDescriptor( |
|
|
|
|
std::string(column_family_names[i]), |
|
|
|
@ -135,7 +226,7 @@ rocksdb_transactiondb_t* rocksdb_transactiondb_open_column_families_with_status( |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
TransactionDB* txn_db; |
|
|
|
|
std::vector<ColumnFamilyHandle*> handles; |
|
|
|
|
vector<ColumnFamilyHandle*> handles; |
|
|
|
|
if (SaveStatus(statusptr, |
|
|
|
|
TransactionDB::Open(options->rep, txn_db_options->rep, |
|
|
|
|
std::string(name), column_families, |
|
|
|
@ -205,10 +296,10 @@ void rocksdb_transactiondb_compact_range_cf_opt_with_status( |
|
|
|
|
void rocksdb_transactiondb_ingest_external_files_with_status( |
|
|
|
|
rocksdb_transactiondb_t* db, const rocksdb_ingestexternalfilearg_t* list, |
|
|
|
|
const size_t list_len, rocksdb_status_t* statusptr) { |
|
|
|
|
std::vector<rocksdb::IngestExternalFileArg> args(list_len); |
|
|
|
|
vector<rocksdb::IngestExternalFileArg> args(list_len); |
|
|
|
|
for (size_t i = 0; i < list_len; ++i) { |
|
|
|
|
args[i].column_family = list[i].column_family->rep; |
|
|
|
|
std::vector<std::string> files(list[i].external_files_len); |
|
|
|
|
vector<std::string> files(list[i].external_files_len); |
|
|
|
|
for (size_t j = 0; j < list[i].external_files_len; ++j) { |
|
|
|
|
files[j] = std::string(list[i].external_files[j]); |
|
|
|
|
} |
|
|
|
|