Αυτό που περιγράφεις είναι σχετικά περίεργο, και φυσικά δεν υπάρχει καμμία υλοποίηση. Ίσως άν περιέγραφες γιατί θέλεις να το κάνεις αυτό να υπήρχε πολύ ευκολότερος τρόπος να το πετύχεις. Π.χ. μήπως σκέφτεσαι ότι έτσι θα μπορείς να χρησιμοποιήσεις το ίδιο SQL για διαφορετικές βάσεις? Μήπως θέλεις να στείλεις τα statemens σε άλλο μηχάνημα για εκτέλεση? Κάτι άλλο? Στις δύο παραπάνω περιπτώσεις υπάρχουν άλλοι, πολύ ευκολότεροι τρόποι να το πετύχεις.
Αν αυτό που θέλεις είναι να δημιουργήσεις XML από το SQL statemnt, ουσιαστικά θέλεις ένα SQL parser από τον οποίο μετά θα δημιουργείς XML και άλλον ένα ο οποίος θα εκτελέσει το αποτέλεσμα του XML. Ευτυχώς/δυστυχώς, υπάρχουν SQL parsers αλλά δύσκολα θα βρείς κάποιον που να καλύπτει 100% τη διάλεκτο της SQL που θέλεις. Από εκεί και πέρα, υπάρχουν πιο δυνατοί parsers και πιο εύκολοι. Σε κάθε περίπτωση όμως θα πρέπει να μάθεις λίγο για το πως δουλεύουν. Δεν είναι δύσκολο, απλά μην περιμένεις να το κάνεις σε μία μέρα. Εξάλλου, αυτό που ζητάς είναι αρκετά εξεζητημένο οπότε νομίζω ότι θα πρέπει να δώσεις λίγο χρόνο.
Χονδρικά, για να φτιάξεις τον parser που θέλεις χρησιμοποιείς ένα parser generator στον οποίο δίνεις μία γραμματική της γλώσσας εισόδου και κανόνες που θα εκτελέσει για να δημιουργήσει το αποτέλεσμα, όταν συναντάει συγκεκριμένες δομές στην είσοδο. Π.χ. τί θα κάνει αν συναντήσει το SELECT ή το WHERE. Αυτή η ενέργεια μπορεί να είναι η δημιουργία ενός νέου κειμένου ή η εκτέλεση μίας εντολής. O parser που δημιουργείται χρησιμοποιεί τη γραμματική για να μεταφράσει το κείμενο που του δίνεις και να δημιουργήσει ένα parse tree με τη δομή του κειμένου. Μετά χρησιμοποιεί τους κανόνες για να δημιουργήσει την επιθυμητή έξοδο. Η XML είναι ουσιαστικά η αναπαράσταση ενός parse tree οπότε η μετατροπή από το parse tree σε XML είναι σχετικά απλή. Αυτό που χρειάζεσαι είναι να βρεις μία γραμματική για τη γλώσσα που θέλεις, και να ορίσεις τις εντολές που θέλεις να εκτελέσεις σαν αποτέλεσμα.
Ένας αρκετά διαδεδομένος parser generator είναι ο ANTLR με υλοποιήσεις σε C++, C#, Java και με έτοιμες γραμματικές για PL/SQL και τουλάχιστον το SELECT του SQL Server 2000. Τα αρχεία που χρησιμοποιεί περιέχουν τόσο τη γραμματική όσο και τους κανόνες για την παραγωγή του αποτελέσματος, επιτρέποντας σου έτσι να φτιάξεις ιδιαίτερα ευέλικτους parsers.
Μία άλλη λύση είναι ο GOLD Parser ο οποίος έχει μία έτοιμη γραμματική για ANSI SQL 89. Η διαφορά του από τον ANTLR είναι ότι αντί για τον ορισμό των κανόνων σε κείμενο, γράφεις τις μεθόδους που θα καλέσει ο parser όταν συναντήσει π.χ. το SELECT ή το WHERE. Αυτό είναι λίγο πιο εύκολο στην κατανόηση αλλά προφανώς, δεν είναι τόσο ευέλικτο.
Αν ήδη ξέρεις από parsers μπορείς να δημιουργήσεις τον δικό σου, αλλά δεν είναι και η ευκολότερη δουλειά. Νομίζω ότι θα είναι ευκολότερο να κοιτάξεις πως δουλεύει π.χ. ο ANTLR και να τον χρησιμοποιήσεις. Θα είναι πολύ ευκολότερο να κάνεις αλλαγές στη γραμματική και την XML που δημιουργεί τροποποιώντας απλά τα αρχεία με τους κανόνες, παρά αν γράψεις και τροποποιείς όλο τον κώδικα με το χέρι.
Παναγιώτης Καναβός, Freelancer
Twitter: http://www.twitter.com/pkanavos