Re: [問題] hw6 btfile.C findRunStart

作者: nick0702 (言)   2012-12-21 23:22:53
※ 引述《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 葉俊言

Links booklink

Contact Us: admin [ a t ] ucptt.com