Reorganise SQL files
[freeradius.git] / raddb / sql / main / oracle / schema.sql
1 /*
2  * $Id$
3  *
4  * Oracle schema for FreeRADIUS
5  *
6  *
7  * NOTE: Which columns are NULLable??
8  */
9
10 /*
11  * Table structure for table 'radacct'
12  */
13 CREATE TABLE radacct (
14         radacctid               INT PRIMARY KEY,
15         acctsessionid           VARCHAR(96) NOT NULL,
16         acctuniqueid            VARCHAR(32),
17         username                VARCHAR(64) NOT NULL,
18         groupname               VARCHAR(32),
19         realm                   VARCHAR(30),
20         nasipaddress            VARCHAR(15) NOT NULL,
21         nasportid               VARCHAR(32),
22         nasporttype             VARCHAR(32),
23         acctstarttime           TIMESTAMP WITH TIME ZONE,
24         acctstoptime            TIMESTAMP WITH TIME ZONE,
25         acctsessiontime         NUMERIC(19),
26         acctauthentic           VARCHAR(32),
27         connectinfo_start       VARCHAR(50),
28         connectinfo_stop        VARCHAR(50),
29         acctinputoctets         NUMERIC(19),
30         acctoutputoctets        NUMERIC(19),
31         calledstationid         VARCHAR(50),
32         callingstationid        VARCHAR(50),
33         acctterminatecause      VARCHAR(32),
34         servicetype             VARCHAR(32),
35         framedprotocol          VARCHAR(32),
36         framedipaddress         VARCHAR(15),
37         acctstartdelay          NUMERIC(12),
38         acctstopdelay           NUMERIC(12),
39         XAscendSessionSvrKey    VARCHAR(10)
40 );
41
42 CREATE UNIUQE INDEX radacct_idx0
43         ON radacct(acctuniqueid);
44 CREATE UNIQUE INDEX radacct_idx1
45         ON radacct(acctsessionid,username,acctstarttime,
46                 acctstoptime,nasipaddress,framedipaddress);
47
48 CREATE SEQUENCE radacct_seq START WITH 1 INCREMENT BY 1;
49
50 /* Trigger to emulate a serial # on the primary key */
51 CREATE OR REPLACE TRIGGER radacct_serialnumber
52         BEFORE INSERT OR UPDATE OF radacctid ON radacct
53         FOR EACH ROW
54         BEGIN
55                 if ( :new.radacctid = 0 or :new.radacctid is null ) then
56                         SELECT radacct_seq.nextval into :new.radacctid from dual;
57                 end if;
58         END;
59 /
60
61 /*
62  * Table structure for table 'radcheck'
63  */
64 CREATE TABLE radcheck (
65         id              INT PRIMARY KEY,
66         username        VARCHAR(30) NOT NULL,
67         attribute       VARCHAR(64),
68         op              VARCHAR(2) NOT NULL,
69         value           VARCHAR(40)
70 );
71 CREATE SEQUENCE radcheck_seq START WITH 1 INCREMENT BY 1;
72
73 /* Trigger to emulate a serial # on the primary key */
74 CREATE OR REPLACE TRIGGER radcheck_serialnumber
75         BEFORE INSERT OR UPDATE OF id ON radcheck
76         FOR EACH ROW
77         BEGIN
78                 if ( :new.id = 0 or :new.id is null ) then
79                         SELECT radcheck_seq.nextval into :new.id from dual;
80                 end if;
81         END;
82 /
83
84 /*
85  * Table structure for table 'radgroupcheck'
86  */
87 CREATE TABLE radgroupcheck (
88         id              INT PRIMARY KEY,
89         groupname       VARCHAR(20) UNIQUE NOT NULL,
90         attribute       VARCHAR(64),
91         op              CHAR(2) NOT NULL,
92         value           VARCHAR(40)
93 );
94 CREATE SEQUENCE radgroupcheck_seq START WITH 1 INCREMENT BY 1;
95
96 /*
97  * Table structure for table 'radgroupreply'
98  */
99 CREATE TABLE radgroupreply (
100         id              INT PRIMARY KEY,
101         GroupName       VARCHAR(20) UNIQUE NOT NULL,
102         Attribute       VARCHAR(64),
103         op              CHAR(2) NOT NULL,
104         Value           VARCHAR(40)
105 );
106 CREATE SEQUENCE radgroupreply_seq START WITH 1 INCREMENT BY 1;
107
108 /*
109  * Table structure for table 'radreply'
110  */
111 CREATE TABLE radreply (
112         id              INT PRIMARY KEY,
113         UserName        VARCHAR(30) NOT NULL,
114         Attribute       VARCHAR(64),
115         op              CHAR(2) NOT NULL,
116         Value           VARCHAR(40)
117 );
118 CREATE INDEX radreply_idx1 ON radreply(UserName);
119 CREATE SEQUENCE radreply_seq START WITH 1 INCREMENT BY 1;
120
121 /* Trigger to emulate a serial # on the primary key */
122 CREATE OR REPLACE TRIGGER radreply_serialnumber
123         BEFORE INSERT OR UPDATE OF id ON radreply
124         FOR EACH ROW
125         BEGIN
126                 if ( :new.id = 0 or :new.id is null ) then
127                         SELECT radreply_seq.nextval into :new.id from dual;
128                 end if;
129         END;
130 /
131
132 /*
133  * Table structure for table 'radusergroup'
134  */
135 CREATE TABLE radusergroup (
136         id              INT PRIMARY KEY,
137         UserName        VARCHAR(30) UNIQUE NOT NULL,
138         GroupName       VARCHAR(30)
139 );
140 CREATE SEQUENCE radusergroup_seq START WITH 1 INCREMENT BY 1;
141
142 /* Trigger to emulate a serial # on the primary key */
143 CREATE OR REPLACE TRIGGER radusergroup_serialnumber
144         BEFORE INSERT OR UPDATE OF id ON radusergroup
145         FOR EACH ROW
146         BEGIN
147                 if ( :new.id = 0 or :new.id is null ) then
148                         SELECT radusergroup_seq.nextval into :new.id from dual;
149                 end if;
150         END;
151 /
152
153
154 /*
155  * Table structure for table 'realmgroup'
156  */
157 CREATE TABLE realmgroup (
158         id              INT PRIMARY KEY,
159         RealmName       VARCHAR(30) UNIQUE NOT NULL,
160         GroupName       VARCHAR(30)
161 );
162 CREATE SEQUENCE realmgroup_seq START WITH 1 INCREMENT BY 1;
163
164 CREATE TABLE realms (
165         id              INT PRIMARY KEY,
166         realmname       VARCHAR(64),
167         nas             VARCHAR(128),
168         authport        INT,
169         options         VARCHAR(128)
170 );
171 CREATE SEQUENCE realms_seq START WITH 1 INCREMENT BY 1;
172
173 CREATE TABLE radhuntgroup (
174         id              INT PRIMARY KEY,
175         GroupName VARCHAR(64) NOT NULL,
176         Nasipaddress VARCHAR(15) UNIQUE NOT NULL,
177         NASPortID VARCHAR(15)
178 );
179
180 CREATE SEQUENCE radhuntgroup_seq START WITH 1 INCREMENT BY 1;
181
182 CREATE OR REPLACE TRIGGER radhuntgroup_serialnumber
183         BEFORE INSERT OR UPDATE OF id ON radhuntgroup
184         FOR EACH ROW
185         BEGIN
186                 if ( :new.id = 0 or :new.id is null ) then
187                         SELECT radhuntgroup_seq.nextval into :new.id from dual;
188                 end if;
189         END;
190
191 CREATE TABLE radpostauth (
192           id            INT PRIMARY KEY,
193           UserName      VARCHAR(64) NOT NULL,
194           Pass          VARCHAR(64),
195           Reply         VARCHAR(64),
196           AuthDate      DATE
197 );
198
199 CREATE SEQUENCE radpostauth_seq START WITH 1 INCREMENT BY 1;
200
201 CREATE OR REPLACE TRIGGER radpostauth_TRIG
202         BEFORE INSERT OR UPDATE OF id ON radpostauth
203         FOR EACH ROW
204         BEGIN
205                 if ( :new.id = 0 or :new.id is null ) then
206                         SELECT radpostauth_seq.nextval into :new.id from dual;
207                 end if;
208                 if (:new.AuthDate is null) then
209                   select sysdate into :new.AuthDate from dual;
210                 end if;
211         END;
212
213 /
214
215 /*
216  * Table structure for table 'nas'
217  */
218 CREATE TABLE nas (
219         id              INT PRIMARY KEY,
220         nasname         VARCHAR(128),
221         shortname       VARCHAR(32),
222         type            VARCHAR(30),
223         ports           INT,
224         secret          VARCHAR(60),
225         server          VARCHAR(64),
226         community       VARCHAR(50),
227         description     VARCHAR(200)
228 );
229 CREATE SEQUENCE nas_seq START WITH 1 INCREMENT BY 1;
230