You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hawq.apache.org by yj...@apache.org on 2016/06/02 04:56:01 UTC
incubator-hawq git commit: HAWQ-758. Refactor insert checkinstall
cases using new test framework
Repository: incubator-hawq
Updated Branches:
refs/heads/master 27147c570 -> b38fb124a
HAWQ-758. Refactor insert checkinstall cases using new test framework
Project: http://git-wip-us.apache.org/repos/asf/incubator-hawq/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-hawq/commit/b38fb124
Tree: http://git-wip-us.apache.org/repos/asf/incubator-hawq/tree/b38fb124
Diff: http://git-wip-us.apache.org/repos/asf/incubator-hawq/diff/b38fb124
Branch: refs/heads/master
Commit: b38fb124affbb2a6fe73c8f6661fc6243513e017
Parents: 27147c5
Author: YI JIN <yj...@pivotal.io>
Authored: Thu Jun 2 14:55:20 2016 +1000
Committer: YI JIN <yj...@pivotal.io>
Committed: Thu Jun 2 14:55:20 2016 +1000
----------------------------------------------------------------------
.../feature/query/ans/insert-appendonlytrue.ans | 8 +
.../feature/query/sql/insert-appendonlytrue.sql | 4 +
src/test/feature/query/test_insert.cpp | 172 +++++++++++++++++++
3 files changed, 184 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/b38fb124/src/test/feature/query/ans/insert-appendonlytrue.ans
----------------------------------------------------------------------
diff --git a/src/test/feature/query/ans/insert-appendonlytrue.ans b/src/test/feature/query/ans/insert-appendonlytrue.ans
new file mode 100644
index 0000000..c62512e
--- /dev/null
+++ b/src/test/feature/query/ans/insert-appendonlytrue.ans
@@ -0,0 +1,8 @@
+begin;
+BEGIN
+create table t (a int) with (appendonly=true);
+CREATE TABLE
+insert into t select * from generate_series(1,10);
+INSERT 0 10
+abort;
+ROLLBACK
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/b38fb124/src/test/feature/query/sql/insert-appendonlytrue.sql
----------------------------------------------------------------------
diff --git a/src/test/feature/query/sql/insert-appendonlytrue.sql b/src/test/feature/query/sql/insert-appendonlytrue.sql
new file mode 100644
index 0000000..9565ec8
--- /dev/null
+++ b/src/test/feature/query/sql/insert-appendonlytrue.sql
@@ -0,0 +1,4 @@
+begin;
+create table t (a int) with (appendonly=true);
+insert into t select * from generate_series(1,10);
+abort;
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/b38fb124/src/test/feature/query/test_insert.cpp
----------------------------------------------------------------------
diff --git a/src/test/feature/query/test_insert.cpp b/src/test/feature/query/test_insert.cpp
new file mode 100644
index 0000000..1e05b9c
--- /dev/null
+++ b/src/test/feature/query/test_insert.cpp
@@ -0,0 +1,172 @@
+#include <pwd.h>
+#include <sys/types.h>
+#include <unistd.h>
+#include <vector>
+#include <stdio.h>
+#include <stdlib.h>
+#include <errno.h>
+#include <iostream>
+#include <string>
+
+#include "lib/sql_util.h"
+
+#include "gtest/gtest.h"
+
+class TestQueryInsert : public ::testing::Test {
+ public:
+ TestQueryInsert() {}
+ ~TestQueryInsert() {}
+};
+
+
+TEST_F(TestQueryInsert, TestInsertWithDefault) {
+ hawq::test::SQLUtility util;
+ // prepare
+ util.execute("drop table if exists inserttest");
+ util.execute("create table inserttest (col1 int4, "
+ "col2 int4 not null,"
+ "col3 text default 'testing')");
+ // test insert
+ util.execute("insert into inserttest(col2, col3) values(3,default)");
+ util.execute("insert into inserttest(col1, col2, col3) "
+ "values(default, 5, default)");
+ util.execute("insert into inserttest values(default, 5, 'test')");
+ util.execute("insert into inserttest values(default, 7)");
+
+ util.query("select col1, col2, col3 from inserttest order by col1, col2, col3",
+ "|3|testing|\n"
+ "|5|test|\n"
+ "|5|testing|\n"
+ "|7|testing|\n");
+ // cleanup
+ util.execute("drop table if exists inserttest");
+}
+
+TEST_F(TestQueryInsert, TestInsertWithDefaultNeg) {
+ hawq::test::SQLUtility util;
+ // prepare
+ util.execute("drop table if exists inserttest");
+ util.execute("create table inserttest (col1 int4, "
+ "col2 int4 not null,"
+ "col3 text default 'testing')");
+ // test insert
+ util.execute("insert into inserttest(col1, col2, col3) "
+ "values(default, default, default)",
+ false);
+ std::string errstr = "ERROR: null value in column \"col2\" "
+ "violates not-null constraint";
+ EXPECT_STREQ(errstr.c_str(),
+ util.getPSQL()->getLastResult().substr(0, errstr.size()).c_str());
+ // cleanup
+ util.execute("drop table if exists inserttest");
+}
+
+TEST_F(TestQueryInsert, TestInsertUnmatchedColNumber) {
+ hawq::test::SQLUtility util;
+ // prepare
+ util.execute("drop table if exists inserttest");
+ util.execute("create table inserttest (col1 int4, "
+ "col2 int4 not null,"
+ "col3 text default 'testing')");
+ // test insert
+ util.execute("insert into inserttest(col1, col2, col3) "
+ "values(default, default)",
+ false);
+ std::string errstr = "ERROR: INSERT has more target columns than "
+ "expressions";
+ EXPECT_STREQ(errstr.c_str(),
+ util.getPSQL()->getLastResult().substr(0, errstr.size()).c_str());
+
+ util.execute("insert into inserttest(col1, col2, col3) values(1, 2)",
+ false);
+ EXPECT_STREQ(errstr.c_str(),
+ util.getPSQL()->getLastResult().substr(0, errstr.size()).c_str());
+
+ util.execute("insert into inserttest(col1) values(1, 2)", false);
+ errstr = "ERROR: INSERT has more expressions than target columns";
+ EXPECT_STREQ(errstr.c_str(),
+ util.getPSQL()->getLastResult().substr(0, errstr.size()).c_str());
+
+ util.execute("insert into inserttest(col1) values(default, default)", false);
+ EXPECT_STREQ(errstr.c_str(),
+ util.getPSQL()->getLastResult().substr(0, errstr.size()).c_str());
+
+ // cleanup
+ util.execute("drop table if exists inserttest");
+
+}
+
+TEST_F(TestQueryInsert, TestInsertValues) {
+ hawq::test::SQLUtility util;
+ // prepare
+ util.execute("drop table if exists inserttest");
+ util.execute("create table inserttest (col1 int4, "
+ "col2 int4 not null,"
+ "col3 text default 'testing')");
+ // test insert
+ util.execute("insert into inserttest "
+ "values(10,20,'40'),"
+ "(-1,2,default),"
+ "((select 2), "
+ "(select i from (values(3)) as foo(i)),"
+ "'values are fun!')");
+
+ util.query("select col1, col2, col3 from inserttest order by col1, col2, col3",
+ "-1|2|testing|\n"
+ "2|3|values are fun!|\n"
+ "10|20|40|\n");
+ // cleanup
+ util.execute("drop table if exists inserttest");
+}
+
+TEST_F(TestQueryInsert, TestInsertAfterDropColumn) {
+ hawq::test::SQLUtility util;
+ // prepare
+ util.execute("drop table if exists bar");
+ util.execute("drop table if exists foo");
+ util.execute("create table bar(x int, y int) distributed randomly");
+ util.execute("create table foo(like bar) distributed randomly");
+
+ // test
+ util.execute("alter table foo drop column y");
+ util.execute("insert into bar values(1,1),(2,2)");
+ util.execute("insert into foo(x) select t1.x from bar t1 join bar t2 on t1.x=t2.x");
+ util.execute("insert into foo(x) select t1.x from bar t1");
+ util.execute("insert into foo(x) select t1.x from bar t1 group by t1.x");
+
+ // cleanup
+ util.execute("drop table if exists foo");
+ util.execute("drop table if exists bar");
+}
+
+TEST_F(TestQueryInsert, TestInsertAfterAddDropColumn) {
+ hawq::test::SQLUtility util;
+ // prepare
+ util.execute("drop table if exists bar");
+ util.execute("drop table if exists foo");
+ util.execute("create table bar(x int) distributed randomly");
+ util.execute("create table foo(like bar) distributed randomly");
+
+ // test add and drop the column at once
+ util.execute("alter table foo add column y int default 0");
+ util.execute("alter table foo drop column y");
+ util.execute("insert into bar values(1),(2)");
+ util.execute("insert into foo(x) select t1.x from bar t1 join bar t2 on t1.x=t2.x");
+ util.execute("insert into foo(x) select t1.x from bar t1");
+ util.execute("insert into foo(x) select t1.x from bar t1 group by t1.x");
+
+ // cleanup
+ util.execute("drop table if exists foo");
+ util.execute("drop table if exists bar");
+}
+
+TEST_F(TestQueryInsert, TestInsertAppendOnlyTrue) {
+ hawq::test::SQLUtility util;
+ // prepare
+ util.execute("drop table if exists t");
+ util.execSQLFile("query/sql/insert-appendonlytrue.sql",
+ "query/ans/insert-appendonlytrue.ans");
+ // cleanup
+ util.execute("drop table if exists t");
+}
+