※ 引述《robertabcd (robert)》之铭言:
: ※ 引述《rock1246 (洛克亚 Rokya)》之铭言:
: : → nick0702:1. going all the way left if lo_key is NULL. 12/16 11:59
: : → nick0702:2. 回传 NULL即可 12/16 12:55
: : → nick0702:没有任何KEY = lo_key 回传 NULL 12/16 12:58
: : → nick0702:lo_key = NULL , going all the way left 12/16 12:58
: : 报告助教
: : 根据我们小组code的测试结果
: : 若没有任何key = lo_key时
: : 好像要回传 "第一个比lo_key大的key" 才会跟sample_output一样
: : 那我们要用哪种方法实作呢@@
: 助教您好
: 原 PO 第二个问题所问的是 findRunStart 的回传值
: 这个 method 回传的 type 是 Status,我不懂要如何回传 NULL?
: 唯一能塞的地方是 *pppage = NULL,如果是这样的话 return 值应为何?
: 请问助教能不能统一一下 findRunStart 这个 method 在拿到 lo_key 是一些极端值时
: 所该有的行为?而不是让我们一直从 sample output 猜该是怎么样
findRunStart 是 new_scan 的一个部分
findRunStart 的目的就是找 lo_key
他是在哪一个 (BTLeafPage)***pppage
而且在 pppage里的哪一个 RID *pstartrid 中 !
Status BTreeFile::findRunStart (const void *lo_key,
BTLeafPage **pppage, RID *pstartrid)
rock1246 的第二个问题
我以为他是问说 pstartrid 回传的值要放什么 !?
希望我没有会错意
能塞的地方还有 pstartrid 这个地方也要注意一下
return 必须是 status
status 在测试时也都要回传 ok
即使你没有找到lo_key 或是 lo_key 比任何b+tree内的值都大 或是...
极端值的部份要你想一想要怎么处理
btree_file_scan.C 的 get_next
和 btree_driver.C
是 new_scan 和 findRunStart 的使用
看一下会更明白
: 另外想问一下我们是不是需要改 new_scan?
: 在 test2 中,有测一个 lo/hi 分别是 10000/10010 超过 maximum key 的 ranged scan
: 如果 findRunStart 对这种 lo_key 会 return 非 OK 的 Status 的话
: new_scan 会回传 NULL 导致 test program 直接爆炸
: 请问这部份应该怎么做?
new_scan 不用去动他
只要写 insert, _insert, findRunStart
lo_key 比任何 b+tree 的任何值都大
所要找的两个东西都设定为 NULL
pstartrid = NULL;
*pppage = NULL;
让 findRunStart 回传 ok 使得 new_scan 不会return NULL.
希望有回答道你的问题
-TA 叶俊言