這部分只是做了一些重構,使更容易實現b樹。
我們將要新增乙個表示表中某個位置的游標(cursor)物件。你可以對它進行如下操作:
之後我們還要實現的:
下面是游標結構體:
+
typedef
struct
cursor;
我們目前的表(table)資料結構,只需要知道行號就可以確定位置,所以游標資料結構中含有行號(row_num
)來確定位置。
游標還有乙個指向所屬表的指標table
。
最後還有乙個end_of_table
的布林值來表示結束位置。
用table_start()
和table_end()
來建立新的游標:
+cursor*
table_start
(table* table)
++cursor*
table_end
(table* table)
同時row_slot()
函式變成cursor_value()
函式,返回乙個指標指向游標的位置。
-
void
*row_slot
(table* table, uint32_t row_num)
在當前表中移動游標和增加行號一樣(在b樹中要更複雜)。
+
void
cursor_advance
(cursor* cursor)
+}
最後我們可以更改虛擬機器(virtual machine)方法來使用游標。當插入一行時,我們在表的末尾開啟乙個游標,寫入游標位置,然後關閉游標。
row* row_to_insert =
&(statement->row_to_insert)
;+ cursor* cursor =
table_end
(table);-
serialize_row
(row_to_insert,
row_slot
(table, table->num_rows));
+serialize_row
(row_to_insert,
cursor_value
(cursor));
table->num_rows +=1
;+free
(cursor);+
return execute_success;
}
在選擇(select)所有行時,我們在表的開始處開啟乙個游標,列印該行,然後將游標移動到下一行。重複直至表的盡頭。
executeresult execute_select
(statement* statement, table* table)++
free
(cursor);+
return execute_success;
}
這部分重構主要是為了b樹做準備。
@@ -78,
6+78,
13 @@ struct
table;
+typedef
struct
cursor;
+void
print_row
(row* row)
@@ -
126,12+
133,
38 @@ void
*get_page
(pager* pager, uint32_t page_num)
-void
*row_slot
(table* table, uint32_t row_num)
++cursor*
table_end
(table* table)++
void
*cursor_value
(cursor* cursor)++
void
cursor_advance
(cursor* cursor)
} pager*
pager_open
(const
char
* filename)
row* row_to_insert =
&(statement->row_to_insert)
;+ cursor* cursor =
table_end
(table);-
serialize_row
(row_to_insert,
row_slot
(table, table->num_rows));
+serialize_row
(row_to_insert,
cursor_value
(cursor));
table->num_rows +=1
;+free
(cursor);+
return execute_success;
} executeresult execute_select
(statement* statement, table* table)++
free
(cursor);+
return execute_success;
}
java semphore實現 簡單資料庫連線池
首先我們先介紹一下什麼是訊號量 類似於我們去公共澡堂洗澡,需要先去前台付款拿到儲物櫃的鑰匙,如過沒有空閒的儲物櫃,我們就需要一直等待,直到有別人洗完澡,讓出儲物櫃,這裡的鑰匙就相當於訊號量 有限的數量 訊號量可以使共享變數可被指定數量的執行緒訪問。乙個計數器,乙個等待佇列,三個方法。在訊號量模型裡,...
簡單資料庫程式設計
1 修改配置檔案 web.config 2 建立鏈結類 connection.cs using system.data.sqlclient 新增名字空間 public static sqlconnection getconnection return new sqlconnection system...
SQLite簡單資料庫
通過觀察可以發現,不管是聊天列表還是 列表,有乙個共性 資料量大和資料結構複雜 那麼為什麼我們要用sqlite,有這麼幾個原因 sqlite常用的幾種資料型別為text文字型,integer整型,real浮點型,建 式要用規定的格式,如下 create table product 建立資料庫和資料表...