miniDB Issues 2022-2023 [Contributors: - Bourdos Konstantinos P16093 & Karaoglanian Grigoris P16044] #224
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Contributors: - Bourdos Konstantinos P16093 & Karaoglanian Grigoris P16044
_____________________________________________________________________________________________
1 - Enrich WHERE statement by supporting (a) NOT and BETWEEN operators
(5/50) and (b) AND and OR operators (10/50)
a) Για την υλοποίηση του between παρατηρήσαμε οτι αρκεί να parsarουμε το condition σhτν table.py σε περίπτωση που έχει column_name between value1 and value2 και να το μετατρέψουμε σε column_name >= value1 and column_name <= value2
Για την υλοποίηση του NOT αρχικά έπρεπε να προσθέσουμε μία συνάρτηση στο misc.py, η οποία όταν ο quuery parser θα ανιχνεύει το "ΝΟΤ" θα αντριστέφει τον operator της συνθήκης
Το parsαρισμα του ΝΟΤ έγινε κατα την διάρκεια ελέγχου εκτέλεσης του and και του or.

Σε αυτό το κομμάτι κώδικα, αφού έχουμε σπάσει τις συνθήκες στα and και τα or ελέγχουμε έαν η κάθε επιμμέρους συνθήκη περιέχει κάποιο not, σε περίπτωση που έχει, αντιστρέφουμε τον operator με την not_op, ξανασυντάσουμε την συνθήκη και συνεχίζουμε την διαδικασία.b) Για την υλοποίηση του AND και του OR παρατηρήσαμε την λειτουργεία της table.py για την εκτέλεση του condition και προσθέσαμε τα κατάλληλα κομμάτια κώδικα. Πιο συγκεκριμένα:
SELECT
Στο select ελέγχουμε έαν το condition δεν περιέχει κάποιο ' and ' αν δεν περιέχει, τότε σπάμε το condition σε όποια or μπορεί να έχει. Αυτό γίνεται γιατί κατα το select μας ενδιαφέρει να μαζέψουμε όλους τους δείκτες που θα δείξουν στα δεδομένα μας, ανεξαρτήτως ποιά συνθήκη ικανοποιούν. Οπότε σε αυτό το block κώδικα ενσωματώνεται και το απλό condition ( ex. col_name = val ). Με αυτή την διαδικασία μαζεύουμε τους επιμέρους δείκτες για όλες τις ξεχωριστές συνθήκες και ύστερα κρατάμε την ένωση τους χωρίς τα duplicates.
Σε περίπτωση που έχουμε and τότε πηγαίνουμε στο else κομμάτι όπου και υλοποιείται η διαδικασία για το and. Εδώ σπάμε την συνθήκη στο and, μαζεύουμε όλους τους δείκτες για την κάθε συνθήκη σε ξεχωριστές λίστες, ύστερα δημιουργούμε ένα σύνολο απο την τομή τους και εφαρμόζουμε το select.
UPDATE
Για το update, μιας και πάλι στο table.py ομαδοποιούνται όλοι οι δείκτες για την ανάκτηση των εγγραφών απο τον πίνακα υλοποιήσαμε μια παρόμοια διαδικασία. Αφού ελέγξαμε για NOT, ύστερα ελέγξαμε έαν περιέχετε AND στο condition. Σε περίπτωση που περιέχεται σπάμε την συνθήκη στα AND και μαζέυουμε την τομή των δεικτών τον επιμέρων εντολών. Αν δεν περιέχετε OR κάνουμε την ίδια διαδικασία με το SELECT.
DELETE
Χρησιμοποιήθηκε η ίδια διαδικασία για την υλοποίηση της εκτέλεσης AND και OR στην delete, μιας και η delete_where χρησιμοποιεί και αυτή τους δείκτες για να διαγράψει τις εγγραφές.
2 - Enrich indexing functionality by supporting (a) BTree index over unique (non-PK) columns (10/50)
Για την υλοποίηση του BTree σε unique column, έπρεπε αρχίκα να υποστηρίζεται η ανάθεση μιας κολώνας ως unique. Αυτό υλοποιήθηκε στην create_query_plan που περιέχεται στo mdb.py.
Στη συνέχεια αρχικοποιήσαμε δύο μεταβλητές unique_column και unique_column_names στον constructor της
Ύστερα προστέθηκε το unique στον constructor της table.py.
Αλλαγή της κλήσης table.py από το database.py
Έλεγχος στην insert σε περίπτωση που κάποιος προσπαθήσει να εισάγει ίδια τιμή σε στήλη unique
Προσθέσαμε και σhτν συνάρτηση show την λειτουργία ώστε να εμφανίζει κατα την εκτύπωση #UNQ# σε περίπτωση που η κολώνα είναι unique
Τέλος προσθέσαμε στην select του database.py τους απαραίτητους ελέγχους που χρειάζεται ώστε να ψάξει με την χρήση του BTree σε περίπτωση που υποστηρίζεται.
Απαραίτητος έλεγχος στο create_index πριν την υλοποίηση του index