-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsqlmed.sql
130 lines (104 loc) · 4.13 KB
/
sqlmed.sql
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
\pset null _null_
SET client_min_messages = notice;
SET search_path = public,datalink;
create table sample_urls (
id serial,
url text
);
select dlurlserver(dlvalue('file:///etc/issue'));
select dlurlserver(dlvalue('file://server1/etc/issue'));
select dlurlscheme(dlvalue('FiLe://SeRvEr1/EtC/IsSuE'));
select dlurlserver(dlvalue('FiLe://SeRvEr1/EtC/IsSuE'));
select dlurlpath(dlvalue('FiLe://SeRvEr1/EtC/IsSuE'));
select dlvalue('/tmp/test-_=!@$^&()[]{}#?','FS');
select dlurlpath(dlvalue('/tmp/test-_=!@$^&()[]{}#?','FS'));
select dlurlcomplete(dlvalue('/tmp/test-_=!@$^&()[]{}#?','FS'));
insert into sample_urls (url)
values
('http://www.mozilla.org');
insert into sample_urls (url)
values
('http://www.ljudmila.org'),
('https://www.github.org'),
('file:///tmp/a'),
('http://www.debian.org/');
select * from sample_urls;
---------------------
create table sample_files (
id serial,
filename datalink.file_path
);
insert into sample_files (filename)
values
('/var/www/datalink/test1.txt'),
('/var/www/datalink/test2.txt'),
('/var/www/datalink/test3.txt#11111111-2222-3333-4444-abecedabeced'),
('/var/www/datalink/testX.txt'),
('/var/www/datalink/CHANGELOG.md');
select *,dlvalue(filename) from sample_files;
---------------------
create table sample_datalinks (
url text,
link datalink
);
--select * from dl_triggers;
--select column_name,lco FROM datalink.dl_columns;
--select * from datalink.columns;
insert into sample_datalinks (link)
values (dlvalue('http://www.archive.org','URL','Sample datalink'));
insert into sample_datalinks (link)
values (dlvalue('http://guthub.org','URL','Another sample datalink'));
insert into sample_datalinks (url,link)
select url,dlvalue(url)
from sample_urls;
update sample_datalinks
set link = null
where url like 'file:%';
update sample_datalinks
set link = null
where url like '%debian.org%';
delete from sample_datalinks
where url like 'https:%';
update sample_datalinks
set link = dlvalue(url)
where link is null and url is not null;
-- check for some exceptions from the SQL standard
create table med (link datalink(2)); -- INTEGRITY ALL
-- 15.2 Effect of inserting rows into base tables
-- case 1.a.1 referenced file does not exist
insert into med (link) values (dlvalue('file:///var/www/datalink/non_existant_file')); -- err
--
-- case 1.b.1 invalid datalink construction
insert into med (link) values (dlpreviouscopy('file:///var/www/datalink/test1.txt')); -- err
insert into med (link) values (dlnewcopy('file:///var/www/datalink/test1.txt')); -- err
insert into med (link) values (dlvalue('file:///var/www/datalink/test1.txt')); -- ok
--
-- case 1.b.2 external file already linked
insert into med (link) values (dlvalue('file:///var/www/datalink/test1.txt')); -- err
-- 15.3 Effect of replacing rows in base tables
update med set link = dlvalue('file:///var/www/datalink/test2.txt'); -- ok
--
-- case 1.b.i.1 referenced file does not exist
update med set link = dlvalue('file:///var/www/datalink/non_existant_file'); -- err
--
-- case 1.b.ii.1 external file already linked
insert into med (link) values (dlvalue('file:///var/www/datalink/test1.txt')); -- ok
update med set link = dlvalue('file:///var/www/datalink/test4.txt'); -- err
delete from med;
--
-- case 1.b.ii.2.A.I invalid write token
update datalink.columns set read_access='DB',write_access='TOKEN' where table_name='med';
insert into med (link) values (dlvalue('file:///var/www/datalink/test1.txt')); -- ok
update med set link = dlnewcopy('file:///var/www/datalink/test1.txt'); -- err
update med set link = dlnewcopy(link); -- ok
--
-- case 1.b.ii.2.B invalid write permission for update
update datalink.columns set read_access='DB',write_access='BLOCKED' where table_name='med';
update med set link = dlnewcopy('file:///var/www/datalink/test2.txt'); -- err
--
-- case 1.b.ii.2.C referenced file not valid
update datalink.columns set read_access='DB',write_access='ADMIN' where table_name='med';
update med set link = dlnewcopy('file:///var/www/datalink/test2.txt'); -- err
update med set link = dlvalue('file:///var/www/datalink/test2.txt'); -- ok
update med set link = dlnewcopy('file:///var/www/datalink/test2.txt'); -- ok
drop table med;