+--CREATE UNIQUE INDEX &mw_prefix.profiling_u01 ON &mw_prefix.profiling (pf_name, pf_server);
+
+CREATE INDEX si_title_idx ON &mw_prefix.searchindex(si_title) INDEXTYPE IS ctxsys.context;
+CREATE INDEX si_text_idx ON &mw_prefix.searchindex(si_text) INDEXTYPE IS ctxsys.context;
+
+CREATE TABLE &mw_prefix.l10n_cache (
+ lc_lang varchar2(32) NOT NULL,
+ lc_key varchar2(255) NOT NULL,
+ lc_value clob NOT NULL
+);
+CREATE INDEX &mw_prefix.l10n_cache_u01 ON &mw_prefix.l10n_cache (lc_lang, lc_key);
+
+CREATE TABLE &mw_prefix.wiki_field_info_full (
+table_name VARCHAR2(35) NOT NULL,
+column_name VARCHAR2(35) NOT NULL,
+data_default VARCHAR2(4000),
+data_length NUMBER NOT NULL,
+data_type VARCHAR2(106),
+not_null CHAR(1) NOT NULL,
+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);
+
+/*$mw$*/
+CREATE PROCEDURE &mw_prefix.fill_wiki_info IS
+ BEGIN
+ DELETE &mw_prefix.wiki_field_info_full;
+
+ FOR x_rec IN (SELECT '&mw_prefix.' || 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
+ FROM user_cons_columns ucc,
+ user_constraints uc
+ WHERE ucc.table_name = t.table_name
+ AND ucc.column_name = t.column_name
+ AND uc.constraint_name = ucc.constraint_name
+ AND uc.constraint_type = 'P'
+ AND ROWNUM < 2) prim,
+ (SELECT 1
+ FROM user_ind_columns uic,
+ user_indexes ui
+ WHERE uic.table_name = t.table_name
+ AND uic.column_name = t.column_name
+ AND ui.index_name = uic.index_name
+ AND ui.uniqueness = 'UNIQUE'
+ AND ROWNUM < 2) uniq,
+ (SELECT 1
+ FROM user_ind_columns uic,
+ user_indexes ui
+ WHERE uic.table_name = t.table_name
+ AND uic.column_name = t.column_name
+ AND ui.index_name = uic.index_name
+ AND ui.uniqueness = 'NONUNIQUE'
+ AND ROWNUM < 2) nonuniq
+ FROM user_tab_columns t, user_tables ut
+ WHERE ut.table_name = t.table_name)
+ LOOP
+ INSERT INTO &mw_prefix.wiki_field_info_full
+ (table_name, column_name,
+ data_default, data_length,
+ data_type, not_null, prim,
+ uniq, nonuniq
+ )
+ VALUES (x_rec.table_name, x_rec.column_name,
+ x_rec.data_default, x_rec.data_length,
+ x_rec.data_type, x_rec.not_null, x_rec.prim,
+ x_rec.uniq, x_rec.nonuniq
+ );
+ END LOOP;
+ COMMIT;
+END;
+/*$mw$*/
+
+/*$mw$*/
+CREATE OR REPLACE PROCEDURE duplicate_table(p_oldname IN VARCHAR2, p_newname IN VARCHAR2, p_temporary IN BOOLEAN)
+IS
+ v_oldname VARCHAR2(32) := RTRIM(LTRIM(p_oldname, '"'), '"');
+ v_newname VARCHAR2(32) := RTRIM(LTRIM(p_newname, '"'), '"');
+ v_prefix VARCHAR2(32) := SUBSTR(v_newname, 1, INSTR(v_newname, v_oldname, -1)-1);
+ e_table_not_exist EXCEPTION;
+ PRAGMA EXCEPTION_INIT(e_table_not_exist, -00942);
+BEGIN
+ BEGIN
+ EXECUTE IMMEDIATE 'DROP TABLE '||v_newname||' CASCADE CONSTRAINTS';
+ EXCEPTION WHEN e_table_not_exist THEN NULL; END;
+
+ IF (p_temporary) THEN
+ EXECUTE IMMEDIATE 'CREATE GLOBAL TEMPORARY TABLE '||v_newname||
+ ' AS SELECT * FROM '||v_oldname||' WHERE ROWNUM = 0';
+ ELSE
+ EXECUTE IMMEDIATE 'CREATE TABLE '||v_newname||
+ ' AS SELECT * FROM '||v_oldname||' WHERE ROWNUM = 0';
+ END IF;
+
+ FOR rc IN (SELECT column_name, data_default
+ FROM user_tab_columns
+ WHERE table_name = v_oldname
+ AND data_default IS NOT NULL) LOOP
+ EXECUTE IMMEDIATE 'ALTER TABLE '||v_newname||' 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||'"."', USER||'"."'||v_prefix),
+ '"'||constraint_name||'"', '"'||v_prefix||constraint_name||'"') DDLVC2
+ , constraint_name
+ FROM user_constraints uc
+ WHERE table_name = v_oldname
+ AND constraint_type = 'P') LOOP
+ 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||'"."', USER||'"."'||v_prefix) DDLVC2
+ , constraint_name
+ FROM user_constraints uc
+ WHERE table_name = v_oldname
+ 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||'"."', USER||'"."'||v_prefix),
+ '"'||index_name||'"', '"'||v_prefix||index_name||'"') DDLVC2
+ , index_name
+ FROM user_indexes ui
+ WHERE table_name = v_oldname
+ 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||'"."', USER||'"."'||v_prefix),
+ ' ON '||v_oldname, ' ON '||v_newname) DDLVC2
+ , trigger_name
+ FROM user_triggers
+ WHERE table_name = v_oldname) LOOP
+ EXECUTE IMMEDIATE SUBSTR(rc.ddlvc2, 1, INSTR(rc.ddlvc2, 'ALTER ')-1);
+ END LOOP;
+END;
+/*$mw$*/
+
+/*$mw$*/
+BEGIN
+ &mw_prefix.fill_wiki_info;
+END;
+/*$mw$*/
+
+/*$mw$*/
+CREATE OR REPLACE FUNCTION BITOR (x IN NUMBER, y IN NUMBER) RETURN NUMBER AS
+BEGIN
+ RETURN (x + y - BITAND(x, y));
+END;
+/*$mw$*/
+
+/*$mw$*/
+CREATE OR REPLACE FUNCTION BITNOT (x IN NUMBER) RETURN NUMBER AS
+BEGIN
+ RETURN (4294967295 - x);
+END;
+/*$mw$*/
+
+/*$mw$*/
+CREATE OR REPLACE TYPE GET_OUTPUT_TYPE IS TABLE OF VARCHAR2(255);
+/*$mw$*/
+
+/*$mw$*/
+CREATE OR REPLACE FUNCTION GET_OUTPUT_LINES RETURN GET_OUTPUT_TYPE PIPELINED AS
+ v_line VARCHAR2(255);
+ v_status INTEGER := 0;
+BEGIN
+
+ LOOP
+ DBMS_OUTPUT.GET_LINE(v_line, v_status);
+ IF (v_status = 0) THEN RETURN; END IF;
+ PIPE ROW (v_line);
+ END LOOP;
+ RETURN;
+EXCEPTION
+ WHEN OTHERS THEN
+ RETURN;
+END;
+/*$mw$*/
+
+/*$mw$*/
+CREATE OR REPLACE FUNCTION GET_SEQUENCE_VALUE(seq IN VARCHAR2) RETURN NUMBER AS
+ v_value NUMBER;
+BEGIN
+ EXECUTE IMMEDIATE 'SELECT '||seq||'.NEXTVAL INTO :outVar FROM DUAL' INTO v_value;
+ RETURN v_value;
+END;
+/*$mw$*/