mirror of
https://github.com/tgdrive/teldrive.git
synced 2025-01-10 17:19:56 +08:00
67 lines
1.2 KiB
MySQL
67 lines
1.2 KiB
MySQL
|
-- +goose Up
|
||
|
create extension if not exists pgcrypto;
|
||
|
|
||
|
create extension if not exists btree_gin;
|
||
|
|
||
|
create schema if not exists teldrive;
|
||
|
|
||
|
create collation if not exists numeric (provider = icu, locale = 'en@colnumeric=yes');
|
||
|
|
||
|
-- +goose StatementBegin
|
||
|
create or replace
|
||
|
function teldrive.generate_uid(size int) returns text language plpgsql as $$
|
||
|
declare characters text := 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
|
||
|
|
||
|
bytes bytea := gen_random_bytes(size);
|
||
|
|
||
|
l int := length(characters);
|
||
|
|
||
|
i int := 0;
|
||
|
|
||
|
output text := '';
|
||
|
|
||
|
begin while i < size loop output := output || substr(characters,
|
||
|
get_byte(bytes,
|
||
|
i) % l + 1,
|
||
|
1);
|
||
|
|
||
|
i := i + 1;
|
||
|
end loop;
|
||
|
|
||
|
return output;
|
||
|
end;
|
||
|
|
||
|
$$;
|
||
|
-- +goose StatementEnd
|
||
|
|
||
|
-- +goose StatementBegin
|
||
|
create or replace
|
||
|
function teldrive.get_tsvector(t text) returns tsvector language plpgsql immutable as $$
|
||
|
declare res tsvector := to_tsvector(regexp_replace(t,
|
||
|
'[^A-Za-z0-9 ]',
|
||
|
' ',
|
||
|
'g'));
|
||
|
|
||
|
begin return res;
|
||
|
end;
|
||
|
|
||
|
$$;
|
||
|
-- +goose StatementEnd
|
||
|
|
||
|
-- +goose StatementBegin
|
||
|
create or replace
|
||
|
function teldrive.get_tsquery(t text) returns tsquery language plpgsql immutable as $$
|
||
|
declare res tsquery = concat(
|
||
|
plainto_tsquery(regexp_replace(t,
|
||
|
'[^A-Za-z0-9 ]',
|
||
|
' ',
|
||
|
'g')),
|
||
|
':*'
|
||
|
)::tsquery;
|
||
|
|
||
|
begin return res;
|
||
|
end;
|
||
|
|
||
|
$$;
|
||
|
-- +goose StatementEnd
|