Skip to content

Conversation

roussosan
Copy link

Ομάδα:
Κουσιάβελος Χαράλαμπος Π20102
Πρίμπας Δημήτριος Π20162
Ρούσσος Αντώνιος Π20167

#1 ENRICH WHERE STATEMENT

Στο αρχείο mdb.py:

Δημιουργήθηκαν δύο νέες συναρτήσεις. Η evaluate_whereclause() και form_where_clause

evaluate_where_clause()
Δέχεται ως είσοδο το λεξικό στο οποίο έχει αναλυθεί το query που δόθηκε. Δουλεία της είναι να αναλύσει περαιτέρω το value του κλειδιού 'where' και να επιστρέψει πίσω το λεξικό που δόθηκε με τη διαφορά οτι η τιμή του κλειδιού where θα είναι έτοιμη για εκτέλεση. Καλείται όταν δεν είναι κενή η τιμή του κλειδιού where.

form_where_clause()
Δέχεται ώς είσοδο το value του κλειδιού where του λεξικού στο οποίο αναλύθηκε το query και το οργανώνει κατάλληλα σε ένα λεξικό το οποίο και επιστρέφει. Σε αυτή την συνάρτηση γίνεται ο εντοπισμός και ανάλυση των λογικών τελεστών and, or, between και not.

Στο αρχείο table.py

_find_rows()
Δέχεται ως είσοδο το value του κλειδιού where του λεξικού που προήλθε από το query που έδωσε ο χρήστης και επιστρέφει μια λίστα με τα indexes των εγγραφών που ικανοποιούν την συνθήκη.

_in_depth()
Δέχεται ως είσοδο είτε μια συνθήκη είτε ένα λεξικό με πολλές συνθήκες. Στην περίπτωση που η είσοδος είναι μια συνθήκη (type str) τότε απλά την εκτελεί. Στην περίπτωση που η είσοδος είναι λεξικό τότε εκτελεί την κάθε μεμονωμένη συνθήκη αναδρομικά ξεκινώντας από την πιο εσωτερική προς την πιο εξωτερική.

Screenshot 2023-02-20 at 23 39 55

Screenshot 2023-02-20 at 23 40 46

#2 ENRICH INDEXING FUNCTIONALITY

Αρχικά το table meta_indexes όταν δημιουργείται έχει δύο νέες στήλες, την table_column (str) και index_type (str).
Υπάρχει η δυνατότητα δημιουργίας unique column με σωστούς ελέγχους πριν κάθε εισαγωγή νέας εγγραφής.

Screenshot 2023-02-20 at 23 42 56

create_index()
Πλέον γίνεται έλεγχος αν το table_column είναι pk ή unique column. Αν όχι, εμφανίζεται αντίστοιχο Exception. Μετά γίνεται έλεγχος αν υπάρχει ήδη εισαγωγή στον πίνακα meta_indexes με το συγκεκριμένο index_name. Αν όχι, γίνεται νέα εισαγωγή.

_construct_btree_index()
Δέχεται σαν ορίσματα table_name, table_column, index_name και φτιάχνει το Btree index.

_construct_hash_index()
Δέχεται σαν ορίσματα table_name, table_column, index_name και φτιάχνει το Hash index.

Νέο αρχείο hash.py
Υλοποίηση του Hash index με τη κλάση Hash

Screenshot 2023-02-20 at 23 44 29

#3 Implement RA expressions
Προστέθηκε η δυνατότητα να μετατρέπεται ένα query σε σχεσιακή άλγεβρα. Με είσοδο στο τερματικό το keyword "convert" ακολουθούμενο απο ένα query, θα μας επιστραφεί η ισοδύναμη σχεσιακή άλγεβρα χωρίς να εκτελεσθεί το query.

Στο αρχείο misc.py
convert_to_RA()
Δέχεται ως είσοδο το λεξικό του query που έδωσε ο χρήστης και το επιστρέφει σε σχεσιακή άλγεβρα.

convert_query_dic_to_RA_dic()
Δέχεται ως είσοδο ένα λεξικό από query και το μετατρέπει σε λεξικό σχεσιακής άλγεβρας.

simplify_from()
Δέχεται ως έισοδο το value from του λεξικού του query και το επιστρέφει απλοποιημένο. Αυτό χρησιμεύει στην περίπτωση που το query περιλαμβάνει περισσότερα απο δύο joins διότι θα μετατρέψει το λεξικό σε καλύτερη προς επεξεργασία μορφή.

selection_to_string()
Δέχεται ως είσοδο το value selection του λεξικού της σχεσιακής άλγεβρας και το μετατρέπει σε ένα απλο string.

table_name_to_string()
Δέχεται ως είσοδο το value table του λεξικού της σχεσιακής άλγεβρας και το μετατρέπει σε ένα απλο string.

Screenshot 2023-02-20 at 23 47 38

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.

3 participants