当前位置: 首页 > news >正文

百度站长平台验证网站做机网站

百度站长平台验证网站,做机网站,郑州app推广公司,上海人才引进官网游标 本文内容较短,我们只是为了更容易的实现b树,简单地重构一下。 我们将添加一个Cursor 表示表中对象的位置。Cursor应提供如下几个方面的能力: 在表的开头创建游标在表的末尾创建游标访问游标指向的行将游标前进到下一行 这是本文我们…

游标

本文内容较短,我们只是为了更容易的实现b树,简单地重构一下。

我们将添加一个Cursor 表示表中对象的位置。Cursor应提供如下几个方面的能力:

  • 在表的开头创建游标
  • 在表的末尾创建游标
  • 访问=游标指向的行
  • 将游标前进到下一行

这是本文我们要实现的能力,后面我们还希望游标提供如下能力:

  • 删除游标指向的行
  • 修改游标指向的行
  • 在表中搜索给定的 ID,并创建一个指向具有该 ID 的行的游标

Cursor 类型定义如下:

+typedef struct {
+  Table* table;
+  uint32_t row_num;
+  bool end_of_table;  // Indicates a position one past the last element
+} Cursor;

鉴于我们当前的表数据结构,只需在表中标识位置即可。

游标还具有对它所属的表的引用(因此我们的游标函数可以只将游标作为参数)。

最后,它有一个名为 end_of_table 的布尔值。这样我们就可以表示表格末尾的位置(这是我们可能想要插入一行的地方)。

table_start() 和 table_end() 创建新游标:

+Cursor* table_start(Table* table) {
+  Cursor* cursor = malloc(sizeof(Cursor));
+  cursor->table = table;
+  cursor->row_num = 0;
+  cursor->end_of_table = (table->num_rows == 0);
+
+  return cursor;
+}
+
+Cursor* table_end(Table* table) {
+  Cursor* cursor = malloc(sizeof(Cursor));
+  cursor->table = table;
+  cursor->row_num = table->num_rows;
+  cursor->end_of_table = true;
+
+  return cursor;
+}

我们的 row_slot() 函数将变为 cursor_value() ,它返回指向光标描述的位置的指针:

-void* row_slot(Table* table, uint32_t row_num) {
+void* cursor_value(Cursor* cursor) {
+  uint32_t row_num = cursor->row_num;uint32_t page_num = row_num / ROWS_PER_PAGE;
-  void* page = get_page(table->pager, page_num);
+  void* page = get_page(cursor->table->pager, page_num);uint32_t row_offset = row_num % ROWS_PER_PAGE;uint32_t byte_offset = row_offset * ROW_SIZE;return page + byte_offset;}

在我们当前的表结构中前进光标就像增加行号一样简单。这在B树中会稍微复杂一些。

+void cursor_advance(Cursor* cursor) {
+  cursor->row_num += 1;
+  if (cursor->row_num >= cursor->table->num_rows) {
+    cursor->end_of_table = true;
+  }
+}

插入行时,我们在表的末尾打开一个游标,写入该游标位置,然后关闭游标。

 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) {
+  Cursor* cursor = table_start(table);
+Row row;
-  for (uint32_t i = 0; i < table->num_rows; i++) {
-    deserialize_row(row_slot(table, i), &row);
+  while (!(cursor->end_of_table)) {
+    deserialize_row(cursor_value(cursor), &row);print_row(&row);
+    cursor_advance(cursor);}
+
+  free(cursor);
+return EXECUTE_SUCCESS;}

好了,就是这样!就像我说的,这是一个较短的重构,应该可以帮助我们将表数据结构重写为 B 树。 execute_select() 并且可以 execute_insert() 完全通过游标与表交互,而无需假设表的存储方式。

http://www.yayakq.cn/news/944921/

相关文章:

  • 网络彩票的网站怎么做佛山淘宝设计网站设计价格
  • 自助搜优惠券网站怎么做的北京地铁建设的网站
  • 申请做网站中国企业500强排行榜2021
  • 在线学习平台网站建设有什么功能网站推广话术与技巧
  • 防城港市建设工程质量监督站网站怎么推广公司网站
  • 做书app下载网站有哪些做细胞激活的母液网站
  • 网站建设预算明细表ui做的好看的论坛网站
  • 平阳企业网站建设定制棺材网站
  • discuz 科技网站模板下载浙江舟山城乡建设网站
  • 茂名网站建设优化seo没有服务器怎么先做网站
  • 酒店房产网站建设网站建设怎么添加视频
  • 温州市企业网站制作网站备案的规划方案
  • 做文案的网站有些什么动漫制作专业简介
  • 怀柔网站建设优化seo做公众号的网站有哪些
  • 如何建立一家网站北京网站报价
  • 手机网站建设实验报告做女团学什么舞蹈视频网站
  • 美食网站建设服务策划书腾讯qq网页版
  • 四川省建设厅燃气网站网站还在建设中英文
  • 简易企业网站网站费用
  • 沧州企业网站专业定制深圳维特网站建设
  • 建设个人网站的参考网站及文献经典vi设计案例分析
  • etsy网站网站建设的各个环节
  • net网站同时支持 生成静态文件和伪静态阿里云网站建设方案书
  • 网站 ip地址是什么设计北京
  • 所有做运动的网站谷歌seo关键词排名优化
  • 商城类网站建设费用wordpress如何添加友情链接
  • wordpress网站载入慢cms框架 wordpress
  • 网站维护经费wordpress 知更鸟 下载
  • 装修设计网站免费东莞做小程序的公司
  • cpa项目怎么做必须有网站么怎么在vmware上做网站