Apache-SdnFw
view release on metacpan or search on metacpan
lib/Apache/SdnFw/db/install/pg.sql view on Meta::CPAN
CREATE USER sdnfw;
CREATE LANGUAGE 'plpgsql';
CREATE OR REPLACE FUNCTION pop_last(text) RETURNS text
AS ' SELECT x.str[array_upper(x.str,1)] FROM (SELECT string_to_array($1,'','') as str) x; '
LANGUAGE sql;
--DROP AGGREGATE concat(int4);
--DROP AGGREGATE concat(varchar);
--DROP AGGREGATE concat(float8);
CREATE OR REPLACE FUNCTION join_array(anyarray) RETURNS text
AS ' SELECT array_to_string($1,'',''); '
LANGUAGE sql;
CREATE AGGREGATE concat (
BASETYPE = anyelement,
SFUNC = array_append,
STYPE = anyarray,
FINALFUNC = join_array,
INITCOND = '{}'
);
CREATE OR REPLACE FUNCTION sum_array(anyarray,anyelement) RETURNS anyarray
AS ' SELECT array_append($1,COALESCE($1[array_upper($1,1)],0)+$2); '
LANGUAGE sql;
--DROP AGGREGATE concat_sum(int4);
--DROP AGGREGATE concat_sum(varchar);
--DROP AGGREGATE concat_sum(float8);
CREATE AGGREGATE concat_sum (
BASETYPE = anyelement,
SFUNC = sum_array,
STYPE = anyarray,
FINALFUNC = join_array,
INITCOND = '{}'
);
-------------------------------
-- EMPLOYEE
-------------------------------
CREATE TABLE employees (
employee_id serial primary key,
login varchar(255) unique not null,
passwd varchar(32) not null,
name varchar(255) not null,
email varchar(255),
passwd_expire timestamp,
locked_out boolean,
remote_addr inet,
last_bad_pass date,
bad_pass_count int4,
cookie varchar(32) unique,
created_ts timestamp not null default now(),
expired_ts timestamp);
GRANT INSERT,UPDATE,SELECT,DELETE ON employees TO sdnfw;
GRANT ALL ON employees_employee_id_seq TO sdnfw;
SELECT setval('employees_employee_id_seq',1000,'false');
CREATE TABLE employee_sessions (
employee_id int4 unique references employees,
last_update_ts timestamp not null default now(),
data text);
GRANT ALL ON employee_sessions TO sdnfw;
CREATE VIEW employees_v (employee_id, login, passwd, name, email) AS
SELECT employee_id, login, passwd, name, email
FROM employees
ORDER BY name;
GRANT ALL ON employees_v TO sdnfw;
CREATE VIEW employees_v_keyval (id, name) AS
SELECT employee_id, name
FROM employees
ORDER BY name;
GRANT ALL ON employees_v_keyval TO sdnfw;
-------------------------------
-- LOCATION
-------------------------------
CREATE TABLE locations (
location_id serial primary key,
employee_id int4 references employees,
name varchar(255) not null,
b_address varchar(255),
b_address2 varchar(255),
b_city varchar(255),
b_state varchar(2),
b_zipcode varchar(12),
s_address varchar(255),
s_address2 varchar(255),
s_city varchar(255),
s_state varchar(2),
s_zipcode varchar(12),
phone int8,
fax int8,
email varchar(255),
website varchar(255),
created_ts timestamp not null default now(),
closed_ts timestamp);
GRANT INSERT,UPDATE,SELECT ON locations TO sdnfw;
GRANT ALL ON locations_location_id_seq TO sdnfw;
SELECT setval('locations_location_id_seq',1000,'false');
CREATE VIEW locations_v (location_id, name,
b_address, b_address2, b_city, b_state, b_zipcode,
lib/Apache/SdnFw/db/install/pg.sql view on Meta::CPAN
FROM locations l
JOIN employees e ON COALESCE(e.expired_ts,now()) >= now()
LEFT JOIN employee_locations el ON l.location_id=el.location_id
AND e.employee_id=el.employee_id
ORDER BY employee_name;
GRANT ALL ON employee_locations_v_location TO sdnfw;
-------------------------------
-- GROUP ACTION
-------------------------------
CREATE TABLE group_actions (
group_id int4 not null references groups,
action_id int4 not null references actions);
CREATE UNIQUE INDEX group_actions_idx ON group_actions (group_id, action_id);
GRANT ALL ON group_actions TO sdnfw;
CREATE INDEX group_actions_group_id ON group_actions (group_id);
CREATE INDEX group_actions_action_id ON group_actions (action_id);
INSERT INTO group_actions (group_id, action_id) VALUES (1000,1000);
CREATE VIEW group_actions_v (group_id, action_id, group_name, action_name) AS
SELECT ga.group_id, ga.action_id, g.name as group_name, a.name as action_name
FROM group_actions ga
JOIN groups g ON ga.group_id=g.group_id
JOIN actions a ON a.action_id=ga.action_id
ORDER BY group_name, action_name;
GRANT ALL ON group_actions_v TO sdnfw;
CREATE VIEW group_actions_v_group (group_id, action_id, action_name, checked) AS
SELECT g.group_id, a.action_id, a.name as action_name,
CASE WHEN ga.group_id IS NOT NULL THEN TRUE ELSE FALSE END AS checked
FROM groups g
JOIN actions a ON a.action_id>0
LEFT JOIN group_actions ga ON a.action_id=ga.action_id
AND g.group_id=ga.group_id
ORDER BY a.name;
GRANT ALL ON group_actions_v_group TO sdnfw;
CREATE VIEW group_actions_v_action (action_id, group_id, group_name, checked) AS
SELECT a.action_id, g.group_id, g.name as group_name,
CASE WHEN ga.action_id IS NOT NULL THEN TRUE ELSE FALSE END AS checked
FROM actions a
JOIN groups g ON g.group_id>0
LEFT JOIN group_actions ga ON a.action_id=ga.action_id
AND g.group_id=ga.group_id
ORDER BY g.name;
GRANT ALL ON group_actions_v_action TO sdnfw;
-------------------------------
-- EMPLOYEE GROUP
-------------------------------
CREATE TABLE employee_groups (
employee_id int4 not null references employees,
group_id int4 not null references groups);
CREATE UNIQUE INDEX employee_groups_idx ON employee_groups (employee_id, group_id);
GRANT ALL ON employee_groups TO sdnfw;
CREATE INDEX employee_groups_employee_id ON employee_groups (employee_id);
CREATE INDEX employee_groups_group_id ON employee_groups (group_id);
CREATE VIEW employees_v_login (employee_id, login, cookie, passwd, name, email,
password_expired, locked_out, account_expired, groups, admin) AS
SELECT e.employee_id, e.login, e.cookie, e.passwd, e.name, e.email,
CASE WHEN passwd_expire < now() THEN TRUE ELSE NULL END as password_expired,
e.locked_out,
CASE WHEN expired_ts < now() THEN TRUE ELSE NULL END as account_expired,
concat(eg.group_id) as groups,
CASE WHEN count(g.admin) > 0 THEN TRUE ELSE NULL END as admin
FROM employees e
LEFT JOIN employee_groups eg ON e.employee_id=eg.employee_id
LEFT JOIN groups g ON eg.group_id=g.group_id
GROUP BY 1,2,3,4,5,6,7,8,9;
GRANT ALL ON employees_v_login TO sdnfw;
CREATE VIEW employee_groups_v (employee_id, group_id,
employee_name, group_name) AS
SELECT eg.employee_id, eg.group_id,
e.name as employee_name, g.name as group_name
FROM employee_groups eg
JOIN employees e ON eg.employee_id=e.employee_id
JOIN groups g ON eg.group_id=g.group_id
ORDER BY employee_name, group_name;
GRANT ALL ON employee_groups_v TO sdnfw;
CREATE VIEW employee_groups_v_employee (employee_id, group_id, group_name, checked) AS
SELECT e.employee_id, g.group_id, g.name as group_name,
CASE WHEN eg.employee_id IS NOT NULL THEN TRUE ELSE FALSE END as checked
FROM employees e
JOIN groups g ON g.group_id>0
LEFT JOIN employee_groups eg ON e.employee_id=eg.employee_id
AND eg.group_id=g.group_id
ORDER BY g.name;
GRANT ALL ON employee_groups_v_employee TO sdnfw;
CREATE VIEW employee_groups_v_group (group_id, employee_id, employee_name, checked) AS
SELECT g.group_id, e.employee_id, e.name as employee_name,
CASE WHEN eg.group_id IS NOT NULL THEN TRUE ELSE FALSE END as checked
FROM groups g
JOIN employees e ON COALESCE(e.expired_ts,now()) >= now()
LEFT JOIN employee_groups eg ON e.employee_id=eg.employee_id
AND eg.group_id=g.group_id
ORDER BY e.name;
GRANT ALL ON employee_groups_v_group TO sdnfw;
-------------------------------
-- COUNTRY
-------------------------------
CREATE TABLE countries (
country varchar(2) primary key,
name varchar(255) not null,
sort_order int4 not null default 99);
GRANT SELECT ON countries TO sdnfw;
INSERT INTO countries (country, name, sort_order) VALUES
('US','United States',1),
('CA','Canada',2);
-------------------------------
-- STATE
-------------------------------
CREATE TABLE states (
state varchar(2) primary key,
country varchar(2) not null references countries,
name varchar(255));
GRANT SELECT ON states TO sdnfw;
INSERT INTO states (state, country, name) VALUES
( run in 1.436 second using v1.01-cache-2.11-cpan-140bd7fdf52 )