Wahoo! Το έκανα! Το τελευταίο μέρος ενός WP-DB.PHP για Interbase/Firebird
Ήξερα ότι 9 έτη εμπειρίας IB/FB θα έρχονταν σε πρακτικό.
το WP-DB είναι το μίνι στρώμα αφαίρεσης βάσεων δεδομένων για WordPress. Επιτρέπει σε σας για να τρέξει WordPress στη διάφορη βάση δεδομένων. Αμέσως MySQL είναι λίγο πολύ αυτό, αλλά μερικοί λαοί έχουν κάνει μια έκδοση PostgreSQL επίσης.
Καλά, το θέλησα για να συνδέσω με ένα Interbase DB για τη blog μετατροπή .TEXT που έχω κάνει. Δεν πρόκειται να τρέξω WordPress μακριά Interbase ακόμα, αλλά απλοποίησε την εισαγωγή για με στο WP-DB χρήσης για τη σύνδεση εισαγωγών βάσεων δεδομένων μου.
Είναι ενδιαφέρον να σημειωθεί ότι έχω έρθει στο σημείο όπου οι άλλοι συντάκτες που χρησιμοποίησα για τον κώδικα πέσος Φιλιππίνων μόλις δεν αισθάνονται δεξιά άλλα. Οι Δελφοί για τα πέσος Φιλιππίνων αισθάνονται ακριβώς καλύτερα τώρα για την έκδοση. Δεν έκανα οποιοδήποτε οπτικό σχεδιασμό σε το, αλλά ήταν ακόμα συμπαθητικός γρήγορος συντάκτης με την πρόσθετη βοήθεια των υπαινιγμών και των παραμέτρων. Ίσως εάν είχα Zend, θα κολλούσα με αυτό για τη μη οπτική ουσία, εάν χρησιμοποιήθηκα σε το, εγώ δεν ξέρω. Δεν το έχω. Το δοκίμασα μιά φορά και το βρήκα πάρα πολύ ογκώδες για τις ανάγκες μου. D4PHP με όλο το σχέδιο τα κιβώτια κλειστά, αισθάνονται ακόμα ελαφριά και έχουν έναν γρήγορο ανοικτό χρόνο.
Εν πάση περιπτώσει, η μεγαλύτερη μέρος της μετατροπής ήταν αρκετά εύκολη. Έπρεπε ακριβώς να αντικαταστήσω ibase_ τις κλήσεις πέσος Φιλιππίνων για τις κλήσεις mysql_. Έπρεπε να προσθέσω έναν μικρό καθαρισμό για το χειρισμό των κενών σειρών και των αποσπασμάτων και μερικές διατηρημένες λέξεις IB όπως τον τύπο, το ρόλο, τον κωδικό πρόσβασης, και το κ.λπ. Αλλά το πραγματικά πρόβλημα ήταν ότι WordPress στηρίζεται σε μεγάλο ποσοστό στο χαρακτηριστικό γνώρισμα InsertID που πολλές βάσεις δεδομένων έχουν. Επιστρέφει την τελευταία αξία του τομέα autoinc στον πίνακα που παραπέμπεται από την τελευταία εντολή ενθέτων. IB/FB δεν έχει κανέναν equivelent. Η τεκμηρίωση πέσος Φιλιππίνων δεν έδειξε ότι οποιαδήποτε λύση παρέχηκε. Και όλα τα στρώματα abstration βάσεων δεδομένων έξω εκεί δεν το υποστηρίζουν ούτε.
Έτσι, έχω κάνει μια εργασία γύρω. Δεν είναι ενδεχομένως 100% ακριβές για όλες τις διαμορφώσεις βάσεων δεδομένων έξω εκεί, αλλά πρέπει να λειτουργήσει για WordPress και .TEXT.
Δείτε, το τέχνασμα ήταν να βρεθεί το αρχικό κλειδί για τον πίνακα που εργάζεστε. Έτσι, πρώτος έπρεπε να βρώ ποιος πίνακας Ι λειτουργούσε. Είχα τη δήλωση ΕΝΘΈΤΩΝ SQL, έτσι όλος έπρεπε να κάνω ήμουν εύρημα το επιτραπέζιο όνομα μετά από τις λέξεις «ΈΝΘΕΤΟ «. Πρόστιμο. Υπάρχει μια δέσμη των τρόπων να γίνει αυτός.
Έπειτα, οπλισμένος με το επιτραπέζιο όνομα, έπρεπε να βρώ το αρχικό κλειδί. Πώς κάνω αυτόν με ακριβώς τις εντολές διαθέσιμες στα πέσος Φιλιππίνων; Αυτό ήταν το δυσνόητο μέρος.
Ευτυχώς, IB/FB είναι μια σχεσιακή βάση δεδομένων. Ότι στα σύντομα μέσα οι πίνακες είναι όλοι αποθηκευμένος στα κομάτια σε όλη τη βάση δεδομένων παρουσιάστε και έπειτα συνδεμένος πίσω σύμφωνα με τις πληροφορίες δομών που αποθηκεύονται στους «κρυμμένους» πίνακες.
Ο μακρύς και ο ελλιπής από το είναι ότι αυτή η δήλωση θα σας δώσει αυτό που απαιτείται:
-
ΕΠΙΛΕΞΤΕ RDB$RELATION_CONSTRAINTS.RDB$RELATION_NAME, RDB$INDEX_SEGMENTS.RDB$FIELD_NAME, RDB$INDEX_SEGMENTS.RDB$FIELD_POSITION
-
ΑΠΟ RDB$RELATION_CONSTRAINTS, RDB$INDEX_SEGMENTS
-
ΟΠΟΥ
-
RDB$RELATION_CONSTRAINTS.RDB$CONSTRAINT_TYPE = `ΑΡΧΙΚΌ KEY ΚΑΙ
-
RDB$INDEX_SEGMENTS.RDB$INDEX_NAME=RDB$RELATION_CONSTRAINTS.RDB$INDEX_NAME
-
ΔΙΑΤΑΓΗ ΑΠΟ RDB$RELATION_CONSTRAINTS.RDB$RELATION_NAME, RDB$INDEX_SEGMENTS.RDB$FIELD_POSITION
Σε WordPress και .TEXT κάθε τομέας AutoInc που εξέτασα ήταν ο πρώτος τομέας στον πίνακα. Έτσι, τώρα οπλισμένος με το επιτραπέζιο όνομα, και autoinc τον τομέα, είναι μια απλή ερώτηση για να πάρει την υψηλότερη αξία, η οποία πρέπει να είναι το πιό πρόσφατο ένθετο εκτός αν υπάρχεται κάποιο είδος δωροδοκίας.
Έτσι ώστε είναι ακριβώς επίλεκτος ένας ανώτατος (fieldname) από τη δήλωση tablename και επιστρέφω την αξία έχω βρεί στον τομέα ένα (που χειρίζεται ένα κενό αποτέλεσμα καθορισμένο φυσικά).
Hey - δεν είναι όμορφο, αλλά πρέπει να λειτουργήσει 100% του χρόνου για τις χρήσεις μου. Εάν, θα το υποβάλω σε ADOdb και θα δω τι σκέφτονται. Δεδομένου ότι ADOdb είναι ένα μέρος πυρήνων των Δελφών για το πρόγραμμα πέσος Φιλιππίνων, να πάρω το μικρό κομμάτι κώδικά μου συμπεριλαμβανόμενου! Πραγματικά, ελπίζω να συμβάλω στο VCL για τα πέσος Φιλιππίνων πολύ πριν από έπειτα.
ΕΝΤΑΞΕΙ, το καθένα τα μάτια έχουν βερνικώσει πέρα από αλλά είναι ακόμα αρκετά δροσερό τίμιο!
















Brian,
1. Μπορείτε να πάτε πέρα από αυτήν την δήλωση πάλι; «Έτσι ώστε είναι ακριβώς επίλεκτος ένας ανώτατος (fieldname) από τη δήλωση tablename και επιστρέφω την αξία έχω βρεί στον τομέα ένα (που χειρίζεται ένα κενό αποτέλεσμα καθορισμένο φυσικά).» Δεν είμαι αρκετά βέβαιος ότι σας ακολουθώ εδώ.
2. Υπάρχει είναι τρόπος να βρεθεί η ΓΕΝΝΗΤΡΙΑ για συγκεκριμένο αρχικό έναν βασικό (και τον πίνακα) και έπειτα χρήση «ΕΠΙΛΕΚΤΟ GEN_ID (όνομα, αύξηση) ΑΠΌ RDB$DATABASE»; Πιστεύω ότι αυτό είναι ο προτιμημένος τρόπος να προσκομιστεί ένας τομέας «autoincrement» σε InterBase και Firebird, ως app.
BTW, σκέφτηκα ότι αυτή η σύνδεση στην περιοχή του Lorenzo Alberton ενδιέφερε => http://www.alberton.info/firebird_sql_meta_info.html
Tom
Σχόλιο μέχρι το Tom Wilk - 2 Απριλίου 2007 @ 7:35 μ.μ.
Θα πάω από το κατώτατο σημείο επάνω στην απάντηση σε αυτού.
Πρώτα αυτή είναι μια μεγάλη σύνδεση. Ευχαριστίες! Είναι σίγουρα στον κατάλογο σημαδιών βιβλίων μου.
Και ΝΑΙ, η μετάβαση μετά από τις γεννήτριες είναι ο σωστός τρόπος να πάει. Εντούτοις, οι γεννήτριες οι ίδιοι δεν συνδέονται με τους πίνακες με κάθε τρόπο που θα μπορούσα να βρώ έξω από τον κώδικα ώθησης. Οι γεννήτριες δεν πρέπει ακόμη και για να ονομαστούν μετά από τον τομέα ή τον πίνακα. Ούτε AR οι ωθήσεις. Διαβάστε εδώ: http://www.delphi32.com/info_facts/faq/faq_987.asp
Έτσι για Interbase, το αρχικό κλειδί είναι απλά ένας τομέας interger και μια ώθηση κάποιου ονόματος προστίθεται συνδεμένος τη δράση ενθέτων. Εκείνη η σημαμένη θα είχα την αναζήτηση το κείμενο υπομνημάτων κάθε ώθησης στον πίνακα και να ψάξει μια αναφορά γεννητριών. Θα μπορούσα πιθανώς να απομονώσω τις ωθήσεις ενθέτων… κάπως και να ψάξω ακριβώς εκείνους. Θα έπρεπε να υποθέσω την πρώτη αναφορά γεννητριών ήμουν πράγματι αυτός που θέλησα, αλλά αυτό θα ήταν πιθανώς ένα δίκαιο στοίχημα.
Έτσι, αντί να κάνει ότι, πήγα μετά από το αρχικό κλειδί, το οποίο είναι αυτό που με βλέπετε σε αυτό το παράδειγμα. Έτσι, τι η δήλωση ερώτησης κάνει είναι πηγαίνει μετά από την ανώτατη αξία στον αρχικό βασικό τομέα του πίνακα Ι AM που λειτουργεί με. Αυτός πρέπει να λειτουργήσει τις περισσότερες φορές αλλά δεν είναι εγγυημένο. Το Afterall ο αυτόματος τομέας INC ΘΑ ΜΠΟΡΟΎΣΕ να είναι ο τρίτος τομέας στον πίνακα.
Καλά, είναι σήμερα μια άλλη ημέρα και έχω σκεφτεί σε αυτό περαιτέρω. Σκέφτομαι ότι ο σωστότερος τρόπος ΕΙΝΑΙ να ανακτηθεί το κείμενο ΥΠΟΜΝΗΜΑΤΩΝ και και να αναλυθεί.
Έτσι τι θα πρέπει να κάνω είναι εύρημα επίλεκτο από RDB$TRIGGERS όπου RDB$RELATION_NAME= [το επιτραπέζιο όνομα από το ένθετο] και RDB$TRIGGER_TYPE=1. Αυτός δεν πρέπει να είναι σκληρός. Κατόπιν εντοπίζω το πρώτο GEN_ID (και την περιποίηση από μέχρι το τέλος αυτό. Κατόπιν πρέπει να ψάξω ένα κόμμα και να το κόψω και εκεί κατόπιν. Κατόπιν πρέπει να έχω το όνομα της ώθησης. Κατόπιν μπορώ να κάνω μια επίλεκτη δήλωση, ανακτώντας την ώθηση και θα πρέπει να διευκρινίσω ότι θέλω στην αύξηση από 0.
Ναι, αυτός πρέπει πραγματικά να το κάνει… Ίσως θα πάρω να εργαστώ σε εκείνο το λίγο περισσότερο… αύριο Ευχαριστίες για το ερώτημα της ερώτησης! Έπρεπε aparently να ξαναεπισκεφτώ αυτό μετά από ένα σπάσιμο.
Σχόλιο μέχρι το Brian - 2 Απριλίου 2007 @ 9:52 μ.μ.
Γιατί; Για τους Δελφούς για τα πέσος Φιλιππίνων;
Σχόλιο μέχρι Joe - 3 Απριλίου 2007 @ 5:30 μ.μ.
[...] Ήξερα ότι 9 έτη εμπειρίας IB/FB θα έρχονταν σε πρακτικό. [...]
Pingback από Firebird News» Wahoo! Το έκανα! Το τελευταίο μέρος ενός WP-DB.PHP για Interbase/Firebird - 4 Απριλίου 2007 @ 9:42 AM
[...] στρώμα αφαίρεσης για WordPress. Επιτρέπει σε σας για να τρέξει WordPress στη διάφορη βάση δεδομένων. Διαβάστε πιό εδώ. Permalink | Μερίδιο (digg, κ.λπ.): [...]
Το Pingback από Firebird News» θέλει να τρέξει WordPress με το ΦΒ; - 10 Απριλίου 2007 @ 10:52 AM
Εάν your'e χρησιμοποιώντας το (νέο) Firebird 2, μπορείτε να κάνετε αυτό χρησιμοποιώντας τη νέα πρόταση επιστροφής για τις δηλώσεις ενθέτων. Για περισσότερες πληροφορίες, διαβάστε τη σελίδα 39 των σημειώσεων έκδοσης της απελευθέρωσης 2.0.0 ή 2.0.1.
Σχόλιο από το jachguate - 10 Απριλίου 2007 @ 2:04 μ.μ.
jachguate! Σας ευχαριστούμε! Θα κάνω πραγματικά μια δεύτερη ενότητα μετατροπής για FB2+. Συνολικά χαμένος εκείνο το χαρακτηριστικό γνώρισμα.
Δυστυχώς, η επιχείρηση που κάνω αυτό για έχει τα μάλλον ισχυρά συναισθήματα στη συζήτηση IB/FB!
Σχόλιο μέχρι το Brian - 10 Απριλίου 2007 @ 2:15 μ.μ.