ΑρχικήΕιδήσειςJavaScript Stored Procedure στο MySQL: Νέα χαρακτηριστικά και δυνατότητες

JavaScript Stored Procedure στο MySQL: Νέα χαρακτηριστικά και δυνατότητες

Εισαγωγή στις Stored Procedures

Οι stored procedures είναι προγράμματα ή ρουτίνες που αποθηκεύονται μέσα σε μια βάση δεδομένων και περιέχουν εντολές SQL ή άλλες ειδικές εντολές του DBMS. Στο MySQL, οι stored procedures μπορούν να δημιουργηθούν με τον εξής τρόπο:

DELIMITER //
CREATE PROCEDURE MostraInfoIscritti(IN pIscrittoID INT)
BEGIN
    SELECT nome, cognome FROM Iscritti WHERE IscrittoID = pIscrittoID;
END //
DELIMITER ;

Αυτές οι διαδικασίες μπορούν να κληθούν με μια εντολή όπως η παρακάτω:

CALL MostraInfoIscritti(42);

Η χρήση τους προσφέρει αρκετά πλεονεκτήματα, όπως η δυνατότητα επαναχρησιμοποίησης του κώδικα, η ευκολία στη συντήρηση, η αυξημένη ασφάλεια και η καλύτερη απόδοση. Τώρα, χάρη στο runtime GraalVM, είναι δυνατή η δημιουργία JavaScript stored procedures στο MySQL, όπως συμβαίνει και με αυτές που βασίζονται σε Java και SQL.

JavaScript Stored Procedures και σύνταξη

Αυτή η δυνατότητα θα είναι διαθέσιμη στο μέλλον για το ευρύ κοινό. Αυτή τη στιγμή, η τελευταία σταθερή έκδοση του MySQL είναι η 8.0.35 (η 8.0.36 δεν έχει δημοσιευθεί ακόμη), ενώ οι JavaScript stored procedures είναι διαθέσιμες μόνο στην προεπισκόπηση της έκδοσης 8.2 για την Enterprise edition του DBMS και μέσω της υπηρεσίας MySQL Heatwave σε OCI (Oracle Cloud Infrastructure), AWS (Amazon Web Services) και Microsoft Azure.

Η σύνταξη για τις JavaScript stored procedures είναι σχεδόν ίδια με αυτή των παραδοσιακών stored procedures. Ωστόσο, ο γλώσσα πρέπει να δηλωθεί με τη χρήση της εντολής LANGUAGE JAVASCRIPT κατά τη δημιουργία της stored procedure.

Διαφορετικά, το MySQL θα την ερμηνεύσει ως SQL. Η σύνταξη του σώματος της ρουτίνας ελέγχεται κατά τη δημιουργία της. Σε περίπτωση σφαλμάτων, η δήλωση CREATE θα απορριφθεί και το πρόγραμμα δεν θα αποθηκευτεί.

Το σώμα του προγράμματος πρέπει να είναι περιφραγμένο με την λέξη-κλειδί AS, ακολουθούμενη από τα σύμβολα του δολαρίου, όπως $$, $js$ ή $mysql$. Είναι σημαντικό να υπάρχει το σύμβολο $ στην αρχή και στο τέλος της συμβολοσειράς.

Ο ίδιος διαχωριστής πρέπει να χρησιμοποιηθεί για να δηλώσει την αρχή και το τέλος του σώματος της ρουτίνας. Επιτρέπονται και τα εισαγωγικά, αλλά οι διαχωριστές με $ αποφεύγουν συγκρούσεις με την αναφορά συμβολοσειρών σε συναρτήσεις ή διαδικασίες.

Μετά το πρώτο $, το prompt του client MySQL γίνεται $> για κάθε νέα γραμμή που αντιστοιχεί στο σώμα της ρουτίνας, μέχρι τον διαχωριστή $ κλεισίματος. Μετά από αυτό, το prompt επιστρέφει στην προεπιλεγμένη τιμή, που είναι γενικά ->.

Παράδειγμα JavaScript Stored Procedure

Ας υποθέσουμε ότι θέλουμε να δημιουργήσουμε μια JavaScript stored procedure για τον υπολογισμό της δύναμης ενός αριθμού χρησιμοποιώντας τη μέθοδο Math.pow() της γλώσσας. Θα ορίσουμε μια συνάρτηση που θα δέχεται δύο ακέραιους αριθμούς, τη βάση και τον εκθέτη:

mysql> CREATE FUNCTION potenza_javascript(base INT, esponente INT)
-> RETURNS INT LANGUAGE JAVASCRIPT
-> AS
-> $$
$> let result = Math.pow(base, esponente);
$> return result;
$> $$
-> ;

Η κλήση της συνάρτησης θα γίνει ως εξής:

mysql> SELECT potenza_javascript(6,4);

Η έξοδος κατά την εκτέλεση αυτής της SELECT θα είναι 1.296, που είναι το αποτέλεσμα του 6 στην τέταρτη δύναμη.

Μπορείτε να τροποποιήσετε μια JavaScript stored procedure οποιαδήποτε στιγμή με τις εντολές ‘ALTER FUNCTION’ και ALTER PROCEDURE, ακολουθώντας τις ίδιες διαδικασίες που ισχύουν για μια stored procedure βασισμένη σε SQL. Ωστόσο, είναι σημαντικό να σημειωθεί ότι δεν μπορείτε να αλλάξετε τη γλώσσα που έχετε επιλέξει (σε αυτή την περίπτωση, JavaScript) με την εντολή ALTER.

Αν χρειαστεί να αλλάξετε τη γλώσσα, η μόνη λύση είναι να χρησιμοποιήσετε τις εντολές DROP FUNCTION ή DROP PROCEDURE και στη συνέχεια να δημιουργήσετε ξανά το πρόγραμμα με την εντολή CREATE.

JavaScript Stored Procedures και τύποι δεδομένων

Πριν εξετάσουμε τους υποστηριζόμενους τύπους δεδομένων, είναι σημαντικό να αναφέρουμε ότι η υποστήριξη για JavaScript στο MySQL είναι σύμφωνη με τις προδιαγραφές ECMAScript 2021 και χρησιμοποιεί το strict mode ως προεπιλογή. Αυτό το mode δεν μπορεί να απενεργοποιηθεί.

Υποστηρίζονται όλα τα τυπικά αντικείμενα της βιβλιοθήκης ECMAScript, όπως τα Object, Function, Math, Date και String, ενώ υποστηρίζονται επίσης οι εντολές console.log() και console.error().

Ακέραιοι

Για τους ακέραιους (τύπος δεδομένων integer), υποστηρίζονται όλες οι παραλλαγές και τα ψευδώνυμα του Database Manager. Συμπεριλαμβάνονται επίσης οι τύποι TINYINT, SMALLINT, MEDIUMINT, INT και BIGINT. Οι τύποι SIGNED και UNSIGNED υποστηρίζονται για όλους τους ακέραιους τύπους, ενώ οι τύποι BOOL και SERIAL ερμηνεύονται ως ακέραιοι.

Συμβολοσειρές

Η κατάσταση είναι διαφορετική για τις συμβολοσειρές (τύπος δεδομένων string), καθώς υποστηρίζονται μόνο οι τύποι CHAR και VARCHAR, οι οποίοι καλύπτουν τις περισσότερες περιπτώσεις αποθήκευσης κειμένων. Ο μόνος επιτρεπτός χαρακτήρας είναι το utf8mb4, και η προσπάθεια εισαγωγής άλλου χαρακτήρα θα οδηγήσει σε σφάλμα.

Αυτός ο περιορισμός ισχύει για τα ορίσματα και τις δηλώσεις τύπου επιστροφής, δηλαδή όταν καθορίζεται ο τύπος δεδομένων που πρέπει να επιστραφεί σε ένα αποτέλεσμα.

Αριθμοί σε Κινητή Υποδιαστολή

Όσον αφορά τους αριθμούς σε κινητή υποδιαστολή (τύπος δεδομένων floating point), οι JavaScript stored procedures υποστηρίζουν τους τύπους FLOAT και DOUBLE, καθώς και τα αντίστοιχα ψευδώνυμα. Οι τύποι UNSIGNED FLOAT και UNSIGNED DOUBLE δεν υποστηρίζονται πλέον από το DBMS, ενώ ο τύπος REAL διαχειρίζεται ως αριθμός σε κινητή υποδιαστολή.

Περιορισμοί των JavaScript Stored Procedures

Κατά τη χρήση των JavaScript stored procedures, είναι σημαντικό να σημειωθεί ότι δεν είναι δυνατή η κλήση άλλων αποθηκευμένων προγραμμάτων ή η εκτέλεση prepared statements μέσα στο σώμα ενός προγράμματος JavaScript. Ωστόσο, μπορείτε να καλέσετε ένα πρόγραμμα JavaScript από μια αποθηκευμένη διαδικασία SQL, συμπεριλαμβανομένων των stored procedures, των αποθηκευμένων συναρτήσεων, των γεγονότων και των triggers.

Επιτρέπεται επίσης η αναδρομική κλήση μιας συνάρτησης ή μεθόδου JavaScript σε ένα πρόγραμμα. Σε αυτή την περίπτωση, πρέπει να ληφθεί υπόψη ο πιθανός αντίκτυπος στους πόρους, καθώς μια υπερβολική φόρτωση μπορεί να οδηγήσει στην εξάντλησή τους.

Μια μεταβλητή JavaScript, είτε είναι τοπική είτε παγκόσμια, αν οριστεί σε μια stored procedure, δεν είναι προσβάσιμη από άλλες συνδέσεις που εκτελούν το ίδιο πρόγραμμα. Δεν υπάρχει υποστήριξη για Node.JS, δεν μπορείτε να χρησιμοποιήσετε τρίτους modules και δεν υποστηρίζονται οι προσβάσεις σε αρχεία και δίκτυα.

Τέλος, έχει υλοποιηθεί υποστήριξη για το αντικείμενο Global και για την ιδιότητα globalThis, αλλά το πεδίο εφαρμογής τους είναι περιορισμένο στην τρέχουσα συνεδρία.

Συμπεράσματα

Με την έκδοση 8.2 του MySQL, το DBMS εισάγει την υποστήριξη για τις JavaScript stored procedures, προσφέροντας στους προγραμματιστές ένα νέο εργαλείο που προάγει την επαναχρησιμοποίηση του κώδικα και τη βελτίωση των επιδόσεων. Ωστόσο, προς το παρόν, αυτή η δυνατότητα είναι διαθέσιμη μόνο σε προεπισκόπηση και δεν συνιστάται η χρήση της σε παραγωγικά περιβάλλοντα.

Η δυνατότητα δημιουργίας JavaScript stored procedures ανοίγει νέες προοπτικές για τους προγραμματιστές, επιτρέποντάς τους να αξιοποιήσουν τη δύναμη της JavaScript μέσα στο MySQL, συνδυάζοντας τη γνωστή ευχρηστία της γλώσσας με τις δυνατότητες του DBMS. Καθώς η τεχνολογία εξελίσσεται, αναμένονται περισσότερες βελτιώσεις και δυνατότητες που θα διευκολύνουν την ανάπτυξη και τη συντήρηση εφαρμογών που βασίζονται σε βάσεις δεδομένων.

Αυτή η νέα δυνατότητα μπορεί να φέρει επανάσταση στον τρόπο που οι προγραμματιστές αλληλεπιδρούν με τις βάσεις δεδομένων, προσφέροντας περισσότερη ευελιξία και δυνατότητες για την ανάπτυξη σύνθετων εφαρμογών. Ωστόσο, είναι σημαντικό να παρακολουθείτε τις εξελίξεις και τις ενημερώσεις του MySQL για να εκμεταλλευτείτε πλήρως τις δυνατότητες που προσφέρει η JavaScript στο περιβάλλον της βάσης δεδομένων.

Στέλιος Θεοδωρίδης
Στέλιος Θεοδωρίδης
Ο ήρωας μου είναι ο γάτος μου ο Τσάρλι και ακροάζομαι μόνο Psychedelic Trance
RELATED ARTICLES

Πρόσφατα άρθρα

Tηλέφωνα έκτακτης ανάγκης

Δίωξη Ηλεκτρονικού Εγκλήματος: 11188
Ελληνική Αστυνομία: 100
Χαμόγελο του Παιδιού: 210 3306140
Πυροσβεστική Υπηρεσία: 199
ΕΚΑΒ 166