Skip to content

Commit

Permalink
Refactor of documents.
Browse files Browse the repository at this point in the history
- Documents can have arrays and sub-documents.
- Got rid of document reader, document values can now recursively initialize themselves from a span.
- Not following exact BSON anymore.
  • Loading branch information
nrupprecht committed Mar 24, 2024
1 parent 2a4d0a8 commit cc875f0
Show file tree
Hide file tree
Showing 10 changed files with 691 additions and 393 deletions.
6 changes: 1 addition & 5 deletions .clang-tidy
Original file line number Diff line number Diff line change
Expand Up @@ -108,22 +108,18 @@ CheckOptions:
- { key: readability-identifier-naming.ClassCase, value: CamelCase }
- { key: readability-identifier-naming.StructCase, value: CamelCase }
- { key: readability-identifier-naming.TemplateParameterCase, value: CamelCase }
- { key: readability-identifier-naming.TemplateParameterSuffix, value: _t }
- { key: readability-identifier-naming.FunctionCase, value: aNy_CasE }
- { key: readability-identifier-naming.VariableCase, value: lower_case }
- { key: readability-identifier-naming.ClassMemberCase, value: lower_case }
- { key: readability-identifier-naming.ClassMemberSuffix, value: _ }
- { key: readability-identifier-naming.PrivateMemberSuffix, value: _ }
- { key: readability-identifier-naming.ProtectedMemberSuffix, value: _ }
- { key: readability-identifier-naming.EnumConstantCase, value: CamelCase }
- { key: readability-identifier-naming.EnumConstantPrefix, value: k }
- { key: readability-identifier-naming.ConstexprVariableCase, value: CamelCase }
- { key: readability-identifier-naming.ConstexprVariablePrefix, value: k }
- { key: readability-identifier-naming.GlobalConstantCase, value: CamelCase }
- { key: readability-identifier-naming.GlobalConstantPrefix, value: k }
- { key: readability-identifier-naming.MemberConstantCase, value: CamelCase }
- { key: readability-identifier-naming.MemberConstantPrefix, value: k }
- { key: readability-identifier-naming.StaticConstantCase, value: CamelCase }
- { key: readability-identifier-naming.StaticConstantPrefix, value: k }
- { key: readability-implicit-bool-conversion.AllowIntegerConditions, value: 1 }
- { key: readability-implicit-bool-conversion.AllowPointerConditions, value: 1 }
- { key: readability-function-cognitive-complexity.IgnoreMacros, value: 1 }
63 changes: 46 additions & 17 deletions applications/database-string-pk.example.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -6,18 +6,18 @@
#include <string>

#include "NeverSQL/data/btree/BTree.h"
#include "NeverSQL/data/internals/Utility.h"
#include "NeverSQL/database/DataManager.h"
#include "NeverSQL/utility/HexDump.h"
#include "NeverSQL/utility/PageDump.h"
#include "NeverSQL/data/internals/Utility.h"

using neversql::primary_key_t;
using namespace lightning;

void SetupLogger(Severity min_severity = Severity::Info);

int main() {
SetupLogger(Severity::Trace);
SetupLogger(Severity::Info);

// ---> Your database path here.
std::filesystem::path database_path = "your-path-here";
Expand All @@ -33,30 +33,61 @@ int main() {

// Create a document.
{
neversql::DocumentBuilder builder;
builder.AddEntry("name", "George");
builder.AddEntry("age", 24);
builder.AddEntry("favorite_color", "blue");
neversql::Document builder;
builder.AddElement("name", neversql::StringValue{"George"});
builder.AddElement("age", neversql::IntegralValue{24});
builder.AddElement("favorite_color", neversql::StringValue{"blue"});
// Add the document.
std::string key = "George";
manager.AddValue("elements", neversql::internal::SpanValue(key), builder);
}
{
neversql::DocumentBuilder builder;
builder.AddEntry("name", "Helen");
builder.AddEntry("age", 25);
neversql::Document builder;
builder.AddElement("name", neversql::StringValue{"Helen"});
builder.AddElement("age", neversql::IntegralValue{25});

// Sub-document.
{
auto sub_builder = std::make_unique<neversql::Document>();
sub_builder->AddElement("favorite_color", neversql::StringValue{"green"});

auto array = std::make_unique<neversql::ArrayValue>(neversql::DataTypeEnum::Int32);
array->AddElement(neversql::IntegralValue{33});
array->AddElement(neversql::IntegralValue{42});
array->AddElement(neversql::IntegralValue{109});
sub_builder->AddElement("favorite_numbers", std::move(array));
builder.AddElement("favorites", std::move(sub_builder));
}

// Add the document.
std::string key = "Helen";
manager.AddValue("elements", neversql::internal::SpanValue(key), builder);
}
{
neversql::DocumentBuilder builder;
builder.AddEntry("name", "Carson");
builder.AddEntry("age", 44);
neversql::Document builder;
builder.AddElement("name", neversql::StringValue{"Carson"});
builder.AddElement("age", neversql::IntegralValue{44});
// Add the document.
std::string key = "Carson";
manager.AddValue("elements", neversql::internal::SpanValue(key), builder);
}
{
neversql::Document builder;
builder.AddElement("name", neversql::StringValue{"Julia"});
builder.AddElement("age", neversql::IntegralValue{18});
// Add the document.
std::string key = "Julia";
manager.AddValue("elements", neversql::internal::SpanValue(key), builder);
}


// Execute a query.
auto iterator = neversql::query::BTreeQueryIterator(manager.Begin("elements"),
neversql::query::LessEqual<int>("age", 40));
for (; !iterator.IsEnd(); ++iterator) {
auto document = neversql::ReadDocumentFromBuffer(*iterator);
LOG_SEV(Info) << "Found: " << neversql::PrettyPrint(*document);
}

auto total_pages = manager.GetDataAccessLayer().GetNumPages();
LOG_SEV(Major) << lightning::formatting::Format("Database has {:L} pages.", total_pages);
Expand All @@ -69,22 +100,20 @@ int main() {

// Search for some elements.

std::vector<std::string> names_to_check{"Helen"};
std::vector<std::string> names_to_check {"Helen"};

for (auto& name : names_to_check) {
auto result = manager.Retrieve("elements", neversql::internal::SpanValue(name));
if (result.IsFound()) {
auto& view = result.value_view;

// Interpret the data as a document.
neversql::DocumentReader reader(view);
auto document = neversql::ReadDocumentFromBuffer(result.value_view);

LOG_SEV(Info) << formatting::Format(
"Found key {:?} on page {:L}, search depth {}, value: \n{@BYELLOW}{}{@RESET}",
name,
result.search_result.node->GetPageNumber(),
result.search_result.GetSearchDepth(),
neversql::PrettyPrint(reader));
neversql::PrettyPrint(*document));
}
else {
LOG_SEV(Info) << formatting::Format("{@BRED}Key {:?} was not found.{@RESET}", name);
Expand Down
Loading

0 comments on commit cc875f0

Please sign in to comment.