ΠΑΠΑΤΑΤΣΗΣ ΜΙΧΑΗΛ Π16196 #227
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.
Στην εργασία αυτή υλοποιήθηκαν τα 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.
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.

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 στηλης.