* Fixed parserTests compatibility for Oracle
[lhc/web/wiklou.git] / maintenance / ora / tables.sql
index 9b08d00..d2d1a21 100644 (file)
@@ -185,6 +185,13 @@ CREATE INDEX &mw_prefix.externallinks_i01 ON &mw_prefix.externallinks (el_from,
 CREATE INDEX &mw_prefix.externallinks_i02 ON &mw_prefix.externallinks (el_to, el_from);
 CREATE INDEX &mw_prefix.externallinks_i03 ON &mw_prefix.externallinks (el_index);
 
+CREATE TABLE &mw_prefix.external_user (
+  eu_local_id NUMBER NOT NULL,
+  eu_external_id varchar2(255) NOT NULL
+);
+ALTER TABLE &mw_prefix.external_user ADD CONSTRAINT &mw_prefix.external_user_pk PRIMARY KEY (eu_local_id);
+CREATE UNIQUE INDEX &mw_prefix.external_user_u01 ON &mw_prefix.external_user (eu_external_id);
+
 CREATE TABLE &mw_prefix.langlinks (
   ll_from    NUMBER  NOT NULL  REFERENCES &mw_prefix.page (page_id) ON DELETE CASCADE,
   ll_lang    VARCHAR2(20),
@@ -246,7 +253,7 @@ CREATE TABLE &mw_prefix.image (
   img_bits         NUMBER,
   img_media_type   VARCHAR2(32),
   img_major_mime   VARCHAR2(32) DEFAULT 'unknown',
-  img_minor_mime   VARCHAR2(32) DEFAULT 'unknown',
+  img_minor_mime   VARCHAR2(100) DEFAULT 'unknown',
   img_description  VARCHAR2(255),
   img_user         NUMBER       NULL  REFERENCES &mw_prefix.mwuser(user_id) ON DELETE SET NULL,
   img_user_text    VARCHAR2(255)      NOT NULL,
@@ -274,7 +281,7 @@ CREATE TABLE &mw_prefix.oldimage (
   oi_metadata      CLOB,
   oi_media_type    VARCHAR2(32) DEFAULT NULL,
   oi_major_mime    VARCHAR2(32) DEFAULT 'unknown',
-  oi_minor_mime    VARCHAR2(32) DEFAULT 'unknown',
+  oi_minor_mime    VARCHAR2(100) DEFAULT 'unknown',
   oi_deleted       NUMBER DEFAULT 0 NOT NULL,
   oi_sha1          VARCHAR2(32)
 );
@@ -301,8 +308,8 @@ CREATE TABLE &mw_prefix.filearchive (
   fa_bits               NUMBER,
   fa_media_type         VARCHAR2(32) DEFAULT NULL,
   fa_major_mime         VARCHAR2(32) DEFAULT 'unknown',
-  fa_minor_mime         VARCHAR2(32) DEFAULT 'unknown',
-  fa_description        VARCHAR2(255)         NOT NULL,
+  fa_minor_mime         VARCHAR2(100) DEFAULT 'unknown',
+  fa_description        VARCHAR2(255),
   fa_user               NUMBER          NULL  REFERENCES &mw_prefix.mwuser(user_id) ON DELETE SET NULL,
   fa_user_text          VARCHAR2(255)         NOT NULL,
   fa_timestamp          TIMESTAMP(6) WITH TIME ZONE,
@@ -435,7 +442,7 @@ CREATE TABLE &mw_prefix.log_search (
   ls_value VARCHAR2(255) NOT NULL,
   ls_log_id NuMBER DEFAULT 0 NOT NULL
 );
-ALTER TABLE log_search ADD CONSTRAINT log_search_pk PRIMARY KEY (ls_field,ls_value,ls_log_id);
+ALTER TABLE &mw_prefix.log_search ADD CONSTRAINT log_search_pk PRIMARY KEY (ls_field,ls_value,ls_log_id);
 CREATE INDEX &mw_prefix.log_search_i01 ON &mw_prefix.log_search (ls_log_id);
 
 CREATE SEQUENCE trackbacks_tb_id_seq;
@@ -574,7 +581,8 @@ CREATE TABLE &mw_prefix.l10n_cache (
 );
 CREATE INDEX &mw_prefix.l10n_cache_u01 ON &mw_prefix.l10n_cache (lc_lang, lc_key);
 
-CREATE TABLE &mw_prefix.wiki_field_info_full (
+-- do not prefix this table as it breaks parserTests
+CREATE TABLE wiki_field_info_full (
 table_name VARCHAR2(35) NOT NULL,
 column_name VARCHAR2(35) NOT NULL,
 data_default VARCHAR2(4000),
@@ -585,14 +593,14 @@ prim NUMBER(1),
 uniq NUMBER(1),
 nonuniq NUMBER(1) 
 );
-ALTER TABLE &mw_prefix.wiki_field_info_full ADD CONSTRAINT &mw_prefix.wiki_field_info_full_pk PRIMARY KEY (table_name, column_name);
+ALTER TABLE wiki_field_info_full ADD CONSTRAINT wiki_field_info_full_pk PRIMARY KEY (table_name, column_name);
 
 /*$mw$*/
-CREATE PROCEDURE &mw_prefix.fill_wiki_info IS
+CREATE PROCEDURE fill_wiki_info IS
        BEGIN
-               DELETE      &mw_prefix.wiki_field_info_full;
+               DELETE      wiki_field_info_full;
 
-               FOR x_rec IN (SELECT '&mw_prefix.' || t.table_name table_name, t.column_name,
+               FOR x_rec IN (SELECT t.table_name table_name, t.column_name,
                                                                                                t.data_default, t.data_length, t.data_type,
                                                                                                DECODE (t.nullable, 'Y', '1', 'N', '0') not_null,
                                                                                                (SELECT 1
@@ -622,7 +630,7 @@ CREATE PROCEDURE &mw_prefix.fill_wiki_info IS
                                                                                FROM user_tab_columns t, user_tables ut
                                                                        WHERE ut.table_name = t.table_name)
                LOOP
-                       INSERT INTO &mw_prefix.wiki_field_info_full
+                       INSERT INTO wiki_field_info_full
                                                                        (table_name, column_name,
                                                                                data_default, data_length,
                                                                                data_type, not_null, prim,
@@ -638,9 +646,105 @@ CREATE PROCEDURE &mw_prefix.fill_wiki_info IS
 END;
 /*$mw$*/
 
+/*$mw$*/
+CREATE OR REPLACE PROCEDURE duplicate_table(p_tabname   IN VARCHAR2,
+                                            p_oldprefix IN VARCHAR2,
+                                            p_newprefix IN VARCHAR2,
+                                            p_temporary IN BOOLEAN) IS
+  e_table_not_exist EXCEPTION;
+  PRAGMA EXCEPTION_INIT(e_table_not_exist, -00942);
+BEGIN
+  BEGIN
+    EXECUTE IMMEDIATE 'DROP TABLE ' || p_newprefix || p_tabname ||
+                      ' CASCADE CONSTRAINTS';
+  EXCEPTION
+    WHEN e_table_not_exist THEN
+      NULL;
+  END;
+  IF (p_temporary) THEN
+    EXECUTE IMMEDIATE 'CREATE GLOBAL TEMPORARY TABLE ' || p_newprefix ||
+                      p_tabname || ' AS SELECT * FROM ' || p_oldprefix ||
+                      p_tabname || ' WHERE ROWNUM = 0';
+  ELSE
+    EXECUTE IMMEDIATE 'CREATE TABLE ' || p_newprefix || p_tabname ||
+                      ' AS SELECT * FROM ' || p_oldprefix || p_tabname ||
+                      ' WHERE ROWNUM = 0';
+  END IF;
+  FOR rc IN (SELECT column_name, data_default
+               FROM user_tab_columns
+              WHERE table_name = p_oldprefix || p_tabname
+                AND data_default IS NOT NULL) LOOP
+    EXECUTE IMMEDIATE 'ALTER TABLE ' || p_newprefix || p_tabname ||
+                      ' MODIFY ' || rc.column_name || ' DEFAULT ' ||
+                      substr(rc.data_default, 1, 2000);
+  END LOOP;
+  FOR rc IN (SELECT REPLACE(REPLACE(DBMS_LOB.SUBSTR(DBMS_METADATA.get_ddl('CONSTRAINT',
+                                                                          constraint_name),
+                                                    32767,
+                                                    1),
+                                    USER || '"."' || p_oldprefix,
+                                    USER || '"."' || p_newprefix),
+                            '"' || constraint_name || '"',
+                            '"' || p_newprefix || constraint_name || '"') DDLVC2,
+                    constraint_name
+               FROM user_constraints uc
+              WHERE table_name = p_oldprefix || p_tabname
+                AND constraint_type = 'P') LOOP
+    dbms_output.put_line(SUBSTR(rc.ddlvc2,
+                                1,
+                                INSTR(rc.ddlvc2, 'PCTFREE') - 1));
+    EXECUTE IMMEDIATE SUBSTR(rc.ddlvc2, 1, INSTR(rc.ddlvc2, 'PCTFREE') - 1);
+  END LOOP;
+  FOR rc IN (SELECT REPLACE(DBMS_LOB.SUBSTR(DBMS_METADATA.get_ddl('REF_CONSTRAINT',
+                                                                  constraint_name),
+                                            32767,
+                                            1),
+                            USER || '"."' || p_oldprefix,
+                            USER || '"."' || p_newprefix) DDLVC2,
+                    constraint_name
+               FROM user_constraints uc
+              WHERE table_name = p_oldprefix || p_tabname
+                AND constraint_type = 'R') LOOP
+    EXECUTE IMMEDIATE rc.ddlvc2;
+  END LOOP;
+  FOR rc IN (SELECT REPLACE(REPLACE(DBMS_LOB.SUBSTR(DBMS_METADATA.get_ddl('INDEX',
+                                                                          index_name),
+                                                    32767,
+                                                    1),
+                                    USER || '"."' || p_oldprefix,
+                                    USER || '"."' || p_newprefix),
+                            '"' || index_name || '"',
+                            '"' || p_newprefix || index_name || '"') DDLVC2,
+                    index_name
+               FROM user_indexes ui
+              WHERE table_name = p_oldprefix || p_tabname
+                AND index_type != 'LOB'
+                AND NOT EXISTS
+              (SELECT NULL
+                       FROM user_constraints
+                      WHERE table_name = ui.table_name
+                        AND constraint_name = ui.index_name)) LOOP
+    EXECUTE IMMEDIATE SUBSTR(rc.ddlvc2, 1, INSTR(rc.ddlvc2, 'PCTFREE') - 1);
+  END LOOP;
+  FOR rc IN (SELECT REPLACE(REPLACE(UPPER(DBMS_LOB.SUBSTR(DBMS_METADATA.get_ddl('TRIGGER',
+                                                                                trigger_name),
+                                                          32767,
+                                                          1)),
+                                    USER || '"."' || p_oldprefix,
+                                    USER || '"."' || p_newprefix),
+                            ' ON ' || p_oldprefix || p_tabname,
+                            ' ON ' || p_newprefix || p_tabname) DDLVC2,
+                    trigger_name
+               FROM user_triggers
+              WHERE table_name = p_oldprefix || p_tabname) LOOP
+    EXECUTE IMMEDIATE SUBSTR(rc.ddlvc2, 1, INSTR(rc.ddlvc2, 'ALTER ') - 1);
+  END LOOP;
+END;
+/*$mw$*/
+
 /*$mw$*/
 BEGIN 
-       &mw_prefix.fill_wiki_info;
+       fill_wiki_info;
 END;
 /*$mw$*/
 
@@ -659,7 +763,7 @@ END;
 /*$mw$*/
 
 /*$mw$*/
-CREATE OR REPLACE TYPE GET_OUTPUT_TYPE AS TABLE OF VARCHAR2(255);
+CREATE OR REPLACE TYPE GET_OUTPUT_TYPE IS TABLE OF VARCHAR2(255);
 /*$mw$*/
 
 /*$mw$*/
@@ -667,7 +771,7 @@ CREATE OR REPLACE FUNCTION GET_OUTPUT_LINES RETURN GET_OUTPUT_TYPE PIPELINED AS
   v_line VARCHAR2(255);
   v_status INTEGER := 0;
 BEGIN
-  DBMS_OUTPUT.disable;
+
   LOOP
     DBMS_OUTPUT.GET_LINE(v_line, v_status);
     IF (v_status = 0) THEN RETURN; END IF;