# Intro to DBMS 2019 HW3 :::danger Please don't ask something TA can find on the first page of Google Search results. If you really have no idea about what the keywords should be typed in search bar, please list the keywords you have tried 請不要在討論區詢問可以在Google Search結果第一頁找到答案的問題,如果你真的不知道要下什麼關鍵字,請列出你嘗試過的關鍵字 ::: :::info Template: Q: `What kind of problem you met?` * `What you have tried` A: `Solution` > `who anser the question (student id)` ::: ### We will use your participation here as a reference of bonus ### 我們將會參考在討論區的活動(回答)來當作加分參考 > (Except for LMGTFY related topics) > (但是 LMGTFY 的不會納入參考) Q0: How to search `something` using Google Search A0: http://bfy.tw/1yH > TA (0756000) --- Q1: `AND` 和 `OR` 的 Precedence 要視為相同還是要跟真的sql一樣,`AND` 的 Precedence 要大於 `OR`? A1: 目前只會有一個and或一個or在query裡,所以可以先不管這個問題 > TA --- Q2: 請問一下 [Util.c第51行](https://github.com/Billy4195/simple_DBMS/blob/master/src/Util.c#L51)是否應改為 ```printf("%d", user->age);```? A2: 好 我發現了!!! 助教改一下, 在patch-0.0.005 > TA --- Q3: 請問這次作業要在 gitlab 開一個 ID_hw3 嗎? A3: 這次不強制要求,我們會用E3收作業,當然你也可以繼續在上面寫 > TA --- Q4: 1. print 出來的結果,字串的部分要不要雙引號 * 這是 hw2 的 spec ![](https://i.imgur.com/MaWKWJE.png) * 這是 hw3 的 spec ![](https://i.imgur.com/5GjS9GH.png) 2. 輸入的字串部分只會用雙引號括(")起來嗎,還是有單引號(')或是反單引號 (`)? * 辛苦了~ A4: 1. 要 2. 雙引號 我們的想法是,把雙引號也一併存起來,這樣可以避免修改太多東西,用where比較時也可以直接拿去比對。不過你太閒的話也是可以對字串進行處理,只要輸入輸出對的上我們的測資就行。 > TA --- Q5: 請問 \<conditions\>裡的Operator前後會用空格隔開嗎? 因為有些testcase是有隔開的 像是```logical/t2.txt:select * from table where id >= 2 and age >= 10``` 但是 spec 上的都是沒有隔開的 例如```select * from table where age<21 or age>22``` A5: 兩種情況都會有 > TA --- Q6: 請問testcases/delete中 t5.txt的第7行 `delete from table where age>23 or id="user2"` 是否應改為 `delete from table where age>23 or name="user2"` 還有 t6.txt的第7行 `delete from table where user="user2"` 是否應改為 `delete from table where name="user2"` >0616309 A6: 感謝你發現錯誤 已經加在patch-0.0.006 > TA --- Q7:請問這次作業有需要上傳到gitlab嗎? A7: 請看Q3 > TA --- Q8:請問我們需要修改`Table.c`中的`archive_table`這個function嗎? 因為這次作業中需要支援`update`以及`delete`,若用的是`./shell <filename>`,且有`update`或`delete`影響到原本在`filename`中的資料,寫回檔案應該不能只寫後半部分`fwrite((void *)(table->users+archived_len))`? >0410766 A8:沒有限制只能改哪裡,只要最後system test有過就好 > TA --- Q9: 如果update query要改的id已經存在在table裡面,該query就不會生效嗎? A9: 沒錯 > TA 續Q9: | id | name | email | age | |--|--|--|--| |1|user1|user1@gmail|20| |2|user2|user2@gmail|20| 請問`update table set id=3 where age=20` 結果應該是(部分有效) | id | name | email | age | |--|--|--|--| |3|user1|user1@gmail|20| |2|user2|user2@gmail|20| 還是(整個Query無效) | id | name | email | age | |--|--|--|--| |1|user1|user1@gmail|20| |2|user2|user2@gmail|20| >0410766 A9: Query無效,當where找到超過一筆資料而又是改primary key的話,整個query直接無效 > TA --- 續Q5:請問我們需要處理and/or前或後沒有空格的情況嗎? 例如: where age<20or30<age或是age<20or age>30 A: 不用 > TA --- Q10:請問本次作業最後的分數會考慮測資運行的時間嗎? A10: 不會,但也不能跑到天荒地老 > TA --- Q11: sum avg count這些只會有一行輸出的也要考慮offset跟limit嗎? Q11: 要,除非改動很大,不然都會參考MySQL的輸出 ![](https://i.imgur.com/jw9i8FY.png) > TA --- Q12: 1. 這次作業要考慮到一次 update 可以改一個以上的 column 嗎?如果有的話是用都號隔開嗎,如果是用都號隔開的話,逗號兩邊有可能有用空白鍵隔開嗎? ex. ``` update table set email="user4@example.xyz",name="123" where name="user4" update table set email="user4@example.xyz" ,name="123" where name="user4" ``` 2. 續Q5,update 的 set 中的等於,兩邊有可能有空白嗎,ex. `set name = "123"` A12: 1. 只需要update到一個column就好 2. 不會 > TA --- Q13: 這次的 table 好像沒有浮點數的欄位?因為age與都是 integer 對嗎? > 0410861 A13: 沒有浮點數的欄位,但是運算像是avg等會有浮點數 > TA --- Q14: 輸入中 conditions 的格式一定是左邊的operand是field name右邊的operand是literal嗎?會不會有`select * from table where 3=id` 或 `select * from table where 1 < 3` 或 `select * from table where id > age` 之類的情況出現 A14: 這次作業不會有這類情況 > TA --- Q15: 請問需要處理 `select avg(age), email from table` 這類的情況嗎(aggregate跟正常的field一起用)? A15: Aggregation不會跟一般欄位一起出現 > TA --- Q16: 請問會有 *(operation or operation) and operation* 的情況嗎? A16: 請參考Q1 > TA --- Q17: 請問Aggregation Functions是否只需要考慮age的部分?因為做id的sum和avg有點奇怪。 A17: 雖然是有點奇怪,但正常你的Aggregation應該要能處理所有的欄位 > TA --- Q18: 1. 續Q1的問題,query只會有一個and或是一個or的意思可以理解成:我們需要處理的where後面的條件最多只會有2個嗎? 2. 想請問會測試錯誤測資嗎? 比如說where name=1(應該要是where name="1")? 謝謝助教> < A18: 1. 是,我們測資最多只會兩個condition 2. 不會,我們不會特別去測這種明顯格式錯誤的query,更多是測各種組合使用 > TA --- Q19: 1. aggregation function 一次會用超過一個嗎,select sum(id), avg(id) ...,會的話是跟 mysql 一樣用逗號隔開?會有空白嗎? 2. 續 Q17,name, email 應該只有可能用 count 對嗎? 3. aggregation function 的兩個括弧旁邊有可能有空白嗎,ex.select sum ( id ) A19: 1. 會有超過一個的,用逗號隔開,至於有沒有空白,比照projection,如果你是用助教寫的作業2公版而不是繼續用你原本的寫下去的話,空跟不空應該是沒差 2. 是,抱歉我忘記了還有count 3. 不會 > TA --- Q20: 續Q19之1,假設有超過1個aggregation function,其輸出格式是(100,20.000)之類的嗎? A20: 對 > TA --- Q21:不好意思,請問假如count(age) 的時候,有兩個人age都是22,那在count的時候會是2,還是1呢? A21: 2 > TA --- Q22: 請問,我如果要補上patch,是要從 `git pull --rebase origin patch-0.0.001` 到 `git pull --rebase origin patch-0.0.006` 全部的command都run過一遍嗎 還是只要run最後一個patch就好了 不太理解rebase是怎麼運作的 A22: 如果你有重新抓一次助教給的simpleDBMS就只需要做patch005 patch006就好 rebase的機制請自行 google search 或者拿找到但不理解的東西來問 > TA --- Q23: HW3助教給的sample code 如果下`select * from table limit 2 offset 1`出來的結果是錯的 但是`select * from table offset 1 limit 2`是對的 這個需要自己修正嗎? 或應該問 ![](https://i.imgur.com/FAhDXji.jpg) 這樣子寫,是代表where, offset, limit一定照著這個順序嗎? A23:後面的描述是對的 > TA --- Q24: 請問update的測資也會有 set name=“user1" 和set name = "user1"兩種情況嗎 A24:不會 不過如果都處理就沒事了XD > TA --- Q25: 請問雙引號夾住的字串中會有空白嗎 e.g. "a bc"這種的 A25: 不會 > TA --- Q26: 關於一個小問題,在執行shell的時候,假如直接輸入enter會造成整個程式crash,原因是在read_input的時候已經把'\n'轉換成'\0',所以在parse_input的時候,strtok,出來的結果會是NULL,然後沒有檢查是否為NULL,就接下來後面的比對,就會crash,只是一個小小的問題。不好意思,辛苦惹~ A26: 感謝你發現這個bug 不過測試中不會有這種狀況 下次的版本會更新這個錯誤 > TA --- Q27: 不好意思再確認一次`update`中`set xxx=yyy`中` = `兩邊有沒有空白呢?Q12-2 和 Q24的回答似乎不一樣? A27: 不會有空白 助教統一update的規格了 > TA --- Q28: 請問會有db中沒有任何資料 卻使用aggregation function的情況嗎? 如果會有 sum 跟 avg 的值該是多少 (count很明顯是0) A28: 都是0 不過我們不會做這個測試 --- Q29(續Q5): 我了解會有 `select * from table where age<21` (operator左右都沒有空格) 也會有 `select * from table where age < 21` (operator左右都有空格) 那會不會有 `select * from table where age< 21` 或是 `select * from table where age <21` 呢? (operator左或右其中一個有空格) >借問,請問會不會有10<age這種情況? 就是fields在判斷式的後面 回覆借問: Q14有講到這個狀況 > 0516028 但助教我原本的問題還沒被解答QQ A29:`select * from table where age< 21`跟`select * from table where age <21`都有可能出現,助教有可能手殘XD > TA --- Q30: 不好意思,剛剛看到Q27的回答,想再問一下 A30: 已經存在測資裡面的就會有 where 照舊 > TA --- Q31: Q17說理論上aggregation function應該要能處理所有的欄位,那像是avg(name), sum(email)這種的要怎麼處理?是不是應該要限制sum, avg只能對數字類別的column做運算?只有count才是應該要對所有的column? A31:我認為助教說的Aggregation應該要能處理所有的欄位,應該是在型態正確的前提下,應該不會有avg(name), sum(email)這類的測資 A31:上面的回答是對的 我們不會刻意弄奇怪的測資 > TA --- Q32: 助教請問如果是用自己寫的HW2來改而沒有使用sample的話,測試時只要把新的test資料夾複製到我自己HW3的資料夾底下就可以了嗎?我這樣做完之後跑測試時update會出現找不到路徑的問題(其他測資都可以正常運行) ``` Starting test suite ``update`` Traceback (most recent call last): File "test/system/system_test.py", line 91, in <module> main() File "test/system/system_test.py", line 87, in main ret = execute_testsuite(sys.argv[1], suite_path, suite_out_path, suite_ans_path) File "test/system/system_test.py", line 48, in execute_testsuite is_result_match = filecmp.cmp(out_path, ans_path) File "/usr/lib/python2.7/filecmp.py", line 42, in cmp s1 = _sig(os.stat(f1)) OSError: [Errno 2] No such file or directory: 'test/system/output/update/t1.txt' ``` 補: 我發現如果把testcase裡的資料夾名字改掉不要用update改用其他的就不會有這個問題。我剛剛試著把testcase, answer裡的update改成其他名字就可以正常運行了。希望這個對助教會有幫助。 A32: 正常如果整個複製的話不會出現這個問題,改掉名字就可以...我也不是很理解,你可以寄信給助教約時間來實驗室,我幫你看一下 > TA --- Q33:請問要怎麼處理operator兩邊沒空格的情況,因為我的作法是兩邊都要空格才能判斷,我不知道怎麼讓沒有空格的CMD變成三個東西去處理,或是我GOOGLE關鍵字要怎麼打? 謝謝 A33:GOOGLE關鍵字:字串處理 A:可以查看看strstr, strchr,strndup,...等function的使用方法 --- Q34: 請問用stderr輸出一些資料作為自己的debug資訊,如果保留這些會影響助教評分嗎? A34: 目前我的output redirect只有用到stdout 詳細內容在`hqndle_builtin_cmd()`,不過你最好還是跑一下system test能不能過 如果可以就沒啥問題 > TA --- Q35:助教你好,想請問會有類似select sum(id), avg(id) from table where age>20 and age<23, name="AAAAA" or name="BBBBB" 這種狀況嗎? 另外如果有的話where後面的逗號確切位置會是在哪裡(ex:前後都空白)? A35: 上面有問題提到,只會有兩個condition,不會有你所說的,這種情況 > TA --- Q36:請問這次有需要做 where age-3 > 10(判斷式左或右有包含運算) 或是where age = id嗎? (拜託不要QQQQQQQ) A36: 你不講我們都忘記了還有這些可以玩XD 認真回答,沒有運算!沒有兩個field的比較! > TA --- Q37:請問一次query只會有一個aggregation function嗎? A:請參考A19,會有多個aggregation function. >0410766 --- Q38:想請問輸入的格式,因為在string裡的測資(select * from table where email="user2@example.com")他email="..."是全部連起來的,可是logical裡的測資(select * from table where age < 50 and name = "user3")name = "..."這裡name跟等號是分開的,想問一下有統一的格式嗎?謝謝助教 A39:這問題前面就有人問過囉 答案是兩種都有可能 > TA --- Q39: (續Q22) 想請問字串中是否會包含 "!<>=" 嗎, 例如 name=">w<", email="=w=", name!="|=!\_!=|", 如果可以更明確定義測試資料的 spec 會更感謝~ A39: string中間不會有operator 我們盡量不當壞心眼的助教XD > TA --- Q40: (許願) 希望助教可以提供一的環境讓我們可以輸入測試資料, 回傳助教的程式跑出來的答案, 讓我們比較好有比較的依據 A40: 其實跑system test的結果都在test/output/<test_case>/<test file>裡面 你可以自己查看一下 可以自己新增想要的測資 或是我的回答不是你要的東西? > TA --- Q41: (續Q9) 1. HW3的spec沒有提到需要實作這個部分(考慮primary key),而且這也不是直觀上就會想到要實作的功能,如果沒有看討論區,大概就不知道這個也要寫了吧。但是測資裡面卻有測試這個部分,我覺得不太合理,希望助教可以再思考看看 A41-1: 我不太懂要思考什麼 我們是直接延伸作業二的成果呀 還是你作業二沒寫?? 沒寫可以直接拿助教GitHub上的公版來開發 2. A9的回答是 > 當where找到超過一筆資料而又是改primary key的話,整個query直接無效 這句話的反面意思是指,如果只有找到「一筆資料」,而且是改primary key (ID),就可以update嗎?但這樣子是不是又要考慮update完的那個ID有沒有和現存的ID重複? A41-2: 對 primary key的意思是就是要在table是唯一的阿 作業二有完成的東西你不能下一個作業就說我不要它了吧 > TA 還是說,只要update primary key的時候,query就直接無效? A: 請看上面一句的回答 --- Q42: (1)我注意到助教公版的DBMS HW2有改過command的資料結構,可是我是沿用自己上次作業的成果來寫這次作業的,想請問助教是不是能另外提供一份資料結構沒有更改過的test讓沿用上次作業的人使用呢?不然make check過不了,還是說可以不用make check呢@@ A42: make check不看了 只看system test > TA (2)另外想問,上面有看到aggregation之間會用逗號隔開(可能會沒有空格),如果是用自己原本的繼續寫是不是就"**有必要**"額外處理select fields或aggregation間不會有空格的情況呢?(上次spec跟討論區都沒有提到select field間可能不會有空格) A42: 中間有空白的話 就在strtok(" \n") 改成strtok(" ,\n")而已吧 還是可以用之前你寫的程式碼阿 > TA (ps.個人覺得出這樣有連續性的作業,通常來說就是希望學生一點一點地增加自己作品的完成度,但是現在的做法讓我們幾乎無法使用自己上次的作業,是不是就與這樣的理念相互違背呢?) --- Q43: 請問助教,算平均數之後的小數是限制取到小數點後三位嗎?因為如果我不這樣做 ,會沒辦法過system_test A43: 4這樣沒錯,spec有寫 ![](https://i.imgur.com/4LThkVi.png) >0516206 --- Q44: 請問助教,若有aggregation + (limit or offset) 的sql,那limit 跟offset 算 aggregation 的判斷條件嗎? ex: select sum(id) offset 2 若表格裡有四筆資料,是要算四個的sum還是算兩個的sum就好。 >從A11來看,是要算4個的sum,然後把sum視為一個table再判斷limit offset 用你的例子來說就會沒有輸出(因為sum的table裡面沒有第3筆以後的資料) [name=0516206] --- Q45: 我覺得助教你們很多條件應該在google doc上面就說清楚一些, 而且那些字串處理實在麻煩又沒有意義, 寫個test file應該不是很複雜的工作, 好好打個固定format的test case有這麼困難嗎? 這就一次作業搞得那麼複雜幹甚麼? A45: 可以 為了你的幸福 為了你的睡眠 我修改了測資在patch-0.0.009 > TA --- Q46: 助教安,請問如果select count(age)的話是會count各個age的人數對嗎,例如age=2 有2人,age=3有3人,然後select count(age) from table會print出 (2) (3) 這樣嗎? 另外Q35那個where age>20 and age<23, name="AAAAA" or name="BBBBB" 不是逗號前一個condition後面一個condition嗎(spec上說condition會包含logic operator) A46: 第一個問題 你的理解應該錯了 你解釋的那個是group by 第二個問題 不會有where中間有逗號的這種狀況喔 > TA 續:那請問我的第一個輸出的正確值會是甚麼,請問是(2)嗎? 另外再請教Q45助教說的那個改動是就變成所有測資都變成where age=2這種黏在一起的狀況嗎? A-1:如果table總共有5筆資料 select count(age) from table 結果應該是 (5) A-2: 不是 都分開 id = 2這種 splittable by space 請參考patch-0.0.009 > TA 感謝助教 --- Q47: (跟Q20相關)助教好,請問Q20這種情況下的結果是(100,20.000)還是(100, 20.000)。因為projection的輸出逗號後會有空格,想說是不是比照辦理?謝謝助教 辛苦了 A47: 對 是後者 > TA --- Q42(續):但我並不是用strtok...要用我的版本的話就要把select重寫了@@ 所以想問測資會不會出現fields間沒有空格的情況~(不會的話可能就不會想重寫了哈哈 謝謝助教~辛苦了 A: 不會中間沒有空格 就會依照hw2測資那樣field1, field2, field3, ... 我更新了where測資 等等會發公告 > TA --- Q48: 助教好,請問會有 select count(*), age from table 這種情況嗎? (就是同時projection and aggregation) 謝謝助教 A48: aggregation function跟單獨field同時存在不合理 所以不會有這種情況 > TA --- Q49: 助教你好,根據Q12-2,update set 等號兩旁應該是不會有空白,這跟new e3公告的好像不太一樣? `set name="123"` >溫馨小提醒:助教公告的update age=2應該是update table set age=2吧?(覺得改一下比較好,才不會又有人來問) A49: 這都已經更新在patch-0.0.009裡了 > TA A49:TO助教:公告上還是update set ... 不是update table set ... 耶,這樣還是會讓其他同學誤解吧QQ --- Q50:助教好,想問一下count跟sum要是輸出到小數點第三位(ex:20.000)然後答案是20這樣會算錯嗎? A50: count跟sum用int存就好,所以不會有小數點以下三位的問題 >0516206 --- Q51:助教好,如果select的時候沒有任何一欄符合where的條件,那該print出()還是甚麼都不用print A51: 什麼都不用print >0516206 --- Q52:助教大大你好,我看最近公告裡說不用處理空格了,可是有些人就很早就開始寫了,然後都處理完了,這樣花很長時間,結果突然發現不用處理,這樣會不會有點不公平QQ 要不要考慮看看改成bonus之類的 A52: 是我們考慮不週到,我們會討論看看bonus給多少 > TA (借Q52問) 若where已經有處理空格,但update的set是公告後才做,就沒處理了QQ 請問這樣的話會拿到全部/部分/沒有bonus? --- Q53:請問助教這次作業的評分方式會跟作業2一樣用公開測資和隱藏測資來評分嗎?占分的比重會跟作業2相近嗎? A53: 一樣有隱藏測資 佔分還沒確定 公開的測資至少會佔60% --- Q54: 請問delete會測memory adjustment嗎 (就是delete後留下的hole需不需要做compaction)? A54: 結果對就好了 > TA --- Q55: 助教好,請問patch-0.0.009裡的, test/system/testcases/delete/t5.txt、 test/system/testcases/delete/t6.txt,是不是有錯? 在之前patch-0.0.006有更改過,但現在又變回有錯的了,助教辛苦了 A55: 阿 我忘記了XDDD 我直接從master用的 我現在修改QQ 已經更新了 如果你已經 pull 過可能會發生conflict 不想解conflict可以用rebase drop commit 再重新pull > TA --- Q56:助教好,請問如果原本的testcase都會過可以不patch-0.0.009嗎? A56: 助教好像把 patch-0.0.009 的testcase 覆蓋成 patch-0.0.006 以前的了@@。 14/5 下午12:45 還是舊的: https://github.com/Billy4195/simple_DBMS/blob/patch-0.0.009/test/system/testcases/delete/t5.txt > 0410861 A56: 抱歉 我沒注意到 commit 沒弄好 已經更新了 > TA --- Q57:請問助教能不能清楚的把要用哪些patch,從clone下來到加這些patch的過程列下來,然後發new e3的公告給大家,這樣比較清楚,就是要用那些而已,很簡單不用把command都貼上來給我們(願意的話也可以)。另外,這次作業陸陸續續都有修正,建議如果可以的話,就把剛剛那個公告發了,再來就延長一點時間,以免大家來不及修正,也不會在deadline以後還收到抱怨,這樣做應該好很多。如果不延期的話,那助教們可能要再經歷一次Lab1,2那樣很亂的,然後又搞得你們自己很煩,得不償失。(教授不給你們延期的話,那你們再扛一撥傷害吧XD) --- Q58: 請問助教如果輸入測資是 aggr+where+offset+limit,那我們是先把 aggr+where 的結果當成是一張table,輸出時再判斷 offset+limit 嗎? 還是先將 where+limit+offset的結果當成是一張table,再做aggr? A58: 前者(可以參考Q11 Q44) >0516206 --- Q59:助教好,請問在test裡的include資料夾也包含在繳交範圍內嗎? A59: 那是unit test的東西,可以不用交 > TA --- Q60: 助教打擾了,如果經過反覆delete跟insert,導致Table內Users的id沒有依照順序的話,我如果自行sort會算錯誤嗎? > 0510010 A60: 目前的要求沒有要sort id 所以你自行sort的話可能會出問題唷 你有跑過測試嗎? > TA --- Q61: 助教你好!請問最終的testcase要以哪個為準? ![](https://i.imgur.com/I5A4NrG.png) ![](https://i.imgur.com/JPpHQLQ.png) 照理來說應該是patch 0.0.009對八? 可是patch 0.0.009這邊有錯,就是 t5.txt 的 id = "user2" t6.txt 的 user = "user2" 跟上面有人提到的一樣,只是這次的是分開的 然後應該只要unit test,system test 都過了,where limti offset update的那些排列組合也過了就OK惹八? 也不用處理遇到錯誤的語法的情況齁? A61: 抱歉我沒更新好patch 9 目前patch-0.0.009已經更新了 不需要處理錯誤的語法 > TA --- Q62: 助教好:我更想問的是,如果在patch-0.0.009之前就已經完成作業的同學,到底有沒有必要patch-0.0.009?? 感謝助教~ A62: patch-0.0.009的內容 如果你前面的space有處理好應該沒啥問題 但是hw2_hidden我不確定你有沒有重新確認 > TA 續Q64:但是如果是重新下載助教給的simple_DBMS,為什麼還要測試hw2_hidden呢? A:確定沒有因為加新的而影響到舊的程式吧 > 0410766 A: YES > TA --- Q63: 助教您好,我想確認一下作業的繳交内容,是不是只需要include文件夾裏面的.h文件,src文件夾裏面的.c文件和makefile就可?然後test文件夾不需要一并上傳?謝謝助教~ A63: 我們會直接載下你們繳交的檔案 然後把test的資料夾覆蓋過去 清掉檔案後重新編譯 最後執行system test,請你直接執行同樣流程就可以知道哪些東西需要繳交 之所以不直接講哪些檔案要交 是因為我不知道你們有沒有新增其他檔案 或改動哪些檔案 ``` make clean make ``` > TA --- Q64: 助教你好,我在寫的時候出現了這樣的bug可是真的不知道該怎麼解....不知道是不是我改到什麼不該改的東西... ![](https://i.imgur.com/6Qis8fb.png) Q64: 如果你還有用git的話 git diff可以看你修改了什麼 > TA --- Q65: 助教您好,我在做agg的時候使用strcmp()以及strncmp()等函數,在比對count, sum, avg這三個只要比對成功就會segmentation fault(core dump),可是我在其他地方也使用一樣的函數操作卻不會發生問題(除了aggre以外的system test都過了),請問我可能是遭遇了什麼樣的難關呢? PS:已google過,可能是傳NULL或是字串結尾不是\0的情況,理論上不會是這個原因 A65:你比對成功後沒有呼叫什麼函式嗎? Re:A65 感謝你的回覆^^ 好QQ 感覺看code才知道問題在哪惹~ 我覺得你還是先把哪一行出錯抓出來吧,這樣才知道問題是什麼 然後提醒一下,根據Q19,select avg(XX), sum(XX)是有可能出現的,複數個aggregate這樣 那你command.h裡面跟aggregate有關的變數型態都正確嗎,char**、char*那些~ 因為你在selection state的那邊不是會先把取得的資料存進去cmd.XX.XX,我覺得你aggregate應該也是比照辦理,所以想說你是否資料型態在宣告的時候不小心打錯,可檢查~ 然後我覺得問題蠻模糊的,如果你確認資料都能吃進去然後print出來,再繼續檢查接下來的函式是哪裡有問題 >0410779 A:可以用gdb找看看問題 Re:A65 問題已解決囉~感謝你的幫助 --- Q66: 助教你好,根據前面的問題,aggregation會有複數個,那update是否也會有複數個?(ex:update table set email = "user4@example.xyz", id = 1, where name = "user4") A66: 助教在Q12的回答是說只會update 1 column > 0616309 --- Q77:助教您好,請問在update後面的where條件中,會不會出現and或or? 像是> update table set age = 10 where name = "user1" and email = "user@example.xyz" A67: 這問題很難回答耶,我想聰明的你應該會猜得到吧 > TA --- Q78:助教您好,請問 testcase |-aggre | |-t1.txt | | | | --- Q79:助教您好,如果把其他檔案一起交上去e3上,應該沒關係吧?就是test的那些檔案,還是說只能有include src 以及Makefile?謝謝 A79:整個project交上去是最保險的做法,但我必須提醒你,交上去以後還是載下來make看看,檢查跑不跑得動,這次我們因為把作業延期了,所以不會再接受任何補demo的說法,行就是行,不行就是不行 > TA --- Q80:嗨嗨~ 請問where的判斷需要考慮資料型態嗎? 例如 where 1 = "1" 算是true還是false? A80: 我不太理解你的問題,但不會有你舉例的情況,左邊只會是欄位 > TA --- Q81:請問在MAKE CHECK時出現原本給的原始檔案就有的WARNING應該不會扣分吧?如下圖 ![](https://i.imgur.com/CdOtaEH.png) A:這次不看make check 哦(可以參考Q42) > 0616091 --- Q82:請問助教我可以像作業2那樣直接把整個projct資料夾壓縮後交上去嗎?也就是不用特地挑選檔案出來交? A82: 參考A79 > TA --- Q83:請問助教如果遇到system test全部fail,但手動餵測資都正確的狀況該怎麼處理呢?問了兩個同學他們都不清楚qq A83:看test/system/output裡面的檔案內容差異 不然就用vimdiff來查看 RE83:謝謝助教!搞定了! > TA --- Q84:請問我在執行make clean時遇到以下問題該怎麼解決呢? ![](https://i.imgur.com/boLqQny.png) A84: 看起來沒啥問題 那個錯誤是因為沒有unit test的檔案 但是那個錯誤會被忽略 最後shell有被刪掉就好 > TA --- Q85:請問助教,在做sum的時候,如果沒有找到符合where條件的,要output (0) 還是什麼都不output呢? 另外,在count的時候也是,如果沒有符合的,要output (0) 還是也是什麼都不output呢? 感謝助教。 --- Q86:想請問一下如果在執行MAKE時出現一大堆WARNING(如下圖),但是SHELL可以順利被產生,MAKE CLEAN時SHELL也可以被清除,進行SYSTEM TEST的時候也可以執行,這樣應該就是算好了吧? MAKE有很多WARNING ![](https://i.imgur.com/qb3vnkT.png) SYSTEM TEST可以被執行 ![](https://i.imgur.com/EA67M4I.png) A:應該沒問題,不過養成把Warning清乾淨的習慣比較好喔XD >0410766 ---