SQLite - Vlastné triedenie
Na stránke create_collation.html je popis ako nadefinovať vlastné triedenie do SQLite. Horšie je, že nerozumiem ako na to. Predpokladám, že priamo v databáze to neviem nastaviť a musím to spraviť programovo. Potrebujem to urobiť v Lazarovi. Akým spôsobom si zaregistrujem tieto vlastné funkcie? Dá sa to vôbec v Lazarovi?
Tohle je podle mne interface k DLL.
Musis napsat DLL a v ni exportovat tyto funkce. To muzes i v Lazarovi
Aha, takže toto už pre mňa také jednoduché nebude. To aby som sa začal učiť výrobu DLL.
Urcite nejsi prvni, kdo to delal. Pri trose snahy bys mel na internetu najit zdrojaky
Aj to som už skúšal, len zrejme nezadávam nič vhodné do Google.
Podarilo sa mi nájsť SQLite s ICU, lenže ak budem s databázou narábať s externým nástrojom, tak to nemusí nakoniec fungovať. Ideálne by bolo, keby to triedenie funguje priamo, keď aj natvrdo. Ale zatiaľ som nič vhodné nenašiel.
No nič, asi to skúsim sám. Vedel by si ma prosím nasmerovať ako nazvať DLL súbor, aby s ním SQLite pracovalo a ako to celé rozbehať?
cintro.html
loadext.html
Nakoniec som predsa len skončil pri ICU. Mám stiahnuté aktuálne SQLite a ICU, ale neviem to dať dokopy. Prepokladám, že kompilovať nemusím nič, keďže som stiahol priamo binárky.
Doplnené: Takže kompilovať pravdepodobne musím, ale nedarí sa mi. Skúsil som to cez Code::Blocks, ale neúspešne.
Robil som to takto:
Spustil som Code::Blocks, tam som otvoril zdroják SQLite a skúšobne som dal hneď kompiláciu. Vyhodilo mi to chybu v nejakej includovanej knižnici z MinGW. Táto koémpilácia cudzích projektov bola pre mňa vždy španielska dedina. Na internete som nejaké SQLite s ICU aj našiel, ale v Lazarovi mi neberie nastavenie collation cez SQL príkaz SELECT. Možno niečo robím špatne, ale neviem čo. Ak by mi s tým niekto vedel poradiť, bol by som mu veľmi vďačný. Nechápem prečo SQLite rovno nevydávajú v dvoch verziách. S ICU a bez ICU.
Doplnené:
SQLite s ICU mám odtiaľto:
forum#!topic/web2py/Q_5i1tozCDM
Ale neviem to rozchodiť.
Keďže mi to nedalo pokoja a ďalej som sa v tom vŕtal, podarilo sa mi problém vyriešiť. Tu je riešenie:
Na stránke Google Groups sa dá preklikať na download SQLite kompiláciu s ICU:
pagesqliteicu.html
Lenže mne to nefungovalo. Dôvod bol ten (ako som neskôr zistil pomocou nástroja depends, že úplne posledný download (najvyššie s najnovšími verziami) zrejme kvôli chybe autora neobsahuje SQLite naviazané na ICU, ale len čisté SQLite a ICU je k tomu len pribalené. Treba stiahnuť staršiu kompiláciu. Ja som stiahol tú najstaršiu. Potom je treba stiahnuť kompiláciu ICU pre Windows z ICU stránky a doložiť súbor icudt38.dll. Potom po ovorení databázy treba zadať SQL príkaz:
SELECT icu_load_collation('sk_SK', 'slovak');
A samotné triedenie musí na konci ORDER klauzuly obsahovať:
COLLATE slovak
Toto síce nie je nutné, ale len vtedy, ak je tabuľka už vytvorená so správnym COLLATE, lenže tam by zrejme hrozila nekompatibilita s ostatnými klientmi.