Puncte:0

Suport moștenit Mariadb

drapel cn

Am o versiune veche a site-ului php, care folosește numărul coloanei „row_number” fără escape în interogările sale SQL. Se pare că în noua versiune de mariadb a fost adăugată o nouă funcție numită „row_number()” și astfel interogările eșuează. Refactorizarea întregului proiect este exclusă. De asemenea, nu vreau să dockerizez totul cu o versiune mai veche a mariadb. Există vreo modalitate de a folosi mariadb nou, dar și de a folosi setul de sintaxă/funcție mai vechi, astfel încât să nu existe o coliziune?

Mulțumiri.

drapel ua
Cred că trebuie să mușcați glonțul și să editați toate fișierele. Dacă sunteți pe Linux, puteți scrie un script `sed` (pe o linie, cred) pentru a face toată editarea într-o singură comandă. (Nu cunosc un instrument echivalent pe Windows.)
Puncte:1
drapel cn

O modalitate de a rezolva acest tip de probleme este utilizarea filtrul expresiilor regulate în MariaDB MaxScale. Dacă știți că aplicația folosește ROW_NUMBER nume într-un fel specific, puteți defini o expresie regulată care să se potrivească cu ea și să o înlocuiți cu versiunea citată.

Dezavantajul evident al acestei abordări este că expresiile regulate sunt oarecum dificil de corectat și nu sunt ușor de întreținut dacă modelul care trebuie asortat devine complex. Cu toate acestea, acest lucru ar putea permite aplicației dvs. să funcționeze în timp ce lucrați la actualizarea aplicației la o versiune mai nouă.

Iată un exemplu despre cum ar fi configurat filtrul:

[RegexFilter]
tip=filtru
module=regexfilter
potrivire=/ROW_NUMBER/
înlocuiți=/`ROW_NUMBER`/
Puncte:1
drapel ua

În Linux (sau similar), o singură comandă poate adăuga backtics în toate fișierele dvs.

Atenție: nu utilizați acest lucru fără testare amănunțită mai întâi:

sed -i's/row_number/\`row_number\`/ig *

Note:

-i -- actualizați fișierul pe loc
\ -- trebuie să evitați ca backticurile să fie acționate de coajă
eu - ignoră majuscule
g -- gestionează mai multe apariții dintr-o linie
* -- modificați pentru a specifica fișierele care ar putea necesita editare
drapel cn
adăugarea de ghilimele este mai periculoasă decât redenumirea coloanei și a variabilelor, deși este, de asemenea, destul de multă muncă. De asemenea, sed cu siguranță nu este ideal pentru sarcină, aș recomanda vscode și funcția sa de înlocuire - dacă cineva ar fi interesat de o astfel de abordare. Cu toate acestea, nu cred că vreau să merg așa - cel puțin deocamdată. Dacă nu există un strat de compatibilitate pentru mariadb, atunci s-ar putea să-l iau în considerare.
Puncte:0
drapel cn

De asemenea, nu vreau să dockerizez totul cu o versiune mai veche a mariadb.

Bun. Folosirea versiunilor vechi pe termen nelimitat este mai mult decât își dau seama majoritatea oamenilor. Actualizările de securitate se vor încheia, ar trebui să găsiți o alternativă, cum ar fi să cumpărați asistență de la cineva care poate backporta remedieri.Care este o abilitate greu de găsit. Și apoi ești blocat pe versiunea veche și nu primești funcții noi.

Există o modalitate de a utiliza mariadb nou, dar și de a folosi sintaxă/funcție mai veche setat astfel încât să nu existe o coliziune?

Nu, row_number este o funcție de fereastră care există în toate versiunile de MariaDB acceptate. Din păcate, ați ales primul numele, dar row_number este o convenție între implementările SQL.

Citarea este o sintaxă pentru a rezolva ambiguitatea, așa cum ați spus. Acesta ar fi un proiect de refactorizare relativ minor, fără modificarea comportamentului și nu este nevoie să atingeți datele sau schema. Dacă dezvoltatorii site-ului tău nu o vor face, ce altă întreținere mai complexă nu primește codul?

drapel ua
Și dacă nu ar fi „row_nnumber”, ar putea fi altceva. Și următoarea versiune va lua un alt nume pe care s-ar putea să îl utilizați.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.