Index.cpp 1001 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. /*
  2. * Copyright (c) 2021, Jan de Visser <jan@de-visser.net>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #include <LibSQL/Heap.h>
  7. #include <LibSQL/Index.h>
  8. #include <LibSQL/Meta.h>
  9. namespace SQL {
  10. Index::Index(Heap& heap, NonnullRefPtr<TupleDescriptor> const& descriptor, bool unique, u32 pointer)
  11. : m_heap(heap)
  12. , m_descriptor(descriptor)
  13. , m_unique(unique)
  14. , m_pointer(pointer)
  15. {
  16. }
  17. Index::Index(Heap& heap, NonnullRefPtr<TupleDescriptor> const& descriptor, u32 pointer)
  18. : m_heap(heap)
  19. , m_descriptor(descriptor)
  20. , m_pointer(pointer)
  21. {
  22. }
  23. ByteBuffer Index::read_block(u32 block)
  24. {
  25. auto ret = m_heap.read_block(block);
  26. if (ret.is_error()) {
  27. warnln("Error reading block {}: {}", block, ret.error());
  28. VERIFY_NOT_REACHED();
  29. }
  30. return ret.value();
  31. }
  32. void Index::add_to_write_ahead_log(IndexNode* node)
  33. {
  34. VERIFY(node->pointer());
  35. ByteBuffer buffer;
  36. node->serialize(buffer);
  37. m_heap.add_to_wal(node->pointer(), buffer);
  38. }
  39. }