簡單資料庫實現 Part6 游標抽象

2021-10-02 10:35:33 字數 2789 閱讀 7229

這部分只是做了一些重構,使更容易實現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 建立資料庫和資料表...