UDF Funkce
============================================================================================================================================= UDF funkce jsou funkce psane uzivatelem bud v C nebo pod windows v Pascalu. Je to slozita problematika, JLabs typicky pouziva klasicky server pod linuxem. Jsou tedy UDF funkce implementovany v C a VELMI se opiraji o to, ze NEJSOU reentrantni. Klasicky server bere na kazdy pripoj k databazi novy proces a novou kopii knihovny. Superserver naopak ma jen jednu kopii knihovny a vsechny funkce v knihovne jlabs by se musely prepsat. Rada z nich, hlavne ty, ktere nejak obchazeji omezeni databaze, treba jednim volanim naplni buffer a jinym volanim z nej vycerpavaji data. Tyto funkce by se musely i prehodnotit, hlavne u blobu by to bylo tezke. Funkce v novejsi implementaci firebirdu musi pouzivat jiny malloc, jinak se chovat v klauzuli free it a jinak se i musi buildit. Hlavni zrada je v deklaraci malloc a noveho malloc, pozor na to. Vraci se pointer a ne int ... Deklarace struktury blob je puvodne spatne, hlavne tam, kde je short ma byt int !!! Zmenou na 64 bitu to je jeste vice zmotano, potreba kazdou funkci zhodnotit ... lepsi je slepe brat deklaraci z toho, jak jsme ji casem udelali. Nektere veci se staly obsolentnimi: bloby uz nejsou tak kriticke, protoze databaze muze byt i vetsi nez 2GB zurnaly jsou na viditelnem a stabilnim miste - zapisy pres buffer nebyly stastne externi tabulky mohou byt i velke, hlavne pro logy se to hodi a nemusi se to resit via UDF stringy s citlivostmi se nove uz deklaruji jako varchary a ne jako bloby a muzou se tedy predavat jako cstring nektere funkce zatim byly implementovany rovnou v databazi na ARO a i jinde jsou castecne stringy z blobu spis kvuli zobrazeni, protoze databaze po cca 132 znacich uz ukazuje jen (MEMO) ci (BLOB) Rada veci je naopak implementovana, protoze puvodni implementace zbytecne hlasi chyby nebo vubec neexistuje a pritom je uzitecna. Predpoklada se, ze databaze je uzivana via VaxNt a tedy veci typu YESTERDAY7 nebo THISYEAR jsou vyreseny na urovni queries, je to cca 100 promennych a cast z nich je celkem tricky - treba NEXTWORKINGDAY apod. ============================================================================================================================================= Funkce Obsolentni Entry in jlabs.c --------------------------------------------------------------------------------------------------------------------------------------------- ATB Y atb Vraci A nebo N podle toho, zda argument (typicky MEMOD) vubec nejaka antibiotika obsahuje --------------------------------------------------------------------------------------------------------------------------------------------- BLOB2BUF Y blob2buf Naplni globalni promennou buf podle blobu, vraci pocet znaku --------------------------------------------------------------------------------------------------------------------------------------------- BLOB2STRING Y buf2string Vezme globalni promennou buf a vrati pointer na ni jako na string --------------------------------------------------------------------------------------------------------------------------------------------- BUF2FILE Y buf2file --------------------------------------------------------------------------------------------------------------------------------------------- BUF2STRING Y buf2string --------------------------------------------------------------------------------------------------------------------------------------------- BUF2XPORT Y buf2xport --------------------------------------------------------------------------------------------------------------------------------------------- CF cf Dostane jako argument typicky MEMOM a jmeno antibiotika. Vrati float a navic upraveny tak, ze vetsi cokoli je 999999 a mensi cokoli je -999999 --------------------------------------------------------------------------------------------------------------------------------------------- CIR Y cir Používejte raději níže uvedenou funci sir CITL Y citl --------------------------------------------------------------------------------------------------------------------------------------------- CONVERTCZ jl_convert Vsemozne prepocitava argument podle zadaneho vzoru --------------------------------------------------------------------------------------------------------------------------------------------- CONVERTOR convertor Vraci pointer, vezme prvni argument jako string a druhy jako direktivu, podle ktere vraci vysledek. Aktualne bere jen "trailing-digits" a "filter-digits" --------------------------------------------------------------------------------------------------------------------------------------------- CPFILE Y cp_file --------------------------------------------------------------------------------------------------------------------------------------------- CRLF2BUF Y crlf2buf --------------------------------------------------------------------------------------------------------------------------------------------- CT ct Vraci C/R/I a jako argumenty bere typicky MEMOD ci MEMOM a jmeno antibiotika --------------------------------------------------------------------------------------------------------------------------------------------- CTK ctk Vraci koncentraci ci sirku zony --------------------------------------------------------------------------------------------------------------------------------------------- CTKF ctkf Vraci koncentraci jako float, viz take cf --------------------------------------------------------------------------------------------------------------------------------------------- DECODEBUF decodebuf --------------------------------------------------------------------------------------------------------------------------------------------- DIFFDAYS diffdays Vraci pocet dnu uplynuvsich mezi dvema datumy --------------------------------------------------------------------------------------------------------------------------------------------- DIFFTIMES difftimes Vraci rozdil dvou timestampu ve dnech --------------------------------------------------------------------------------------------------------------------------------------------- DOSCRIPT Y do_script Provede script jako commandu, je to velmi nebezpecne a novejsimi verzemi firebirdu potlacene --------------------------------------------------------------------------------------------------------------------------------------------- ENCODEBUF encodebuf --------------------------------------------------------------------------------------------------------------------------------------------- EQ2BUF eq2buf --------------------------------------------------------------------------------------------------------------------------------------------- FCRLF fcrlf Vraci CRLF a ignoruje parametr. Hodi se pro vselijake formatovani apod. --------------------------------------------------------------------------------------------------------------------------------------------- FDIVIDE fdivide Vraci podil dvou cisel a poradi si s podtecenim ci blbymi znaky apod. --------------------------------------------------------------------------------------------------------------------------------------------- FENTITA Y fentita Asi podle nejakeho schematu vraci null nebo zkombinovane parametry? --------------------------------------------------------------------------------------------------------------------------------------------- FFORMAT fformat Vselijake preformatovani datumu apod ... FFORMATCF fformatCf FFORMATCI fformatCi FFORMATCS fformatCs --------------------------------------------------------------------------------------------------------------------------------------------- FILE2BUF Y file2buf --------------------------------------------------------------------------------------------------------------------------------------------- FLF flf Vraci LF a ignoruje parametr, viz FCRLF --------------------------------------------------------------------------------------------------------------------------------------------- FNOW fnow Vraci stamp na serveru ve formatu %Y%m%d%H%M%S" a je-li argument -8 vrati jen dny. --------------------------------------------------------------------------------------------------------------------------------------------- FORMATE_DATE formate_date Bere jako parametr datum v nejakem formatu a pak formatovaci string. Vraci datum zase v jinem formatu. K 20170425 jsou znamy tyto formaty: dd-mm-yyyy dd/mm/yyyy dd.mm.yyyy mm-dd-yyyy mm/dd/yyyy mm.dd.yyyy yyyy-mm-dd - bere datum YYYY-MM-DD a vraci YYYYMDD yyyymmdd kdyz nerozumi formatu ci jej neumi, vrati error, jinak je nejlepe vec vyzkouset pomoci select formate_date('abcdefghijk','format') from rdb$database a je videt, co se deje pri dane konverzi --------------------------------------------------------------------------------------------------------------------------------------------- FPID fpid Vraci pid beziciho procesu --------------------------------------------------------------------------------------------------------------------------------------------- FROMJOURNAL Y fromjournal --------------------------------------------------------------------------------------------------------------------------------------------- FROUND fround Vraci zaokrouhlenou hodnotu --------------------------------------------------------------------------------------------------------------------------------------------- FTOINT ftoint Udela int z cehokoli --------------------------------------------------------------------------------------------------------------------------------------------- FUPLIMIT fuplimit Vrati uplimit, kdyz je argument vetsi nez --------------------------------------------------------------------------------------------------------------------------------------------- FVALUE fvalue Vrati cislo, bere v potaz formatovaci direktivy C a kazda exception (blby znak) je defaultovana na 0.0 --------------------------------------------------------------------------------------------------------------------------------------------- GETRESULT Y get_result --------------------------------------------------------------------------------------------------------------------------------------------- GETRESULTICZ Y get_resultICZ --------------------------------------------------------------------------------------------------------------------------------------------- HOURS2HHMMSS hours2hhmmss Prepocitava hodiny jako float na hodiny jako string --------------------------------------------------------------------------------------------------------------------------------------------- ICITL icitl --------------------------------------------------------------------------------------------------------------------------------------------- ISVOID isvoid Vraci 0 nebo 1 podle toho, zda dostane nebo ne poiner na prazdny string --------------------------------------------------------------------------------------------------------------------------------------------- ITCOUNT itcount Vraci pocet polozek ve stringu, separator je druhy argument --------------------------------------------------------------------------------------------------------------------------------------------- LABUFDUMPTOF Y labufdumptof LACLOSEF Y laclosef LACREATEDOC Y lacreatedoc LACREATEF Y lacreatef LADUMPTOF Y ladumptof --------------------------------------------------------------------------------------------------------------------------------------------- LAFIRSTNUMBER lafirstnumber Vraci cislo, dokud to jde --------------------------------------------------------------------------------------------------------------------------------------------- LAGETDOC Y lagetdoc LAOPENDOC Y laopendoc LAPRINTF Y laprintf LAPUTDOC Y laputdoc --------------------------------------------------------------------------------------------------------------------------------------------- LASTRSTR lastrstr Vraci strstr --------------------------------------------------------------------------------------------------------------------------------------------- LASUBSTR la_substr Vraci substr a kasle na omezeni vnitrni implementace substr (kratky string vede k exception) --------------------------------------------------------------------------------------------------------------------------------------------- LDFILE Y ldfile LOADFILE Y load_file LOADFILEICZ Y load_fileICZ --------------------------------------------------------------------------------------------------------------------------------------------- LOWERCZ jl_lower Konvertuje na mala pismena a to i ceske znaky --------------------------------------------------------------------------------------------------------------------------------------------- ONEYEAROLD Y one_year_old Vraci barvu Green, Cyan ci Red podle toho, jak je zaznam stary --------------------------------------------------------------------------------------------------------------------------------------------- PARAM2 param2 Vraci proste druhy argument --------------------------------------------------------------------------------------------------------------------------------------------- RDFILE Y rd_file --------------------------------------------------------------------------------------------------------------------------------------------- SABLOB2BUF Y sablob2buf --------------------------------------------------------------------------------------------------------------------------------------------- SIR fingerprint Jako argument dostává MEMO citlivostí ve tvaru ATB=X/...|..., vlastně je fuk, zda se jedná o MEMO diskoven nebo MICek. Vrací až 50 znaků dlouhý string citlivostí, kterí se dělaly a intrpretovaly. Pořadí antibiotik ve výsledném stringu je určeno pořadím v jednořádkovém souboru a ten se hledá v /jlabs/is/atb.seq. Jeho default je: AMC.AMI.AMP.AZI.AZT.CIP.CLI.CLT.CMP.COL.COT.CPD.CRM.CRX.CTR.CTX.CTZ.CXM.CXT.FUR.FSF.ERY.GEN.IMI.LIN.LNZ.MER.MOX.MTR.NAL.NET.NOR.OFL.OXA.OXO.PEF.PEN.PIP.PPT.RIF.STR.TEI.TET.TIC.TIG.TOB.VAN.ADF.AMF.CSF.FLU.ITR.KET.VOR. Funkce je určena pro rychlý náhled a rychlou identifikaci, zda se jedná o stejný či rozdílný kmen. --------------------------------------------------------------------------------------------------------------------------------------------- STDPHONE stdphone Normalizuje zapis cisla na notaci typu +420111222333, uziva se pro SMS brany SETROOTPREFIX Y setrootprefix --------------------------------------------------------------------------------------------------------------------------------------------- SSS sss Udela ze vseho string, trebas i z nullu, pak '' --------------------------------------------------------------------------------------------------------------------------------------------- STOREFILE store_file STRCAT2BUF strcat2buf STRCATBLOB2BUF strcatblob2buf STRING2BUF string2buf STRING2XPORT string2xport --------------------------------------------------------------------------------------------------------------------------------------------- SYSADMEVENT sysadmevent Uziva se jen jako znacka do /tmp. ze se jako neco udalo. Typicky to neco spusti od crona --------------------------------------------------------------------------------------------------------------------------------------------- TOFLOAT tofloat Udela ze vseho float --------------------------------------------------------------------------------------------------------------------------------------------- TOJOURNAL Y tojournal --------------------------------------------------------------------------------------------------------------------------------------------- UBIO_FLAG ubio_flag Udela viditelny flag A/N i z necyplnenych polozek --------------------------------------------------------------------------------------------------------------------------------------------- UBIO_LNO ubio_lno Zkrati Labno --------------------------------------------------------------------------------------------------------------------------------------------- UBIO_LNO3 ubio_lno3 Jinak zkrati Labno --------------------------------------------------------------------------------------------------------------------------------------------- UPPERCZ jl_upper Zkonvertuje na velka pismena vcetne ceskych --------------------------------------------------------------------------------------------------------------------------------------------- VALUEBYNAME valuebyname Snad vezme ze stringu hodnotu X pojmenovanou jak zadano? --------------------------------------------------------------------------------------------------------------------------------------------- WRFILE Y wr_file XPORT2BUF Y xport2buf --------------------------------------------------------------------------------------------------------------------------------------------- ZCITL Y zcitl Vraci zonu pro dane MEMOD a jmeno ATB ---------------------------------------------------------------------------------------------------------------------------------------------
Aktualizováno dne 20170626 Komentář: info@jlabs.cz