Przeglądaj źródła

lib/srdb1/schema: Updated XCAP indices to fix MySQL primary key issue

- Made id primary key again
- Made doc_uri a unique index (constraint)
- Removed unique constraint from other indices as no longer needed
Peter Dunkley 13 lat temu
rodzic
commit
45a9d6089a

+ 6 - 4
lib/srdb1/schema/pr_xcap.xml

@@ -23,6 +23,7 @@
         <autoincrement/>
         <type db="dbtext">int,auto</type>
         <description>Unique ID</description>
+	<primary/>
     </column>
 
     <column id="username">
@@ -73,7 +74,6 @@
         <type>string</type>
         <size>&xcap_uri_len;</size>
         <description>Document uri</description>
-        <primary/>
     </column>
 
     <column id="port">
@@ -83,12 +83,16 @@
         <description>XCAP server port</description>
     </column>
 
+    <index>
+        <name>doc_uri_idx</name>
+        <unique/>
+    </index>
+
     <index>
         <name>account_doc_type_idx</name>
         <colref linkend="username"/>
         <colref linkend="domain"/>
         <colref linkend="doc_type"/>
-        <unique/>
     </index>
 
     <index>
@@ -97,7 +101,6 @@
         <colref linkend="domain"/>
         <colref linkend="doc_type"/>
         <colref linkend="doc_uri"/>
-        <unique/>
     </index>
 
     <index>
@@ -105,6 +108,5 @@
         <colref linkend="username"/>
         <colref linkend="domain"/>
         <colref linkend="doc_uri"/>
-        <unique/>
     </index>
 </table>

+ 7 - 5
utils/kamctl/db_sqlite/presence-create.sql

@@ -59,20 +59,22 @@ CREATE TABLE watchers (
 
 INSERT INTO version (table_name, table_version) values ('xcap','4');
 CREATE TABLE xcap (
-    id INTEGER NOT NULL,
+    id INTEGER PRIMARY KEY NOT NULL,
     username VARCHAR(64) NOT NULL,
     domain VARCHAR(64) NOT NULL,
     doc BYTEA NOT NULL,
     doc_type INTEGER NOT NULL,
     etag VARCHAR(64) NOT NULL,
     source INTEGER NOT NULL,
-    doc_uri VARCHAR(255) PRIMARY KEY NOT NULL,
+    doc_uri VARCHAR(255) NOT NULL,
     port INTEGER NOT NULL,
-    CONSTRAINT xcap_account_doc_type_idx UNIQUE (username, domain, doc_type),
-    CONSTRAINT xcap_account_doc_type_uri_idx UNIQUE (username, domain, doc_type, doc_uri),
-    CONSTRAINT xcap_account_doc_uri_idx UNIQUE (username, domain, doc_uri)
+    CONSTRAINT xcap_doc_uri_idx UNIQUE ()
 );
 
+CREATE INDEX xcap_account_doc_type_idx ON xcap (username, domain, doc_type);
+CREATE INDEX xcap_account_doc_type_uri_idx ON xcap (username, domain, doc_type, doc_uri);
+CREATE INDEX xcap_account_doc_uri_idx ON xcap (username, domain, doc_uri);
+
 INSERT INTO version (table_name, table_version) values ('pua','7');
 CREATE TABLE pua (
     id INTEGER PRIMARY KEY NOT NULL,

+ 7 - 5
utils/kamctl/mysql/presence-create.sql

@@ -59,20 +59,22 @@ CREATE TABLE watchers (
 
 INSERT INTO version (table_name, table_version) values ('xcap','4');
 CREATE TABLE xcap (
-    id INT(10) UNSIGNED AUTO_INCREMENT NOT NULL,
+    id INT(10) UNSIGNED AUTO_INCREMENT PRIMARY KEY NOT NULL,
     username VARCHAR(64) NOT NULL,
     domain VARCHAR(64) NOT NULL,
     doc MEDIUMBLOB NOT NULL,
     doc_type INT(11) NOT NULL,
     etag VARCHAR(64) NOT NULL,
     source INT(11) NOT NULL,
-    doc_uri VARCHAR(255) PRIMARY KEY NOT NULL,
+    doc_uri VARCHAR(255) NOT NULL,
     port INT(11) NOT NULL,
-    CONSTRAINT account_doc_type_idx UNIQUE (username, domain, doc_type),
-    CONSTRAINT account_doc_type_uri_idx UNIQUE (username, domain, doc_type, doc_uri),
-    CONSTRAINT account_doc_uri_idx UNIQUE (username, domain, doc_uri)
+    CONSTRAINT doc_uri_idx UNIQUE ()
 ) ENGINE=MyISAM;
 
+CREATE INDEX account_doc_type_idx ON xcap (username, domain, doc_type);
+CREATE INDEX account_doc_type_uri_idx ON xcap (username, domain, doc_type, doc_uri);
+CREATE INDEX account_doc_uri_idx ON xcap (username, domain, doc_uri);
+
 INSERT INTO version (table_name, table_version) values ('pua','7');
 CREATE TABLE pua (
     id INT(10) UNSIGNED AUTO_INCREMENT PRIMARY KEY NOT NULL,

+ 7 - 5
utils/kamctl/oracle/presence-create.sql

@@ -83,18 +83,16 @@ BEGIN map2users('watchers'); END;
 /
 INSERT INTO version (table_name, table_version) values ('xcap','4');
 CREATE TABLE xcap (
-    id NUMBER(10),
+    id NUMBER(10) PRIMARY KEY,
     username VARCHAR2(64),
     domain VARCHAR2(64),
     doc BLOB,
     doc_type NUMBER(10),
     etag VARCHAR2(64),
     source NUMBER(10),
-    doc_uri VARCHAR2(255) PRIMARY KEY,
+    doc_uri VARCHAR2(255),
     port NUMBER(10),
-    CONSTRAINT xcap_account_doc_type_idx  UNIQUE (username, domain, doc_type),
-    CONSTRAINT xcap_account_doc_type_uri_idx  UNIQUE (username, domain, doc_type, doc_uri),
-    CONSTRAINT xcap_account_doc_uri_idx  UNIQUE (username, domain, doc_uri)
+    CONSTRAINT xcap_doc_uri_idx  UNIQUE ()
 );
 
 CREATE OR REPLACE TRIGGER xcap_tr
@@ -105,6 +103,10 @@ END xcap_tr;
 /
 BEGIN map2users('xcap'); END;
 /
+CREATE INDEX xcap_account_doc_type_idx  ON xcap (username, domain, doc_type);
+CREATE INDEX xcap_account_doc_type_uri_idx  ON xcap (username, domain, doc_type, doc_uri);
+CREATE INDEX xcap_account_doc_uri_idx  ON xcap (username, domain, doc_uri);
+
 INSERT INTO version (table_name, table_version) values ('pua','7');
 CREATE TABLE pua (
     id NUMBER(10) PRIMARY KEY,

+ 7 - 5
utils/kamctl/postgres/presence-create.sql

@@ -59,20 +59,22 @@ CREATE TABLE watchers (
 
 INSERT INTO version (table_name, table_version) values ('xcap','4');
 CREATE TABLE xcap (
-    id SERIAL NOT NULL,
+    id SERIAL PRIMARY KEY NOT NULL,
     username VARCHAR(64) NOT NULL,
     domain VARCHAR(64) NOT NULL,
     doc BYTEA NOT NULL,
     doc_type INTEGER NOT NULL,
     etag VARCHAR(64) NOT NULL,
     source INTEGER NOT NULL,
-    doc_uri VARCHAR(255) PRIMARY KEY NOT NULL,
+    doc_uri VARCHAR(255) NOT NULL,
     port INTEGER NOT NULL,
-    CONSTRAINT xcap_account_doc_type_idx UNIQUE (username, domain, doc_type),
-    CONSTRAINT xcap_account_doc_type_uri_idx UNIQUE (username, domain, doc_type, doc_uri),
-    CONSTRAINT xcap_account_doc_uri_idx UNIQUE (username, domain, doc_uri)
+    CONSTRAINT xcap_doc_uri_idx UNIQUE ()
 );
 
+CREATE INDEX xcap_account_doc_type_idx ON xcap (username, domain, doc_type);
+CREATE INDEX xcap_account_doc_type_uri_idx ON xcap (username, domain, doc_type, doc_uri);
+CREATE INDEX xcap_account_doc_uri_idx ON xcap (username, domain, doc_uri);
+
 INSERT INTO version (table_name, table_version) values ('pua','7');
 CREATE TABLE pua (
     id SERIAL PRIMARY KEY NOT NULL,