Skip to content

Conversation

Swixyy
Copy link

@Swixyy Swixyy commented Feb 20, 2023

Στην εργασία αυτή υλοποιήθηκαν τα 2 ερωτήματα στο Issue #1.

Issue 1a.
#1 - Enrich WHERE statement by supporting (a) NOT and BETWEEN operators
(5/50)

Για την προσθήκη του NOT operator χρειάστηκε να τροποποιήσω το αρχείο misc.py.
Στις συναρτήσεις get_op και split_condition πρόσθεσα την εντολή not':operator.ne προκειμένου να μπορούν να δεχτούν και το NOT τα ερωτήματα sql. Εσωκλείω αντίστοιχο screenshot.
image

Issue 1b.
Enrich WHERE statement by supporting AND and OR operators (10/50)

Προκειμένου να προσθέσω τα operators AND και OR χρειάστηκε να τροποποιήσω τα αρχεία table.py και database.py
Στο database.py στην συνάρτηση select ελεγεχεται η υπαρξη καποιου or, and, between και στην περιπτωση που υπαρχει θα εκτελεστει η συναρτηση .split"", να απομονωθει ο operator και να εκτελεστει ο κωδικας σε μορφη sql.
στο αρχειο table.py προσθεσα την συναρτηση _select_where.

Οσον αφορα το between απομονωνω την καθε "τιμη" της εντολης μεσα σε μεταβλητες προκειμενου να τυπωθει το αποτελεσμα κανοντας ελεγχο δεξια και αριστερα του and ωστε να δεχεται το προγραμμα μονο αριθμους για να εκτελεστει σωστα το between. Αν ειναι τοτε προσθετω στον πινακα rows[] την τιμη της συνθηκης και εμφανιζεται μετα το τελος του if condition is not none.
image

image

Issue 2a.
#2 - Enrich indexing functionality by supporting (a) BTree index over unique
(non-PK) columns (10/50)

Προκειμενου να μπορεσουν να υποστηριχθουν μοναδικα πεδια στους πινακες, προστεθηκαν τα πεδια uk_idx και uk σε καθε πινακα και για να αποθηκευτει το ονομα της στηλης οταν δημιουργείται το ευρετηριο προστεθηκε το column_name.

Στo mdb.py, εχει προστεθει ελεγχος για μοναδικα πεδια τα οποιο οριζονται ως unique key στην δημιουργοα του πινακα.
Στο database.py, εχω προσθεσει την παραμετρο unique_key την οποια στελνει κατα τη δημιουργια του πινακα, εντος της διαδικασιας create_table(). Στην διαδικασια crate_index() δημιουργηθηκε ο ελεγχος για το αν υπαρχει το ονομα της στηλης πανω στην οποια δημιουργειται το ευρετηριο.
Στην περιπτωση που δεν υπαρχει ονομα στηλης, αυτοματα οριζεται το πρωτευον κλειδι ως ονομα στηλης.
Η παραμετρος column_name, (στην διαδικασια construct_index() ελεγχει αν η στηλη ειναι μοναδικο η πρωτευον κλειδι, αν δεν ειναι τιποτα απο τα 2 εμφανιζεται μηνυμα σφαλματος.
Στην execute_condition() στο select() ελεγχω αν υπαρχει ευρετηριο και στο πρωτευον κλειδι αλλα και στην unique στηλη ωστε να κλειθει η _select_where_with_btree()

Τελος στο table.py οταν αρχικοποιειται ο πινακας προσθεσα την παραμετρο unique_key, ωστε οταν οριστει καποια στηλη unique να προστεθει στα uk και uk_idx του λεξικου του πινακα το ονομα και ο δεικτης αυτης.
Στην _insert() γινεται ελεγχος για μοναδικες τιμες της unique στηλης.

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.

1 participant