Wednesday 23 January 2008

It's not a bug, it's a feature

Oj wybredny jest parser zapytań w MySQL, wybredny. SUM (a) w SELECT jak najbardziej przechodzi, ale w CREATE VIEW xxx AS SELECT już nie. Przy tworzeniu perspektywy baza odmawia współpracy komunikatem "funkcja nazwatabeli.SUM nie istnieje". Chodzi o to, że spacja pomiędzy SUM a nawiasem otwierającym jest inaczej interpretowana przy zwykłym zapytaniu a inaczej przy tworzeniu perspektywy - w pierwszym przypadku parser zaczyna od szukania funkcji nazwatabeli.SUM a gdy jej nie znajdzie wywołuje zwykłe SUM, w drugim przypadku od razu zgłasza błąd.


Sporo nerwów można stracić też przez inny "feature". MySQL w nazwach baz danych i tabel pozwala na znaki '_' i '-' oprócz zwykłych alfanumerycznych - ale takich tabel nie da się już użyć przy odwołaniu do kilku baz w jednym zapytaniu, bo parser ich po prostu nie znajdzie.

7 comments:

  1. Kurde, a ja przepisywałem na kilka zapytań (w pętli)...

    ReplyDelete
  2. No reguluje, ale MySQL tak niezupełnie zgadza się z ANSI SQL :-)

    ReplyDelete
  3. Co do nazw tabel, to moim ulubionym „featurem” jest to, że w MySQL pod Windows nazwy tabel są case insensitive, a pod Linuksem (i innymi uniksowatymi) są case sensitive (czy SQL tego nie reguluje?).
    Więc program współpracujacy poprawnie z bazą odpaloną na windowsowej maszynie może odmówić współpracy po przemigrowaniu bazy na system uniksowaty.

    Tego chyba nawet Oracle nie przebije… :)

    ReplyDelete
  4. Różnica polega na tym, że za zajmowanie się Oraclem mi płacą ;-)

    ReplyDelete
  5. Ojej jak byś tak przeżył przygody z oraclem to byś nie narzekał na tę parę bugów.

    ReplyDelete
  6. Nope. Sporo sposobów escapowania tych nazw wypróbowałem – skończyło się na zmianie nazw.

    ReplyDelete
  7. Do ostatniej części notki – a ujęcie nazw tabel w ukośne uszy (`) nie przynosi rezultatów?

    ReplyDelete