You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

oracle.initial.sql 6.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220
  1. -- Roundcube Webmail initial database structure
  2. -- This was tested with Oracle 11g
  3. CREATE TABLE "users" (
  4. "user_id" integer PRIMARY KEY,
  5. "username" varchar(128) NOT NULL,
  6. "mail_host" varchar(128) NOT NULL,
  7. "created" timestamp with time zone DEFAULT current_timestamp NOT NULL,
  8. "last_login" timestamp with time zone DEFAULT NULL,
  9. "failed_login" timestamp with time zone DEFAULT NULL,
  10. "failed_login_counter" integer DEFAULT NULL,
  11. "language" varchar(5),
  12. "preferences" long DEFAULT NULL,
  13. CONSTRAINT "users_username_key" UNIQUE ("username", "mail_host")
  14. );
  15. CREATE SEQUENCE "users_seq"
  16. START WITH 1 INCREMENT BY 1 NOMAXVALUE;
  17. CREATE TRIGGER "users_seq_trig"
  18. BEFORE INSERT ON "users" FOR EACH ROW
  19. BEGIN
  20. :NEW."user_id" := "users_seq".nextval;
  21. END;
  22. /
  23. CREATE TABLE "session" (
  24. "sess_id" varchar(128) NOT NULL PRIMARY KEY,
  25. "changed" timestamp with time zone DEFAULT current_timestamp NOT NULL,
  26. "ip" varchar(41) NOT NULL,
  27. "vars" long NOT NULL
  28. );
  29. CREATE INDEX "session_changed_idx" ON "session" ("changed");
  30. CREATE TABLE "identities" (
  31. "identity_id" integer PRIMARY KEY,
  32. "user_id" integer NOT NULL
  33. REFERENCES "users" ("user_id") ON DELETE CASCADE,
  34. "changed" timestamp with time zone DEFAULT current_timestamp NOT NULL,
  35. "del" smallint DEFAULT 0 NOT NULL,
  36. "standard" smallint DEFAULT 0 NOT NULL,
  37. "name" varchar(128) NOT NULL,
  38. "organization" varchar(128),
  39. "email" varchar(128) NOT NULL,
  40. "reply-to" varchar(128),
  41. "bcc" varchar(128),
  42. "signature" long,
  43. "html_signature" integer DEFAULT 0 NOT NULL
  44. );
  45. CREATE INDEX "identities_user_id_idx" ON "identities" ("user_id", "del");
  46. CREATE INDEX "identities_email_idx" ON "identities" ("email", "del");
  47. CREATE SEQUENCE "identities_seq"
  48. START WITH 1 INCREMENT BY 1 NOMAXVALUE;
  49. CREATE TRIGGER "identities_seq_trig"
  50. BEFORE INSERT ON "identities" FOR EACH ROW
  51. BEGIN
  52. :NEW."identity_id" := "identities_seq".nextval;
  53. END;
  54. /
  55. CREATE TABLE "contacts" (
  56. "contact_id" integer PRIMARY KEY,
  57. "user_id" integer NOT NULL
  58. REFERENCES "users" ("user_id") ON DELETE CASCADE,
  59. "changed" timestamp with time zone DEFAULT current_timestamp NOT NULL,
  60. "del" smallint DEFAULT 0 NOT NULL,
  61. "name" varchar(128) DEFAULT NULL,
  62. "email" varchar(4000) DEFAULT NULL,
  63. "firstname" varchar(128) DEFAULT NULL,
  64. "surname" varchar(128) DEFAULT NULL,
  65. "vcard" long,
  66. "words" varchar(4000)
  67. );
  68. CREATE INDEX "contacts_user_id_idx" ON "contacts" ("user_id", "del");
  69. CREATE SEQUENCE "contacts_seq"
  70. START WITH 1 INCREMENT BY 1 NOMAXVALUE;
  71. CREATE TRIGGER "contacts_seq_trig"
  72. BEFORE INSERT ON "contacts" FOR EACH ROW
  73. BEGIN
  74. :NEW."contact_id" := "contacts_seq".nextval;
  75. END;
  76. /
  77. CREATE TABLE "contactgroups" (
  78. "contactgroup_id" integer PRIMARY KEY,
  79. "user_id" integer NOT NULL
  80. REFERENCES "users" ("user_id") ON DELETE CASCADE,
  81. "changed" timestamp with time zone DEFAULT current_timestamp NOT NULL,
  82. "del" smallint DEFAULT 0 NOT NULL,
  83. "name" varchar(128) NOT NULL
  84. );
  85. CREATE INDEX "contactgroups_user_id_idx" ON "contactgroups" ("user_id", "del");
  86. CREATE SEQUENCE "contactgroups_seq"
  87. START WITH 1 INCREMENT BY 1 NOMAXVALUE;
  88. CREATE TRIGGER "contactgroups_seq_trig"
  89. BEFORE INSERT ON "contactgroups" FOR EACH ROW
  90. BEGIN
  91. :NEW."contactgroup_id" := "contactgroups_seq".nextval;
  92. END;
  93. /
  94. CREATE TABLE "contactgroupmembers" (
  95. "contactgroup_id" integer NOT NULL
  96. REFERENCES "contactgroups" ("contactgroup_id") ON DELETE CASCADE,
  97. "contact_id" integer NOT NULL
  98. REFERENCES "contacts" ("contact_id") ON DELETE CASCADE,
  99. "created" timestamp with time zone DEFAULT current_timestamp NOT NULL,
  100. PRIMARY KEY ("contactgroup_id", "contact_id")
  101. );
  102. CREATE INDEX "contactgroupmembers_idx" ON "contactgroupmembers" ("contact_id");
  103. CREATE TABLE "cache" (
  104. "user_id" integer NOT NULL
  105. REFERENCES "users" ("user_id") ON DELETE CASCADE,
  106. "cache_key" varchar(128) NOT NULL,
  107. "expires" timestamp with time zone DEFAULT NULL,
  108. "data" long NOT NULL,
  109. PRIMARY KEY ("user_id", "cache_key")
  110. );
  111. CREATE INDEX "cache_expires_idx" ON "cache" ("expires");
  112. CREATE TABLE "cache_shared" (
  113. "cache_key" varchar(255) NOT NULL,
  114. "expires" timestamp with time zone DEFAULT NULL,
  115. "data" long NOT NULL,
  116. PRIMARY KEY ("cache_key")
  117. );
  118. CREATE INDEX "cache_shared_expires_idx" ON "cache_shared" ("expires");
  119. CREATE TABLE "cache_index" (
  120. "user_id" integer NOT NULL
  121. REFERENCES "users" ("user_id") ON DELETE CASCADE,
  122. "mailbox" varchar(255) NOT NULL,
  123. "expires" timestamp with time zone DEFAULT NULL,
  124. "valid" smallint DEFAULT 0 NOT NULL,
  125. "data" long NOT NULL,
  126. PRIMARY KEY ("user_id", "mailbox")
  127. );
  128. CREATE INDEX "cache_index_expires_idx" ON "cache_index" ("expires");
  129. CREATE TABLE "cache_thread" (
  130. "user_id" integer NOT NULL
  131. REFERENCES "users" ("user_id") ON DELETE CASCADE,
  132. "mailbox" varchar(255) NOT NULL,
  133. "expires" timestamp with time zone DEFAULT NULL,
  134. "data" long NOT NULL,
  135. PRIMARY KEY ("user_id", "mailbox")
  136. );
  137. CREATE INDEX "cache_thread_expires_idx" ON "cache_thread" ("expires");
  138. CREATE TABLE "cache_messages" (
  139. "user_id" integer NOT NULL
  140. REFERENCES "users" ("user_id") ON DELETE CASCADE,
  141. "mailbox" varchar(255) NOT NULL,
  142. "uid" integer NOT NULL,
  143. "expires" timestamp with time zone DEFAULT NULL,
  144. "data" long NOT NULL,
  145. "flags" integer DEFAULT 0 NOT NULL,
  146. PRIMARY KEY ("user_id", "mailbox", "uid")
  147. );
  148. CREATE INDEX "cache_messages_expires_idx" ON "cache_messages" ("expires");
  149. CREATE TABLE "dictionary" (
  150. "user_id" integer DEFAULT NULL
  151. REFERENCES "users" ("user_id") ON DELETE CASCADE,
  152. "language" varchar(5) NOT NULL,
  153. "data" long DEFAULT NULL,
  154. CONSTRAINT "dictionary_user_id_lang_key" UNIQUE ("user_id", "language")
  155. );
  156. CREATE TABLE "searches" (
  157. "search_id" integer PRIMARY KEY,
  158. "user_id" integer NOT NULL
  159. REFERENCES "users" ("user_id") ON DELETE CASCADE,
  160. "type" smallint DEFAULT 0 NOT NULL,
  161. "name" varchar(128) NOT NULL,
  162. "data" long NOT NULL,
  163. CONSTRAINT "searches_user_id_key" UNIQUE ("user_id", "type", "name")
  164. );
  165. CREATE SEQUENCE "searches_seq"
  166. START WITH 1 INCREMENT BY 1 NOMAXVALUE;
  167. CREATE TRIGGER "searches_seq_trig"
  168. BEFORE INSERT ON "searches" FOR EACH ROW
  169. BEGIN
  170. :NEW."search_id" := "searches_seq".nextval;
  171. END;
  172. /
  173. CREATE TABLE "system" (
  174. "name" varchar(64) NOT NULL PRIMARY KEY,
  175. "value" long
  176. );
  177. INSERT INTO "system" ("name", "value") VALUES ('roundcube-version', '2016112200');