Skip to content

Conversation

kosbourdos
Copy link

@kosbourdos kosbourdos commented Feb 20, 2023

146045747-5dbdce9c-a70a-494b-8fdd-52ba932cdd19

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

  • Screenshot από την υλοποίηση κώδικα (χρησιμοποιήθηκε το ίδιο κομμάτι στο select, update και delete)

BETWEEN

  • Screenshot from execute on testing db

between execute

Για την υλοποίηση του NOT αρχικά έπρεπε να προσθέσουμε μία συνάρτηση στο misc.py, η οποία όταν ο quuery parser θα ανιχνεύει το "ΝΟΤ" θα αντριστέφει τον operator της συνθήκης

  • Screenshot της συνάρτησης not_op(op)

Screenshot 2023-02-20 at 10 37 31 PM

Το parsαρισμα του ΝΟΤ έγινε κατα την διάρκεια ελέγχου εκτέλεσης του and και του or.

  • Screenshot από το κομμάτι κώδικα

Screenshot 2023-02-20 at 10 39 53 PM

Σε αυτό το κομμάτι κώδικα, αφού έχουμε σπάσει τις συνθήκες στα 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.

  • Screenshot κώδικα

SELECT OR

  • Screenshot from SELECT...WHERE ... OR ... execution

simple or execute

Σε περίπτωση που έχουμε and τότε πηγαίνουμε στο else κομμάτι όπου και υλοποιείται η διαδικασία για το and. Εδώ σπάμε την συνθήκη στο and, μαζεύουμε όλους τους δείκτες για την κάθε συνθήκη σε ξεχωριστές λίστες, ύστερα δημιουργούμε ένα σύνολο απο την τομή τους και εφαρμόζουμε το select.

  • Screenshot κώδικα

SELECT AND

  • Screenshot from SELECT ... WHERE ... AND ... execute

simple and execute

UPDATE

Για το update, μιας και πάλι στο table.py ομαδοποιούνται όλοι οι δείκτες για την ανάκτηση των εγγραφών απο τον πίνακα υλοποιήσαμε μια παρόμοια διαδικασία. Αφού ελέγξαμε για NOT, ύστερα ελέγξαμε έαν περιέχετε AND στο condition. Σε περίπτωση που περιέχεται σπάμε την συνθήκη στα AND και μαζέυουμε την τομή των δεικτών τον επιμέρων εντολών. Αν δεν περιέχετε OR κάνουμε την ίδια διαδικασία με το SELECT.

  • Screenshots απο τα block κώδικα στην update_rows

UPDATE AND

UPDATE OR

DELETE

Χρησιμοποιήθηκε η ίδια διαδικασία για την υλοποίηση της εκτέλεσης AND και OR στην delete, μιας και η delete_where χρησιμοποιεί και αυτή τους δείκτες για να διαγράψει τις εγγραφές.

  • Screenshots από τον κώδικα

DELETE AND

DELETE OR

  • Κάποιες ακόμα σύνθετες εντολές για το testing όσον προστέθηκαν παραπάνω

cond and not cond execute

Screenshot 2023-02-20 at 11 02 50 PM

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.

  • Screenshot απο το κώδικα που γίνεται το parsing του unique
    Screenshot from 2023-02-20 23-00-02

Στη συνέχεια αρχικοποιήσαμε δύο μεταβλητές unique_column και unique_column_names στον constructor της
Ύστερα προστέθηκε το unique στον constructor της table.py.

  • Screenshot απο τον constructor της table.py
    Screenshot from 2023-02-20 23-04-41

Αλλαγή της κλήσης table.py από το database.py

  • Screenshot απο την κλήση του constructor της table.py

Screenshot from 2023-02-20 23-02-11

Έλεγχος στην insert σε περίπτωση που κάποιος προσπαθήσει να εισάγει ίδια τιμή σε στήλη unique

  • Screenshot απο τον κώδικα που υλοποιήθηκε
    Screenshot from 2023-02-20 23-06-27

Προσθέσαμε και σhτν συνάρτηση show την λειτουργία ώστε να εμφανίζει κατα την εκτύπωση #UNQ# σε περίπτωση που η κολώνα είναι unique

  • Screenshot απο τον κώδικα που υλοποιήθηκε
    Screenshot from 2023-02-20 23-12-50

Τέλος προσθέσαμε στην select του database.py τους απαραίτητους ελέγχους που χρειάζεται ώστε να ψάξει με την χρήση του BTree σε περίπτωση που υποστηρίζεται.

  • Screenshot απο τον κώδικα που υλοποιήθηκε
    Screenshot from 2023-02-20 23-11-05

Απαραίτητος έλεγχος στο create_index πριν την υλοποίηση του index

  • Screenshot απο τον κώδικα που υλοποιήθηκε

Screenshot 2023-02-21 at 12 09 26 AM

@kosbourdos kosbourdos changed the title RDBMS Issues 2022-2023 [Contributors: - Bourdos Konstantinos P16093 & Karaoglanian Grigoris P16044] miniDB Issues 2022-2023 [Contributors: - Bourdos Konstantinos P16093 & Karaoglanian Grigoris P16044] Feb 20, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants