Repository: tajo Updated Branches: refs/heads/master 2b8d30ca2 -> 005556850
http://git-wip-us.apache.org/repos/asf/tajo/blob/00555685/tajo-catalog/tajo-catalog-server/src/main/resources/schemas/DBMSSchemaDefinition.xsd ---------------------------------------------------------------------- diff --git a/tajo-catalog/tajo-catalog-server/src/main/resources/schemas/DBMSSchemaDefinition.xsd b/tajo-catalog/tajo-catalog-server/src/main/resources/schemas/DBMSSchemaDefinition.xsd new file mode 100644 index 0000000..be37807 --- /dev/null +++ b/tajo-catalog/tajo-catalog-server/src/main/resources/schemas/DBMSSchemaDefinition.xsd @@ -0,0 +1,177 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF licenses this file + to you under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + --> +<schema targetNamespace="http://tajo.apache.org/catalogstore" + elementFormDefault="qualified" xmlns="http://www.w3.org/2001/XMLSchema" + xmlns:tns="http://tajo.apache.org/catalogstore"> + + <simpleType name="DatabaseObjectsType"> + <annotation> + <documentation> + PostgreSQL defines its database objects in this + following link + (http://www.postgresql.org/docs/9.3/static/server-programming.html). + We also need to define these objects type to support in + our catalog stores. + </documentation> + </annotation> + <restriction base="string"> + <enumeration value="table"></enumeration> + <enumeration value="view"></enumeration> + <enumeration value="function"></enumeration> + <enumeration value="operator"></enumeration> + <enumeration value="data"></enumeration> + <enumeration value="domain"></enumeration> + <enumeration value="trigger"></enumeration> + <enumeration value="rule"></enumeration> + <enumeration value="sequence"></enumeration> + <enumeration value="index"></enumeration> + </restriction> + </simpleType> + + <simpleType name="ExecutionOrderType"> + <restriction base="int"> + <minInclusive value="0"></minInclusive> + </restriction> + </simpleType> + + <complexType name="ObjectsType"> + <sequence minOccurs="0" maxOccurs="unbounded"> + <element name="Object" type="tns:ObjectType" minOccurs="1" maxOccurs="unbounded"></element> + </sequence> + </complexType> + + <complexType name="ObjectType"> + <sequence> + <element name="sql" type="tns:SqlType" minOccurs="1"></element> + </sequence> + <attributeGroup ref="tns:ObjectAttributeGroup"></attributeGroup> + </complexType> + + <attributeGroup name="ObjectAttributeGroup"> + <attribute name="name" type="tns:ObjectNameType" use="required"></attribute> + <attribute name="order" type="tns:ExecutionOrderType"></attribute> + <attribute name="dependsOn" type="tns:ObjectNameType"></attribute> + <attribute name="type" type="tns:DatabaseObjectsType" + use="required"> + </attribute> + </attributeGroup> + + <simpleType name="SqlType"> + <restriction base="string"></restriction> + </simpleType> + + <complexType name="PatchesType"> + <sequence> + <element name="patch" type="tns:PatchType" minOccurs="0" maxOccurs="unbounded"></element> + </sequence> + </complexType> + + <complexType name="BaseSchemaType"> + <sequence> + <element name="objects" type="tns:ObjectsType" minOccurs="0" maxOccurs="1"></element> + </sequence> + <attributeGroup ref="tns:BaseSchemaAttributeGroup"></attributeGroup> + </complexType> + + <attributeGroup name="BaseSchemaAttributeGroup"> + <attribute name="schemaname" type="tns:SchemaNameType" use="optional"></attribute> + <attribute name="version" type="tns:SchemaVersionType" + use="required"> + </attribute> + </attributeGroup> + + <simpleType name="SchemaVersionType"> + <restriction base="int"> + <minInclusive value="0"></minInclusive> + </restriction> + </simpleType> + + <complexType name="PatchType"> + <sequence> + <element name="objects" type="tns:ObjectsType" minOccurs="0" maxOccurs="1"></element> + </sequence> + <attributeGroup ref="tns:PatchAttributeGroup"></attributeGroup> + </complexType> + + <simpleType name="ObjectNameType"> + <restriction base="string"> + <minLength value="1"></minLength> + </restriction> + </simpleType> + + <simpleType name="SchemaNameType"> + <restriction base="string"> + <minLength value="1"></minLength> + </restriction> + </simpleType> + + <attributeGroup name="PatchAttributeGroup"> + <attribute name="priorVersion" type="tns:SchemaVersionType" + use="required"> + </attribute> + <attribute name="nextVersion" type="tns:SchemaVersionType"></attribute> + </attributeGroup> + + <complexType name="CatalogStoreType"> + <sequence> + <element name="base" type="tns:BaseSchemaType" minOccurs="0" + maxOccurs="1"> + </element> + <element name="patches" type="tns:PatchesType" minOccurs="0" + maxOccurs="1"> + </element> + <element name="existQueries" type="tns:ExistsQueriesType" + minOccurs="0" maxOccurs="1"> + </element> + <element name="dropStatements" type="tns:DropStatementsType" minOccurs="0" maxOccurs="1"></element> + </sequence> + </complexType> + + <element name="store" type="tns:CatalogStoreType"></element> + + <complexType name="ExistsQueryType"> + <sequence> + <element name="sql" type="tns:SqlType" minOccurs="1" maxOccurs="1"></element> + </sequence> + <attribute name="type" type="tns:DatabaseObjectsType" + use="required"> + </attribute> + </complexType> + + <complexType name="ExistsQueriesType"> + <sequence> + <element name="existQuery" type="tns:ExistsQueryType" minOccurs="0" maxOccurs="unbounded"></element> + </sequence> + </complexType> + + <complexType name="DropStatementsType"> + <sequence> + <element name="dropStatement" type="tns:DropStatementType" minOccurs="0" maxOccurs="unbounded"></element> + </sequence> + </complexType> + + <complexType name="DropStatementType"> + <sequence> + <element name="sql" type="tns:SqlType" minOccurs="1" maxOccurs="1"></element> + </sequence> + <attribute name="type" type="tns:DatabaseObjectsType" + use="required"> + </attribute> + </complexType> +</schema> \ No newline at end of file http://git-wip-us.apache.org/repos/asf/tajo/blob/00555685/tajo-catalog/tajo-catalog-server/src/main/resources/schemas/derby/columns.sql ---------------------------------------------------------------------- diff --git a/tajo-catalog/tajo-catalog-server/src/main/resources/schemas/derby/columns.sql b/tajo-catalog/tajo-catalog-server/src/main/resources/schemas/derby/columns.sql deleted file mode 100644 index e274f3c..0000000 --- a/tajo-catalog/tajo-catalog-server/src/main/resources/schemas/derby/columns.sql +++ /dev/null @@ -1,8 +0,0 @@ -CREATE TABLE COLUMNS ( - TID INT NOT NULL REFERENCES TABLES (TID) ON DELETE CASCADE, - COLUMN_NAME VARCHAR(128) NOT NULL, - ORDINAL_POSITION INTEGER NOT NULL, - DATA_TYPE CHAR(16), - TYPE_LENGTH INTEGER, - CONSTRAINT COLUMNS_PK PRIMARY KEY (TID, COLUMN_NAME) -) \ No newline at end of file http://git-wip-us.apache.org/repos/asf/tajo/blob/00555685/tajo-catalog/tajo-catalog-server/src/main/resources/schemas/derby/databases.sql ---------------------------------------------------------------------- diff --git a/tajo-catalog/tajo-catalog-server/src/main/resources/schemas/derby/databases.sql b/tajo-catalog/tajo-catalog-server/src/main/resources/schemas/derby/databases.sql deleted file mode 100644 index 8cabb14..0000000 --- a/tajo-catalog/tajo-catalog-server/src/main/resources/schemas/derby/databases.sql +++ /dev/null @@ -1,6 +0,0 @@ -CREATE TABLE DATABASES_ ( - DB_ID int NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1), - DB_NAME VARCHAR(128) NOT NULL CONSTRAINT DB_NAME_UNIQ UNIQUE, - SPACE_ID INT NOT NULL REFERENCES TABLESPACES (SPACE_ID), - CONSTRAINT DATABASES_PK PRIMARY KEY (DB_ID) -) \ No newline at end of file http://git-wip-us.apache.org/repos/asf/tajo/blob/00555685/tajo-catalog/tajo-catalog-server/src/main/resources/schemas/derby/databases_idx.sql ---------------------------------------------------------------------- diff --git a/tajo-catalog/tajo-catalog-server/src/main/resources/schemas/derby/databases_idx.sql b/tajo-catalog/tajo-catalog-server/src/main/resources/schemas/derby/databases_idx.sql deleted file mode 100644 index c9c7d4e..0000000 --- a/tajo-catalog/tajo-catalog-server/src/main/resources/schemas/derby/databases_idx.sql +++ /dev/null @@ -1 +0,0 @@ -CREATE UNIQUE INDEX idx_database_db_id on DATABASES_ (DB_ID) \ No newline at end of file http://git-wip-us.apache.org/repos/asf/tajo/blob/00555685/tajo-catalog/tajo-catalog-server/src/main/resources/schemas/derby/derby.xml ---------------------------------------------------------------------- diff --git a/tajo-catalog/tajo-catalog-server/src/main/resources/schemas/derby/derby.xml b/tajo-catalog/tajo-catalog-server/src/main/resources/schemas/derby/derby.xml new file mode 100644 index 0000000..db2473b --- /dev/null +++ b/tajo-catalog/tajo-catalog-server/src/main/resources/schemas/derby/derby.xml @@ -0,0 +1,186 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF licenses this file + to you under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + --> +<tns:store xmlns:tns="http://tajo.apache.org/catalogstore" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://tajo.apache.org/catalogstore ../DBMSSchemaDefinition.xsd "> + <tns:base version="2"> + <tns:objects> + <tns:Object order="0" type="table" name="META"> + <tns:sql><![CDATA[CREATE TABLE META (VERSION INT NOT NULL)]]></tns:sql> + </tns:Object> + <tns:Object order="1" type="table" name="TABLESPACES"> + <tns:sql><![CDATA[ + CREATE TABLE TABLESPACES ( + SPACE_ID int NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1), + SPACE_NAME VARCHAR(128) NOT NULL CONSTRAINT SPACE_UNIQUE UNIQUE, + SPACE_HANDLER VARCHAR (1024) DEFAULT 'HDFS', + SPACE_URI VARCHAR (4096) NOT NULL, + CONSTRAINT C_SPACE_PK PRIMARY KEY (SPACE_ID) + )]]> + </tns:sql> + </tns:Object> + <tns:Object order="2" type="table" name="DATABASES_"> + <tns:sql><![CDATA[ + CREATE TABLE DATABASES_ ( + DB_ID int NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1), + DB_NAME VARCHAR(128) NOT NULL CONSTRAINT DB_NAME_UNIQ UNIQUE, + SPACE_ID INT NOT NULL REFERENCES TABLESPACES (SPACE_ID), + CONSTRAINT DATABASES_PK PRIMARY KEY (DB_ID) + )]]> + </tns:sql> + </tns:Object> + <tns:Object order="3" type="index" name="IDX_DATABASE_DB_ID" dependsOn="DATABASES_"> + <tns:sql><![CDATA[CREATE UNIQUE INDEX idx_database_db_id on DATABASES_ (DB_ID)]]></tns:sql> + </tns:Object> + <tns:Object order="4" type="table" name="TABLES"> + <tns:sql><![CDATA[ + CREATE TABLE TABLES ( + TID int NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1), + DB_ID int NOT NULL REFERENCES DATABASES_ (DB_ID), + TABLE_NAME VARCHAR(128) NOT NULL, + TABLE_TYPE VARCHAR(128) NOT NULL, + PATH VARCHAR(4096), + STORE_TYPE CHAR(16), + CONSTRAINT TABLES_PK PRIMARY KEY (TID), + CONSTRAINT C_TABLE_ID_UNIQ UNIQUE (DB_ID, TABLE_NAME) + )]]> + </tns:sql> + </tns:Object> + <tns:Object order="5" type="index" name="IDX_TABLES_TID" dependsOn="TABLES"> + <tns:sql><![CDATA[CREATE UNIQUE INDEX idx_tables_tid on TABLES (TID)]]></tns:sql> + </tns:Object> + <tns:Object order="6" type="index" name="IDX_TABLES_NAME" dependsOn="TABLES"> + <tns:sql><![CDATA[CREATE UNIQUE INDEX idx_tables_name on TABLES (DB_ID, TABLE_NAME)]]></tns:sql> + </tns:Object> + <tns:Object order="7" type="table" name="COLUMNS"> + <tns:sql><![CDATA[ + CREATE TABLE COLUMNS ( + TID INT NOT NULL REFERENCES TABLES (TID) ON DELETE CASCADE, + COLUMN_NAME VARCHAR(128) NOT NULL, + ORDINAL_POSITION INTEGER NOT NULL, + DATA_TYPE CHAR(16), + TYPE_LENGTH INTEGER, + CONSTRAINT COLUMNS_PK PRIMARY KEY (TID, COLUMN_NAME) + )]]> + </tns:sql> + </tns:Object> + <tns:Object order="8" type="index" name="IDX_FK_COLUMNS_TABLE_NAME" dependsOn="COLUMNS"> + <tns:sql><![CDATA[CREATE UNIQUE INDEX idx_fk_columns_table_name on COLUMNS (TID, COLUMN_NAME)]]></tns:sql> + </tns:Object> + <tns:Object order="9" type="table" name="OPTIONS"> + <tns:sql><![CDATA[ + CREATE TABLE OPTIONS ( + TID INT NOT NULL REFERENCES TABLES (TID) ON DELETE CASCADE, + KEY_ VARCHAR(255) NOT NULL, + VALUE_ VARCHAR(255) NOT NULL, + CONSTRAINT C_OPTIONS_UNIQUE UNIQUE (TID, KEY_, VALUE_) + )]]> + </tns:sql> + </tns:Object> + <tns:Object order="10" type="index" name="IDX_OPTIONS_KEY" dependsOn="OPTIONS"> + <tns:sql><![CDATA[CREATE INDEX idx_options_key on OPTIONS (TID)]]></tns:sql> + </tns:Object> + <tns:Object order="11" type="table" name="INDEXES"> + <tns:sql><![CDATA[ + CREATE TABLE INDEXES ( + DB_ID INT NOT NULL REFERENCES DATABASES_ (DB_ID) ON DELETE CASCADE, + TID INT NOT NULL REFERENCES TABLES (TID) ON DELETE CASCADE, + INDEX_NAME VARCHAR(128) NOT NULL, + COLUMN_NAME VARCHAR(128) NOT NULL, + DATA_TYPE VARCHAR(128) NOT NULL, + INDEX_TYPE CHAR(32) NOT NULL, + IS_UNIQUE BOOLEAN NOT NULL, + IS_CLUSTERED BOOLEAN NOT NULL, + IS_ASCENDING BOOLEAN NOT NULL, + CONSTRAINT C_INDEXES_PK PRIMARY KEY (DB_ID, INDEX_NAME) + )]]> + </tns:sql> + </tns:Object> + <tns:Object order="12" type="index" name="IDX_INDEXES_PK" dependsOn="INDEXES"> + <tns:sql><![CDATA[CREATE UNIQUE INDEX idx_indexes_pk ON INDEXES (DB_ID,index_name)]]></tns:sql> + </tns:Object> + <tns:Object order="13" type="index" name="IDX_INDEXES_COLUMNS" dependsOn="INDEXES"> + <tns:sql><![CDATA[CREATE INDEX idx_indexes_columns ON INDEXES (DB_ID,column_name)]]></tns:sql> + </tns:Object> + <tns:Object order="14" type="table" name="STATS"> + <tns:sql><![CDATA[ + CREATE TABLE STATS ( + TID INT NOT NULL PRIMARY KEY, + NUM_ROWS BIGINT, + NUM_BYTES BIGINT, + FOREIGN KEY (TID) REFERENCES TABLES (TID) ON DELETE CASCADE + )]]> + </tns:sql> + </tns:Object> + <tns:Object order="15" type="index" name="IDX_STATS_TABLE_NAME" dependsOn="STATS"> + <tns:sql><![CDATA[CREATE UNIQUE INDEX IDX_STATS_TABLE_NAME ON STATS (TID)]]></tns:sql> + </tns:Object> + <tns:Object order="16" type="table" name="PARTITION_METHODS"> + <tns:sql><![CDATA[ + CREATE TABLE PARTITION_METHODS ( + TID INT NOT NULL REFERENCES TABLES (TID) ON DELETE CASCADE, + PARTITION_TYPE VARCHAR(10) NOT NULL, + EXPRESSION VARCHAR(1024) NOT NULL, + EXPRESSION_SCHEMA VARCHAR(1024) FOR BIT DATA NOT NULL + )]]> + </tns:sql> + </tns:Object> + <tns:Object order="17" type="index" name="IDX_PARTITION_METHODS_TABLE_ID" dependsOn="PARTITION_METHODS"> + <tns:sql><![CDATA[CREATE INDEX idx_partition_methods_table_id ON PARTITION_METHODS (TID)]]></tns:sql> + </tns:Object> + <tns:Object name="PARTITIONS" type="table" order="18"> + <tns:sql><![CDATA[ + CREATE TABLE PARTITIONS ( + PID INT NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1), + TID INT NOT NULL REFERENCES TABLES (TID) ON DELETE CASCADE, + PARTITION_NAME VARCHAR(255), + ORDINAL_POSITION INT NOT NULL, + PARTITION_VALUE VARCHAR(1024), + PATH VARCHAR(1024), + CONSTRAINT C_PARTITION_PK PRIMARY KEY (PID), + CONSTRAINT C_PARTITION_UNIQUE UNIQUE (TID, PARTITION_NAME) + )]]> + </tns:sql> + </tns:Object> + <tns:Object name="IDX_PARTITIONS_TABLE_NAME" type="index" dependsOn="PARTITIONS" order="19"> + <tns:sql><![CDATA[CREATE INDEX idx_partitions_table_name ON PARTITIONS(TID)]]></tns:sql> + </tns:Object> + </tns:objects> + </tns:base> + <tns:existQueries> + <tns:existQuery type="trigger"> + <tns:sql><![CDATA[ + select a.TRIGGERNAME from SYS.SYSTRIGGERS a + ]]></tns:sql> + </tns:existQuery> + <tns:existQuery type="sequence"> + <tns:sql><![CDATA[ + select a.SEQUENCENAME from SYS.SYSSEQUENCES a + ]]></tns:sql> + </tns:existQuery> + <tns:existQuery type="view"> + <tns:sql><![CDATA[ + select a.TABLENAME from SYS.SYSTABLES a where a.TABLETYPE = 'V' + ]]></tns:sql> + </tns:existQuery> + </tns:existQueries> + <tns:dropStatements> + <tns:dropStatement type="sequence"> + <tns:sql><![CDATA[DROP SEQUENCE ? RESTRICT]]></tns:sql> + </tns:dropStatement> + </tns:dropStatements> +</tns:store> http://git-wip-us.apache.org/repos/asf/tajo/blob/00555685/tajo-catalog/tajo-catalog-server/src/main/resources/schemas/derby/indexes.sql ---------------------------------------------------------------------- diff --git a/tajo-catalog/tajo-catalog-server/src/main/resources/schemas/derby/indexes.sql b/tajo-catalog/tajo-catalog-server/src/main/resources/schemas/derby/indexes.sql deleted file mode 100644 index c4cfc25..0000000 --- a/tajo-catalog/tajo-catalog-server/src/main/resources/schemas/derby/indexes.sql +++ /dev/null @@ -1,12 +0,0 @@ -CREATE TABLE INDEXES ( - DB_ID INT NOT NULL REFERENCES DATABASES_ (DB_ID) ON DELETE CASCADE, - TID INT NOT NULL REFERENCES TABLES (TID) ON DELETE CASCADE, - INDEX_NAME VARCHAR(128) NOT NULL, - COLUMN_NAME VARCHAR(128) NOT NULL, - DATA_TYPE VARCHAR(128) NOT NULL, - INDEX_TYPE CHAR(32) NOT NULL, - IS_UNIQUE BOOLEAN NOT NULL, - IS_CLUSTERED BOOLEAN NOT NULL, - IS_ASCENDING BOOLEAN NOT NULL, - CONSTRAINT C_INDEXES_PK PRIMARY KEY (DB_ID, INDEX_NAME) -) \ No newline at end of file http://git-wip-us.apache.org/repos/asf/tajo/blob/00555685/tajo-catalog/tajo-catalog-server/src/main/resources/schemas/derby/partition_methods.sql ---------------------------------------------------------------------- diff --git a/tajo-catalog/tajo-catalog-server/src/main/resources/schemas/derby/partition_methods.sql b/tajo-catalog/tajo-catalog-server/src/main/resources/schemas/derby/partition_methods.sql deleted file mode 100644 index 4ad4c60..0000000 --- a/tajo-catalog/tajo-catalog-server/src/main/resources/schemas/derby/partition_methods.sql +++ /dev/null @@ -1,6 +0,0 @@ -CREATE TABLE PARTITION_METHODS ( - TID INT NOT NULL REFERENCES TABLES (TID) ON DELETE CASCADE, - PARTITION_TYPE VARCHAR(10) NOT NULL, - EXPRESSION VARCHAR(1024) NOT NULL, - EXPRESSION_SCHEMA VARCHAR(1024) FOR BIT DATA NOT NULL -) \ No newline at end of file http://git-wip-us.apache.org/repos/asf/tajo/blob/00555685/tajo-catalog/tajo-catalog-server/src/main/resources/schemas/derby/partitions.sql ---------------------------------------------------------------------- diff --git a/tajo-catalog/tajo-catalog-server/src/main/resources/schemas/derby/partitions.sql b/tajo-catalog/tajo-catalog-server/src/main/resources/schemas/derby/partitions.sql deleted file mode 100644 index 24ee422..0000000 --- a/tajo-catalog/tajo-catalog-server/src/main/resources/schemas/derby/partitions.sql +++ /dev/null @@ -1,10 +0,0 @@ -CREATE TABLE PARTITIONS ( - PID INT NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1), - TID INT NOT NULL REFERENCES TABLES (TID) ON DELETE CASCADE, - PARTITION_NAME VARCHAR(255), - ORDINAL_POSITION INT NOT NULL, - PARTITION_VALUE VARCHAR(1024), - PATH VARCHAR(1024), - CONSTRAINT C_PARTITION_PK PRIMARY KEY (PID), - CONSTRAINT C_PARTITION_UNIQUE UNIQUE (TID, PARTITION_NAME) -) \ No newline at end of file http://git-wip-us.apache.org/repos/asf/tajo/blob/00555685/tajo-catalog/tajo-catalog-server/src/main/resources/schemas/derby/stats.sql ---------------------------------------------------------------------- diff --git a/tajo-catalog/tajo-catalog-server/src/main/resources/schemas/derby/stats.sql b/tajo-catalog/tajo-catalog-server/src/main/resources/schemas/derby/stats.sql deleted file mode 100644 index bba8ee7..0000000 --- a/tajo-catalog/tajo-catalog-server/src/main/resources/schemas/derby/stats.sql +++ /dev/null @@ -1,6 +0,0 @@ -CREATE TABLE STATS ( - TID INT NOT NULL PRIMARY KEY, - NUM_ROWS BIGINT, - NUM_BYTES BIGINT, - FOREIGN KEY (TID) REFERENCES TABLES (TID) ON DELETE CASCADE -) \ No newline at end of file http://git-wip-us.apache.org/repos/asf/tajo/blob/00555685/tajo-catalog/tajo-catalog-server/src/main/resources/schemas/derby/table_properties.sql ---------------------------------------------------------------------- diff --git a/tajo-catalog/tajo-catalog-server/src/main/resources/schemas/derby/table_properties.sql b/tajo-catalog/tajo-catalog-server/src/main/resources/schemas/derby/table_properties.sql deleted file mode 100644 index 2b2d89a..0000000 --- a/tajo-catalog/tajo-catalog-server/src/main/resources/schemas/derby/table_properties.sql +++ /dev/null @@ -1,6 +0,0 @@ -CREATE TABLE OPTIONS ( - TID INT NOT NULL REFERENCES TABLES (TID) ON DELETE CASCADE, - KEY_ VARCHAR(255) NOT NULL, - VALUE_ VARCHAR(255) NOT NULL, - CONSTRAINT C_OPTIONS_UNIQUE UNIQUE (TID, KEY_, VALUE_) -) \ No newline at end of file http://git-wip-us.apache.org/repos/asf/tajo/blob/00555685/tajo-catalog/tajo-catalog-server/src/main/resources/schemas/derby/tables.sql ---------------------------------------------------------------------- diff --git a/tajo-catalog/tajo-catalog-server/src/main/resources/schemas/derby/tables.sql b/tajo-catalog/tajo-catalog-server/src/main/resources/schemas/derby/tables.sql deleted file mode 100644 index 3e15c5b..0000000 --- a/tajo-catalog/tajo-catalog-server/src/main/resources/schemas/derby/tables.sql +++ /dev/null @@ -1,10 +0,0 @@ -CREATE TABLE TABLES ( - TID int NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1), - DB_ID int NOT NULL REFERENCES DATABASES_ (DB_ID), - TABLE_NAME VARCHAR(128) NOT NULL, - TABLE_TYPE VARCHAR(128) NOT NULL, - PATH VARCHAR(4096), - STORE_TYPE CHAR(16), - CONSTRAINT TABLES_PK PRIMARY KEY (TID), - CONSTRAINT C_TABLE_ID_UNIQ UNIQUE (DB_ID, TABLE_NAME) -) \ No newline at end of file http://git-wip-us.apache.org/repos/asf/tajo/blob/00555685/tajo-catalog/tajo-catalog-server/src/main/resources/schemas/derby/tablespaces.sql ---------------------------------------------------------------------- diff --git a/tajo-catalog/tajo-catalog-server/src/main/resources/schemas/derby/tablespaces.sql b/tajo-catalog/tajo-catalog-server/src/main/resources/schemas/derby/tablespaces.sql deleted file mode 100644 index c2af3ae..0000000 --- a/tajo-catalog/tajo-catalog-server/src/main/resources/schemas/derby/tablespaces.sql +++ /dev/null @@ -1,7 +0,0 @@ -CREATE TABLE TABLESPACES ( - SPACE_ID int NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1), - SPACE_NAME VARCHAR(128) NOT NULL CONSTRAINT SPACE_UNIQUE UNIQUE, - SPACE_HANDLER VARCHAR (1024) DEFAULT 'HDFS', - SPACE_URI VARCHAR (4096) NOT NULL, - CONSTRAINT C_SPACE_PK PRIMARY KEY (SPACE_ID) -) \ No newline at end of file http://git-wip-us.apache.org/repos/asf/tajo/blob/00555685/tajo-catalog/tajo-catalog-server/src/main/resources/schemas/oracle/oracle.xml ---------------------------------------------------------------------- diff --git a/tajo-catalog/tajo-catalog-server/src/main/resources/schemas/oracle/oracle.xml b/tajo-catalog/tajo-catalog-server/src/main/resources/schemas/oracle/oracle.xml new file mode 100644 index 0000000..8945fca --- /dev/null +++ b/tajo-catalog/tajo-catalog-server/src/main/resources/schemas/oracle/oracle.xml @@ -0,0 +1,218 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF licenses this file + to you under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + --> +<tns:store xmlns:tns="http://tajo.apache.org/catalogstore" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://tajo.apache.org/catalogstore ../DBMSSchemaDefinition.xsd "> + <tns:base version="2"> + <tns:objects> + <tns:Object order="0" type="table" name="meta"> + <tns:sql><![CDATA[ + CREATE TABLE META (VERSION INT NOT NULL)]]> + </tns:sql> + </tns:Object> + <tns:Object order="1" type="table" name="tablespaces"> + <tns:sql><![CDATA[ + CREATE TABLE TABLESPACES ( + SPACE_ID NUMBER(10) NOT NULL PRIMARY KEY, + SPACE_NAME VARCHAR2(128) NOT NULL UNIQUE, + SPACE_HANDLER VARCHAR2(1024) DEFAULT 'HDFS', + SPACE_URI VARCHAR2(4000) NOT NULL + )]]> + </tns:sql> + </tns:Object> + <tns:Object order="2" type="sequence" name="TABLESPACES_SEQ"> + <tns:sql><![CDATA[CREATE SEQUENCE TABLESPACES_SEQ]]></tns:sql> + </tns:Object> + <tns:Object order="3" type="trigger" name="TABLESPACES_AUTOINC"> + <tns:sql><![CDATA[ + CREATE OR REPLACE TRIGGER TABLESPACES_AUTOINC + BEFORE INSERT ON TABLESPACES + FOR EACH ROW + WHEN (new.SPACE_ID IS NULL) + BEGIN + SELECT TABLESPACES_SEQ.NEXTVAL INTO :new.SPACE_ID FROM DUAL; + END;]]> + </tns:sql> + </tns:Object> + <tns:Object order="4" type="table" name="DATABASES_"> + <tns:sql><![CDATA[ + CREATE TABLE DATABASES_ ( + DB_ID NUMBER(10) NOT NULL PRIMARY KEY, + DB_NAME VARCHAR2(128) NOT NULL UNIQUE, + SPACE_ID INT NOT NULL, + FOREIGN KEY (SPACE_ID) REFERENCES TABLESPACES (SPACE_ID) + )]]> + </tns:sql> + </tns:Object> + <tns:Object order="5" type="sequence" name="DATABASES__SEQ"> + <tns:sql><![CDATA[ + CREATE SEQUENCE DATABASES__SEQ + ]]> + </tns:sql> + </tns:Object> + <tns:Object order="6" type="trigger" name="DATABASES__AUTOINC"> + <tns:sql><![CDATA[ + CREATE OR REPLACE TRIGGER DATABASES__AUTOINC + BEFORE INSERT ON DATABASES_ + FOR EACH ROW + WHEN (new.DB_ID IS NULL) + BEGIN + SELECT DATABASES__SEQ.NEXTVAL INTO :new.DB_ID FROM DUAL; + END;]]> + </tns:sql> + </tns:Object> + <tns:Object order="7" type="table" name="TABLES"> + <tns:sql><![CDATA[ + CREATE TABLE TABLES ( + TID NUMBER(10) NOT NULL PRIMARY KEY, + DB_ID INT NOT NULL, + TABLE_NAME VARCHAR2(128) NOT NULL, + TABLE_TYPE VARCHAR2(128) NOT NULL, + PATH VARCHAR2(4000), + STORE_TYPE CHAR(16), + FOREIGN KEY (DB_ID) REFERENCES DATABASES_ (DB_ID) + )]]> + </tns:sql> + </tns:Object> + <tns:Object order="8" type="sequence" name="TABLES_SEQ"> + <tns:sql><![CDATA[ + CREATE SEQUENCE TABLES_SEQ + ]]> + </tns:sql> + </tns:Object> + <tns:Object order="9" type="trigger" name="TABLES_AUTOINC"> + <tns:sql><![CDATA[ + CREATE OR REPLACE TRIGGER TABLES_AUTOINC + BEFORE INSERT ON TABLES + FOR EACH ROW + WHEN (new.TID IS NULL) + BEGIN + SELECT TABLES_SEQ.NEXTVAL INTO :new.TID FROM DUAL; + END;]]> + </tns:sql> + </tns:Object> + <tns:Object order="10" type="index" name="TABLES_IDX_DB_ID" dependsOn="TABLES"> + <tns:sql><![CDATA[CREATE INDEX TABLES_IDX_DB_ID on TABLES (DB_ID)]]></tns:sql> + </tns:Object> + <tns:Object order="11" type="index" name="TABLES_IDX_TABLE_ID" dependsOn="TABLES"> + <tns:sql><![CDATA[CREATE UNIQUE INDEX TABLES_IDX_TABLE_ID on TABLES (DB_ID, TABLE_NAME)]]></tns:sql> + </tns:Object> + <tns:Object order="12" type="table" name="COLUMNS"> + <tns:sql><![CDATA[ + CREATE TABLE COLUMNS ( + TID INT NOT NULL, + COLUMN_NAME VARCHAR2(255) NOT NULL, + ORDINAL_POSITION INT NOT NULL, + DATA_TYPE CHAR(16), + TYPE_LENGTH INTEGER, + CONSTRAINT COLUMNS_PKEY PRIMARY KEY (TID, COLUMN_NAME), + FOREIGN KEY (TID) REFERENCES TABLES (TID) ON DELETE CASCADE + )]]> + </tns:sql> + </tns:Object> + <tns:Object order="13" type="table" name="OPTIONS"> + <tns:sql><![CDATA[ + CREATE TABLE OPTIONS ( + TID INT NOT NULL, + KEY_ VARCHAR2(255) NOT NULL, + VALUE_ VARCHAR2(255) NOT NULL, + CONSTRAINT OPTIONS_PKEY PRIMARY KEY (TID, KEY_), + FOREIGN KEY (TID) REFERENCES TABLES (TID) ON DELETE CASCADE + )]]> + </tns:sql> + </tns:Object> + <tns:Object order="14" type="table" name="INDEXES"> + <tns:sql><![CDATA[ + CREATE TABLE INDEXES ( + DB_ID INT NOT NULL, + TID INT NOT NULL, + INDEX_NAME VARCHAR2(128) NOT NULL, + COLUMN_NAME VARCHAR2(128) NOT NULL, + DATA_TYPE VARCHAR2(128) NOT NULL, + INDEX_TYPE CHAR(32) NOT NULL, + IS_UNIQUE CHAR NOT NULL, + IS_CLUSTERED CHAR NOT NULL, + IS_ASCENDING CHAR NOT NULL, + CONSTRAINT INDEXES_PKEY PRIMARY KEY (DB_ID, INDEX_NAME), + FOREIGN KEY (DB_ID) REFERENCES DATABASES_ (DB_ID) ON DELETE CASCADE, + FOREIGN KEY (TID) REFERENCES TABLES (TID) ON DELETE CASCADE + )]]> + </tns:sql> + </tns:Object> + <tns:Object order="15" type="index" name="INDEXES_IDX_TID_COLUMN_NAME" dependsOn="INDEXES"> + <tns:sql><![CDATA[CREATE INDEX INDEXES_IDX_TID_COLUMN_NAME on INDEXES (TID, COLUMN_NAME)]]></tns:sql> + </tns:Object> + <tns:Object order="16" type="table" name="STATS"> + <tns:sql><![CDATA[ + CREATE TABLE STATS ( + TID INT NOT NULL PRIMARY KEY, + NUM_ROWS NUMBER(38), + NUM_BYTES NUMBER(38), + FOREIGN KEY (TID) REFERENCES TABLES (TID) ON DELETE CASCADE + )]]> + </tns:sql> + </tns:Object> + <tns:Object order="17" type="table" name="PARTITION_METHODS"> + <tns:sql><![CDATA[ + CREATE TABLE PARTITION_METHODS ( + TID INT NOT NULL PRIMARY KEY, + PARTITION_TYPE VARCHAR2(10) NOT NULL, + EXPRESSION VARCHAR2(1024) NOT NULL, + EXPRESSION_SCHEMA RAW(1024) NOT NULL, + FOREIGN KEY (TID) REFERENCES TABLES (TID) ON DELETE CASCADE + )]]> + </tns:sql> + </tns:Object> + <tns:Object order="18" type="table" name="PARTITIONS"> + <tns:sql><![CDATA[ + CREATE TABLE PARTITIONS ( + PID INT NOT NULL PRIMARY KEY, + TID INT NOT NULL, + PARTITION_NAME VARCHAR2(128), + ORDINAL_POSITION INT NOT NULL, + PARTITION_VALUE VARCHAR2(1024), + PATH VARCHAR2(4000), + FOREIGN KEY (TID) REFERENCES TABLES (TID) ON DELETE CASCADE, + CONSTRAINT C_PARTITION_UNIQUE UNIQUE (TID, PARTITION_NAME) + )]]> + </tns:sql> + </tns:Object> + <tns:Object order="19" type="index" name="PARTITIONS_IDX_TID" dependsOn="PARTITIONS"> + <tns:sql><![CDATA[CREATE INDEX PARTITIONS_IDX_TID on PARTITIONS (TID)]]></tns:sql> + </tns:Object> + </tns:objects> + </tns:base> + <tns:existQueries> + <tns:existQuery type="trigger"> + <tns:sql><![CDATA[SELECT TRIGGER_NAME FROM USER_TRIGGERS]]></tns:sql> + </tns:existQuery> + <tns:existQuery type="sequence"> + <tns:sql><![CDATA[SELECT SEQUENCE_NAME FROM USER_SEQUENCES]]></tns:sql> + </tns:existQuery> + <tns:existQuery type="view"> + <tns:sql><![CDATA[SELECT VIEW_NAME FROM USER_VIEWS]]></tns:sql> + </tns:existQuery> + <tns:existQuery type="index"> + <tns:sql><![CDATA[SELECT INDEX_NAME FROM USER_INDEXES]]></tns:sql> + </tns:existQuery> + </tns:existQueries> + <tns:dropStatements> + <tns:dropStatement type="table"> + <tns:sql><![CDATA[DROP TABLE ? CASCADE CONSTRAINT]]></tns:sql> + </tns:dropStatement> + </tns:dropStatements> +</tns:store> http://git-wip-us.apache.org/repos/asf/tajo/blob/00555685/tajo-catalog/tajo-catalog-server/src/main/resources/schemas/postgresql/indexes.sql ---------------------------------------------------------------------- diff --git a/tajo-catalog/tajo-catalog-server/src/main/resources/schemas/postgresql/indexes.sql b/tajo-catalog/tajo-catalog-server/src/main/resources/schemas/postgresql/indexes.sql deleted file mode 100644 index cbb28fc..0000000 --- a/tajo-catalog/tajo-catalog-server/src/main/resources/schemas/postgresql/indexes.sql +++ /dev/null @@ -1,14 +0,0 @@ -CREATE TABLE INDEXES ( - DB_ID INT NOT NULL, - TID INT NOT NULL, - INDEX_NAME VARCHAR(128) NOT NULL, - COLUMN_NAME VARCHAR(128) NOT NULL, - DATA_TYPE VARCHAR(128) NOT NULL, - INDEX_TYPE CHAR(32) NOT NULL, - IS_UNIQUE BOOLEAN NOT NULL, - IS_CLUSTERED BOOLEAN NOT NULL, - IS_ASCENDING BOOLEAN NOT NULL, - CONSTRAINT INDEXES_PKEY PRIMARY KEY (DB_ID, INDEX_NAME), - FOREIGN KEY (DB_ID) REFERENCES DATABASES_ (DB_ID) ON DELETE CASCADE, - FOREIGN KEY (TID) REFERENCES TABLES (TID) ON DELETE CASCADE -) \ No newline at end of file http://git-wip-us.apache.org/repos/asf/tajo/blob/00555685/tajo-catalog/tajo-catalog-server/src/main/resources/schemas/postgresql/postgresql.xml ---------------------------------------------------------------------- diff --git a/tajo-catalog/tajo-catalog-server/src/main/resources/schemas/postgresql/postgresql.xml b/tajo-catalog/tajo-catalog-server/src/main/resources/schemas/postgresql/postgresql.xml new file mode 100644 index 0000000..8e5cbcc --- /dev/null +++ b/tajo-catalog/tajo-catalog-server/src/main/resources/schemas/postgresql/postgresql.xml @@ -0,0 +1,203 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF licenses this file + to you under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + --> +<tns:store xmlns:tns="http://tajo.apache.org/catalogstore" +xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" +xsi:schemaLocation="http://tajo.apache.org/catalogstore ../DBMSSchemaDefinition.xsd "> + <tns:base version="2"> + <tns:objects> + <tns:Object name="META" type="table" order="0"> + <tns:sql><![CDATA[CREATE TABLE META (VERSION INT NOT NULL)]]></tns:sql> + </tns:Object> + <tns:Object name="TABLESPACES" type="table" order="1"> + <tns:sql><![CDATA[ + CREATE TABLE TABLESPACES ( + SPACE_ID SERIAL NOT NULL PRIMARY KEY, + SPACE_NAME VARCHAR(128) NOT NULL UNIQUE, + SPACE_HANDLER VARCHAR (1024) DEFAULT 'HDFS', + SPACE_URI VARCHAR (4096) NOT NULL + )]]> + </tns:sql> + </tns:Object> + <tns:Object name="TABLESPACES_IDX_NAME" type="index" order="2" dependsOn="TABLESPACES"> + <tns:sql><![CDATA[CREATE UNIQUE INDEX TABLESPACES_IDX_NAME on TABLESPACES (SPACE_NAME)]]> + </tns:sql> + </tns:Object> + <tns:Object name="DATABASES_" type="table" order="3"> + <tns:sql><![CDATA[ + CREATE TABLE DATABASES_ ( + DB_ID SERIAL NOT NULL PRIMARY KEY, + DB_NAME VARCHAR(128) NOT NULL UNIQUE, + SPACE_ID INT NOT NULL, + FOREIGN KEY (SPACE_ID) REFERENCES TABLESPACES (SPACE_ID) + )]]> + </tns:sql> + </tns:Object> + <tns:Object name="DATABASES__IDX_NAME" type="index" order="4" dependsOn="DATABASES_"> + <tns:sql><![CDATA[CREATE UNIQUE INDEX DATABASES__IDX_NAME on DATABASES_ (DB_NAME)]]></tns:sql> + </tns:Object> + <tns:Object name="TABLES" type="table" order="5"> + <tns:sql><![CDATA[ + CREATE TABLE TABLES ( + TID SERIAL NOT NULL PRIMARY KEY, + DB_ID INT NOT NULL, + TABLE_NAME VARCHAR(128) NOT NULL, + TABLE_TYPE VARCHAR(128) NOT NULL, + PATH VARCHAR(4096), + STORE_TYPE CHAR(16), + FOREIGN KEY (DB_ID) REFERENCES DATABASES_ (DB_ID) + )]]> + </tns:sql> + </tns:Object> + <tns:Object name="TABLES_IDX_DB_ID" type="index" order="6" dependsOn="TABLES"> + <tns:sql><![CDATA[CREATE INDEX TABLES_IDX_DB_ID on TABLES (DB_ID)]]></tns:sql> + </tns:Object> + <tns:Object name="TABLES_IDX_TABLE_ID" type="index" order="7" dependsOn="TABLES"> + <tns:sql><![CDATA[CREATE UNIQUE INDEX TABLES_IDX_TABLE_ID on TABLES (DB_ID, TABLE_NAME)]]></tns:sql> + </tns:Object> + <tns:Object name="COLUMNS" type="table" order="8"> + <tns:sql><![CDATA[ + CREATE TABLE COLUMNS ( + TID INT NOT NULL, + COLUMN_NAME VARCHAR(255) NOT NULL, + ORDINAL_POSITION INT NOT NULL, + DATA_TYPE CHAR(16), + TYPE_LENGTH INTEGER, + CONSTRAINT COLUMNS_PKEY PRIMARY KEY (TID, COLUMN_NAME), + FOREIGN KEY (TID) REFERENCES TABLES (TID) ON DELETE CASCADE + )]]> + </tns:sql> + </tns:Object> + <tns:Object name="OPTIONS" type="table" order="9"> + <tns:sql><![CDATA[ + CREATE TABLE OPTIONS ( + TID INT NOT NULL, + KEY_ VARCHAR(255) NOT NULL, + VALUE_ VARCHAR(255) NOT NULL, + CONSTRAINT OPTIONS_PKEY PRIMARY KEY (TID, KEY_), + FOREIGN KEY (TID) REFERENCES TABLES (TID) ON DELETE CASCADE + )]]> + </tns:sql> + </tns:Object> + <tns:Object name="INDEXES" type="table" order="10"> + <tns:sql><![CDATA[ + CREATE TABLE INDEXES ( + DB_ID INT NOT NULL, + TID INT NOT NULL, + INDEX_NAME VARCHAR(128) NOT NULL, + COLUMN_NAME VARCHAR(128) NOT NULL, + DATA_TYPE VARCHAR(128) NOT NULL, + INDEX_TYPE CHAR(32) NOT NULL, + IS_UNIQUE BOOLEAN NOT NULL, + IS_CLUSTERED BOOLEAN NOT NULL, + IS_ASCENDING BOOLEAN NOT NULL, + CONSTRAINT INDEXES_PKEY PRIMARY KEY (DB_ID, INDEX_NAME), + FOREIGN KEY (DB_ID) REFERENCES DATABASES_ (DB_ID) ON DELETE CASCADE, + FOREIGN KEY (TID) REFERENCES TABLES (TID) ON DELETE CASCADE + )]]> + </tns:sql> + </tns:Object> + <tns:Object name="INDEXES_IDX_DB_ID_NAME" type="index" order="11" dependsOn="INDEXES"> + <tns:sql><![CDATA[CREATE UNIQUE INDEX INDEXES_IDX_DB_ID_NAME on INDEXES (DB_ID, INDEX_NAME)]]></tns:sql> + </tns:Object> + <tns:Object name="INDEXES_IDX_TID_COLUMN_NAME" type="index" order="12" dependsOn="INDEXES"> + <tns:sql><![CDATA[CREATE INDEX INDEXES_IDX_TID_COLUMN_NAME on INDEXES (TID, COLUMN_NAME)]]></tns:sql> + </tns:Object> + <tns:Object name="STATS" type="table" order="13"> + <tns:sql><![CDATA[ + CREATE TABLE STATS ( + TID INT NOT NULL PRIMARY KEY, + NUM_ROWS BIGINT, + NUM_BYTES BIGINT, + FOREIGN KEY (TID) REFERENCES TABLES (TID) ON DELETE CASCADE + )]]> + </tns:sql> + </tns:Object> + <tns:Object name="PARTITION_METHODS" type="table" order="14"> + <tns:sql><![CDATA[ + CREATE TABLE PARTITION_METHODS ( + TID INT NOT NULL PRIMARY KEY, + PARTITION_TYPE VARCHAR(10) NOT NULL, + EXPRESSION VARCHAR(1024) NOT NULL, + EXPRESSION_SCHEMA BYTEA NOT NULL, + FOREIGN KEY (TID) REFERENCES TABLES (TID) ON DELETE CASCADE + )]]> + </tns:sql> + </tns:Object> + <tns:Object name="PARTITIONS" type="table" order="15"> + <tns:sql><![CDATA[ + CREATE TABLE PARTITIONS ( + PID INT NOT NULL PRIMARY KEY, + TID INT NOT NULL, + PARTITION_NAME VARCHAR(128), + ORDINAL_POSITION INT NOT NULL, + PARTITION_VALUE VARCHAR(1024), + PATH VARCHAR(4096), + FOREIGN KEY (TID) REFERENCES TABLES (TID) ON DELETE CASCADE, + CONSTRAINT C_PARTITION_UNIQUE UNIQUE (TID, PARTITION_NAME) + )]]> + </tns:sql> + </tns:Object> + <tns:Object name="PARTITIONS_IDX_TID" type="index" order="16" dependsOn="PARTITIONS"> + <tns:sql><![CDATA[CREATE INDEX PARTITIONS_IDX_TID on PARTITIONS (TID)]]></tns:sql> + </tns:Object> + <tns:Object name="IDX_TID_NAME" type="index" order="17" dependsOn="PARTITIONS"> + <tns:sql><![CDATA[CREATE UNIQUE INDEX IDX_TID_NAME on PARTITIONS (TID, PARTITION_NAME)]]></tns:sql> + </tns:Object> + </tns:objects> + </tns:base> + <tns:existQueries> + <tns:existQuery type="table"> + <tns:sql><![CDATA[ + select c.relname from pg_class c, pg_roles r + where c.relowner = r.oid and r.rolname = current_user and c.relkind = 'r'::char]]> + </tns:sql> + </tns:existQuery> + <tns:existQuery type="view"> + <tns:sql><![CDATA[ + select c.relname from pg_class c, pg_roles r + where c.relowner = r.oid and r.rolname = current_user and c.relkind = 'v'::char]]> + </tns:sql> + </tns:existQuery> + <tns:existQuery type="index"> + <tns:sql><![CDATA[ + select c.relname from pg_class c, pg_roles r + where c.relowner = r.oid and r.rolname = current_user and c.relkind = 'i'::char]]> + </tns:sql> + </tns:existQuery> + <tns:existQuery type="sequence"> + <tns:sql><![CDATA[ + select c.relname from pg_class c, pg_roles r + where c.relowner = r.oid and r.rolname = current_user and c.relkind = 'S'::char]]> + </tns:sql> + </tns:existQuery> + <tns:existQuery type="trigger"> + <tns:sql><![CDATA[ + select tgname from pg_trigger t + where t.tgrelid in + (select c.oid from pg_class c, pg_roles r + where c.relowner = r.oid and r.rolname = current_user and c.relkind = 'r'::char)]]> + </tns:sql> + </tns:existQuery> + </tns:existQueries> + <tns:dropStatements> + <tns:dropStatement type="table"> + <tns:sql><![CDATA[DROP TABLE ? CASCADE]]></tns:sql> + </tns:dropStatement> + </tns:dropStatements> +</tns:store> http://git-wip-us.apache.org/repos/asf/tajo/blob/00555685/tajo-catalog/tajo-catalog-server/src/main/resources/schemas/postgresql/stats.sql ---------------------------------------------------------------------- diff --git a/tajo-catalog/tajo-catalog-server/src/main/resources/schemas/postgresql/stats.sql b/tajo-catalog/tajo-catalog-server/src/main/resources/schemas/postgresql/stats.sql deleted file mode 100644 index bba8ee7..0000000 --- a/tajo-catalog/tajo-catalog-server/src/main/resources/schemas/postgresql/stats.sql +++ /dev/null @@ -1,6 +0,0 @@ -CREATE TABLE STATS ( - TID INT NOT NULL PRIMARY KEY, - NUM_ROWS BIGINT, - NUM_BYTES BIGINT, - FOREIGN KEY (TID) REFERENCES TABLES (TID) ON DELETE CASCADE -) \ No newline at end of file http://git-wip-us.apache.org/repos/asf/tajo/blob/00555685/tajo-catalog/tajo-catalog-server/src/test/java/org/apache/tajo/catalog/store/TestXMLCatalogSchemaManager.java ---------------------------------------------------------------------- diff --git a/tajo-catalog/tajo-catalog-server/src/test/java/org/apache/tajo/catalog/store/TestXMLCatalogSchemaManager.java b/tajo-catalog/tajo-catalog-server/src/test/java/org/apache/tajo/catalog/store/TestXMLCatalogSchemaManager.java new file mode 100644 index 0000000..fdb8556 --- /dev/null +++ b/tajo-catalog/tajo-catalog-server/src/test/java/org/apache/tajo/catalog/store/TestXMLCatalogSchemaManager.java @@ -0,0 +1,496 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.tajo.catalog.store; + +import static org.junit.Assert.*; +import static org.hamcrest.Matchers.*; + +import java.io.BufferedInputStream; +import java.io.File; +import java.io.FileOutputStream; +import java.io.InputStream; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; +import java.lang.reflect.Method; +import java.net.URL; +import java.net.URLClassLoader; +import java.sql.Connection; +import java.sql.DatabaseMetaData; +import java.sql.Driver; +import java.sql.DriverManager; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Statement; +import java.sql.Types; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; +import java.util.jar.Attributes; +import java.util.jar.JarEntry; +import java.util.jar.JarOutputStream; +import java.util.jar.Manifest; + +import org.apache.hadoop.fs.Path; +import org.apache.tajo.catalog.CatalogConstants; +import org.apache.tajo.catalog.store.object.DatabaseObject; +import org.apache.tajo.catalog.store.object.DatabaseObjectType; +import org.apache.tajo.catalog.store.object.SchemaPatch; +import org.apache.tajo.util.CommonTestingUtil; +import org.hamcrest.BaseMatcher; +import org.hamcrest.Matcher; +import org.hamcrest.Matchers; +import org.hamcrest.TypeSafeDiagnosingMatcher; +import org.junit.AfterClass; +import org.junit.BeforeClass; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.ExternalResource; +import org.junit.runner.Description; +import org.junit.runners.model.InitializationError; + +public class TestXMLCatalogSchemaManager { + + private static Path testPath; + private Path testDatabasePath; + private Connection conn; + private Driver driver; + + @Retention(RetentionPolicy.RUNTIME) + @Target(ElementType.METHOD) + @interface SetupPrepMethods { + boolean makeJDBCConnection() default true; + } + + @Rule + public ExternalResource resource = new ExternalResource() { + + private Description description; + + @Override + public org.junit.runners.model.Statement apply(org.junit.runners.model.Statement base, + Description description) { + this.description = description; + return super.apply(base, description); + } + + @Override + protected void before() throws Throwable { + SetupPrepMethods prepMethod = this.description.getAnnotation(SetupPrepMethods.class); + + if (prepMethod == null || prepMethod.makeJDBCConnection()) { + setUpJDBC(); + } + } + + @Override + protected void after() { + SetupPrepMethods prepMethod = this.description.getAnnotation(SetupPrepMethods.class); + + if (prepMethod == null || prepMethod.makeJDBCConnection()) { + try { + tearDownJDBC(); + } catch (Exception e) { + fail(e.getMessage()); + } + } + } + + }; + + private class CollectionMatcher<T> extends TypeSafeDiagnosingMatcher<Iterable<? extends T>> { + + private final Matcher<? extends T> matcher; + + public CollectionMatcher(Matcher<? extends T> matcher) { + this.matcher = matcher; + } + + @Override + public void describeTo(org.hamcrest.Description description) { + description.appendText("a collection containing ").appendDescriptionOf(this.matcher); + } + + @Override + protected boolean matchesSafely(Iterable<? extends T> item, org.hamcrest.Description mismatchDescription) { + boolean isFirst = true; + Iterator<? extends T> iterator = item.iterator(); + + while (iterator.hasNext()) { + T obj = iterator.next(); + if (this.matcher.matches(obj)) { + return true; + } + + if (!isFirst) { + mismatchDescription.appendText(", "); + } + + this.matcher.describeMismatch(obj, mismatchDescription); + isFirst = false; + } + return false; + } + + } + + private <T> Matcher<Iterable<? extends T>> hasItem(Matcher<? extends T> matcher) { + return new CollectionMatcher<T>(matcher); + } + + @BeforeClass + public static void setUpClass() throws Exception { + testPath = CommonTestingUtil.getTestDir(); + } + + @AfterClass + public static void tearDownClass() throws Exception { + CommonTestingUtil.cleanupTestDir(testPath.toUri().getPath()); + } + + public void setUpJDBC() throws Exception { + testDatabasePath = CommonTestingUtil.getTestDir(); + + driver = new org.apache.derby.jdbc.EmbeddedDriver(); + DriverManager.registerDriver(driver); + conn = DriverManager.getConnection("jdbc:derby:"+testDatabasePath.toUri().getPath()+"/db;create=true"); + + if (conn == null) { + throw new InitializationError("JDBC connection is null."); + } + } + + public void tearDownJDBC() throws Exception { + try { + DriverManager.getConnection("jdbc:derby:;shutdown=true"); + } catch (SQLException se) { + if ((se.getErrorCode() != 50000) || (!se.getSQLState().equals("XJ015"))) { + throw se; + } + } + + conn = null; + CommonTestingUtil.cleanupTestDir(testDatabasePath.toUri().getPath()); + DriverManager.deregisterDriver(driver); + } + + protected <T> BaseMatcher<T> hasItemInResultSet(final String expected, final String columnName) { + return new BaseMatcher<T>() { + private final List<String> results = new ArrayList<String>(); + + @Override + public boolean matches(Object item) { + boolean result = false; + + if (item instanceof ResultSet) { + ResultSet rs = (ResultSet) item; + + try { + while (rs.next()) { + results.add(rs.getString(columnName)); + if (expected.equals(rs.getString(columnName))) { + result = true; + break; + } + } + } catch (SQLException e) { + } + } + + return result; + } + + @Override + public void describeTo(org.hamcrest.Description description) { + description.appendText(expected); + } + + @Override + public void describeMismatch(Object item, org.hamcrest.Description description) { + description.appendText("were ").appendText(results.toString()); + } + }; + } + + protected Path createTestJar() throws Exception { + Path jarPath = new Path(testPath, "testxml.jar"); + Manifest manifest = new Manifest(); + manifest.getMainAttributes().put(Attributes.Name.MANIFEST_VERSION, "1.0"); + JarOutputStream jarOut = new JarOutputStream(new FileOutputStream(new File(jarPath.toUri())), manifest); + JarEntry entry = new JarEntry("schemas/jartest/"); + jarOut.putNextEntry(entry); + jarOut.closeEntry(); + entry = new JarEntry("schemas/jartest/test.xml"); + jarOut.putNextEntry(entry); + InputStream xmlInputStream = + new BufferedInputStream(ClassLoader.getSystemResourceAsStream("schemas/derbytest/loadtest/derby.xml")); + byte[] buffer = new byte[1024]; + int readSize = -1; + + while ((readSize = xmlInputStream.read(buffer)) > -1) { + jarOut.write(buffer, 0, readSize); + } + jarOut.closeEntry(); + jarOut.close(); + xmlInputStream.close(); + + return jarPath; + } + + @Test + @SetupPrepMethods(makeJDBCConnection=false) + public void testListJarResources() throws Exception { + XMLCatalogSchemaManager manager; + Path jarPath; + URL jarUrl; + + jarPath = createTestJar(); + jarUrl = jarPath.toUri().toURL(); + + URLClassLoader classLoader = (URLClassLoader) ClassLoader.getSystemClassLoader(); + Method addURLMethod = URLClassLoader.class.getDeclaredMethod("addURL", URL.class); + addURLMethod.setAccessible(true); + addURLMethod.invoke(classLoader, jarUrl); + + assertThat(classLoader.getURLs(), hasItemInArray(jarUrl)); + + manager = new XMLCatalogSchemaManager("schemas/jartest"); + + assertThat(manager.isLoaded(), is(true)); + assertNotNull("Base Schema object cannot be null", manager.getCatalogStore().getSchema()); + assertThat(manager.getCatalogStore().getSchema().getObjects(), not(empty())); + } + + @Test + public void testCreateBaseSchema() throws Exception { + XMLCatalogSchemaManager manager; + Statement stmt; + + manager = new XMLCatalogSchemaManager("schemas/derbytest/loadtest"); + assertThat(manager.isLoaded(), is(true)); + + stmt = conn.createStatement(); + stmt.addBatch("create schema " + manager.getCatalogStore().getSchema().getSchemaName()); + stmt.addBatch("set current schema " + manager.getCatalogStore().getSchema().getSchemaName()); + stmt.executeBatch(); + manager.createBaseSchema(conn); + + DatabaseMetaData metadata = conn.getMetaData(); + ResultSet tables = + metadata.getTables(null, manager.getCatalogStore().getSchema().getSchemaName().toUpperCase(), + CatalogConstants.TB_PARTITION_METHODS, new String[] {"TABLE"}); + + assertTrue(tables.next()); + assertEquals(CatalogConstants.TB_PARTITION_METHODS, tables.getString("TABLE_NAME")); + + ResultSet triggers = + stmt.executeQuery("select a.TRIGGERNAME from SYS.SYSTRIGGERS a inner join SYS.SYSSCHEMAS b " + + " on a.SCHEMAID = b.SCHEMAID where b.SCHEMANAME = 'TAJO'"); + + assertThat(triggers, hasItemInResultSet("TABLESPACES_HIST_TRG", "TRIGGERNAME")); + } + + @Test + public void testIsInitialized() throws Exception { + XMLCatalogSchemaManager manager; + Statement stmt; + + manager = new XMLCatalogSchemaManager("schemas/derbytest/querytest"); + assertThat(manager.isLoaded(), is(true)); + + stmt = conn.createStatement(); + stmt.executeUpdate("CREATE SCHEMA " + manager.getCatalogStore().getSchema().getSchemaName()); + stmt.executeUpdate("SET CURRENT SCHEMA " + manager.getCatalogStore().getSchema().getSchemaName()); + stmt.executeUpdate("CREATE TABLE TESTTABLE1 (COL1 INT, COL2 VARCHAR(10))"); + + assertThat(manager.isInitialized(conn), is(false)); + + stmt.addBatch("CREATE TABLE TESTTABLE2 (COL1 INT, COL2 VARCHAR(10))"); + stmt.addBatch("CREATE INDEX TESTINDEX1 ON TESTTABLE1 (COL1)"); + stmt.addBatch("CREATE TRIGGER TESTTRIGGER1 " + + " AFTER INSERT ON TESTTABLE1 " + + " REFERENCING NEW AS NEWROW " + + " FOR EACH ROW " + + " INSERT INTO TESTTABLE2 " + + " (COL1, COL2) " + + " VALUES " + + " (NEWROW.COL1, NEWROW.COL2)"); + stmt.addBatch("CREATE SEQUENCE TESTSEQ AS INT"); + stmt.addBatch("CREATE VIEW TESTVIEW (TESTTEXT) AS VALUES 'Text1', 'Text2'"); + stmt.executeBatch(); + + assertThat(manager.isInitialized(conn), is(true)); + } + + @Test + public void testDropBaseSchema() throws Exception { + XMLCatalogSchemaManager manager; + DatabaseMetaData meta; + Statement stmt; + + manager = new XMLCatalogSchemaManager("schemas/derbytest/querytest"); + assertThat(manager.isLoaded(), is(true)); + assertThat(manager.getCatalogStore().getDropStatements(), hasSize(1)); + + stmt = conn.createStatement(); + stmt.addBatch("CREATE SCHEMA " + manager.getCatalogStore().getSchema().getSchemaName()); + stmt.addBatch("SET CURRENT SCHEMA " + manager.getCatalogStore().getSchema().getSchemaName()); + stmt.addBatch("CREATE TABLE TESTTABLE1 (COL1 INT, COL2 VARCHAR(10))"); + stmt.addBatch("CREATE TABLE TESTTABLE2 (COL1 INT, COL2 VARCHAR(10))"); + stmt.addBatch("CREATE INDEX TESTINDEX1 ON TESTTABLE1 (COL1)"); + stmt.addBatch("CREATE TRIGGER TESTTRIGGER1 " + + " AFTER INSERT ON TESTTABLE1 " + + " REFERENCING NEW AS NEWROW " + + " FOR EACH ROW " + + " INSERT INTO TESTTABLE2 " + + " (COL1, COL2) " + + " VALUES " + + " (NEWROW.COL1, NEWROW.COL2)"); + stmt.addBatch("CREATE SEQUENCE TESTSEQ AS INT"); + stmt.addBatch("CREATE VIEW TESTVIEW (TESTTEXT) AS VALUES 'Text1', 'Text2'"); + stmt.executeBatch(); + + meta = conn.getMetaData(); + assertThat(meta.getTables(null, manager.getCatalogStore().getSchema().getSchemaName().toUpperCase(), + null, new String[] {"TABLE"}), + allOf(hasItemInResultSet("TESTTABLE1", "TABLE_NAME"), + hasItemInResultSet("TESTTABLE2", "TABLE_NAME"))); + assertThat(meta.getIndexInfo(null, manager.getCatalogStore().getSchema().getSchemaName().toUpperCase(), + "TESTTABLE1", false, true), hasItemInResultSet("TESTINDEX1", "INDEX_NAME")); + + manager.dropBaseSchema(conn); + + assertThat(meta.getTables(null, manager.getCatalogStore().getSchema().getSchemaName().toUpperCase(), + null, new String[] {"TABLE"}), + allOf(not(hasItemInResultSet("TESTTABLE1", "TABLE_NAME")), + not(hasItemInResultSet("TESTTABLE2", "TABLE_NAME")))); + ResultSet triggers = + stmt.executeQuery("select a.TRIGGERNAME from SYS.SYSTRIGGERS a inner join SYS.SYSSCHEMAS b " + + " on a.SCHEMAID = b.SCHEMAID where b.SCHEMANAME = '" + + manager.getCatalogStore().getSchema().getSchemaName().toUpperCase() + "'"); + assertThat(triggers, not(hasItemInResultSet("TESTTRIGGER1", "TRIGGERNAME"))); + ResultSet views = + stmt.executeQuery("select a.TABLENAME from SYS.SYSTABLES a inner join SYS.SYSSCHEMAS b " + + " on a.SCHEMAID = b.SCHEMAID where a.TABLETYPE = 'V' and b.SCHEMANAME = '" + + manager.getCatalogStore().getSchema().getSchemaName().toUpperCase() + "'"); + assertThat(views, not(hasItemInResultSet("TESTVIEW", "TABLENAME"))); + } + + @Test + public void testCheckExistance() throws Exception { + XMLCatalogSchemaManager manager; + Statement stmt; + + manager = new XMLCatalogSchemaManager("schemas/derbytest/querytest"); + assertThat(manager.isLoaded(), is(true)); + + stmt = conn.createStatement(); + stmt.addBatch("create schema " + manager.getCatalogStore().getSchema().getSchemaName()); + stmt.addBatch("set current schema " + manager.getCatalogStore().getSchema().getSchemaName()); + stmt.executeBatch(); + manager.createBaseSchema(conn); + + assertThat(manager.checkExistance(conn, DatabaseObjectType.TABLE, "TESTTABLE1"), is(true)); + assertThat(manager.checkExistance(conn, DatabaseObjectType.TABLE, "TESTTABLE3"), is(false)); + assertThat(manager.checkExistance(conn, DatabaseObjectType.INDEX, "testtable1", "TESTINDEX1"), is(true)); + assertThat(manager.checkExistance(conn, DatabaseObjectType.TRIGGER, "TESTTRIGGER1"), is(true)); + assertThat(manager.checkExistance(conn, DatabaseObjectType.SEQUENCE, "TESTSEQ"), is(true)); + assertThat(manager.checkExistance(conn, DatabaseObjectType.VIEW, "TESTVIEW"), is(true)); + } + + @Test + public void testContinueSchemaCreation() throws Exception { + XMLCatalogSchemaManager manager; + Statement stmt; + + manager = new XMLCatalogSchemaManager("schemas/derbytest/querytest"); + assertThat(manager.isLoaded(), is(true)); + + stmt = conn.createStatement(); + stmt.addBatch("create schema " + manager.getCatalogStore().getSchema().getSchemaName()); + stmt.addBatch("set current schema " + manager.getCatalogStore().getSchema().getSchemaName()); + stmt.addBatch("CREATE TABLE TESTTABLE1 (COL1 INT, COL2 VARCHAR(10))"); + stmt.addBatch("CREATE INDEX TESTINDEX1 ON TESTTABLE1 (COL1)"); + stmt.executeBatch(); + manager.createBaseSchema(conn); + + assertTrue(manager.checkExistance(conn, DatabaseObjectType.TABLE, "TESTTABLE2")); + } + + @Test + @SetupPrepMethods(makeJDBCConnection=false) + public void testMergeSchemaFile() throws Exception { + XMLCatalogSchemaManager manager; + + manager = new XMLCatalogSchemaManager("schemas/derbytest/mergetest"); + assertThat(manager.isLoaded(), is(true)); + + assertThat(manager.getCatalogStore().getSchema().getObjects(), hasSize(4)); + assertThat(manager.getCatalogStore().getSchema().getObjects(), + hasItem(Matchers.<DatabaseObject>hasProperty("name", is("TESTINDEX1")))); + assertThat(manager.getCatalogStore().getSchema().getObjects(), + hasItem(Matchers.<DatabaseObject>hasProperty("name", is("TESTTRIGGER1")))); + assertThat(manager.getCatalogStore().getSchema().getObjects(), + hasItem(Matchers.<DatabaseObject>hasProperty("order", is(3)))); + assertThat(manager.getCatalogStore().getPatches(), hasSize(1)); + assertThat(manager.getCatalogStore().getPatches(), + hasItem(Matchers.<SchemaPatch>hasProperty("priorVersion", is(1)))); + assertThat(manager.getCatalogStore().getPatches(), + hasItem(Matchers.<SchemaPatch>hasProperty("nextVersion", is(2)))); + } + + @Test + public void testUpgradeSchemaObjects() throws Exception { + XMLCatalogSchemaManager manager; + Statement stmt; + + manager = new XMLCatalogSchemaManager("schemas/derbytest/upgradetest"); + assertThat(manager.isLoaded(), is(true)); + assertThat(manager.getCatalogStore().getPatches(), hasSize(1)); + assertThat(manager.getCatalogStore().getPatches().get(0).getObjects(), hasSize(2)); + + stmt = conn.createStatement(); + stmt.addBatch("create schema " + manager.getCatalogStore().getSchema().getSchemaName()); + stmt.addBatch("set current schema " + manager.getCatalogStore().getSchema().getSchemaName()); + stmt.addBatch("CREATE TABLE TESTTABLE1 (COL1 INT, COL2 VARCHAR(10))"); + stmt.addBatch("CREATE INDEX TESTINDEX1 ON TESTTABLE1 (COL1)"); + stmt.addBatch("CREATE TABLE TESTTABLE2 (COL1 INT, COL2 VARCHAR(10))"); + stmt.executeBatch(); + manager.upgradeBaseSchema(conn, 1); + + DatabaseMetaData metadata = conn.getMetaData(); + ResultSet columns = metadata.getColumns(null, + manager.getCatalogStore().getSchema().getSchemaName().toUpperCase(), + "TESTTABLE2", "COL2"); + + assertThat(columns.next(), is(true)); + assertThat(columns.getInt("DATA_TYPE"), is(Types.VARCHAR)); + assertThat(columns.getInt("COLUMN_SIZE"), is(20)); + + columns = metadata.getColumns(null, + manager.getCatalogStore().getSchema().getSchemaName().toUpperCase(), + "TESTTABLE2", "COL3"); + + assertThat(columns.next(), is(true)); + assertThat(columns.getInt("DATA_TYPE"), is(Types.VARCHAR)); + assertThat(columns.getInt("COLUMN_SIZE"), is(25)); + } + +} http://git-wip-us.apache.org/repos/asf/tajo/blob/00555685/tajo-catalog/tajo-catalog-server/src/test/resources/schemas/derbytest/loadtest/derby.xml ---------------------------------------------------------------------- diff --git a/tajo-catalog/tajo-catalog-server/src/test/resources/schemas/derbytest/loadtest/derby.xml b/tajo-catalog/tajo-catalog-server/src/test/resources/schemas/derbytest/loadtest/derby.xml new file mode 100644 index 0000000..86fd5e8 --- /dev/null +++ b/tajo-catalog/tajo-catalog-server/src/test/resources/schemas/derbytest/loadtest/derby.xml @@ -0,0 +1,191 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF licenses this file + to you under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + --> +<tns:store xmlns:tns="http://tajo.apache.org/catalogstore" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://tajo.apache.org/catalogstore ../DBMSSchemaDefinition.xsd "> + <tns:base version="2" schemaname="tajo"> + <tns:objects> + <tns:Object order="0" type="table" name="META"> + <tns:sql><![CDATA[CREATE TABLE META (VERSION INT NOT NULL)]]></tns:sql> + </tns:Object> + <tns:Object order="1" type="table" name="TABLESPACES"> + <tns:sql><![CDATA[ + CREATE TABLE TABLESPACES ( + SPACE_ID int NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1), + SPACE_NAME VARCHAR(128) NOT NULL CONSTRAINT SPACE_UNIQUE UNIQUE, + SPACE_HANDLER VARCHAR (1024) DEFAULT 'HDFS', + SPACE_URI VARCHAR (4096) NOT NULL, + CONSTRAINT C_SPACE_PK PRIMARY KEY (SPACE_ID) + )]]> + </tns:sql> + </tns:Object> + <tns:Object order="2" type="table" name="DATABASES_"> + <tns:sql><![CDATA[ + CREATE TABLE DATABASES_ ( + DB_ID int NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1), + DB_NAME VARCHAR(128) NOT NULL CONSTRAINT DB_NAME_UNIQ UNIQUE, + SPACE_ID INT NOT NULL REFERENCES TABLESPACES (SPACE_ID), + CONSTRAINT DATABASES_PK PRIMARY KEY (DB_ID) + )]]> + </tns:sql> + </tns:Object> + <tns:Object order="3" type="index" name="IDX_DATABASE_DB_ID" dependsOn="DATABASES_"> + <tns:sql><![CDATA[CREATE UNIQUE INDEX idx_database_db_id on DATABASES_ (DB_ID)]]></tns:sql> + </tns:Object> + <tns:Object order="4" type="table" name="TABLES"> + <tns:sql><![CDATA[ + CREATE TABLE TABLES ( + TID int NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1), + DB_ID int NOT NULL REFERENCES DATABASES_ (DB_ID), + TABLE_NAME VARCHAR(128) NOT NULL, + TABLE_TYPE VARCHAR(128) NOT NULL, + PATH VARCHAR(4096), + STORE_TYPE CHAR(16), + CONSTRAINT TABLES_PK PRIMARY KEY (TID), + CONSTRAINT C_TABLE_ID_UNIQ UNIQUE (DB_ID, TABLE_NAME) + )]]> + </tns:sql> + </tns:Object> + <tns:Object order="5" type="index" name="IDX_TABLES_TID" dependsOn="TABLES"> + <tns:sql><![CDATA[CREATE UNIQUE INDEX idx_tables_tid on TABLES (TID)]]></tns:sql> + </tns:Object> + <tns:Object order="6" type="index" name="IDX_TABLES_NAME" dependsOn="TABLES"> + <tns:sql><![CDATA[CREATE UNIQUE INDEX idx_tables_name on TABLES (DB_ID, TABLE_NAME)]]></tns:sql> + </tns:Object> + <tns:Object order="7" type="table" name="COLUMNS"> + <tns:sql><![CDATA[ + CREATE TABLE COLUMNS ( + TID INT NOT NULL REFERENCES TABLES (TID) ON DELETE CASCADE, + COLUMN_NAME VARCHAR(128) NOT NULL, + ORDINAL_POSITION INTEGER NOT NULL, + DATA_TYPE CHAR(16), + TYPE_LENGTH INTEGER, + CONSTRAINT COLUMNS_PK PRIMARY KEY (TID, COLUMN_NAME) + )]]> + </tns:sql> + </tns:Object> + <tns:Object order="8" type="index" name="IDX_FK_COLUMNS_TABLE_NAME" dependsOn="COLUMNS"> + <tns:sql><![CDATA[CREATE UNIQUE INDEX idx_fk_columns_table_name on COLUMNS (TID, COLUMN_NAME)]]></tns:sql> + </tns:Object> + <tns:Object order="9" type="table" name="OPTIONS"> + <tns:sql><![CDATA[ + CREATE TABLE OPTIONS ( + TID INT NOT NULL REFERENCES TABLES (TID) ON DELETE CASCADE, + KEY_ VARCHAR(255) NOT NULL, + VALUE_ VARCHAR(255) NOT NULL, + CONSTRAINT C_OPTIONS_UNIQUE UNIQUE (TID, KEY_, VALUE_) + )]]> + </tns:sql> + </tns:Object> + <tns:Object order="10" type="index" name="IDX_OPTIONS_KEY" dependsOn="OPTIONS"> + <tns:sql><![CDATA[CREATE INDEX idx_options_key on OPTIONS (TID)]]></tns:sql> + </tns:Object> + <tns:Object order="11" type="table" name="INDEXES"> + <tns:sql><![CDATA[ + CREATE TABLE INDEXES ( + DB_ID INT NOT NULL REFERENCES DATABASES_ (DB_ID) ON DELETE CASCADE, + TID INT NOT NULL REFERENCES TABLES (TID) ON DELETE CASCADE, + INDEX_NAME VARCHAR(128) NOT NULL, + COLUMN_NAME VARCHAR(128) NOT NULL, + DATA_TYPE VARCHAR(128) NOT NULL, + INDEX_TYPE CHAR(32) NOT NULL, + IS_UNIQUE BOOLEAN NOT NULL, + IS_CLUSTERED BOOLEAN NOT NULL, + IS_ASCENDING BOOLEAN NOT NULL, + CONSTRAINT C_INDEXES_PK PRIMARY KEY (DB_ID, INDEX_NAME) + )]]> + </tns:sql> + </tns:Object> + <tns:Object order="12" type="index" name="IDX_INDEXES_PK" dependsOn="INDEXES"> + <tns:sql><![CDATA[CREATE UNIQUE INDEX idx_indexes_pk ON INDEXES (DB_ID,index_name)]]></tns:sql> + </tns:Object> + <tns:Object order="13" type="index" name="IDX_INDEXES_COLUMNS" dependsOn="INDEXES"> + <tns:sql><![CDATA[CREATE INDEX idx_indexes_columns ON INDEXES (DB_ID,column_name)]]></tns:sql> + </tns:Object> + <tns:Object order="14" type="table" name="STATS"> + <tns:sql><![CDATA[ + CREATE TABLE STATS ( + TID INT NOT NULL PRIMARY KEY, + NUM_ROWS BIGINT, + NUM_BYTES BIGINT, + FOREIGN KEY (TID) REFERENCES TABLES (TID) ON DELETE CASCADE + )]]> + </tns:sql> + </tns:Object> + <tns:Object order="15" type="index" name="IDX_STATS_TABLE_NAME" dependsOn="STATS"> + <tns:sql><![CDATA[CREATE UNIQUE INDEX IDX_STATS_TABLE_NAME ON STATS (TID)]]></tns:sql> + </tns:Object> + <tns:Object order="16" type="table" name="PARTITION_METHODS"> + <tns:sql><![CDATA[ + CREATE TABLE PARTITION_METHODS ( + TID INT NOT NULL REFERENCES TABLES (TID) ON DELETE CASCADE, + PARTITION_TYPE VARCHAR(10) NOT NULL, + EXPRESSION VARCHAR(1024) NOT NULL, + EXPRESSION_SCHEMA VARCHAR(1024) FOR BIT DATA NOT NULL + )]]> + </tns:sql> + </tns:Object> + <tns:Object order="17" type="index" name="IDX_PARTITION_METHODS_TABLE_ID" dependsOn="PARTITION_METHODS"> + <tns:sql><![CDATA[CREATE INDEX idx_partition_methods_table_id ON PARTITION_METHODS (TID)]]></tns:sql> + </tns:Object> + <tns:Object order="18" type="table" name="TABLESPACES_HIST"> + <tns:sql><![CDATA[ + CREATE TABLE TABLESPACES_HIST ( + SPACE_HIST_ID int NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1), + SPACE_NAME VARCHAR(128) NOT NULL CONSTRAINT SPACE_HIST_UNIQUE UNIQUE, + SPACE_HANDLER VARCHAR (1024) DEFAULT 'HDFS', + SPACE_URI VARCHAR (4096) NOT NULL, + CONSTRAINT C_SPACE_HIST_PK PRIMARY KEY (SPACE_HIST_ID) + )]]> + </tns:sql> + </tns:Object> + <tns:Object order="19" type="trigger" name="TABLESPACES_HIST_TRG"> + <tns:sql><![CDATA[ + CREATE TRIGGER TABLESPACES_HIST_TRG + AFTER INSERT ON TABLESPACES + REFERENCING NEW AS NEWROW + FOR EACH ROW + INSERT INTO TABLESPACES_HIST + (SPACE_NAME, SPACE_URI) + VALUES + (NEWROW.SPACE_NAME, NEWROW.SPACE_URI) + ]]> + </tns:sql> + </tns:Object> + </tns:objects> + </tns:base> + <tns:existQueries> + <tns:existQuery type="trigger"> + <tns:sql><![CDATA[ + select a.TRIGGERNAME from SYS.SYSTRIGGERS a inner join SYS.SYSSCHEMAS b + on a.SCHEMAID = b.SCHEMAID where b.SCHEMANAME = ? + ]]></tns:sql> + </tns:existQuery> + <tns:existQuery type="sequence"> + <tns:sql><![CDATA[ + select a.SEQUENCENAME from SYS.SYSSEQUENCES a inner join SYS.SYSSCHEMAS b + on a.SCHEMAID = b.SCHEMAID where b.SCHEMANAME = ? + ]]></tns:sql> + </tns:existQuery> + <tns:existQuery type="view"> + <tns:sql><![CDATA[ + select a.TABLENAME from SYS.SYSTABLES a inner join SYS.SYSSCHEMAS b + on a.SCHEMAID = b.SCHEMAID where b.SCHEMANAME = ? and a.TABLETYPE = 'V' + ]]></tns:sql> + </tns:existQuery> + </tns:existQueries> +</tns:store> http://git-wip-us.apache.org/repos/asf/tajo/blob/00555685/tajo-catalog/tajo-catalog-server/src/test/resources/schemas/derbytest/mergetest/base_version_1.xml ---------------------------------------------------------------------- diff --git a/tajo-catalog/tajo-catalog-server/src/test/resources/schemas/derbytest/mergetest/base_version_1.xml b/tajo-catalog/tajo-catalog-server/src/test/resources/schemas/derbytest/mergetest/base_version_1.xml new file mode 100644 index 0000000..5c44d29 --- /dev/null +++ b/tajo-catalog/tajo-catalog-server/src/test/resources/schemas/derbytest/mergetest/base_version_1.xml @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF licenses this file + to you under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + --> +<tns:store xmlns:tns="http://tajo.apache.org/catalogstore" +xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" +xsi:schemaLocation="http://tajo.apache.org/catalogstore ../../../../../main/resources/schemas/DBMSSchemaDefinition.xsd "> + <tns:base version="1"> + <tns:objects> + <tns:Object order="0" type="table" name="TESTTABLE1"> + <tns:sql><![CDATA[CREATE TABLE TESTTABLE1 (COL1 INT, COL2 VARCHAR(20))]]></tns:sql> + </tns:Object> + <tns:Object order="1" type="index" name="TESTINDEX1" dependsOn="TESTTABLE1"> + <tns:sql><![CDATA[CREATE INDEX TESTINDEX1 ON TESTTABLE1 (COL1)]]></tns:sql> + </tns:Object> + <tns:Object order="2" type="table" name="TESTTABLE2"> + <tns:sql><![CDATA[CREATE TABLE TESTTABLE2 (COL1 INT, COL2 VARCHAR(10))]]></tns:sql> + </tns:Object> + </tns:objects> + </tns:base> +</tns:store> http://git-wip-us.apache.org/repos/asf/tajo/blob/00555685/tajo-catalog/tajo-catalog-server/src/test/resources/schemas/derbytest/mergetest/base_version_2.xml ---------------------------------------------------------------------- diff --git a/tajo-catalog/tajo-catalog-server/src/test/resources/schemas/derbytest/mergetest/base_version_2.xml b/tajo-catalog/tajo-catalog-server/src/test/resources/schemas/derbytest/mergetest/base_version_2.xml new file mode 100644 index 0000000..706432c --- /dev/null +++ b/tajo-catalog/tajo-catalog-server/src/test/resources/schemas/derbytest/mergetest/base_version_2.xml @@ -0,0 +1,63 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF licenses this file + to you under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + --> +<tns:store xmlns:tns="http://tajo.apache.org/catalogstore" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://tajo.apache.org/catalogstore ../../../../../main/resources/schemas/DBMSSchemaDefinition.xsd "> + <tns:base version="2"> + <tns:objects> + <tns:Object order="0" type="table" name="TESTTABLE1"> + <tns:sql><![CDATA[CREATE TABLE TESTTABLE1 (COL1 INT, COL2 VARCHAR(20))]]></tns:sql> + </tns:Object> + <tns:Object order="1" type="index" name="TESTINDEX1" dependsOn="TESTTABLE1"> + <tns:sql><![CDATA[CREATE INDEX TESTINDEX1 ON TESTTABLE1 (COL1)]]></tns:sql> + </tns:Object> + <tns:Object order="2" type="table" name="TESTTABLE2"> + <tns:sql><![CDATA[CREATE TABLE TESTTABLE2 (COL1 INT, COL2 VARCHAR(10))]]></tns:sql> + </tns:Object> + <tns:Object order="3" type="trigger" name="TESTTRIGGER1"> + <tns:sql><![CDATA[ + CREATE TRIGGER TESTTRIGGER1 + AFTER INSERT ON TESTTABLE1 + REFERENCING NEW AS NEWROW + FOR EACH ROW + INSERT INTO TESTTABLE2 + (COL1, COL2) + VALUES + (NEWROW.COL1, NEWROW.COL2) + ]]></tns:sql> + </tns:Object> + </tns:objects> + </tns:base> + <tns:patches> + <tns:patch priorVersion="1" nextVersion="2"> + <tns:objects> + <tns:Object name="TESTTRIGGER1" type="trigger" order="0"> + <tns:sql><![CDATA[ + CREATE TRIGGER TESTTRIGGER1 + AFTER INSERT ON TESTTABLE1 + REFERENCING NEW AS NEWROW + FOR EACH ROW + INSERT INTO TESTTABLE2 + (COL1, COL2) + VALUES + (NEWROW.COL1, NEWROW.COL2) + ]]></tns:sql> + </tns:Object> + </tns:objects> + </tns:patch> + </tns:patches> +</tns:store> http://git-wip-us.apache.org/repos/asf/tajo/blob/00555685/tajo-catalog/tajo-catalog-server/src/test/resources/schemas/derbytest/querytest/derby.xml ---------------------------------------------------------------------- diff --git a/tajo-catalog/tajo-catalog-server/src/test/resources/schemas/derbytest/querytest/derby.xml b/tajo-catalog/tajo-catalog-server/src/test/resources/schemas/derbytest/querytest/derby.xml new file mode 100644 index 0000000..9016ccd --- /dev/null +++ b/tajo-catalog/tajo-catalog-server/src/test/resources/schemas/derbytest/querytest/derby.xml @@ -0,0 +1,78 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF licenses this file + to you under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + --> +<tns:store xmlns:tns="http://tajo.apache.org/catalogstore" +xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" +xsi:schemaLocation="http://tajo.apache.org/catalogstore ../../../../../main/resources/schemas/DBMSSchemaDefinition.xsd "> + <tns:base version="1" schemaname="tajo"> + <tns:objects> + <tns:Object order="0" type="table" name="TESTTABLE1"> + <tns:sql><![CDATA[CREATE TABLE TESTTABLE1 (COL1 INT, COL2 VARCHAR(10))]]></tns:sql> + </tns:Object> + <tns:Object order="1" type="index" name="TESTINDEX1" dependsOn="TESTTABLE1"> + <tns:sql><![CDATA[CREATE INDEX TESTINDEX1 ON TESTTABLE1 (COL1)]]></tns:sql> + </tns:Object> + <tns:Object order="2" type="table" name="TESTTABLE2"> + <tns:sql><![CDATA[CREATE TABLE TESTTABLE2 (COL1 INT, COL2 VARCHAR(10))]]></tns:sql> + </tns:Object> + <tns:Object order="3" type="trigger" name="TESTTRIGGER1"> + <tns:sql><![CDATA[ + CREATE TRIGGER TESTTRIGGER1 + AFTER INSERT ON TESTTABLE1 + REFERENCING NEW AS NEWROW + FOR EACH ROW + INSERT INTO TESTTABLE2 + (COL1, COL2) + VALUES + (NEWROW.COL1, NEWROW.COL2) + ]]></tns:sql> + </tns:Object> + <tns:Object order="4" type="sequence" name="TESTSEQ"> + <tns:sql><![CDATA[CREATE SEQUENCE TESTSEQ AS INT]]></tns:sql> + </tns:Object> + <tns:Object order="5" type="view" name="TESTVIEW"> + <tns:sql><![CDATA[CREATE VIEW TESTVIEW (TESTTEXT) AS VALUES 'Text1', 'Text2']]></tns:sql> + </tns:Object> + </tns:objects> + </tns:base> + <tns:existQueries> + <tns:existQuery type="trigger"> + <tns:sql><![CDATA[ + select a.TRIGGERNAME from SYS.SYSTRIGGERS a inner join SYS.SYSSCHEMAS b + on a.SCHEMAID = b.SCHEMAID where b.SCHEMANAME = ? + ]]></tns:sql> + </tns:existQuery> + <tns:existQuery type="sequence"> + <tns:sql><![CDATA[ + select a.SEQUENCENAME from SYS.SYSSEQUENCES a inner join SYS.SYSSCHEMAS b + on a.SCHEMAID = b.SCHEMAID where b.SCHEMANAME = ? + ]]></tns:sql> + </tns:existQuery> + <tns:existQuery type="view"> + <tns:sql><![CDATA[ + select a.TABLENAME from SYS.SYSTABLES a inner join SYS.SYSSCHEMAS b + on a.SCHEMAID = b.SCHEMAID where b.SCHEMANAME = ? and a.TABLETYPE = 'V' + ]]></tns:sql> + </tns:existQuery> + </tns:existQueries> + <tns:dropStatements> + <tns:dropStatement type="sequence"> + <tns:sql>DROP SEQUENCE ? RESTRICT</tns:sql> + </tns:dropStatement> + </tns:dropStatements> +</tns:store> http://git-wip-us.apache.org/repos/asf/tajo/blob/00555685/tajo-catalog/tajo-catalog-server/src/test/resources/schemas/derbytest/upgradetest/base_version_2.xml ---------------------------------------------------------------------- diff --git a/tajo-catalog/tajo-catalog-server/src/test/resources/schemas/derbytest/upgradetest/base_version_2.xml b/tajo-catalog/tajo-catalog-server/src/test/resources/schemas/derbytest/upgradetest/base_version_2.xml new file mode 100644 index 0000000..f6a6675 --- /dev/null +++ b/tajo-catalog/tajo-catalog-server/src/test/resources/schemas/derbytest/upgradetest/base_version_2.xml @@ -0,0 +1,57 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF licenses this file + to you under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + --> +<tns:store xmlns:tns="http://tajo.apache.org/catalogstore" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://tajo.apache.org/catalogstore ../../../../../main/resources/schemas/DBMSSchemaDefinition.xsd "> + <tns:base version="2" schemaname="tajo"> + <tns:objects> + <tns:Object order="0" type="table" name="TESTTABLE1"> + <tns:sql><![CDATA[CREATE TABLE TESTTABLE1 (COL1 INT, COL2 VARCHAR(20))]]></tns:sql> + </tns:Object> + <tns:Object order="1" type="index" name="TESTINDEX1" dependsOn="TESTTABLE1"> + <tns:sql><![CDATA[CREATE INDEX TESTINDEX1 ON TESTTABLE1 (COL1)]]></tns:sql> + </tns:Object> + <tns:Object order="2" type="table" name="TESTTABLE2"> + <tns:sql><![CDATA[CREATE TABLE TESTTABLE2 (COL1 INT, COL2 VARCHAR(20), COL3 VARCHAR(25))]]></tns:sql> + </tns:Object> + <tns:Object order="3" type="trigger" name="TESTTRIGGER1"> + <tns:sql><![CDATA[ + CREATE TRIGGER TESTTRIGGER1 + AFTER INSERT ON TESTTABLE1 + REFERENCING NEW AS NEWROW + FOR EACH ROW + INSERT INTO TESTTABLE2 + (COL1, COL2) + VALUES + (NEWROW.COL1, NEWROW.COL2) + ]]></tns:sql> + </tns:Object> + </tns:objects> + </tns:base> + <tns:patches> + <tns:patch priorVersion="1" nextVersion="2"> + <tns:objects> + <tns:Object name="TESTTABLE2" type="table" order="0"> + <tns:sql><![CDATA[ALTER TABLE TESTTABLE2 ALTER COLUMN COL2 SET DATA TYPE VARCHAR(20)]]></tns:sql> + </tns:Object> + <tns:Object name="TESTTABLE2" type="table" order="1"> + <tns:sql><![CDATA[ALTER TABLE TESTTABLE2 ADD COLUMN COL3 VARCHAR(25)]]></tns:sql> + </tns:Object> + </tns:objects> + </tns:patch> + </tns:patches> +</tns:store>
