-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathemail--0.1.sql
More file actions
146 lines (105 loc) · 2.66 KB
/
email--0.1.sql
File metadata and controls
146 lines (105 loc) · 2.66 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
create type email;
CREATE FUNCTION email_in(cstring)
RETURNS email
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
CREATE FUNCTION email_out(email)
RETURNS cstring
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
CREATE FUNCTION email_recv(internal)
RETURNS email
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
CREATE FUNCTION email_send(email)
RETURNS bytea
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
CREATE FUNCTION email_equal(email,email)
RETURNS bool
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
CREATE FUNCTION email_notequal(email,email)
RETURNS bool
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-- está comentareada pues aun está un poco primaria su implementacion en C
/*CREATE FUNCTION email_hash(email)
RETURNS integer
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;*/
CREATE FUNCTION getuser(email)
RETURNS text
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
CREATE FUNCTION getdomain(email)
RETURNS text
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
CREATE TYPE email (
INTERNALLENGTH = -1,
INPUT = email_in,
OUTPUT = email_out,
RECEIVE = email_recv,
SEND = email_send,
STORAGE = extended
);
CREATE or REPLACE FUNCTION get_user(mail email) RETURNS character varying AS
$BODY$
declare
usr character varying;
begin
usr:= substring(mail::character varying from 1 for position('@' in mail::character varying)-1);
return usr;
end;
$BODY$
LANGUAGE plpgsql VOLATILE;
CREATE or REPLACE FUNCTION get_domain(mail email) RETURNS character varying AS
$BODY$
declare
usr character varying;
begin
usr:= substring(mail::character varying from position('@' in mail::character varying)+1 for length(mail::character varying));
return usr;
end;
$BODY$
LANGUAGE plpgsql VOLATILE;
--está temporalmente hasta que se mejore la implementacion del hash en C
CREATE OR REPLACE FUNCTION email_hash(doc1 email)
RETURNS integer AS
$BODY$
declare
valor character varying ;
suma integer=0;
i integer=1;
begin
valor=md5($1::character varying);
i := length(valor);
loop
suma:=suma+ascii(substring(valor from i for 1));
i:=i-1;
if i=0 then
exit;
end if;
end loop;
return suma* ascii(substring(valor from 1 for 1))*ascii(substring(valor from 2 for 1));
end;
$BODY$
LANGUAGE plpgsql VOLATILE;
CREATE OPERATOR = (
leftarg = email,
rightarg = email,
procedure = email_equal,
NEGATOR = <>
);
CREATE OPERATOR <> (
leftarg = email,
rightarg = email,
procedure = email_notequal,
NEGATOR = =
);
CREATE OPERATOR CLASS email_equal_ops
DEFAULT FOR TYPE email USING hash AS
OPERATOR 1 = ,
FUNCTION 1 email_hash(email);
--CREATE INDEX test_index_email ON prueba USING hash(campo email_equal_ops);