Η σπηλιά κώδικα

1 Απριλίου 2007

Wahoo! Το έκανα! Το τελευταίο μέρος ενός WP-DB.PHP για Interbase/Firebird

_ Filed κατώτερος: Δελφοί για τα πέσος Φιλιππίνων, Firebird, Interbase - Brian @ 9:10 μ.μ.

Ήξερα ότι 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 είναι μια σχεσιακή βάση δεδομένων.  Ότι στα σύντομα μέσα οι πίνακες είναι όλοι αποθηκευμένος στα κομάτια σε όλη τη βάση δεδομένων παρουσιάστε και έπειτα συνδεμένος πίσω σύμφωνα με τις πληροφορίες δομών που αποθηκεύονται στους «κρυμμένους» πίνακες.

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

SQL:
  1. ΕΠΙΛΕΞΤΕ RDB$RELATION_CONSTRAINTS.RDB$RELATION_NAME, RDB$INDEX_SEGMENTS.RDB$FIELD_NAME, RDB$INDEX_SEGMENTS.RDB$FIELD_POSITION
  2. ΑΠΟ RDB$RELATION_CONSTRAINTS, RDB$INDEX_SEGMENTS
  3. ΟΠΟΥ
  4. RDB$RELATION_CONSTRAINTS.RDB$CONSTRAINT_TYPE = `ΑΡΧΙΚΌ KEY ΚΑΙ
  5. RDB$INDEX_SEGMENTS.RDB$INDEX_NAME=RDB$RELATION_CONSTRAINTS.RDB$INDEX_NAME
  6. ΔΙΑΤΑΓΗ ΑΠΟ RDB$RELATION_CONSTRAINTS.RDB$RELATION_NAME, RDB$INDEX_SEGMENTS.RDB$FIELD_POSITION

Σε WordPress και .TEXT κάθε τομέας AutoInc που εξέτασα ήταν ο πρώτος τομέας στον πίνακα.  Έτσι, τώρα οπλισμένος με το επιτραπέζιο όνομα, και autoinc τον τομέα, είναι μια απλή ερώτηση για να πάρει την υψηλότερη αξία, η οποία πρέπει να είναι το πιό πρόσφατο ένθετο εκτός αν υπάρχεται κάποιο είδος δωροδοκίας.

Έτσι ώστε είναι ακριβώς επίλεκτος ένας ανώτατος (fieldname) από τη δήλωση tablename και επιστρέφω την αξία έχω βρεί στον τομέα ένα (που χειρίζεται ένα κενό αποτέλεσμα καθορισμένο φυσικά). 

 Hey - δεν είναι όμορφο, αλλά πρέπει να λειτουργήσει 100% του χρόνου για τις χρήσεις μου.  Εάν, θα το υποβάλω σε ADOdb και θα δω τι σκέφτονται.  Δεδομένου ότι ADOdb είναι ένα μέρος πυρήνων των Δελφών για το πρόγραμμα πέσος Φιλιππίνων, να πάρω το μικρό κομμάτι κώδικά μου συμπεριλαμβανόμενου!  Πραγματικά, ελπίζω να συμβάλω στο VCL για τα πέσος Φιλιππίνων πολύ πριν από έπειτα.

 ΕΝΤΑΞΕΙ, το καθένα τα μάτια έχουν βερνικώσει πέρα από αλλά είναι ακόμα αρκετά δροσερό τίμιο!

Τροφοδοτημένος από WordPress