-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathDDB-MySQL.sql
92 lines (82 loc) · 2.01 KB
/
DDB-MySQL.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
CREATE TABLE Tables
(
`Table` INTEGER NOT NULL,
`Call1` CHAR(8) NOT NULL,
`Call2` CHAR(8) NOT NULL,
`Date` DATETIME NOT NULL,
PRIMARY KEY(`Table`, `Call1`)
);
CREATE TABLE Users
(
`Nick` VARCHAR(16) PRIMARY KEY,
`Name` VARCHAR(16),
`Address` VARCHAR(64),
`Enabled` INTEGER DEFAULT 1,
`Server` VARCHAR(16) DEFAULT '',
`Date` TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE Gateways
(
`Call` CHAR(8) NOT NULL,
`Address` VARCHAR(64) NOT NULL,
PRIMARY KEY(`Call`)
);
CREATE TABLE Table0
(
`Call1` CHAR(8) NOT NULL,
`Call2` CHAR(8) NOT NULL,
PRIMARY KEY(`Call1`)
);
CREATE TABLE Table1
(
`Call1` CHAR(8) NOT NULL,
`Call2` CHAR(8) NOT NULL,
PRIMARY KEY(`Call1`)
);
CREATE INDEX TableDate ON Tables (`Table`, `Date`);
CREATE INDEX GatewayAddress ON Gateways (`Address`);
CREATE INDEX Addresses ON Gateways (`Address`, `Call`);
delimiter //
CREATE TRIGGER RegisterCall AFTER INSERT ON Tables FOR EACH ROW
BEGIN
IF (NEW.`Table` = 0) THEN
REPLACE
INTO Table0 (`Call1`, `Call2`)
VALUES (NEW.`Call1`, NEW.`Call2`);
END IF;
IF (NEW.`Table` = 1) THEN
REPLACE
INTO Table1 (`Call1`, `Call2`)
VALUES (NEW.`Call1`, NEW.`Call2`);
END IF;
END;
//
CREATE TRIGGER RegisterUser AFTER INSERT ON Users FOR EACH ROW
BEGIN
IF (NEW.`Enabled` = 1) AND (NEW.`Nick` LIKE '%-_') THEN
REPLACE
INTO Gateways (`Call`, `Address`)
VALUES (SUBSTR(CONCAT(UPPER(NEW.`Name`), ' '), 1, 8), NEW.`Address`);
END IF;
END;
//
delimiter ;
CREATE VIEW Routes AS
SELECT
Table1.`Call1` AS `Call`,
'CQCQCQ ' AS `Station`,
Table1.`Call1` AS `Repeater`,
Table1.`Call2` AS `Gateway`,
`Address`
FROM Table1
JOIN Gateways ON Table1.`Call2` = Gateways.`Call`
UNION
SELECT
Table0.`Call1` AS `Call`,
Table0.`Call1` AS `Station`,
Table0.`Call2` AS `Repeater`,
Table1.`Call2` AS `Gateway`,
`Address`
FROM Table0
JOIN Table1 ON Table0.`Call2` = Table1.`Call1`
JOIN Gateways ON Table1.`Call2` = Gateways.`Call`;