The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.
-- drop table languages;
-- drop table users;
-- drop table soa;
-- drop table rec_count;
-- drop table records_A;
-- drop table records_AAAA;
-- drop table records_CNAME;
-- drop table records_MX;
-- drop table records_NS;
-- drop table records_PTR;
-- drop table records_TXT;
-- drop table domains;
-- drop table tickets;
-- drop table ticketsecrets;
-- drop sequence languages_id;
-- drop sequence users_id;
-- drop sequence domains_id;
-- drop sequence records_A_id;
-- drop sequence records_AAAA_id;
-- drop sequence records_CNAME_id;
-- drop sequence records_MX_id;
-- drop sequence records_NS_id;
-- drop sequence records_PTR_id;
-- drop sequence records_TXT_id;

set escape \

create table languages (
  id number not null,
  lang varchar2(5) not null,
  language varchar2(255) not null,
  abbrev varchar2(5) not null,
  constraint languages_pk PRIMARY KEY (id)
);

create sequence languages_id increment by 1 start with 1;

insert into languages (id, lang, language, abbrev) values (languages_id.nextval,'en','English','en');
insert into languages (id, lang, language, abbrev) values (languages_id.nextval,'de','Deutsch','de');
insert into languages (id, lang, language, abbrev) values (languages_id.nextval,'dk','Dansk','da');
insert into languages (id, lang, language, abbrev) values (languages_id.nextval,'it','Italiano','it');
insert into languages (id, lang, language, abbrev) values (languages_id.nextval,'fr','Fran\çais','fr');
insert into languages (id, lang, language, abbrev) values (languages_id.nextval,'se','Svenska','sv');
insert into languages (id, lang, language, abbrev) values (languages_id.nextval,'br','Portuguese Brazil','pt-BR');

create table users (
  id number not null,
  username varchar2(20) not null,
  password varchar2(20) not null,
  email varchar2(255) not null,
  lang number(2) not null
     constraint lang_fk references languages(id),
  constraint users_pk primary key (id)
);

create sequence users_id increment by 1 start with 1;

create table domains (
  id number not null,
  domain varchar2(255) not null,
  owner number not null
     constraint users_fk references users(id),
  constraint domains_pk primary key (id)
);

create sequence domains_id increment by 1 start with 1;

create table soa (
  domain number not null
     constraint domain_fk references domains(id),
  auth_ns varchar2(255) not null, --  also the nameserver where the updates should go to
  email varchar2(255) not null,
  serial number(7) not null,
  refresh number(7) not null,
  retry number(7) not null,
  expire number(7) not null,
  default_ttl number(7) not null,
  rec_lock number(1) default '0' null
);

--  rec_count is MAX count of each type
create table rec_count (
  domain number not null
     constraint rec_c_domain_fk references domains(id),
  A_count number not null,
  AAAA_count number not null,
  CNAME_count number not null,
  MX_count number not null,
  NS_count number not null,
  PTR_count number not null,
  TXT_count number not null
);

create table records_A (
  id number not null,
  domain number not null
     constraint a_records_domain_fk references domains(id),
  name varchar2(255) not null,
  address varchar2(16) not null,
  ttl number(7) not null,
  rec_lock number(1) default 0 null,
  constraint records_a_pk primary key(id)
);

create sequence records_A_id increment by 1 start with 1;

create table records_AAAA (
  id number not null,
  domain number not null
     constraint aaaa_records_domain_fk references domains(id),
  name varchar2(255) not null,
  address varchar2(39) not null,
  ttl number(7) not null,
  rec_lock number(1) default 0 null,
  constraint records_aaaa_pk primary key(id)
);

create sequence records_AAAA_id increment by 1 start with 1;

create table records_CNAME (
  id number not null,
  domain number not null
     constraint cnames_domain_fk references domains(id),
  name varchar2(255) not null,
  cname varchar2(255) not null,
  ttl number(7) not null,
  rec_lock number(1) default 0 null,
  constraint records_cname_pk primary key (id)
);

create sequence records_CNAME_id increment by 1 start with 1;

create table records_MX (
  id number not null,
  domain number not null
     constraint mxrecords_domain_fk references domains(id),
  name varchar2(255) not null,
  exchanger varchar2(255) not null,
  preference number(3) not null,
  ttl number(7) not null,
  rec_lock number(1) default 0 null,
  constraint mxrecords_pk primary key (id)
);

create sequence records_MX_id increment by 1 start with 1;

create table records_NS (
  id number not null,
  domain number not null
     constraint nsrecords_domain_fk references domains(id),
  name varchar2(255) not null,
  nsdname varchar2(255) not null,
  ttl number(7) not null,
  rec_lock number(1) default 0 null,
  constraint nsrecords_pk primary key (id)
);

create sequence records_NS_id increment by 1 start with 1;

create table records_PTR (
  id number not null,
  domain number not null
     constraint ptr_records_domain_fk references domains(id),
  name varchar2(255) not null,
  ptrdname varchar2(255) not null,
  ttl number(7) not null,
  rec_lock number(1) default 0 null,
  constraint records_ptr_pk primary key(id)
);

create sequence records_PTR_id increment by 1 start with 1;

create table records_TXT (
  id number not null,
  domain number not null
     constraint txtrecords_domain_fk references domains(id),
  name varchar2(255) not null,
  txtdata varchar2(255) not null,
  ttl number(7) not null,
  rec_lock number(1) default 0 null,
  constraint txtrecords_pk  primary key (id)
);

create sequence records_TXT_id increment by 1 start with 1;

create table tickets (
  ticket_hash varchar2(32) not null,
  ts number(11) not null,
  constraint tickets_pk primary key (ticket_hash)
);

create table ticketsecrets (
  sec_version number(11),
  sec_data varchar2(16) NOT NULL
);

insert into ticketsecrets values (1,'dnszone');