연말 술 취해서 바꾼 이곳 게시판 본문 검색 핵심 부분입니다.
초창기 plpython으로 만들었던 놈을 보면서 코드를 1/3가량 줄였네요.
덕분에 점점 암호문이 되어가네요. 술 깨서 보니 전혀 무슨 말인지 모르겠네요.
어디 따로 쓰일런지는 모르겠지만, (여튼 자작권은 BSD)
기록으로 남겨둡니다.
언제까지 쓰일지도 모르겠지만.
CREATE OR REPLACE FUNCTION fti_insert(p_ftitable text, p_k integer, p_c integer, p_fullstr text) RETURNS integer
LANGUAGE plpgsql
AS $_$
declare
fullstr text;
row record;
v_c text;
begin
if p_k is null or p_fullstr is null then
return 0;
end if;
-- strip html tags
fullstr := regexp_replace(p_fullstr, '<[^<>]+>','','g');
-- lower contents
fullstr := lower(regexp_replace(fullstr, '<|>|"| |&|©|<|>|''|"|%|&|©|,|/|~|`|!|#|=|:|;', ' ', 'g'));
if p_c is null then
v_c := 'null';
else
v_c := p_c;
end if;
-- one dynamic query!
execute('insert into ' || p_ftitable ||
' select ' || p_k || ', ' || v_c || ',
substr(a, 1,50) from regexp_split_to_table(' || quote_literal(fullstr) || ',''['' ||
E''' || E'\\\\\\\\' || ''' ||
E''' || E'\\\\' || ''' || ''s'' ||
E''' || E'\\\\' || ''' || ''$'' ||
E''' || E'\\\\' || ''' || ''^'' ||
E''' || E'\\\\' || ''' || ''*'' ||
E''' || E'\\\\' || ''' || ''('' ||
E''' || E'\\\\' || ''' || '')'' ||
E''' || E'\\\\' || ''' || ''+'' ||
E''' || E'\\\\' || ''' || ''|'' ||
E''' || E'\\\\' || ''' || ''['' ||
E''' || E'\\\\' || ''' || '']'' ||
E''' || E'\\\\' || ''' || ''{'' ||
E''' || E'\\\\' || ''' ||''}?]'') as t (a) group by a having length(a) > 1');
return 1;
end;
$_$;
|