Repository: incubator-hawq Updated Branches: refs/heads/master 120ee70ba -> ec5a9bad8
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/ec5a9bad/src/test/feature/query/sql/prepare-parameters.sql ---------------------------------------------------------------------- diff --git a/src/test/feature/query/sql/prepare-parameters.sql b/src/test/feature/query/sql/prepare-parameters.sql new file mode 100644 index 0000000..e014307 --- /dev/null +++ b/src/test/feature/query/sql/prepare-parameters.sql @@ -0,0 +1,31 @@ +PREPARE q2(text) AS + SELECT datname, datistemplate, datallowconn + FROM pg_database WHERE datname = $1; + +EXECUTE q2('regression'); + +PREPARE q3(text, int, float, boolean, oid, smallint) AS + SELECT * FROM test1 WHERE string4 = $1 AND (four = $2 OR + ten = $3::bigint OR true = $4 OR oid = $5 OR odd = $6::int) ORDER BY 1,2,3,4; + +EXECUTE q3('AAAAxx', 5::smallint, 10.5::float, false, 500::oid, 4::bigint); + +EXECUTE q3('bool'); + +EXECUTE q3('bytea', 5::smallint, 10.5::float, false, 500::oid, 4::bigint, true); + +EXECUTE q3(5::smallint, 10.5::float, false, 500::oid, 4::bigint, 'bytea'); + +PREPARE q4(nonexistenttype) AS SELECT $1; + +PREPARE q5(int, text) AS + SELECT * FROM test1 WHERE unique1 = $1 OR stringu1 = $2; +CREATE TEMPORARY TABLE q5_prep_results AS EXECUTE q5(200, 'DTAAAA'); +SELECT * FROM q5_prep_results ORDER BY 1,2,3,4; + +PREPARE q6 AS + SELECT * FROM test1 WHERE unique1 = $1 AND stringu1 = $2; +PREPARE q7(unknown) AS + SELECT * FROM test2 WHERE thepath = $1; + +SELECT name, statement, parameter_types FROM pg_prepared_statements ORDER BY name; http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/ec5a9bad/src/test/feature/query/sql/prepare-uniqueness.sql ---------------------------------------------------------------------- diff --git a/src/test/feature/query/sql/prepare-uniqueness.sql b/src/test/feature/query/sql/prepare-uniqueness.sql new file mode 100644 index 0000000..07f663c --- /dev/null +++ b/src/test/feature/query/sql/prepare-uniqueness.sql @@ -0,0 +1,18 @@ +SELECT name, statement, parameter_types FROM pg_prepared_statements ORDER BY 1,2,3; + +PREPARE q1 AS SELECT 1 AS a; +EXECUTE q1; + +PREPARE q1 AS SELECT 2; + +DEALLOCATE q1; +PREPARE q1 AS SELECT 2; +EXECUTE q1; +PREPARE q2 AS SELECT 2 AS b; + +SELECT name, statement, parameter_types FROM pg_prepared_statements ORDER BY 1,2,3; + +DEALLOCATE PREPARE q1; +DEALLOCATE PREPARE q2; + +SELECT name, statement, parameter_types FROM pg_prepared_statements ORDER BY 1,2,3; \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/ec5a9bad/src/test/feature/query/sql/sequence-dependency.sql ---------------------------------------------------------------------- diff --git a/src/test/feature/query/sql/sequence-dependency.sql b/src/test/feature/query/sql/sequence-dependency.sql new file mode 100644 index 0000000..508d718 --- /dev/null +++ b/src/test/feature/query/sql/sequence-dependency.sql @@ -0,0 +1,14 @@ +CREATE TEMP SEQUENCE myseq2; +CREATE TEMPORARY SEQUENCE myseq3; +CREATE TEMP TABLE t1 (f1 SERIAL, + f2 INT DEFAULT NEXTVAL('myseq2'), + f3 INT DEFAULT NEXTVAL('myseq3'::text) +); + +DROP SEQUENCE t1_f1_seq; +DROP SEQUENCE myseq2; +DROP SEQUENCE myseq3; +DROP TABLE t1; +DROP SEQUENCE t1_f1_seq; +DROP SEQUENCE myseq2; + \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/ec5a9bad/src/test/feature/query/sql/sequence-serialcol-null.sql ---------------------------------------------------------------------- diff --git a/src/test/feature/query/sql/sequence-serialcol-null.sql b/src/test/feature/query/sql/sequence-serialcol-null.sql new file mode 100644 index 0000000..edc5d00 --- /dev/null +++ b/src/test/feature/query/sql/sequence-serialcol-null.sql @@ -0,0 +1 @@ +INSERT INTO serialtest VALUES('wrong',NULL); \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/ec5a9bad/src/test/feature/query/sql/sequence-serialcol-query.sql ---------------------------------------------------------------------- diff --git a/src/test/feature/query/sql/sequence-serialcol-query.sql b/src/test/feature/query/sql/sequence-serialcol-query.sql new file mode 100644 index 0000000..cebcd37 --- /dev/null +++ b/src/test/feature/query/sql/sequence-serialcol-query.sql @@ -0,0 +1 @@ +select * from serialtest order by f2; \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/ec5a9bad/src/test/feature/query/test-prepare.cpp ---------------------------------------------------------------------- diff --git a/src/test/feature/query/test-prepare.cpp b/src/test/feature/query/test-prepare.cpp new file mode 100644 index 0000000..89b806c --- /dev/null +++ b/src/test/feature/query/test-prepare.cpp @@ -0,0 +1,72 @@ +#include <pwd.h> +#include <sys/types.h> +#include <unistd.h> +#include <vector> +#include <stdio.h> +#include <stdlib.h> +#include <errno.h> +#include <iostream> + +#include "lib/command.h" +#include "lib/common.h" +#include "lib/data-gen.h" +#include "lib/hawq-config.h" +#include "lib/sql-util.h" + +#include "gtest/gtest.h" + +class TestQueryPrepare : public ::testing::Test { + public: + TestQueryPrepare() {} + ~TestQueryPrepare() {} +}; + + +TEST_F(TestQueryPrepare, TestPrepareUniqueness) { + SQLUtility util; + util.execSQLFile("query/sql/prepare-uniqueness.sql", + "query/ans/prepare-uniqueness.ans"); +} + +TEST_F(TestQueryPrepare, TestPrepareParameters) { + SQLUtility util; + // prepare + util.execute("drop table if exists test1"); + util.execute("drop table if exists test2"); + util.execute("create table test1 (" + " unique1 int4," + " unique2 int4," + " two int4," + " four int4," + " ten int4," + " twenty int4," + " hundred int4," + " thousand int4," + " twothousand int4," + " fivethous int4," + " tenthous int4," + " odd int4," + " even int4," + " stringu1 name," + " stringu2 name," + " string4 name) with oids"); + util.execute("create table test2 (" + " name text," + " thepath path)"); + + std::string pwd = util.getTestRootPath(); + std::string cmd = "COPY test1 FROM '" + pwd + "/query/data/tenk.data'"; + std::cout << cmd << std::endl; + util.execute(cmd); + cmd = "COPY test2 FROM '" + pwd + "/query/data/streets.data'"; + std::cout << cmd << std::endl; + util.execute(cmd); + + // do test + util.execSQLFile("query/sql/prepare-parameters.sql", + "query/ans/prepare-parameters.ans"); + + // cleanup + util.execute("drop table test1"); + util.execute("drop table test2"); +} http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/ec5a9bad/src/test/feature/query/test-sequence.cpp ---------------------------------------------------------------------- diff --git a/src/test/feature/query/test-sequence.cpp b/src/test/feature/query/test-sequence.cpp new file mode 100644 index 0000000..d657dab --- /dev/null +++ b/src/test/feature/query/test-sequence.cpp @@ -0,0 +1,122 @@ +#include <pwd.h> +#include <sys/types.h> +#include <unistd.h> +#include <vector> +#include <stdio.h> +#include <stdlib.h> +#include <errno.h> +#include <iostream> + +#include "lib/command.h" +#include "lib/common.h" +#include "lib/data-gen.h" +#include "lib/hawq-config.h" +#include "lib/sql-util.h" + +#include "gtest/gtest.h" + +class TestQuerySequence : public ::testing::Test { + public: + TestQuerySequence() {} + ~TestQuerySequence() {} +}; + + +TEST_F(TestQuerySequence, TestSequenceCreateSerialColumn) { + SQLUtility util; + + util.execute("drop table if exists serialtest"); + util.execute("create table serialtest (f1 text, f2 serial)"); + util.execute("insert into serialtest values('foo')"); + util.execute("insert into serialtest values('force',100)"); + // expect failure due to null value in serial column + util.execSQLFile("query/sql/sequence-serialcol-null.sql", + "query/ans/sequence-serialcol-null.ans"); + // query table to check rows with generated and specified values in serial col + util.execSQLFile("query/sql/sequence-serialcol-query.sql", + "query/ans/sequence-serialcol-query.ans"); + + // rename the sequence for that serial column + util.execute("alter table serialtest_f2_seq rename to serialtest_f2_foo"); + util.execute("insert into serialtest values('more')"); + + // query table to check rows + util.execSQLFile("query/sql/sequence-serialcol-query.sql", + "query/ans/sequence-serialcol-query2.ans"); + + // cleanup + util.execute("drop table serialtest"); +} + +TEST_F(TestQuerySequence, TestSequenceBasicOperations) { + SQLUtility util; + + // prepare + util.execute("drop sequence if exists sequence_test"); + util.execute("create sequence sequence_test"); + + // normal nextval operation + util.query("select nextval('sequence_test'::text)", "1|\n"); + util.query("select nextval('sequence_test'::regclass)", "2|\n"); + + // setval with different params + util.query("select setval('sequence_test'::text, 32)", "32|\n"); + util.query("select nextval('sequence_test'::regclass)", "33|\n"); + + util.query("select setval('sequence_test'::text, 99, false)", "99|\n"); + util.query("select nextval('sequence_test'::regclass)", "99|\n"); + + util.query("select setval('sequence_test'::regclass, 32)", "32|\n"); + util.query("select nextval('sequence_test'::text)", "33|\n"); + + util.query("select setval('sequence_test'::regclass, 99, false)", "99|\n"); + util.query("select nextval('sequence_test'::text)", "99|\n"); + + // cleanup + util.execute("drop sequence sequence_test"); +} + +TEST_F(TestQuerySequence, TestSequenceRenaming) { + SQLUtility util; + // prepare + util.execute("drop sequence if exists foo_seq"); + util.execute("create sequence foo_seq"); + // alter sequence name + util.execute("alter table foo_seq rename to foo_seq_new"); + util.query("select * from foo_seq_new", + "foo_seq|1|1|9223372036854775807|1|1|1|f|f|\n"); + // cleanup + util.execute("drop sequence foo_seq_new"); +} + +TEST_F(TestQuerySequence, TestSequenceDependency) { + SQLUtility util; + util.execSQLFile("query/sql/sequence-dependency.sql", + "query/ans/sequence-dependency.ans"); +} + +TEST_F(TestQuerySequence, TestSequenceAlternate) { + SQLUtility util; + // prepare + util.execute("drop sequence if exists sequence_test2"); + util.execute("create sequence sequence_test2 start with 32"); + util.query("select nextval('sequence_test2')", "32|\n"); + + // alter sequence + util.execute("alter sequence sequence_test2 " + "restart with 16 " + "increment by 4 " + "maxvalue 22 " + "minvalue 5 " + "cycle"); + // check the sequence value + util.query("select nextval('sequence_test2')","16|\n"); + util.query("select nextval('sequence_test2')","20|\n"); + util.query("select nextval('sequence_test2')","5|\n"); + + // cleanup + util.execute("drop sequence sequence_test2"); +} + + +
