Skip to content

Commit a182bb7

Browse files
committed
Update part8.md
* Remove inconsistent (char *) cast. * Update diff marks to be consistent with previous revisions.
1 parent 6c61e66 commit a182bb7

File tree

1 file changed

+22
-20
lines changed

1 file changed

+22
-20
lines changed

_parts/part8.md

Lines changed: 22 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -93,11 +93,11 @@ The code to access keys, values and metadata all involve pointer arithmetic usin
9393

9494
```diff
9595
+uint32_t* leaf_node_num_cells(void* node) {
96-
+ return (char *)node + LEAF_NODE_NUM_CELLS_OFFSET;
96+
+ return node + LEAF_NODE_NUM_CELLS_OFFSET;
9797
+}
9898
+
9999
+void* leaf_node_cell(void* node, uint32_t cell_num) {
100-
+ return (char *)node + LEAF_NODE_HEADER_SIZE + cell_num * LEAF_NODE_CELL_SIZE;
100+
+ return node + LEAF_NODE_HEADER_SIZE + cell_num * LEAF_NODE_CELL_SIZE;
101101
+}
102102
+
103103
+uint32_t* leaf_node_key(void* node, uint32_t cell_num) {
@@ -503,8 +503,10 @@ Next time, we'll implement finding a record by primary key, and start storing ro
503503
## Complete Diff
504504

505505
```diff
506+
@@ -62,29 +62,101 @@ const uint32_t ROW_SIZE = ID_SIZE + USERNAME_SIZE + EMAIL_SIZE;
507+
506508
const uint32_t PAGE_SIZE = 4096;
507-
const uint32_t TABLE_MAX_PAGES = 100;
509+
#define TABLE_MAX_PAGES 100
508510
-const uint32_t ROWS_PER_PAGE = PAGE_SIZE / ROW_SIZE;
509511
-const uint32_t TABLE_MAX_ROWS = ROWS_PER_PAGE * TABLE_MAX_PAGES;
510512

@@ -531,10 +533,7 @@ Next time, we'll implement finding a record by primary key, and start storing ro
531533
bool end_of_table; // Indicates a position one past the last element
532534
};
533535
typedef struct Cursor_t Cursor;
534-
@@ -88,6 +88,77 @@ void print_row(Row* row) {
535-
printf("(%d, %s, %s)\n", row->id, row->username, row->email);
536-
}
537-
536+
538537
+enum NodeType_t { NODE_INTERNAL, NODE_LEAF };
539538
+typedef enum NodeType_t NodeType;
540539
+
@@ -605,19 +604,19 @@ Next time, we'll implement finding a record by primary key, and start storing ro
605604
+ }
606605
+}
607606
+
608-
void serialize_row(Row* source, void* destination) {
609-
memcpy(destination + ID_OFFSET, &(source->id), ID_SIZE);
610-
memcpy(destination + USERNAME_OFFSET, &(source->username), USERNAME_SIZE);
611-
@@ -100,6 +171,8 @@ void deserialize_row(void* source, Row* destination) {
612-
memcpy(&(destination->email), source + EMAIL_OFFSET, EMAIL_SIZE);
607+
void print_row(Row* row) {
608+
printf("(%d, %s, %s)\n", row->id, row->username, row->email);
609+
}
610+
@@ -101,6 +173,8 @@ void deserialize_row(void *source, Row* destination) {
611+
memcpy(&(destination->email), source + EMAIL_OFFSET, EMAIL_SIZE);
613612
}
614613

615614
+void initialize_leaf_node(void* node) { *leaf_node_num_cells(node) = 0; }
616615
+
617616
void* get_page(Pager* pager, uint32_t page_num) {
618617
if (page_num > TABLE_MAX_PAGES) {
619618
printf("Tried to fetch page number out of bounds. %d > %d\n", page_num,
620-
@@ -127,6 +200,10 @@ void* get_page(Pager* pager, uint32_t page_num) {
619+
@@ -128,6 +202,10 @@ void* get_page(Pager* pager, uint32_t page_num) {
621620
}
622621

623622
pager->pages[page_num] = page;
@@ -628,7 +627,7 @@ Next time, we'll implement finding a record by primary key, and start storing ro
628627
}
629628

630629
return pager->pages[page_num];
631-
@@ -135,8 +212,12 @@ void* get_page(Pager* pager, uint32_t page_num) {
630+
@@ -136,8 +214,12 @@ void* get_page(Pager* pager, uint32_t page_num) {
632631
Cursor* table_start(Table* table) {
633632
Cursor* cursor = malloc(sizeof(Cursor));
634633
cursor->table = table;
@@ -643,7 +642,7 @@ Next time, we'll implement finding a record by primary key, and start storing ro
643642

644643
return cursor;
645644
}
646-
@@ -144,24 +225,28 @@ Cursor* table_start(Table* table) {
645+
@@ -145,24 +227,28 @@ Cursor* table_start(Table* table) {
647646
Cursor* table_end(Table* table) {
648647
Cursor* cursor = malloc(sizeof(Cursor));
649648
cursor->table = table;
@@ -680,7 +679,7 @@ Next time, we'll implement finding a record by primary key, and start storing ro
680679
cursor->end_of_table = true;
681680
}
682681
}
683-
@@ -184,6 +269,12 @@ Pager* pager_open(const char* filename) {
682+
@@ -185,6 +271,12 @@ Pager* pager_open(const char* filename) {
684683
Pager* pager = malloc(sizeof(Pager));
685684
pager->file_descriptor = fd;
686685
pager->file_length = file_length;
@@ -694,6 +693,7 @@ Next time, we'll implement finding a record by primary key, and start storing ro
694693
for (uint32_t i = 0; i < TABLE_MAX_PAGES; i++) {
695694
pager->pages[i] = NULL;
696695
@@ -194,11 +285,15 @@ Pager* pager_open(const char* filename) {
696+
@@ -195,11 +287,16 @@ Pager* pager_open(const char* filename) {
697697

698698
Table* db_open(const char* filename) {
699699
Pager* pager = pager_open(filename);
@@ -712,8 +712,8 @@ Next time, we'll implement finding a record by primary key, and start storing ro
712712

713713
return table;
714714
}
715-
@@ -228,7 +323,7 @@ void read_input(InputBuffer* input_buffer) {
716-
input_buffer->buffer[bytes_read - 1] = 0;
715+
@@ -234,7 +331,7 @@ void close_input_buffer(InputBuffer* input_buffer) {
716+
free(input_buffer);
717717
}
718718

719719
-void pager_flush(Pager* pager, uint32_t page_num, uint32_t size) {
@@ -722,6 +722,7 @@ Next time, we'll implement finding a record by primary key, and start storing ro
722722
printf("Tried to flush null page\n");
723723
exit(EXIT_FAILURE);
724724
@@ -242,7 +337,7 @@ void pager_flush(Pager* pager, uint32_t page_num, uint32_t size) {
725+
@@ -249,7 +346,7 @@ void pager_flush(Pager* pager, uint32_t page_num, uint32_t size) {
725726
}
726727

727728
ssize_t bytes_written =
@@ -731,6 +732,7 @@ Next time, we'll implement finding a record by primary key, and start storing ro
731732
if (bytes_written == -1) {
732733
printf("Error writing: %d\n", errno);
733734
@@ -252,29 +347,16 @@ void pager_flush(Pager* pager, uint32_t page_num, uint32_t size) {
735+
@@ -260,29 +357,16 @@ void pager_flush(Pager* pager, uint32_t page_num, uint32_t size) {
734736

735737
void db_close(Table* table) {
736738
Pager* pager = table->pager;
@@ -762,7 +764,7 @@ Next time, we'll implement finding a record by primary key, and start storing ro
762764
int result = close(pager->file_descriptor);
763765
if (result == -1) {
764766
printf("Error closing db file.\n");
765-
@@ -294,6 +376,14 @@ MetaCommandResult do_meta_command(InputBuffer* input_buffer, Table* table) {
767+
@@ -305,6 +389,14 @@ MetaCommandResult do_meta_command(InputBuffer* input_buffer, Table *table) {
766768
if (strcmp(input_buffer->buffer, ".exit") == 0) {
767769
db_close(table);
768770
exit(EXIT_SUCCESS);
@@ -777,7 +779,7 @@ Next time, we'll implement finding a record by primary key, and start storing ro
777779
} else {
778780
return META_COMMAND_UNRECOGNIZED_COMMAND;
779781
}
780-
@@ -342,16 +432,39 @@ PrepareResult prepare_statement(InputBuffer* input_buffer,
782+
@@ -354,16 +446,39 @@ PrepareResult prepare_statement(InputBuffer* input_buffer,
781783
return PREPARE_UNRECOGNIZED_STATEMENT;
782784
}
783785

0 commit comments

Comments
 (0)