Tema: Re: plpgsql suma zodziu
Autorius: Laimis
Data: 2011-01-17 03:55:00
-- Function: num_to_text_ce(integer, integer, text[])
/*
   Copyright (c) 2011, Laimis <wiela@centras.lt>
   All rights reserved.

   Licensed under the BSD license.
*/

-- DROP FUNCTION num_to_text_ce(integer, integer, text[]);

CREATE OR REPLACE FUNCTION num_to_text_ce(cv integer, df integer, ce text[])
  RETURNS character varying AS
$BODY$
DECLARE
    d INTEGER := df % 10;
    k INTEGER := 1;
    
    /*	
        XXX: PG/PLSQL (as of v.8.4) multi dimensional array slicing, subarray 
        (de)referencing mess...	
        [{*]{x, y, z, ...}[}*] -> {x, y, z, ...}; 
    */
    -- re TEXT[]:= ARRAY(SELECT unnest(ce));

BEGIN

    /* 
        Two numeral case variants: 
            k = 1 (cv|tn = 1,3,4,5,6,7,...): 
                šimt(-as,-ai,-ų), milijon(-as,-ai,-ų), milijard(-as,-ai,-ų), ...;

            k = 2 (cv|tn = 2): 
                tūkstan(-tis,-čiai,-čių).
    */
    IF cv = 2 THEN
	k := cv;
    END IF;
    

    CASE
	-- [0-9][0], [11-19]: pl. genitive (lt: dgs. kilmininkas; -ų, -čių)
        WHEN  d = 0 OR df BETWEEN 11 AND 19 THEN
	    return ce[k][3];

	-- [0-9][1]: sg. nominative (lt: vns. vardininkas; -as, -tis)
	WHEN  d = 1 THEN
	    return ce[k][1];
	
	-- [0,2-9][2-9]: pl. nominative (lt: dgs. vardininkas; -ai, -čiai)
	ELSE 
	    return ce[k][2];
	    
    END CASE;

END;
$BODY$
  LANGUAGE 'plpgsql' IMMUTABLE
  COST 100;
ALTER FUNCTION num_to_text_ce(integer, integer, text[]) OWNER TO postgres;
COMMENT ON FUNCTION num_to_text_ce(integer, integer, text[]) IS 'Used by num_to_text().
Returns ending for the particular case according to numeral (case variant -- cv; triad number), 
double-figure (df) number value and case endings (ce).

/*
   Copyright (c) 2011, Laimis <wiela@centras.lt>
   All rights reserved.

   Licensed under the BSD license.
*/

';
3Dastronomyagricultureaudioautosautos.audiautos.audioautos.binariesautos.bmwautos.clubautos.fordautos.hondacrxautos.japanautos.mercedesautos.opelautos.sportautos.volvoautos.vwaviaavia.binariesbankcardsbinariesbooksbuildingcinemacommercecomp.hardwarecomp.softwarecomp.lietuvinimascomp.networksculturedarbas.ieskaudarbas.siulaudesigneconomicselectronicsfaunafauna.aquafauna.binariesfishingflorafotofoto.binariesgamesgames.csgames.onlinegsmgurmanaihumourhumour.binariesinternetlawmicrosoftmotomusicmusic.binariesmusic.instrumentsmusic.LT.binariesnavigacijaphppoliticsprogrammingrpgsportstudyingsveikatatalktesttranslationtransportationtraveltravel.binariestvunixvideovideo.binarieswatersportswwwwww.flashpdaautos.supermama.ltmobiledarbasretro.3Dretro.agricultureretro.astronomyretro.audioretro.autosretro.autos.audiretro.autos.audioretro.autos.binariesretro.autos.bmwretro.autos.clubretro.autos.fordretro.autos.hondacrxretro.autos.japanretro.autos.mercedesretro.autos.opelretro.autos.sportretro.autos.supermamaretro.autos.supermama.ltretro.autos.volvoretro.autos.vwretro.aviaretro.avia.binariesretro.bankcardsretro.beosretro.binariesretro.booksretro.buildingretro.cinemaretro.commerceretro.compretro.comp.hardwareretro.comp.lietuvinimasretro.comp.networksretro.comp.softwareretro.cultureretro.darbasretro.darbas.ieskauretro.darbas.siulauretro.designretro.economicsretro.electronicsretro.e-vejasretro.faunaretro.fauna.aquaretro.fauna.binariesretro.fishingretro.floraretro.fotoretro.foto.binariesretro.gamesretro.games.csretro.games.onlineretro.games.rpgretro.genealogijaretro.gsmretro.gurmanairetro.humourretro.humour.binariesretro.internetretro.YZFretro.YZF.nebukretro.YZF.nebuk.netikintisretro.YZF.nebuk.netikintis.bukretro.YZF.nebuk.netikintis.buk.tikintisretro.lawretro.microsoftretro.mobileretro.motoretro.musicretro.music.binariesretro.music.instrumentsretro.music.LTretro.music.LT.binariesretro.navigacijaretro.newsretro.news.taisyklesretro.newuserretro.pdaretro.phpretro.politicsretro.programmingretro.rpgretro.sportretro.studyingretro.sveikataretro.talkretro.translationretro.transportationretro.travelretro.travel.binariesretro.tvretro.unixretro.videoretro.video.binariesretro.watersportsretro.wwwretro.www.flashdiylt.rkm.news.announcelt.rkm.news.newuser