http://git-wip-us.apache.org/repos/asf/hive/blob/c50ebb34/ql/src/java/org/apache/hadoop/hive/ql/parse/TypeCheckProcFactory.java ---------------------------------------------------------------------- diff --git a/ql/src/java/org/apache/hadoop/hive/ql/parse/TypeCheckProcFactory.java b/ql/src/java/org/apache/hadoop/hive/ql/parse/TypeCheckProcFactory.java index 9fcde76..14217e3 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/parse/TypeCheckProcFactory.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/parse/TypeCheckProcFactory.java @@ -701,7 +701,7 @@ public class TypeCheckProcFactory { } - private static ExprNodeDesc toExprNodeDesc(ColumnInfo colInfo) { + static ExprNodeDesc toExprNodeDesc(ColumnInfo colInfo) { ObjectInspector inspector = colInfo.getObjectInspector(); if (inspector instanceof ConstantObjectInspector && inspector instanceof PrimitiveObjectInspector) {
http://git-wip-us.apache.org/repos/asf/hive/blob/c50ebb34/ql/src/java/org/apache/hadoop/hive/ql/ppd/OpProcFactory.java ---------------------------------------------------------------------- diff --git a/ql/src/java/org/apache/hadoop/hive/ql/ppd/OpProcFactory.java b/ql/src/java/org/apache/hadoop/hive/ql/ppd/OpProcFactory.java index e3a9e62..2accad3 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/ppd/OpProcFactory.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/ppd/OpProcFactory.java @@ -139,8 +139,10 @@ public final class OpProcFactory { } private static void removeOperator(Operator<? extends OperatorDesc> operator) { - List<Operator<? extends OperatorDesc>> children = operator.getChildOperators(); - List<Operator<? extends OperatorDesc>> parents = operator.getParentOperators(); + // since removeParent/removeChild updates the childOperators and parentOperators list in place + // we need to make a copy of list to iterator over them + List<Operator<? extends OperatorDesc>> children = new ArrayList<>(operator.getChildOperators()); + List<Operator<? extends OperatorDesc>> parents = new ArrayList<>(operator.getParentOperators()); for (Operator<? extends OperatorDesc> parent : parents) { parent.getChildOperators().addAll(children); parent.removeChild(operator); http://git-wip-us.apache.org/repos/asf/hive/blob/c50ebb34/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFEnforceNotNullConstraint.java ---------------------------------------------------------------------- diff --git a/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFEnforceNotNullConstraint.java b/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFEnforceNotNullConstraint.java new file mode 100644 index 0000000..6c469bf --- /dev/null +++ b/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFEnforceNotNullConstraint.java @@ -0,0 +1,76 @@ +/** + * 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.hadoop.hive.ql.udf.generic; + +import org.apache.hadoop.hive.ql.exec.Description; +import org.apache.hadoop.hive.ql.exec.UDFArgumentException; +import org.apache.hadoop.hive.ql.exec.UDFArgumentLengthException; +import org.apache.hadoop.hive.ql.metadata.HiveException; +import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspector; +import org.apache.hadoop.hive.serde2.objectinspector.primitive.BooleanObjectInspector; +import org.apache.hadoop.hive.serde2.objectinspector.primitive.PrimitiveObjectInspectorFactory; +import org.apache.hadoop.io.BooleanWritable; + +/** + * GenericUDFAbs. + * + */ +@Description(name = "enforce_constraint", + value = "_FUNC_(x) - Internal UDF to enforce NOT NULL constraint", + extended = "For internal use only") +public class GenericUDFEnforceNotNullConstraint extends GenericUDF { + private final BooleanWritable resultBool = new BooleanWritable(); + private transient BooleanObjectInspector boi; + + @Override + public ObjectInspector initialize(ObjectInspector[] arguments) throws UDFArgumentException { + if (arguments.length > 1) { + throw new UDFArgumentLengthException( + "Invalid number of arguments. enforce_constraint UDF expected one argument but received: " + + arguments.length); + } + + boi = (BooleanObjectInspector) arguments[0]; + return PrimitiveObjectInspectorFactory.writableBooleanObjectInspector; + } + + @Override + public Object evaluate(DeferredObject[] arguments) throws HiveException { + + Object a = arguments[0].get(); + boolean result = boi.get(a); + + if(!result) { + throw new UDFArgumentLengthException( + "NOT NULL constraint violated!"); + } + resultBool.set(true); + return resultBool; + } + + @Override + protected String getFuncName() { + return "enforce_constraint"; + } + + @Override + public String getDisplayString(String[] children) { + return getStandardDisplayString(getFuncName(), children); + } +} http://git-wip-us.apache.org/repos/asf/hive/blob/c50ebb34/ql/src/test/queries/clientnegative/alter_notnull_constraint_violation.q ---------------------------------------------------------------------- diff --git a/ql/src/test/queries/clientnegative/alter_notnull_constraint_violation.q b/ql/src/test/queries/clientnegative/alter_notnull_constraint_violation.q new file mode 100644 index 0000000..b09d90f --- /dev/null +++ b/ql/src/test/queries/clientnegative/alter_notnull_constraint_violation.q @@ -0,0 +1,5 @@ +CREATE TABLE t1(i int, j int); +insert into t1 values(1,2); + +alter table t1 change j j int constraint nn0 not null enforced; +insert into t1 values(2,null); http://git-wip-us.apache.org/repos/asf/hive/blob/c50ebb34/ql/src/test/queries/clientnegative/create_with_constraints_enable.q ---------------------------------------------------------------------- diff --git a/ql/src/test/queries/clientnegative/create_with_constraints_enable.q b/ql/src/test/queries/clientnegative/create_with_constraints_enable.q deleted file mode 100644 index 59ebb1e..0000000 --- a/ql/src/test/queries/clientnegative/create_with_constraints_enable.q +++ /dev/null @@ -1 +0,0 @@ -CREATE TABLE table1 (a STRING, b STRING, primary key (a) enable); http://git-wip-us.apache.org/repos/asf/hive/blob/c50ebb34/ql/src/test/queries/clientnegative/create_with_constraints_enforced.q ---------------------------------------------------------------------- diff --git a/ql/src/test/queries/clientnegative/create_with_constraints_enforced.q b/ql/src/test/queries/clientnegative/create_with_constraints_enforced.q deleted file mode 100644 index 5b90c0e..0000000 --- a/ql/src/test/queries/clientnegative/create_with_constraints_enforced.q +++ /dev/null @@ -1 +0,0 @@ -CREATE TABLE table1 (a STRING, b STRING, primary key (a) enforced); http://git-wip-us.apache.org/repos/asf/hive/blob/c50ebb34/ql/src/test/queries/clientnegative/create_with_fk_constraints_enforced.q ---------------------------------------------------------------------- diff --git a/ql/src/test/queries/clientnegative/create_with_fk_constraints_enforced.q b/ql/src/test/queries/clientnegative/create_with_fk_constraints_enforced.q new file mode 100644 index 0000000..73a3e59 --- /dev/null +++ b/ql/src/test/queries/clientnegative/create_with_fk_constraints_enforced.q @@ -0,0 +1,3 @@ +CREATE TABLE table2 (a INT PRIMARY KEY DISABLE, b STRING); +CREATE TABLE table1 (a STRING, b STRING, CONSTRAINT fk1 FOREIGN KEY (b) REFERENCES table2(a) ENFORCED); + http://git-wip-us.apache.org/repos/asf/hive/blob/c50ebb34/ql/src/test/queries/clientnegative/create_with_pk_constraints_enforced.q ---------------------------------------------------------------------- diff --git a/ql/src/test/queries/clientnegative/create_with_pk_constraints_enforced.q b/ql/src/test/queries/clientnegative/create_with_pk_constraints_enforced.q new file mode 100644 index 0000000..5b90c0e --- /dev/null +++ b/ql/src/test/queries/clientnegative/create_with_pk_constraints_enforced.q @@ -0,0 +1 @@ +CREATE TABLE table1 (a STRING, b STRING, primary key (a) enforced); http://git-wip-us.apache.org/repos/asf/hive/blob/c50ebb34/ql/src/test/queries/clientnegative/create_with_unique_constraints_enforced.q ---------------------------------------------------------------------- diff --git a/ql/src/test/queries/clientnegative/create_with_unique_constraints_enforced.q b/ql/src/test/queries/clientnegative/create_with_unique_constraints_enforced.q new file mode 100644 index 0000000..52ef89d --- /dev/null +++ b/ql/src/test/queries/clientnegative/create_with_unique_constraints_enforced.q @@ -0,0 +1 @@ +CREATE TABLE table1 (a STRING UNIQUE ENFORCED, b STRING); \ No newline at end of file http://git-wip-us.apache.org/repos/asf/hive/blob/c50ebb34/ql/src/test/queries/clientnegative/insert_into_acid_notnull.q ---------------------------------------------------------------------- diff --git a/ql/src/test/queries/clientnegative/insert_into_acid_notnull.q b/ql/src/test/queries/clientnegative/insert_into_acid_notnull.q new file mode 100644 index 0000000..da9aba3 --- /dev/null +++ b/ql/src/test/queries/clientnegative/insert_into_acid_notnull.q @@ -0,0 +1,9 @@ +set hive.support.concurrency=true; +set hive.txn.manager=org.apache.hadoop.hive.ql.lockmgr.DbTxnManager; + +create table acid_uami(i int, + de decimal(5,2) not null enforced, + vc varchar(128) not null enforced) clustered by (i) into 2 buckets stored as orc TBLPROPERTIES ('transactional'='true'); + + +insert into table acid_uami select 1, null, null; http://git-wip-us.apache.org/repos/asf/hive/blob/c50ebb34/ql/src/test/queries/clientnegative/insert_into_notnull_constraint.q ---------------------------------------------------------------------- diff --git a/ql/src/test/queries/clientnegative/insert_into_notnull_constraint.q b/ql/src/test/queries/clientnegative/insert_into_notnull_constraint.q new file mode 100644 index 0000000..da35b02 --- /dev/null +++ b/ql/src/test/queries/clientnegative/insert_into_notnull_constraint.q @@ -0,0 +1,3 @@ +create table nullConstraintCheck(i int NOT NULL enforced, j int); +insert into nullConstraintCheck values(null,2); + http://git-wip-us.apache.org/repos/asf/hive/blob/c50ebb34/ql/src/test/queries/clientnegative/insert_multi_into_notnull.q ---------------------------------------------------------------------- diff --git a/ql/src/test/queries/clientnegative/insert_multi_into_notnull.q b/ql/src/test/queries/clientnegative/insert_multi_into_notnull.q new file mode 100644 index 0000000..2c4ec1e --- /dev/null +++ b/ql/src/test/queries/clientnegative/insert_multi_into_notnull.q @@ -0,0 +1,6 @@ +create table src_multi1 (a STRING NOT NULL ENFORCED, b STRING); +create table src_multi2 (i STRING, j STRING NOT NULL ENFORCED); + +from src +insert overwrite table src_multi1 select * where key < 10 +insert overwrite table src_multi2 select key, null where key > 10 and key < 20; http://git-wip-us.apache.org/repos/asf/hive/blob/c50ebb34/ql/src/test/queries/clientnegative/insert_overwrite_notnull_constraint.q ---------------------------------------------------------------------- diff --git a/ql/src/test/queries/clientnegative/insert_overwrite_notnull_constraint.q b/ql/src/test/queries/clientnegative/insert_overwrite_notnull_constraint.q new file mode 100644 index 0000000..64fe4e4 --- /dev/null +++ b/ql/src/test/queries/clientnegative/insert_overwrite_notnull_constraint.q @@ -0,0 +1,3 @@ +create table nullConstraintCheck(i int NOT NULL enforced, j int); +insert overwrite table nullConstraintCheck values(null,2); + http://git-wip-us.apache.org/repos/asf/hive/blob/c50ebb34/ql/src/test/queries/clientnegative/merge_constraint_notnull.q ---------------------------------------------------------------------- diff --git a/ql/src/test/queries/clientnegative/merge_constraint_notnull.q b/ql/src/test/queries/clientnegative/merge_constraint_notnull.q new file mode 100644 index 0000000..8ba869b --- /dev/null +++ b/ql/src/test/queries/clientnegative/merge_constraint_notnull.q @@ -0,0 +1,17 @@ +set hive.mapred.mode=nonstrict; +set hive.support.concurrency=true; +set hive.txn.manager=org.apache.hadoop.hive.ql.lockmgr.DbTxnManager; + +create table nonacid (key int, a1 string, value string) stored as orc; +insert into nonacid values(1, null, 'value'); + +create table testT (key int NOT NULL enable, a1 string NOT NULL enforced, value string) +clustered by (value) into 2 buckets stored as orc +tblproperties ("transactional"="true"); +insert into testT values(2,'a1masking', 'valuemasking'); + +MERGE INTO testT as t using nonacid as s ON t.key = s.key +WHEN MATCHED AND s.key > 5 THEN DELETE +WHEN MATCHED AND s.key < 3 THEN UPDATE set a1 = '1' +WHEN NOT MATCHED THEN INSERT VALUES (s.key, s.a1, s.value); + http://git-wip-us.apache.org/repos/asf/hive/blob/c50ebb34/ql/src/test/queries/clientnegative/update_notnull_constraint.q ---------------------------------------------------------------------- diff --git a/ql/src/test/queries/clientnegative/update_notnull_constraint.q b/ql/src/test/queries/clientnegative/update_notnull_constraint.q new file mode 100644 index 0000000..0ae8561 --- /dev/null +++ b/ql/src/test/queries/clientnegative/update_notnull_constraint.q @@ -0,0 +1,9 @@ +set hive.support.concurrency=true; +set hive.txn.manager=org.apache.hadoop.hive.ql.lockmgr.DbTxnManager; + +create table acid_uami(i int, + de decimal(5,2) constraint nn1 not null enforced, + vc varchar(128) constraint nn2 not null enforced) clustered by (i) into 2 buckets stored as orc TBLPROPERTIES ('transactional'='true'); + +insert into acid_uami values(1, 1.4, 'first'); +UPDATE acid_uami set de=null where i=1; http://git-wip-us.apache.org/repos/asf/hive/blob/c50ebb34/ql/src/test/queries/clientpositive/enforce_constraint_notnull.q ---------------------------------------------------------------------- diff --git a/ql/src/test/queries/clientpositive/enforce_constraint_notnull.q b/ql/src/test/queries/clientpositive/enforce_constraint_notnull.q new file mode 100644 index 0000000..b89bcb7 --- /dev/null +++ b/ql/src/test/queries/clientpositive/enforce_constraint_notnull.q @@ -0,0 +1,196 @@ +-- SIMPLE TABLE +-- create table with first and last column with not null +CREATE TABLE table1 (a STRING NOT NULL ENFORCED, b STRING, c STRING NOT NULL ENFORCED); + +-- insert value tuples +explain INSERT INTO table1 values('not', 'null', 'constraint'); +INSERT INTO table1 values('not', 'null', 'constraint'); +SELECT * FROM table1; + +-- insert with column specified +explain insert into table1(a,c) values('1','2'); +insert into table1(a,c) values('1','2'); + +-- insert from select +explain INSERT INTO table1 select key, src.value, value from src; +INSERT INTO table1 select key, src.value, value from src; +SELECT * FROM table1; + +-- insert overwrite +explain INSERT OVERWRITE TABLE table1 select src.*, value from src; +INSERT OVERWRITE TABLE table1 select src.*, value from src; +SELECT * FROM table1; + +-- insert overwrite with if not exists +explain INSERT OVERWRITE TABLE table1 if not exists select src.key, src.key, src.value from src; +INSERT OVERWRITE TABLE table1 if not exists select src.key, src.key, src.value from src; +SELECT * FROM table1; + +DROP TABLE table1; + +-- multi insert +create table src_multi1 (a STRING NOT NULL ENFORCED, b STRING); +create table src_multi2 (i STRING, j STRING NOT NULL ENABLE); + +explain +from src +insert overwrite table src_multi1 select * where key < 10 +insert overwrite table src_multi2 select * where key > 10 and key < 20; + + +from src +insert overwrite table src_multi1 select * where key < 10 +insert overwrite table src_multi2 select * where key > 10 and key < 20; + +explain +from src +insert into table src_multi1 select * where src.key < 10 +insert into table src_multi2 select src.* where key > 10 and key < 20; + +from src +insert into table src_multi1 select * where src.key < 10 +insert into table src_multi2 select src.* where key > 10 and key < 20; + +-- ACID TABLE +set hive.support.concurrency=true; +set hive.txn.manager=org.apache.hadoop.hive.ql.lockmgr.DbTxnManager; + +-- SORT_QUERY_RESULTS +create table acid_uami(i int, + de decimal(5,2) constraint nn1 not null enforced, + vc varchar(128) constraint nn2 not null enforced) clustered by (i) into 2 buckets stored as orc TBLPROPERTIES ('transactional'='true'); + +-- insert into values +explain insert into table acid_uami values + (1, 109.23, 'mary had a little lamb'), + (6553, 923.19, 'its fleece was white as snow'); +insert into table acid_uami values + (1, 109.23, 'mary had a little lamb'), + (6553, 923.19, 'its fleece was white as snow'); +select * from acid_uami; + + --insert into select +explain insert into table acid_uami select cast(key as int), cast (key as decimal(5,2)), value from src; +insert into table acid_uami select cast(key as int), cast (key as decimal(5,2)), value from src; + +-- select with limit +explain insert into table acid_uami select cast(key as int), cast (key as decimal(5,2)), value from src limit 2; + +-- select with order by +explain insert into table acid_uami select cast(key as int), cast (key as decimal(5,2)), value from src + order by key limit 2; + +-- select with group by +explain insert into table acid_uami select cast(key as int), cast (key as decimal(5,2)), value from src + group by key, value order by key limit 2; + + --overwrite +explain insert into table acid_uami select cast(key as int), cast (key as decimal(5,2)), value from src; +insert into table acid_uami select cast(key as int), cast (key as decimal(5,2)), value from src; + +-- update +explain update acid_uami set de = 3.14 where de = 109.23 or de = 119.23; +update acid_uami set de = 3.14 where de = 109.23 or de = 119.23; + +ALTER table acid_uami drop constraint nn1; +ALTER table acid_uami CHANGE i i int constraint nn0 not null enforced; + +explain update acid_uami set de = 3.14159 where de = 3.14 ; +update acid_uami set de = 3.14159 where de = 3.14 ; + +-- multi insert +explain +from src +insert overwrite table acid_uami select cast(key as int), cast(key as decimal(5,2)), value where key < 10 +insert overwrite table src_multi2 select * where key > 10 and key < 20; + +set hive.exec.dynamic.partition.mode=nonstrict; +-- Table with partition +CREATE TABLE tablePartitioned (a STRING NOT NULL ENFORCED, b STRING, c STRING NOT NULL ENFORCED) + PARTITIONED BY (p1 STRING, p2 INT NOT NULL ENABLE); + +-- Insert into +explain INSERT INTO tablePartitioned partition(p1='today', p2=10) values('not', 'null', 'constraint'); +INSERT INTO tablePartitioned partition(p1='today', p2=10) values('not', 'null', 'constraint'); + +-- Insert as select +explain INSERT INTO tablePartitioned partition(p1, p2) select key, value, value, key as p1, 3 as p2 from src limit 10; +INSERT INTO tablePartitioned partition(p1, p2) select key, value, value, key as p1, 3 as p2 from src limit 10; + +select * from tablePartitioned; + +-- multi insert +explain +from src +INSERT INTO tablePartitioned partition(p1, p2) select key, value, value, 'yesterday' as p1, 3 as p2 +insert overwrite table src_multi2 select * where key > 10 and key < 20; + +DROP TABLE src_multi1; +DROP TABLE src_multi2; +DROP TABLE acid_uami; + +-- MERGE statements +set hive.mapred.mode=nonstrict; +set hive.support.concurrency=true; +set hive.txn.manager=org.apache.hadoop.hive.ql.lockmgr.DbTxnManager; + +create table nonacid (key int, a1 string, value string) stored as orc; + +create table masking_test (key int NOT NULL enable, a1 string, value string) +clustered by (value) into 2 buckets stored as orc +tblproperties ("transactional"="true"); + +-- with cardinality check off +set hive.merge.cardinality.check=false; +explain MERGE INTO masking_test as t using nonacid as s ON t.key = s.key +WHEN MATCHED AND s.key < 5 THEN DELETE +WHEN MATCHED AND s.key < 3 THEN UPDATE set a1 = '1' +WHEN NOT MATCHED THEN INSERT VALUES (s.key, s.a1, s.value); + +-- with cardinality check on +set hive.merge.cardinality.check=true; +explain MERGE INTO masking_test as t using nonacid as s ON t.key = s.key +WHEN MATCHED AND s.key < 5 THEN DELETE +WHEN MATCHED AND s.key < 3 THEN UPDATE set a1 = '1' +WHEN NOT MATCHED THEN INSERT VALUES (s.key, s.a1, s.value); + +explain MERGE INTO masking_test as t using nonacid as s ON t.key = s.key +WHEN MATCHED AND s.key < 5 THEN DELETE +WHEN NOT MATCHED THEN INSERT VALUES (s.key, s.a1, s.value); + +explain MERGE INTO masking_test as t using nonacid as s ON t.key = s.key +WHEN MATCHED AND s.key < 3 THEN UPDATE set a1 = '1' +WHEN NOT MATCHED THEN INSERT VALUES (s.key, s.a1, s.value); + +-- shouldn't have constraint enforcement +explain MERGE INTO masking_test as t using nonacid as s ON t.key = s.key +WHEN MATCHED AND s.key < 5 THEN DELETE; + +DROP TABLE masking_test; +DROP TABLE nonacid; + +-- Test drop constraint +create table table2(i int constraint nn5 not null enforced, j int); +explain insert into table2 values(2, 3); +alter table table2 drop constraint nn5; +explain insert into table2 values(2, 3); +DROP TABLE table2; + +-- temporary table +create temporary table tttemp(i int not null enforced); +explain insert into tttemp values(1); +explain insert into tttemp select cast(key as int) from src; +drop table tttemp; + +-- micro-managed table +set hive.create.as.insert.only=true; +set hive.exec.dynamic.partition.mode=nonstrict; +set hive.support.concurrency=true; +set hive.txn.manager=org.apache.hadoop.hive.ql.lockmgr.DbTxnManager; +create table part_mm(key int not null enforced) partitioned by (key_mm int) stored as orc tblproperties ("transactional"="true", "transactional_properties"="insert_only"); +explain insert into table part_mm partition(key_mm=455) select key from src order by value limit 3; +insert into table part_mm partition(key_mm=455) select key from src order by value limit 3; +select key from src order by value limit 3; +select * from part_mm; +drop table part_mm; + http://git-wip-us.apache.org/repos/asf/hive/blob/c50ebb34/ql/src/test/results/clientnegative/alter_notnull_constraint_violation.q.out ---------------------------------------------------------------------- diff --git a/ql/src/test/results/clientnegative/alter_notnull_constraint_violation.q.out b/ql/src/test/results/clientnegative/alter_notnull_constraint_violation.q.out new file mode 100644 index 0000000..fe5f235 --- /dev/null +++ b/ql/src/test/results/clientnegative/alter_notnull_constraint_violation.q.out @@ -0,0 +1,27 @@ +PREHOOK: query: CREATE TABLE t1(i int, j int) +PREHOOK: type: CREATETABLE +PREHOOK: Output: database:default +PREHOOK: Output: default@t1 +POSTHOOK: query: CREATE TABLE t1(i int, j int) +POSTHOOK: type: CREATETABLE +POSTHOOK: Output: database:default +POSTHOOK: Output: default@t1 +PREHOOK: query: insert into t1 values(1,2) +PREHOOK: type: QUERY +PREHOOK: Input: _dummy_database@_dummy_table +PREHOOK: Output: default@t1 +POSTHOOK: query: insert into t1 values(1,2) +POSTHOOK: type: QUERY +POSTHOOK: Input: _dummy_database@_dummy_table +POSTHOOK: Output: default@t1 +POSTHOOK: Lineage: t1.i SCRIPT [] +POSTHOOK: Lineage: t1.j SCRIPT [] +PREHOOK: query: alter table t1 change j j int constraint nn0 not null enforced +PREHOOK: type: ALTERTABLE_RENAMECOL +PREHOOK: Input: default@t1 +PREHOOK: Output: default@t1 +POSTHOOK: query: alter table t1 change j j int constraint nn0 not null enforced +POSTHOOK: type: ALTERTABLE_RENAMECOL +POSTHOOK: Input: default@t1 +POSTHOOK: Output: default@t1 +FAILED: UDFArgumentException org.apache.hadoop.hive.ql.exec.UDFArgumentLengthException: NOT NULL constraint violated! http://git-wip-us.apache.org/repos/asf/hive/blob/c50ebb34/ql/src/test/results/clientnegative/create_with_constraints_enable.q.out ---------------------------------------------------------------------- diff --git a/ql/src/test/results/clientnegative/create_with_constraints_enable.q.out b/ql/src/test/results/clientnegative/create_with_constraints_enable.q.out deleted file mode 100644 index 2b24412..0000000 --- a/ql/src/test/results/clientnegative/create_with_constraints_enable.q.out +++ /dev/null @@ -1 +0,0 @@ -FAILED: SemanticException [Error 10326]: Invalid Constraint syntax ENABLE/ENFORCED feature not supported yet. Please use DISABLE/NOT ENFORCED instead. http://git-wip-us.apache.org/repos/asf/hive/blob/c50ebb34/ql/src/test/results/clientnegative/create_with_constraints_enforced.q.out ---------------------------------------------------------------------- diff --git a/ql/src/test/results/clientnegative/create_with_constraints_enforced.q.out b/ql/src/test/results/clientnegative/create_with_constraints_enforced.q.out deleted file mode 100644 index 2b24412..0000000 --- a/ql/src/test/results/clientnegative/create_with_constraints_enforced.q.out +++ /dev/null @@ -1 +0,0 @@ -FAILED: SemanticException [Error 10326]: Invalid Constraint syntax ENABLE/ENFORCED feature not supported yet. Please use DISABLE/NOT ENFORCED instead. http://git-wip-us.apache.org/repos/asf/hive/blob/c50ebb34/ql/src/test/results/clientnegative/create_with_fk_constraints_enforced.q.out ---------------------------------------------------------------------- diff --git a/ql/src/test/results/clientnegative/create_with_fk_constraints_enforced.q.out b/ql/src/test/results/clientnegative/create_with_fk_constraints_enforced.q.out new file mode 100644 index 0000000..38dca87 --- /dev/null +++ b/ql/src/test/results/clientnegative/create_with_fk_constraints_enforced.q.out @@ -0,0 +1,9 @@ +PREHOOK: query: CREATE TABLE table2 (a INT PRIMARY KEY DISABLE, b STRING) +PREHOOK: type: CREATETABLE +PREHOOK: Output: database:default +PREHOOK: Output: default@table2 +POSTHOOK: query: CREATE TABLE table2 (a INT PRIMARY KEY DISABLE, b STRING) +POSTHOOK: type: CREATETABLE +POSTHOOK: Output: database:default +POSTHOOK: Output: default@table2 +FAILED: SemanticException [Error 10325]: Invalid Foreign Key syntax ENABLE feature not supported yet. Please use DISABLE instead. http://git-wip-us.apache.org/repos/asf/hive/blob/c50ebb34/ql/src/test/results/clientnegative/create_with_pk_constraints_enforced.q.out ---------------------------------------------------------------------- diff --git a/ql/src/test/results/clientnegative/create_with_pk_constraints_enforced.q.out b/ql/src/test/results/clientnegative/create_with_pk_constraints_enforced.q.out new file mode 100644 index 0000000..2b24412 --- /dev/null +++ b/ql/src/test/results/clientnegative/create_with_pk_constraints_enforced.q.out @@ -0,0 +1 @@ +FAILED: SemanticException [Error 10326]: Invalid Constraint syntax ENABLE/ENFORCED feature not supported yet. Please use DISABLE/NOT ENFORCED instead. http://git-wip-us.apache.org/repos/asf/hive/blob/c50ebb34/ql/src/test/results/clientnegative/create_with_unique_constraints_enforced.q.out ---------------------------------------------------------------------- diff --git a/ql/src/test/results/clientnegative/create_with_unique_constraints_enforced.q.out b/ql/src/test/results/clientnegative/create_with_unique_constraints_enforced.q.out new file mode 100644 index 0000000..2b24412 --- /dev/null +++ b/ql/src/test/results/clientnegative/create_with_unique_constraints_enforced.q.out @@ -0,0 +1 @@ +FAILED: SemanticException [Error 10326]: Invalid Constraint syntax ENABLE/ENFORCED feature not supported yet. Please use DISABLE/NOT ENFORCED instead. http://git-wip-us.apache.org/repos/asf/hive/blob/c50ebb34/ql/src/test/results/clientnegative/insert_into_acid_notnull.q.out ---------------------------------------------------------------------- diff --git a/ql/src/test/results/clientnegative/insert_into_acid_notnull.q.out b/ql/src/test/results/clientnegative/insert_into_acid_notnull.q.out new file mode 100644 index 0000000..721c7e7 --- /dev/null +++ b/ql/src/test/results/clientnegative/insert_into_acid_notnull.q.out @@ -0,0 +1,13 @@ +PREHOOK: query: create table acid_uami(i int, + de decimal(5,2) not null enforced, + vc varchar(128) not null enforced) clustered by (i) into 2 buckets stored as orc TBLPROPERTIES ('transactional'='true') +PREHOOK: type: CREATETABLE +PREHOOK: Output: database:default +PREHOOK: Output: default@acid_uami +POSTHOOK: query: create table acid_uami(i int, + de decimal(5,2) not null enforced, + vc varchar(128) not null enforced) clustered by (i) into 2 buckets stored as orc TBLPROPERTIES ('transactional'='true') +POSTHOOK: type: CREATETABLE +POSTHOOK: Output: database:default +POSTHOOK: Output: default@acid_uami +FAILED: UDFArgumentException org.apache.hadoop.hive.ql.exec.UDFArgumentLengthException: NOT NULL constraint violated! http://git-wip-us.apache.org/repos/asf/hive/blob/c50ebb34/ql/src/test/results/clientnegative/insert_into_notnull_constraint.q.out ---------------------------------------------------------------------- diff --git a/ql/src/test/results/clientnegative/insert_into_notnull_constraint.q.out b/ql/src/test/results/clientnegative/insert_into_notnull_constraint.q.out new file mode 100644 index 0000000..6718ae0 --- /dev/null +++ b/ql/src/test/results/clientnegative/insert_into_notnull_constraint.q.out @@ -0,0 +1,9 @@ +PREHOOK: query: create table nullConstraintCheck(i int NOT NULL enforced, j int) +PREHOOK: type: CREATETABLE +PREHOOK: Output: database:default +PREHOOK: Output: default@nullConstraintCheck +POSTHOOK: query: create table nullConstraintCheck(i int NOT NULL enforced, j int) +POSTHOOK: type: CREATETABLE +POSTHOOK: Output: database:default +POSTHOOK: Output: default@nullConstraintCheck +FAILED: UDFArgumentException org.apache.hadoop.hive.ql.exec.UDFArgumentLengthException: NOT NULL constraint violated! http://git-wip-us.apache.org/repos/asf/hive/blob/c50ebb34/ql/src/test/results/clientnegative/insert_multi_into_notnull.q.out ---------------------------------------------------------------------- diff --git a/ql/src/test/results/clientnegative/insert_multi_into_notnull.q.out b/ql/src/test/results/clientnegative/insert_multi_into_notnull.q.out new file mode 100644 index 0000000..d54e6cf --- /dev/null +++ b/ql/src/test/results/clientnegative/insert_multi_into_notnull.q.out @@ -0,0 +1,17 @@ +PREHOOK: query: create table src_multi1 (a STRING NOT NULL ENFORCED, b STRING) +PREHOOK: type: CREATETABLE +PREHOOK: Output: database:default +PREHOOK: Output: default@src_multi1 +POSTHOOK: query: create table src_multi1 (a STRING NOT NULL ENFORCED, b STRING) +POSTHOOK: type: CREATETABLE +POSTHOOK: Output: database:default +POSTHOOK: Output: default@src_multi1 +PREHOOK: query: create table src_multi2 (i STRING, j STRING NOT NULL ENFORCED) +PREHOOK: type: CREATETABLE +PREHOOK: Output: database:default +PREHOOK: Output: default@src_multi2 +POSTHOOK: query: create table src_multi2 (i STRING, j STRING NOT NULL ENFORCED) +POSTHOOK: type: CREATETABLE +POSTHOOK: Output: database:default +POSTHOOK: Output: default@src_multi2 +FAILED: UDFArgumentException org.apache.hadoop.hive.ql.exec.UDFArgumentLengthException: NOT NULL constraint violated! http://git-wip-us.apache.org/repos/asf/hive/blob/c50ebb34/ql/src/test/results/clientnegative/insert_overwrite_notnull_constraint.q.out ---------------------------------------------------------------------- diff --git a/ql/src/test/results/clientnegative/insert_overwrite_notnull_constraint.q.out b/ql/src/test/results/clientnegative/insert_overwrite_notnull_constraint.q.out new file mode 100644 index 0000000..6718ae0 --- /dev/null +++ b/ql/src/test/results/clientnegative/insert_overwrite_notnull_constraint.q.out @@ -0,0 +1,9 @@ +PREHOOK: query: create table nullConstraintCheck(i int NOT NULL enforced, j int) +PREHOOK: type: CREATETABLE +PREHOOK: Output: database:default +PREHOOK: Output: default@nullConstraintCheck +POSTHOOK: query: create table nullConstraintCheck(i int NOT NULL enforced, j int) +POSTHOOK: type: CREATETABLE +POSTHOOK: Output: database:default +POSTHOOK: Output: default@nullConstraintCheck +FAILED: UDFArgumentException org.apache.hadoop.hive.ql.exec.UDFArgumentLengthException: NOT NULL constraint violated! http://git-wip-us.apache.org/repos/asf/hive/blob/c50ebb34/ql/src/test/results/clientnegative/merge_constraint_notnull.q.out ---------------------------------------------------------------------- diff --git a/ql/src/test/results/clientnegative/merge_constraint_notnull.q.out b/ql/src/test/results/clientnegative/merge_constraint_notnull.q.out new file mode 100644 index 0000000..088e249 --- /dev/null +++ b/ql/src/test/results/clientnegative/merge_constraint_notnull.q.out @@ -0,0 +1,55 @@ +PREHOOK: query: create table nonacid (key int, a1 string, value string) stored as orc +PREHOOK: type: CREATETABLE +PREHOOK: Output: database:default +PREHOOK: Output: default@nonacid +POSTHOOK: query: create table nonacid (key int, a1 string, value string) stored as orc +POSTHOOK: type: CREATETABLE +POSTHOOK: Output: database:default +POSTHOOK: Output: default@nonacid +PREHOOK: query: insert into nonacid values(1, null, 'value') +PREHOOK: type: QUERY +PREHOOK: Input: _dummy_database@_dummy_table +PREHOOK: Output: default@nonacid +POSTHOOK: query: insert into nonacid values(1, null, 'value') +POSTHOOK: type: QUERY +POSTHOOK: Input: _dummy_database@_dummy_table +POSTHOOK: Output: default@nonacid +POSTHOOK: Lineage: nonacid.a1 EXPRESSION [] +POSTHOOK: Lineage: nonacid.key SCRIPT [] +POSTHOOK: Lineage: nonacid.value SCRIPT [] +PREHOOK: query: create table testT (key int NOT NULL enable, a1 string NOT NULL enforced, value string) +clustered by (value) into 2 buckets stored as orc +tblproperties ("transactional"="true") +PREHOOK: type: CREATETABLE +PREHOOK: Output: database:default +PREHOOK: Output: default@testT +POSTHOOK: query: create table testT (key int NOT NULL enable, a1 string NOT NULL enforced, value string) +clustered by (value) into 2 buckets stored as orc +tblproperties ("transactional"="true") +POSTHOOK: type: CREATETABLE +POSTHOOK: Output: database:default +POSTHOOK: Output: default@testT +PREHOOK: query: insert into testT values(2,'a1masking', 'valuemasking') +PREHOOK: type: QUERY +PREHOOK: Input: _dummy_database@_dummy_table +PREHOOK: Output: default@testt +POSTHOOK: query: insert into testT values(2,'a1masking', 'valuemasking') +POSTHOOK: type: QUERY +POSTHOOK: Input: _dummy_database@_dummy_table +POSTHOOK: Output: default@testt +POSTHOOK: Lineage: testt.a1 SCRIPT [] +POSTHOOK: Lineage: testt.key SCRIPT [] +POSTHOOK: Lineage: testt.value SCRIPT [] +PREHOOK: query: MERGE INTO testT as t using nonacid as s ON t.key = s.key +WHEN MATCHED AND s.key > 5 THEN DELETE +WHEN MATCHED AND s.key < 3 THEN UPDATE set a1 = '1' +WHEN NOT MATCHED THEN INSERT VALUES (s.key, s.a1, s.value) +PREHOOK: type: QUERY +PREHOOK: Input: default@nonacid +PREHOOK: Input: default@testt +PREHOOK: Output: default@merge_tmp_table +PREHOOK: Output: default@testt +PREHOOK: Output: default@testt +PREHOOK: Output: default@testt +#### A masked pattern was here #### +FAILED: Execution Error, return code 2 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask http://git-wip-us.apache.org/repos/asf/hive/blob/c50ebb34/ql/src/test/results/clientnegative/update_notnull_constraint.q.out ---------------------------------------------------------------------- diff --git a/ql/src/test/results/clientnegative/update_notnull_constraint.q.out b/ql/src/test/results/clientnegative/update_notnull_constraint.q.out new file mode 100644 index 0000000..427ca4d --- /dev/null +++ b/ql/src/test/results/clientnegative/update_notnull_constraint.q.out @@ -0,0 +1,24 @@ +PREHOOK: query: create table acid_uami(i int, + de decimal(5,2) constraint nn1 not null enforced, + vc varchar(128) constraint nn2 not null enforced) clustered by (i) into 2 buckets stored as orc TBLPROPERTIES ('transactional'='true') +PREHOOK: type: CREATETABLE +PREHOOK: Output: database:default +PREHOOK: Output: default@acid_uami +POSTHOOK: query: create table acid_uami(i int, + de decimal(5,2) constraint nn1 not null enforced, + vc varchar(128) constraint nn2 not null enforced) clustered by (i) into 2 buckets stored as orc TBLPROPERTIES ('transactional'='true') +POSTHOOK: type: CREATETABLE +POSTHOOK: Output: database:default +POSTHOOK: Output: default@acid_uami +PREHOOK: query: insert into acid_uami values(1, 1.4, 'first') +PREHOOK: type: QUERY +PREHOOK: Input: _dummy_database@_dummy_table +PREHOOK: Output: default@acid_uami +POSTHOOK: query: insert into acid_uami values(1, 1.4, 'first') +POSTHOOK: type: QUERY +POSTHOOK: Input: _dummy_database@_dummy_table +POSTHOOK: Output: default@acid_uami +POSTHOOK: Lineage: acid_uami.de SCRIPT [] +POSTHOOK: Lineage: acid_uami.i SCRIPT [] +POSTHOOK: Lineage: acid_uami.vc SCRIPT [] +FAILED: UDFArgumentException org.apache.hadoop.hive.ql.exec.UDFArgumentLengthException: NOT NULL constraint violated!