ΕΡΓΑΣΙΑ ΣΔΒΔ ΣΕΠΤΕΜΒΡΙΟΣ 2023 #232
Open
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.
ΟΜΑΔΑ:
Καπινιάρης Χρυσοβαλάντης Γεώργιος - Π20229
Κουρτίδης Γεώργιος - Π20101
Περιστεράκη Μαρία - Π20159
ΠΕΡΙΓΡΑΦΗ:


#issue 1
_parse_condition
Στην parse_condition έγιναν αλλαγές για να αναγνωρίζεται όχι μόνο η μορφή "column-operator-value" αλλά και η μορφή "value-operator-column".
Ελέγχει αν το column βρίσκεται στο δεξί ή στο αριστερό μέρος του operator, ελέγχοντας αν υπάρχει μέσα στο table ως όνομα κάποιου column. Επιστέφει το αποτέλεσμα σε μορφή "column-operator-value".
split_condition


Στο split_condition έγιναν αλλαγές για την υποστήριξη του "not". Αν το condition ξεκινά με "not" , το διώχνει τελείως και κάνει μια μεταβλητή negate=-1. Αν το negate είναι -1 αντιστρέφει το operator του condition ως εξής:
replace_between

Η replace between αντικαθιστά τα "BETWEEN" queries με "AND". Αυτό επιτυγχάνεται αφού το between είναι ένα and που γίνεται μεταξύ 2 τιμών σε ένα column.
select_where
Στην αρχή μετατρέπουμε τυχόν "between" queries σε "and" και κάνουμε split το condition πάνω σε τυχόν "or".
Στη συνέχεια αφαιρούμε τυχόν "not" και αν υπάρχει "not" στην αρχή του condition, αντιστρέφουμε το αποτέλεσμα που θα έφερνε το query.
Για το and παίρνουμε τα αποτελέσματα και των δυο μελών του and και επιστέφουμε το σύνολο τους.
select * from instructor where salary>50000 and salary<80000
select * from instructor where not id=10101

select * from instructor where id between 15000 and 46000

select * from instructor where salary=65000 or salary=90000

To delete_where και το update_rows γίνονται με τον ίδιο τρόπο με το select.








delete_where
update_rows
#Issue 2



unique column support
Για να δουμε αν ενα column ειναι unique οταν δημιουργητε ενας νεος πινακας στην create_query_plan μπήκαν οι παρακάτω γραμμές στο if action="create_table"
προστέθηκε επισης ενα σημαδι ώστε να φαινεται αν ενα column ειναι unique
indexes
Αρχικά προστέθηκε στο select στο database.py κώδικας που θα μας επιτρέψει να βρουμε σε ποιο column αναφέρεται το query ωστε σε περίπτωση που ειναι ενα με index να πράξουμε αναλόγως.
Αφου πάρουμε τη στηλη αν υπαρχει καποιο index πανω σε αυτη τη στηλη ελεγχουμε αν το index ειναι hash ή btree και καλουμε την κατάλληλη συνάρτηση.
Συγκεκριμένα στο hash index, εφοσον το hash δεν υποστηρίζει ερωτήσεις διαστήματος θα πάει μεσω του index μονο αν η ερωτηση ειναι ταυτοτητας.
create_index




Αρχικά ελέγχετε αν το column στο οποιο θελουμε να φτιαξουμε index ειναι primary key ή unique. Στη περίπτωση που δεν είναι βγάζει exception.
Στη συνέχεια αν δεν υπάρχει ήδη κάποιο index με το ίδιο όνομα φτιάχνει ένα καινούργιο index ανάλογα με τον τύπο index Που του δόθηκε.
construct_index
Παίρνει κάθε τιμή του column και το βάζει μέσα στο index.
#issue 3

Δημιουργήθηκε ένα καινούργιο αρχείο equivalent_ra.py το οποίο περιέχει τους κανόνες σχεσιακής άλγεβρας και με την χρήση του dic[] μπορούμε να αλλάζουμε το query στα ενναλακτικά του.