Pull from branch_0_9: Widen call{ed,ing}stationid from 30 to 50
[freeradius.git] / src / modules / rlm_sql / drivers / rlm_sql_oracle / db_oracle.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 'dictionary'
12  */
13 CREATE TABLE dictionary (
14         id              INT PRIMARY KEY,
15         type            VARCHAR(30),
16         attribute       VARCHAR(32),
17         value           VARCHAR(32),
18         format          VARCHAR(20),
19         vendor          VARCHAR(32)
20 );
21 CREATE SEQUENCE dictionary_seq START WITH 1 INCREMENT BY 1;
22
23 /*
24  * Table structure for table 'nas'
25  * This is not currently used but FreeRADIUS but is usefull for reporting
26  * anyway.
27  */
28
29 CREATE TABLE nas (
30         id              INT PRIMARY KEY,
31         nasname         VARCHAR(128),
32         shortname       VARCHAR(32),
33         ipaddr          VARCHAR(15),
34         type            VARCHAR(30),
35         ports           INT,
36         secret          VARCHAR(60),
37         community       VARCHAR(50),
38         snmp            VARCHAR(10),
39         naslocation     VARCHAR(10)
40 );
41 CREATE SEQUENCE nas_seq START WITH 1 INCREMENT BY 1;
42
43 /*
44  * Table structure for table 'radacct'
45  */
46 CREATE TABLE radacct (
47         radacctid               INT PRIMARY KEY,
48         acctsessionid           VARCHAR(32) NOT NULL,
49         acctuniqueid            VARCHAR(32),
50         username                VARCHAR(32) NOT NULL,
51         realm                   VARCHAR(30),
52         nasipaddress            VARCHAR(15) NOT NULL,
53         nasportid               NUMERIC(12),
54         nasporttype             VARCHAR(32),
55         acctstarttime           DATE,
56         acctstoptime            DATE,
57         acctsessiontime         NUMERIC(12),
58         acctauthentic           VARCHAR(32),
59         connectinfo_start       VARCHAR(32),
60         connectinfo_stop        VARCHAR(32),
61         acctinputoctets         NUMERIC(12),
62         acctoutputoctets        NUMERIC(12),
63         calledstationid         VARCHAR(50),
64         callingstationid        VARCHAR(50),
65         acctterminatecause      VARCHAR(32),
66         servicetype             VARCHAR(32),
67         framedprotocol          VARCHAR(32),
68         framedipaddress         VARCHAR(15),
69         acctstartdelay          NUMERIC(12),
70         acctstopdelay           NUMERIC(12)
71 );
72 CREATE UNIQUE INDEX radacct_idx1
73        ON radacct(acctsessionid,username,acctstarttime,
74                 acctstoptime,nasipaddress,framedipaddress);
75
76 CREATE SEQUENCE radacct_seq START WITH 1 INCREMENT BY 1;
77
78 /* Trigger to emulate a serial # on the primary key */
79 CREATE OR REPLACE TRIGGER radacct_serialnumber 
80         BEFORE INSERT OR UPDATE OF radacctid ON radacct
81         FOR EACH ROW
82         BEGIN
83                 if ( :new.radacctid = 0 or :new.radacctid is null ) then
84                         SELECT radacct_seq.nextval into :new.radacctid from dual;
85                 end if;
86         END;
87 /
88
89 /*
90  * Table structure for table 'radcheck'
91  */
92 CREATE TABLE radcheck (
93         id              INT PRIMARY KEY,
94         username        VARCHAR(30) NOT NULL,
95         attribute       VARCHAR(30),
96         op              VARCHAR(2) NOT NULL,
97         value           VARCHAR(40)
98 );
99 CREATE SEQUENCE radcheck_seq START WITH 1 INCREMENT BY 1;
100
101 /* Trigger to emulate a serial # on the primary key */
102 CREATE OR REPLACE TRIGGER radcheck_serialnumber 
103         BEFORE INSERT OR UPDATE OF id ON radcheck
104         FOR EACH ROW
105         BEGIN
106                 if ( :new.id = 0 or :new.id is null ) then
107                         SELECT radcheck_seq.nextval into :new.id from dual;
108                 end if;
109         END;
110 /
111
112 /*
113  * Table structure for table 'radgroupcheck'
114  */
115 CREATE TABLE radgroupcheck (
116         id              INT PRIMARY KEY,
117         groupname       VARCHAR(20) UNIQUE NOT NULL,
118         attribute       VARCHAR(40),
119         op              VARCHAR(2) NOT NULL,
120         value           VARCHAR(40)
121 );
122 CREATE SEQUENCE radgroupcheck_seq START WITH 1 INCREMENT BY 1;
123
124 /*
125  * Table structure for table 'radgroupreply'
126  */
127 CREATE TABLE radgroupreply (
128         id              INT PRIMARY KEY,
129         GroupName       VARCHAR(20) UNIQUE NOT NULL,
130         Attribute       VARCHAR(40),
131         op              VARCHAR(2) NOT NULL,
132         Value           VARCHAR(40)
133 );
134 CREATE SEQUENCE radgroupreply_seq START WITH 1 INCREMENT BY 1;
135
136 /*
137  * Table structure for table 'radreply'
138  */
139 CREATE TABLE radreply (
140         id              INT PRIMARY KEY,
141         UserName        VARCHAR(30) NOT NULL,
142         Attribute       VARCHAR(30),
143         op              VARCHAR(2) NOT NULL,
144         Value           VARCHAR(40)
145 );
146 CREATE INDEX radreply_idx1 ON radreply(UserName);
147 CREATE SEQUENCE radreply_seq START WITH 1 INCREMENT BY 1;
148
149 /* Trigger to emulate a serial # on the primary key */
150 CREATE OR REPLACE TRIGGER radreply_serialnumber 
151         BEFORE INSERT OR UPDATE OF id ON radreply
152         FOR EACH ROW
153         BEGIN
154                 if ( :new.id = 0 or :new.id is null ) then
155                         SELECT radreply_seq.nextval into :new.id from dual;
156                 end if;
157         END;
158 /
159
160 /*
161  * Table structure for table 'usergroup'
162  */
163 CREATE TABLE usergroup (
164         id              INT PRIMARY KEY,
165         UserName        VARCHAR(30) UNIQUE NOT NULL,
166         GroupName       VARCHAR(30)
167 );
168 CREATE SEQUENCE usergroup_seq START WITH 1 INCREMENT BY 1;
169
170 /*
171  * Table structure for table 'realmgroup'
172  */
173 CREATE TABLE realmgroup (
174         id              INT PRIMARY KEY,
175         RealmName       VARCHAR(30) UNIQUE NOT NULL,
176         GroupName       VARCHAR(30)
177 );
178 CREATE SEQUENCE realmgroup_seq START WITH 1 INCREMENT BY 1;
179
180 CREATE TABLE realms (
181         id              INT PRIMARY KEY,
182         realmname       VARCHAR(64),
183         nas             VARCHAR(128),
184         authport        INT,
185         options         VARCHAR(128)
186 );
187 CREATE SEQUENCE realms_seq START WITH 1 INCREMENT BY 1;