Rencana Kerja & Roadmap: Grup Query Processor
Dokumen ini merinci rencana eksekusi, pembagian tugas, prasyarat, dan milestone untuk komponen Query Processor (QP). Versi ini telah direvisi untuk mempercepat pengerjaan, meratakan beban kerja, dan mengakomodasi pengerjaan fitur bonus.
1. Tinjauan Umum & Misi
Misi: Misi Grup “Bash” adalah menjadi “jantung” dan “otak” dari mDBMS. Kita adalah koordinator utama yang menerima string query dari pengguna, mengorkestrasi semua komponen lain (QO, SM, CCM, FRM), dan mengembalikan hasil akhir.
File Utama Kita:
-
apacy/query-processor/src/main/java/com/apacy/queryprocessor/QueryProcessor.java: Koordinator utama. -
apacy/query-processor/src/main/java/com/apacy/queryprocessor/PlanTranslator.java: Penerjemah rencana QO. -
apacy/query-processor/src/main/java/com/apacy/queryprocessor/execution/: Eksekutor algoritma (JOIN, ORDER BY). -
apacy/query-processor/src/main/java/com/apacy/queryprocessor/Main.java: Titik masuk CLI.
2. Prasyarat & Strategi “Sandbox”
Prasyarat #1: Kontrak common yang Stabil
Kita berasumsi semua interface dan DTO di apacy/common/sudah FINAL.
Prasyarat #2 (TUGAS PERTAMA): Membuat Mock Components
Kita wajib membuat “Komponen Palsu” (Mocks) untuk menguji logic kita secara independen.
-
Tugas: Buat package baru:
apacy/query-processor/src/test/java/com/apacy/queryprocessor/mocks/ -
Isi:
-
MockStorageManager implements IStorageManager -
MockQueryOptimizer implements IQueryOptimizer -
MockConcurrencyControl implements IConcurrencyControlManager -
MockFailureRecovery implements IFailureRecoveryManager
-
-
Contoh Implementasi:
-
MockQueryOptimizer.parseQuery(...)akan mengembalikanParsedQuerydummy untukSELECT * FROM users JOIN .... -
MockStorageManager.readBlock(...)akan selalu mengembalikanList<Row>dummy untuk kita tes. -
MockConcurrencyControl.validateObject(...)akan selalu mengembalikannew Response(true, "Mock OK").
-
3. Aturan Kerja & Naming Convention
(Tidak ada perubahan)
Format Penamaan Branch
-
Format:
feat/query-processor/<nama-fitur-singkat> -
Contoh:
feat/query-processor/implement-nested-loop-join
Aturan Emas common/
Jika ada perubahan di common (misal: ParsedQuery.java):
-
Buat branch baru:
feat/common/add-field-to-parsed-query. -
Lakukan perubahan.
-
Minta review dan approval dari SEMUA 5 PIC GRUP sebelum merge.
4. Pembagian Tugas & Arsitektur Internal (Tim 4-5 Orang)
| Peran | PIC (Orang) | File Utama yang Dipegang | Deskripsi Tugas |
|---|---|---|---|
| Koordinator / PIC Integrasi | Person 1 | QueryProcessor.java | Memegang alur executeQuery(). Menjahit semua komponen. Implementasi logic transaksi try-catch-finally. Mengerjakan bonus LIMIT & BEGIN/COMMIT. |
| Penerjemah Rencana | Person 2 | PlanTranslator.java | Menerjemahkan ParsedQuery (dari QO) menjadi DTOs (DataRetrieval, DataWrite) untuk SM. Mengerjakan bonus INSERT, DELETE, CREATE/DROP TABLE, AS. |
| Spesialis Join | Person 3 | execution/JoinStrategy.java | Fokus murni pada implementasi algoritma JOIN (Nested Loop, Hash Join, Sort-Merge Join). |
| Spesialis Sort | Person 4 | execution/SortStrategy.java | Fokus murni pada implementasi algoritma ORDER BY (In-memory sort) |
| QA & CLI (Jika 5 org) | Person 5 | Main.java, *Test.java, mocks/* | Bertanggung jawab membuat & merawat Mock Components. Membuat CLI interaktif. Menulis test case untuk fitur wajib & bonus. |
5. Roadmap & Kejaran per Milestone (REVISI V2.0)
Minggu 0: Persiapan (Sekarang s/d 7 Nov)
-
Tujuan: Menyiapkan sandbox testing.
-
Tugas:
-
(Person 5/1) Membuat 4 Mock Components di
src/test/java/. -
MockQueryOptimizer.parseQuery()harus bisa mengembalikanParsedQuerydummy untuk semua skenario (SELECT, UPDATE, JOIN, INSERT, DELETE, CREATE). -
MockStorageManager.readBlock()harus bisa mengembalikanList<Row>dummy.
-
-
Branch:
feat/query-processor/setup-mock-components
Milestone 1 (Target: 12 Nov, Deadline Asli: 13 Nov)
-
Tujuan: Alur “Read Path” (
SELECT) berfungsi & Algoritma Inti (JOIN,SORT) Wajib Selesai. -
Tugas:
-
Person 1 (Koordinator):
-
Isi
QueryProcessor.javauntuk meng-inisialisasi 4 Mock Components. -
Isi
QueryProcessor.executeQuery()untuk alurSELECTWajib (SELECT...FROM...WHERE...). -
Alur:
QO.parseQuery()→QO.optimizeQuery()→CCM.beginTransaction()→PlanTranslator.translateToRetrieval()→CCM.validateObject(..., READ)→SM.readBlock()→CCM.endTransaction(true)→ KembalikanExecutionResult.
-
-
Person 2 (Penerjemah):
- Implementasi
PlanTranslator.translateToRetrieval()(Hanya untukSELECTWajib).
- Implementasi
-
Person 3 (Join):
-
Implementasi
JoinStrategy.nestedLoopJoin()(Fitur Wajib). -
Buat unit test sendiri menggunakan
List<Row>dummy dariMockStorageManager.
-
-
Person 4 (Sort):
-
Implementasi
SortStrategy.sort()(Fitur WajibORDER BY). -
Buat unit test sendiri menggunakan
List<Row>dummy.
-
-
Person 5 (QA/CLI):
- Implementasi loop CLI dasar di
Main.java.
- Implementasi loop CLI dasar di
-
-
Kejaran: (1) CLI bisa menjalankan
SELECTdummy. (2) Algoritma wajibnestedLoopJoindansortlolos unit test.
Milestone 2 (Target: 19 Nov, Deadline Asli: 20 Nov)
-
Tujuan: Alur “Write Path” (Wajib & Bonus) & Mulai Kerjakan Bonus Algoritma.
-
Tugas:
-
Person 1 (Koordinator):
-
Integrasikan
JoinStrategydanSortStrategyyang sudah jadi ke alurSELECT(dipanggil setelah data diterima dariSM.readBlock()). -
Tambahkan
if/elsediexecuteQueryuntuk menanganiParsedQuery.queryType():-
UPDATE(Wajib) -
INSERT(Bonus) -
DELETE(Bonus)
-
-
-
Person 2 (Penerjemah):
-
Implementasi
PlanTranslator.translateToWrite()(untukUPDATEdanINSERT). -
Implementasi
PlanTranslator.translateToDeletion().
-
-
Person 3 (Join):
- Mulai implementasi bonus
hashJoinatausortMergeJoin.
- Mulai implementasi bonus
-
Person 4 (Sort):
- Mulai implementasi bonus
externalSort.
- Mulai implementasi bonus
-
-
Kejaran:
SELECT ... JOIN ... ORDER BY ...(fitur wajib) berfungsi penuh di memory QP. AlurUPDATE(wajib) sertaINSERT&DELETE(bonus) berhasil memanggil method yang benar di Mock SM.
Milestone 3 (Target: 26 Nov, Deadline Asli: 27 Nov)
-
Tujuan: Integrasi Penuh Transaksi (ACID) & Pengerjaan Bonus Lanjutan.
-
Tugas:
-
Person 1 (Koordinator):
-
Refaktor Besar
executeQuery(): Implementasitry-catch-finallyuntuk full transaction handling (dijelaskan di v1). -
Implementasi bonus
LIMIT(mudah,List.stream().limit(...)sebelumreturn). -
Implementasi bonus
BEGIN TRANSACTION/COMMIT(advanced stateful transaction).
-
-
Person 2 (Penerjemah):
-
Implementasi bonus
CREATE TABLE/DROP TABLE(alur DDL baru). -
Handle bonus
AS(alias) yang datang dariParsedQuery.
-
-
Person 3 & 4 (Join & Sort):
- Finalisasi fitur bonus algoritma.
-
Person 5 (QA/CLI):
-
Buat test case untuk semua fitur bonus (
INSERT,DELETE,CREATE,LIMIT, dll). -
Perbarui
MockConcurrencyControlagar bisareturn new Response(false, ...)untuk menguji alurcatch(rollback) diexecuteQuery.
-
-
-
Kejaran: Alur transaksi ACID (Atomicity, Consistency) terimplementasi penuh. Error apa pun akan memicu rollback.
Milestone 4 (Target: 3 Des, Deadline Asli: 4 Des)
-
Tujuan: Integrasi Final (Mengganti Mock), Bonus, & Laporan.
-
Tugas:
-
Person 1 (Koordinator):
-
Integrasi Final: Ganti
new MockStorageManager()dengannew StorageManager(). Gantinew MockQueryOptimizer()dengannew QueryOptimizer(), dst. -
Lakukan testing end-to-end besar-besaran dengan komponen asli.
-
-
Semua:
-
Bug fixing hasil integrasi (pasti ada).
-
Menulis bagian Laporan Akhir untuk komponen Query Processor.
-
-
-
Kejaran: Sistem mDBMS berfungsi penuh secara end-to-end dengan semua komponen asli.