Эхх… не удержался… сделал SQL параметрическую елочку на postgres 9.3.
height — высота, igr — вероятность игрушек, rost — угол наклона елки, fon — кол-во символов обрамления, penok — высота пенька елки.
DO $_$
DECLARE param text :=
'20 height,0.2 igr,0.7 rost,5 fon,0.06 sneg,2 penok';
tt text; pp text;xx text;zz
text;___ text;elka
CONSTANT
refcursor
:='elka';
BEGIN
xx:= 'select';
zz:='from' ;___:=
'::text'; pp := $$
WITH b as ($$ ||xx ||
$$ 'tr' $$||___|| $$ a,
'r' $$ || ___ || $$ b,'a'
$$ || ___ || $$ c , 'in' $$
||___|| $$ v), a as ($$||xx||
$$ 's'||a||v || 'g' s,c||b||b||
c||'y' a,'en' $$ ||___|| $$ e,'l'
||c $$||___||$$ l,b|| 'e' $$||___||
$$ r,'ne' $$||___||$$ n, 'el' $$||___||
$$ k,'e'||b $$||___||$$ d, 'to_'$$||___||
$$ _,'e'||c $$||___|| $$ g,'ow' $$||___||$$
w,'oup' $$||___||$$ p,'by' $$||___||$$ b,'nio'
$$||___||$$ i,'ig'||b rg, 'dom' $$||___|| $$ o,c
||'s' $$||___||$$ z,'o'||b $$||___||$$ t,'ch' $$||
___||$$ f,'p' $$||___||$$ h,'on' $$||___||$$ y,b||'o'
$$||___||$$ j,v, c||b||c c $$||zz||$$ b),d as ($$||xx||
$$' f'||j||'m ' $$||___||$$ f,'s'||k||'ect ' s,'sub'||s||
'(' u,' f'||t||' ' r,'::'||v||'t' $$||___||$$ i,'i,g'||e||d
||'ate_s'||d||'ies(' g,a||'_'||_||s||'('||a||'_agg(' a,'c'||z
||'e wh'||e||' ' w,'v'||d||'si'||y||'(),_,_-_))' v,' gr'||p||' '
||b||' _' o,'ran'||o||'()' n,h||'i()' p,'th'||e t,k||'se' e,e||'d'
d,rg,y mm,f||'r(' c,'ne'$$||___||$$ sg,z z,'l'||e||'gth' l,'::'||r||
'al' q,''||h||'c' __,'u'||i||'n ' un,r||h||g||'t(' re,r||h||l||'ce('pl
,'un'||n||'st('||a ua,'deg'||r||'es' de,t||'d'||d||' '||b y,'ov'||d||l||
'y(e '||h||l||'c'||v||'g'||' '||_||f||'ar(n'||w||'(),___)' ov, n||'w_y'||g
||'r_t'||r||'e' ne,'hei'$$||___||$$||'ght'$$||___||$$ b,'p' ||c||'m' ar,'os'
$$||___||$$ rt,'eno'$$||___||$$ pk $$||zz||$$ a)$$||xx||$$ '),c '||z||'('||s||
'('||p||'/'||p||')'||i||' _,('||p||'*'||p||'*'||p||')'||i||' '||__||'),i '||z||'
('||s||'('||s||a||'c),'||u||v||f||'('||s||c||ua||'['||__||'+_+_,'||__||'+'||p||i||
'+_+_,'||__||'+('||p||'+'||p||')'||i||'+_,('||__||'+'||__||q||'/(_+_)-'||p||')'||i||
','||__||'+_+'||__||'+_,'||__||'+'||__||'+'||__||'/(_+_)+(_+_)])) c) h) j, '||c||__||'
+_) q, '||c||__||'+'||__||'/(_+_)) z,'||c||__||'+'||__||'/(_+_)+_) n,'||c||__||'+'||__||
'+'||__||'-_)$$||___||$$ m,'||re||c||__||'+_+'||p||i||'),_+_+_) pe,'||c||__||'+'||__||'/(_
+_)-'||p||i||'-_) v,'||c||'('||__||'+'||__||')*(_+_)) b,r'||rt||'t'||q||' r,'||rg||''||q||',
'||b||''||i||' h,f'||mm||i||' f,s'||sg||'g'||q||' u,p'||pk||'k'||i||' y,('||b||'*r'||rt||'t+('
||p||'/'||p||'))'||i||' '||z||' o, _,_+_ _t,'||c||'('||__||'+_)'||i||')||'||re||c||'(('||de||'(
'||p||')/(_+_))-_)'||i||'),('||p||'+'||p||'-_-_)'||i||')||'||c||'('||__||'+_)'||i||')___ '||f||' '
||ar||',c),l '||z||'('||s||'g, (g*r)'||i||' '||z||' l'||f||g||'_,h)g '|| un||s||'_-_,_-_'||f||'i '||
un||s||'g+h,('||l||'(pe)-_)/_t l'||f||g||'_,y)g),s '||z||'('||s||a||w||n||'> u '||t||' q '||e||' z '||
d||'),'||u||v||'x'||f||g||'_,((h+_+y+f)*h*(_+_+_)))g'||o||'),v '||z||'('||s||a||w||n||'>'||rg||' '||t||'
n '||e||'('||s||u||'j||p,('||n||'*('||l||'(j)-_)+_)'||i||',_)'||f||'i)'||d||'),'||u||v||' '||z||' w'||f||g
||'_,((h+_)*h*(_+_+_)))p'||o||'),e '||z||'('||s||'g,'||w||'g<=h '||t||' '||u||'x'||f||'g*h*_t+_'||r||'(o-l+f
))||'||u||'w'||f||'g*h*_t+_'||r||'l)||'||w||'g=_-_ '||t||' v '||e||' b '||d||'||'||pl||u||'w'||f||'g*h*_t+h+_'
||r||'l),n,m)||'||u||'x'||f||'g*h*_t+h+_'||r||'(o-l+f))'||e||' '||u||'x'||f||'g*h*_t+_'||r||'(o-l+f))||pe||' ||u
||'x'||f||'g*h*_t+h+_'||r||'(o-l+f))'||d||' e'||f||'i,l,s,v '||y||' g)'||s||w||'g=h-_ '||t||' '||ov||f||l||'(e)/_t-
_t)'||e||' e '||d||' '||ne||' '||f||'e,i' $$||zz||$$ d $$;
EXECUTE PP INTO TT;
OPEN ELKA FOR
EXECUTE'WITH
PARAM AS('
||XX||' '||
PARAM||TT;
END ; $_$;
FETCH ALL
FROM ELKA;
В pgAdmin — выглядит нормально :) елка just for fun, без цифр :) С новым годом
http://habrahabr.ru/post/247249/