You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hawq.apache.org by rl...@apache.org on 2016/07/19 02:50:26 UTC
[01/14] incubator-hawq git commit: HAWQ-896. Add feature test for
create table with new test framework
Repository: incubator-hawq
Updated Branches:
refs/heads/2.0.0.0-incubating e308af60b -> 9bdad43eb
HAWQ-896. Add feature test for create table with 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/ed443c10
Tree: http://git-wip-us.apache.org/repos/asf/incubator-hawq/tree/ed443c10
Diff: http://git-wip-us.apache.org/repos/asf/incubator-hawq/diff/ed443c10
Branch: refs/heads/2.0.0.0-incubating
Commit: ed443c10a44b956dd288395a0144a8c16004583e
Parents: f05c19e
Author: YI JIN <yj...@pivotal.io>
Authored: Mon Jul 18 15:30:07 2016 +1000
Committer: rlei <rl...@pivotal.io>
Committed: Tue Jul 19 10:49:42 2016 +0800
----------------------------------------------------------------------
src/test/feature/catalog/test_create_table.cpp | 159 +++++++++++++++++++
src/test/regress/expected/create_table_test.out | 112 -------------
src/test/regress/known_good_schedule | 1 -
src/test/regress/sql/create_table_test.sql | 134 ----------------
4 files changed, 159 insertions(+), 247 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/ed443c10/src/test/feature/catalog/test_create_table.cpp
----------------------------------------------------------------------
diff --git a/src/test/feature/catalog/test_create_table.cpp b/src/test/feature/catalog/test_create_table.cpp
new file mode 100644
index 0000000..f72b2ec
--- /dev/null
+++ b/src/test/feature/catalog/test_create_table.cpp
@@ -0,0 +1,159 @@
+#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 TestCreateTable : public ::testing::Test {
+ public:
+ TestCreateTable() {}
+ ~TestCreateTable() {}
+};
+
+
+TEST_F(TestCreateTable, TestCreateTable1) {
+ hawq::test::SQLUtility util;
+ // prepare
+ util.execute("DROP TABLE IF EXISTS aggtest");
+ util.execute("DROP TABLE IF EXISTS tenk1");
+ util.execute("DROP TABLE IF EXISTS slow_emp4000");
+ util.execute("DROP TABLE IF EXISTS person");
+ util.execute("DROP TABLE IF EXISTS onek");
+ util.execute("DROP TABLE IF EXISTS emp");
+ util.execute("DROP TABLE IF EXISTS student");
+ util.execute("DROP TABLE IF EXISTS stud_emp");
+ util.execute("DROP TABLE IF EXISTS real_city");
+ util.execute("DROP TABLE IF EXISTS road");
+ util.execute("DROP TABLE IF EXISTS hash_i4_heap");
+ util.execute("DROP TABLE IF EXISTS hash_name_heap");
+ util.execute("DROP TABLE IF EXISTS hash_txt_heap");
+ util.execute("DROP TABLE IF EXISTS hash_f8_heap");
+ util.execute("DROP TABLE IF EXISTS bt_i4_heap");
+ util.execute("DROP TABLE IF EXISTS bt_name_heap");
+ util.execute("DROP TABLE IF EXISTS bt_txt_heap");
+ util.execute("DROP TABLE IF EXISTS bt_f8_heap");
+ util.execute("DROP TABLE IF EXISTS array_op_test");
+ util.execute("DROP TABLE IF EXISTS array_index_op_test");
+
+ // test
+ util.execute("CREATE TABLE aggtest (a int2, b float4)");
+
+ util.execute("CREATE TABLE tenk1 (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 slow_emp4000 (home_base box)");
+
+ util.execute("CREATE TABLE person (name text,"
+ "age int4,"
+ "location point)");
+
+ util.execute("CREATE TABLE onek (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)");
+
+ util.execute("CREATE TABLE emp (salary int4,"
+ "manager name)"
+ " INHERITS (person) WITH OIDS");
+
+ util.execute("CREATE TABLE student (gpa float8) INHERITS (person)");
+
+ util.execute("CREATE TABLE stud_emp (percent int4) INHERITS (emp, student)");
+
+ util.execute("CREATE TABLE real_city (pop int4,"
+ "cname text,"
+ "outline path)");
+
+ util.execute("CREATE TABLE road (name text,"
+ "thepath path)");
+
+
+ util.execute("CREATE TABLE hash_i4_heap (seqno int4,"
+ "random int4)");
+
+ util.execute("CREATE TABLE hash_name_heap (seqno int4,"
+ "random name)");
+
+ util.execute("CREATE TABLE hash_txt_heap (seqno int4,"
+ "random text)");
+
+ util.execute("CREATE TABLE hash_f8_heap (seqno int4,"
+ "random float8)");
+
+ util.execute("CREATE TABLE bt_i4_heap (seqno int4,"
+ "random int4)");
+
+ util.execute("CREATE TABLE bt_name_heap (seqno name,"
+ "random int4)");
+
+ util.execute("CREATE TABLE bt_txt_heap (seqno text,"
+ "random int4)");
+
+ util.execute("CREATE TABLE bt_f8_heap (seqno float8,"
+ "random int4)");
+
+ util.execute("CREATE TABLE array_op_test (seqno int4,"
+ "i int4[],"
+ "t text[])");
+
+ util.execute("CREATE TABLE array_index_op_test (seqno int4,"
+ "i int4[],"
+ "t text[])");
+
+ // cleanup
+ util.execute("DROP TABLE array_index_op_test");
+ util.execute("DROP TABLE array_op_test");
+ util.execute("DROP TABLE bt_f8_heap");
+ util.execute("DROP TABLE bt_txt_heap");
+ util.execute("DROP TABLE bt_name_heap");
+ util.execute("DROP TABLE bt_i4_heap");
+ util.execute("DROP TABLE hash_f8_heap");
+ util.execute("DROP TABLE hash_txt_heap");
+ util.execute("DROP TABLE hash_name_heap");
+ util.execute("DROP TABLE hash_i4_heap");
+ util.execute("DROP TABLE road");
+ util.execute("DROP TABLE real_city");
+ util.execute("DROP TABLE stud_emp");
+ util.execute("DROP TABLE student");
+ util.execute("DROP TABLE emp");
+ util.execute("DROP TABLE onek");
+ util.execute("DROP TABLE person");
+ util.execute("DROP TABLE slow_emp4000");
+ util.execute("DROP TABLE tenk1");
+ util.execute("DROP TABLE aggtest");
+}
+
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/ed443c10/src/test/regress/expected/create_table_test.out
----------------------------------------------------------------------
diff --git a/src/test/regress/expected/create_table_test.out b/src/test/regress/expected/create_table_test.out
deleted file mode 100755
index d744410..0000000
--- a/src/test/regress/expected/create_table_test.out
+++ /dev/null
@@ -1,112 +0,0 @@
---
--- COPY
---
-CREATE TABLE aggtest (
- a int2,
- b float4
-);
-CREATE TABLE tenk1 (
- 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;
-CREATE TABLE slow_emp4000 (
- home_base box
-);
-CREATE TABLE person (
- name text,
- age int4,
- location point
-);
-CREATE TABLE onek (
- 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
-);
-CREATE TABLE emp (
- salary int4,
- manager name
-) INHERITS (person) WITH OIDS;
-CREATE TABLE student (
- gpa float8
-) INHERITS (person);
-CREATE TABLE stud_emp (
- percent int4
-) INHERITS (emp, student);
-CREATE TABLE real_city (
- pop int4,
- cname text,
- outline path
-);
-CREATE TABLE road (
- name text,
- thepath path
-);
-CREATE TABLE hash_i4_heap (
- seqno int4,
- random int4
-);
-CREATE TABLE hash_name_heap (
- seqno int4,
- random name
-);
-CREATE TABLE hash_txt_heap (
- seqno int4,
- random text
-);
-CREATE TABLE hash_f8_heap (
- seqno int4,
- random float8
-);
-CREATE TABLE bt_i4_heap (
- seqno int4,
- random int4
-);
-CREATE TABLE bt_name_heap (
- seqno name,
- random int4
-);
-CREATE TABLE bt_txt_heap (
- seqno text,
- random int4
-);
-CREATE TABLE bt_f8_heap (
- seqno float8,
- random int4
-);
-CREATE TABLE array_op_test (
- seqno int4,
- i int4[],
- t text[]
-);
-CREATE TABLE array_index_op_test (
- seqno int4,
- i int4[],
- t text[]
-);
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/ed443c10/src/test/regress/known_good_schedule
----------------------------------------------------------------------
diff --git a/src/test/regress/known_good_schedule b/src/test/regress/known_good_schedule
index 71564b9..292573b 100755
--- a/src/test/regress/known_good_schedule
+++ b/src/test/regress/known_good_schedule
@@ -57,7 +57,6 @@ ignore: opr_sanity
ignore: geometry
ignore: horology
ignore: create_type
-test: create_table_test
test: create_table_distribution
ignore: create_function_2
test: copy
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/ed443c10/src/test/regress/sql/create_table_test.sql
----------------------------------------------------------------------
diff --git a/src/test/regress/sql/create_table_test.sql b/src/test/regress/sql/create_table_test.sql
deleted file mode 100644
index 3c42b80..0000000
--- a/src/test/regress/sql/create_table_test.sql
+++ /dev/null
@@ -1,134 +0,0 @@
---
--- COPY
---
-
-CREATE TABLE aggtest (
- a int2,
- b float4
-);
-
-CREATE TABLE tenk1 (
- 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;
-
-CREATE TABLE slow_emp4000 (
- home_base box
-);
-
-CREATE TABLE person (
- name text,
- age int4,
- location point
-);
-
-CREATE TABLE onek (
- 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
-);
-
-CREATE TABLE emp (
- salary int4,
- manager name
-) INHERITS (person) WITH OIDS;
-
-
-CREATE TABLE student (
- gpa float8
-) INHERITS (person);
-
-
-CREATE TABLE stud_emp (
- percent int4
-) INHERITS (emp, student);
-
-CREATE TABLE real_city (
- pop int4,
- cname text,
- outline path
-);
-
-CREATE TABLE road (
- name text,
- thepath path
-);
-
-CREATE TABLE hash_i4_heap (
- seqno int4,
- random int4
-);
-
-CREATE TABLE hash_name_heap (
- seqno int4,
- random name
-);
-
-CREATE TABLE hash_txt_heap (
- seqno int4,
- random text
-);
-
-CREATE TABLE hash_f8_heap (
- seqno int4,
- random float8
-);
-
-CREATE TABLE bt_i4_heap (
- seqno int4,
- random int4
-);
-
-CREATE TABLE bt_name_heap (
- seqno name,
- random int4
-);
-
-CREATE TABLE bt_txt_heap (
- seqno text,
- random int4
-);
-
-CREATE TABLE bt_f8_heap (
- seqno float8,
- random int4
-);
-
-CREATE TABLE array_op_test (
- seqno int4,
- i int4[],
- t text[]
-);
-
-CREATE TABLE array_index_op_test (
- seqno int4,
- i int4[],
- t text[]
-);
[10/14] incubator-hawq git commit: HAWQ-924. Refactor feature test
for querycontext with new test framework
Posted by rl...@apache.org.
HAWQ-924. Refactor feature test for querycontext with 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/e65d463c
Tree: http://git-wip-us.apache.org/repos/asf/incubator-hawq/tree/e65d463c
Diff: http://git-wip-us.apache.org/repos/asf/incubator-hawq/diff/e65d463c
Branch: refs/heads/2.0.0.0-incubating
Commit: e65d463c42081d63b9219d768d8a6eacbf11183d
Parents: a2a79c6
Author: ztao1987 <zh...@gmail.com>
Authored: Thu Jul 14 10:57:08 2016 +0800
Committer: rlei <rl...@pivotal.io>
Committed: Tue Jul 19 10:49:42 2016 +0800
----------------------------------------------------------------------
src/test/regress/expected/querycontext.out | 95 -------------------------
src/test/regress/known_good_schedule | 1 -
src/test/regress/sql/querycontext.sql | 67 -----------------
3 files changed, 163 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/e65d463c/src/test/regress/expected/querycontext.out
----------------------------------------------------------------------
diff --git a/src/test/regress/expected/querycontext.out b/src/test/regress/expected/querycontext.out
deleted file mode 100644
index 82d37e0..0000000
--- a/src/test/regress/expected/querycontext.out
+++ /dev/null
@@ -1,95 +0,0 @@
-set Debug_querycontext_print = true;
-set Debug_querycontext_print_tuple = true;
---disable dispatching query context
-set gp_query_context_mem_limit = 0;
-create table a (a int);
-NOTICE: Table doesn't have 'DISTRIBUTED BY' clause -- Using column named 'a' as the Greenplum Database data distribution key for this table.
-HINT: The 'DISTRIBUTED BY' clause determines the distribution of data. Make sure column(s) chosen are the optimal data distribution key to minimize skew.
-select * from a;
- a
----
-(0 rows)
-
-insert into a select generate_series(1, 10000);
-select count(1), sum(a) from a;
- count | sum
--------+----------
- 10000 | 50005000
-(1 row)
-
-truncate a;
-select * from a;
- a
----
-(0 rows)
-
-insert into a select generate_series(1, 10000);
-select count(1), sum(a) from a;
- count | sum
--------+----------
- 10000 | 50005000
-(1 row)
-
-drop table a;
---set a small value, 2K
-set gp_query_context_mem_limit = 2;
-create table a (a int);
-NOTICE: Table doesn't have 'DISTRIBUTED BY' clause -- Using column named 'a' as the Greenplum Database data distribution key for this table.
-HINT: The 'DISTRIBUTED BY' clause determines the distribution of data. Make sure column(s) chosen are the optimal data distribution key to minimize skew.
-select * from a;
- a
----
-(0 rows)
-
-insert into a select generate_series(1, 10000);
-select count(1), sum(a) from a;
- count | sum
--------+----------
- 10000 | 50005000
-(1 row)
-
-truncate a;
-select * from a;
- a
----
-(0 rows)
-
-insert into a select generate_series(1, 10000);
-select count(1), sum(a) from a;
- count | sum
--------+----------
- 10000 | 50005000
-(1 row)
-
-drop table a;
---set a small default value
-reset gp_query_context_mem_limit;
-create table a (a int);
-NOTICE: Table doesn't have 'DISTRIBUTED BY' clause -- Using column named 'a' as the Greenplum Database data distribution key for this table.
-HINT: The 'DISTRIBUTED BY' clause determines the distribution of data. Make sure column(s) chosen are the optimal data distribution key to minimize skew.
-select * from a;
- a
----
-(0 rows)
-
-insert into a select generate_series(1, 10000);
-select count(1), sum(a) from a;
- count | sum
--------+----------
- 10000 | 50005000
-(1 row)
-
-truncate a;
-select * from a;
- a
----
-(0 rows)
-
-insert into a select generate_series(1, 10000);
-select count(1), sum(a) from a;
- count | sum
--------+----------
- 10000 | 50005000
-(1 row)
-
-drop table a;
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/e65d463c/src/test/regress/known_good_schedule
----------------------------------------------------------------------
diff --git a/src/test/regress/known_good_schedule b/src/test/regress/known_good_schedule
index a402997..58608ce 100755
--- a/src/test/regress/known_good_schedule
+++ b/src/test/regress/known_good_schedule
@@ -1,7 +1,6 @@
# $PostgreSQL: pgsql/src/test/regress/serial_schedule,v 1.33 2006/08/30 23:34:22 tgl Exp $
# This should probably be in an order similar to parallel_schedule.
test: type_sanity
-test: querycontext
test: errortbl
test: goh_create_type_composite
ignore: goh_create_table
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/e65d463c/src/test/regress/sql/querycontext.sql
----------------------------------------------------------------------
diff --git a/src/test/regress/sql/querycontext.sql b/src/test/regress/sql/querycontext.sql
deleted file mode 100644
index f30c73d..0000000
--- a/src/test/regress/sql/querycontext.sql
+++ /dev/null
@@ -1,67 +0,0 @@
-set Debug_querycontext_print = true;
-set Debug_querycontext_print_tuple = true;
-
---disable dispatching query context
-set gp_query_context_mem_limit = 0;
-
-create table a (a int);
-
-select * from a;
-
-insert into a select generate_series(1, 10000);
-
-select count(1), sum(a) from a;
-
-truncate a;
-
-select * from a;
-
-insert into a select generate_series(1, 10000);
-
-select count(1), sum(a) from a;
-
-drop table a;
-
-
---set a small value, 2K
-set gp_query_context_mem_limit = 2;
-
-create table a (a int);
-
-select * from a;
-
-insert into a select generate_series(1, 10000);
-
-select count(1), sum(a) from a;
-
-truncate a;
-
-select * from a;
-
-insert into a select generate_series(1, 10000);
-
-select count(1), sum(a) from a;
-
-drop table a;
-
-
---set a small default value
-reset gp_query_context_mem_limit;
-
-create table a (a int);
-
-select * from a;
-
-insert into a select generate_series(1, 10000);
-
-select count(1), sum(a) from a;
-
-truncate a;
-
-select * from a;
-
-insert into a select generate_series(1, 10000);
-
-select count(1), sum(a) from a;
-
-drop table a;
\ No newline at end of file
[04/14] incubator-hawq git commit: HAWQ-917. Refactor feature tests
for data type check with new googletest framework
Posted by rl...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/f05c19ed/src/test/feature/catalog/ans/money.ans
----------------------------------------------------------------------
diff --git a/src/test/feature/catalog/ans/money.ans b/src/test/feature/catalog/ans/money.ans
new file mode 100755
index 0000000..907366f
--- /dev/null
+++ b/src/test/feature/catalog/ans/money.ans
@@ -0,0 +1,168 @@
+--
+-- MONEY
+--
+CREATE TABLE MONEY_TBL (f1 money);
+CREATE TABLE
+INSERT INTO MONEY_TBL(f1) VALUES (' 0.0');
+INSERT 0 1
+INSERT INTO MONEY_TBL(f1) VALUES ('1004.30 ');
+INSERT 0 1
+INSERT INTO MONEY_TBL(f1) VALUES (' -34.84 ');
+INSERT 0 1
+INSERT INTO MONEY_TBL(f1) VALUES ('123456789012345.67');
+INSERT 0 1
+-- test money over and under flow
+SELECT '12345678901234567890.12'::money = '-13639628150831692.60'::money as x;
+ x
+---
+ t
+(1 row)
+
+SELECT '123.001'::money = '123'::money as x;
+ x
+---
+ t
+(1 row)
+
+-- bad input
+INSERT INTO MONEY_TBL(f1) VALUES ('xyz');
+psql:/tmp/TestType_money.sql:20: ERROR: invalid input syntax for type money: "xyz"
+INSERT INTO MONEY_TBL(f1) VALUES ('5.0.0');
+psql:/tmp/TestType_money.sql:21: ERROR: invalid input syntax for type money: "5.0.0"
+INSERT INTO MONEY_TBL(f1) VALUES ('5 . 0');
+psql:/tmp/TestType_money.sql:22: ERROR: invalid input syntax for type money: "5 . 0"
+INSERT INTO MONEY_TBL(f1) VALUES ('5. 0');
+psql:/tmp/TestType_money.sql:23: ERROR: invalid input syntax for type money: "5. 0"
+INSERT INTO MONEY_TBL(f1) VALUES ('123 5');
+psql:/tmp/TestType_money.sql:24: ERROR: invalid input syntax for type money: "123 5"
+-- queries
+SELECT '' AS five, * FROM MONEY_TBL ORDER BY 2;
+ five | f1
+------+-------------------------
+ | -$34.84
+ | $0.00
+ | $1,004.30
+ | $123,456,789,012,345.67
+(4 rows)
+
+SELECT '' AS four, f.* FROM MONEY_TBL f WHERE f.f1 <> '1004.3' ORDER BY 2;
+ four | f1
+------+-------------------------
+ | -$34.84
+ | $0.00
+ | $123,456,789,012,345.67
+(3 rows)
+
+SELECT '' AS one, f.* FROM MONEY_TBL f WHERE f.f1 = '1004.3' ORDER BY 2;
+ one | f1
+-----+-----------
+ | $1,004.30
+(1 row)
+
+SELECT '' AS three, f.* FROM MONEY_TBL f WHERE '1004.3' > f.f1 ORDER BY 2;
+ three | f1
+-------+---------
+ | -$34.84
+ | $0.00
+(2 rows)
+
+SELECT '' AS three, f.* FROM MONEY_TBL f WHERE f.f1 < '1004.3' ORDER BY 2;
+ three | f1
+-------+---------
+ | -$34.84
+ | $0.00
+(2 rows)
+
+SELECT '' AS four, f.* FROM MONEY_TBL f WHERE '1004.3' >= f.f1 ORDER BY 2;
+ four | f1
+------+-----------
+ | -$34.84
+ | $0.00
+ | $1,004.30
+(3 rows)
+
+SELECT '' AS four, f.* FROM MONEY_TBL f WHERE f.f1 <= '1004.3' ORDER BY 2;
+ four | f1
+------+-----------
+ | -$34.84
+ | $0.00
+ | $1,004.30
+(3 rows)
+
+SELECT '' AS three, f.f1, f.f1 * '-10' AS x FROM MONEY_TBL f
+ WHERE f.f1 > '0.0' ORDER BY 2;
+ three | f1 | x
+-------+-------------------------+----------------------------
+ | $1,004.30 | -$10,043.00
+ | $123,456,789,012,345.67 | -$1,234,567,890,123,456.80
+(2 rows)
+
+SELECT '' AS three, f.f1, f.f1 + '-10' AS x FROM MONEY_TBL f
+ WHERE f.f1 > '0.0' ORDER BY 2;
+ three | f1 | x
+-------+-------------------------+-------------------------
+ | $1,004.30 | $994.30
+ | $123,456,789,012,345.67 | $123,456,789,012,335.67
+(2 rows)
+
+SELECT '' AS three, f.f1, f.f1 / '-10' AS x FROM MONEY_TBL f
+ WHERE f.f1 > '0.0' ORDER BY 2;
+ three | f1 | x
+-------+-------------------------+-------------------------
+ | $1,004.30 | -$100.43
+ | $123,456,789,012,345.67 | -$12,345,678,901,234.57
+(2 rows)
+
+SELECT '' AS three, f.f1, f.f1 - '-10' AS x FROM MONEY_TBL f
+ WHERE f.f1 > '0.0' ORDER BY 2;
+ three | f1 | x
+-------+-------------------------+-------------------------
+ | $1,004.30 | $1,014.30
+ | $123,456,789,012,345.67 | $123,456,789,012,355.67
+(2 rows)
+
+SELECT SUM(f.f1) AS x FROM MONEY_TBL f;
+ x
+-------------------------
+ $123,456,789,013,315.13
+(1 row)
+
+-- test divide by zero
+SELECT '' AS bad, f.f1 / '0.0' from MONEY_TBL f;
+psql:/tmp/TestType_money.sql:56: ERROR: division by zero
+SELECT '' AS five, * FROM MONEY_TBL ORDER BY 2;
+ five | f1
+------+-------------------------
+ | -$34.84
+ | $0.00
+ | $1,004.30
+ | $123,456,789,012,345.67
+(4 rows)
+
+-- parquet table
+CREATE TABLE MONEY_TBL_P (f1 money) with (appendonly=true, orientation=parquet);
+CREATE TABLE
+INSERT INTO MONEY_TBL_P(f1) VALUES (' 0.0');
+INSERT 0 1
+INSERT INTO MONEY_TBL_P(f1) VALUES ('1004.30 ');
+INSERT 0 1
+INSERT INTO MONEY_TBL_P(f1) VALUES (' -34.84 ');
+INSERT 0 1
+INSERT INTO MONEY_TBL_P(f1) VALUES ('123456789012345.67');
+INSERT 0 1
+SELECT f1 FROM MONEY_TBL_P f
+ ORDER BY f1;
+ f1
+-------------------------
+ -$34.84
+ $0.00
+ $1,004.30
+ $123,456,789,012,345.67
+(4 rows)
+
+SELECT sum(f1) AS x, min(f1) as y, max(f1) as z FROM MONEY_TBL_P AS f;
+ x | y | z
+-------------------------+---------+-------------------------
+ $123,456,789,013,315.13 | -$34.84 | $123,456,789,012,345.67
+(1 row)
+
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/f05c19ed/src/test/feature/catalog/ans/name.ans
----------------------------------------------------------------------
diff --git a/src/test/feature/catalog/ans/name.ans b/src/test/feature/catalog/ans/name.ans
new file mode 100755
index 0000000..23e81d8
--- /dev/null
+++ b/src/test/feature/catalog/ans/name.ans
@@ -0,0 +1,135 @@
+--
+-- NAME
+-- all inputs are silently truncated at NAMEDATALEN-1 (63) characters
+--
+-- fixed-length by reference
+SELECT name 'name string' = name 'name string' AS "True";
+ True
+------
+ t
+(1 row)
+
+SELECT name 'name string' = name 'name string ' AS "False";
+ False
+-------
+ f
+(1 row)
+
+--
+--
+--
+CREATE TABLE NAME_TBL(f1 name);
+CREATE TABLE
+INSERT INTO NAME_TBL(f1) VALUES ('1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJKLMNOPQR');
+INSERT 0 1
+INSERT INTO NAME_TBL(f1) VALUES ('1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqr');
+INSERT 0 1
+INSERT INTO NAME_TBL(f1) VALUES ('asdfghjkl;');
+INSERT 0 1
+INSERT INTO NAME_TBL(f1) VALUES ('343f%2a');
+INSERT 0 1
+INSERT INTO NAME_TBL(f1) VALUES ('d34aaasdf');
+INSERT 0 1
+INSERT INTO NAME_TBL(f1) VALUES ('');
+INSERT 0 1
+INSERT INTO NAME_TBL(f1) VALUES ('1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ');
+INSERT 0 1
+SELECT '' AS seven, * FROM NAME_TBL order by f1;
+ seven | f1
+-------+-----------------------------------------------------------------
+ |
+ | 1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJKLMNOPQ
+ | 1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJKLMNOPQ
+ | 1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopq
+ | 343f%2a
+ | asdfghjkl;
+ | d34aaasdf
+(7 rows)
+
+SELECT '' AS six, c.f1 FROM NAME_TBL c WHERE c.f1 <> '1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJKLMNOPQR' order by f1;
+ six | f1
+-----+-----------------------------------------------------------------
+ |
+ | 1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopq
+ | 343f%2a
+ | asdfghjkl;
+ | d34aaasdf
+(5 rows)
+
+SELECT '' AS one, c.f1 FROM NAME_TBL c WHERE c.f1 = '1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJKLMNOPQR' order by f1;
+ one | f1
+-----+-----------------------------------------------------------------
+ | 1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJKLMNOPQ
+ | 1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJKLMNOPQ
+(2 rows)
+
+SELECT '' AS three, c.f1 FROM NAME_TBL c WHERE c.f1 < '1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJKLMNOPQR' order by f1;
+ three | f1
+-------+----
+ |
+(1 row)
+
+SELECT '' AS four, c.f1 FROM NAME_TBL c WHERE c.f1 <= '1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJKLMNOPQR' order by f1;
+ four | f1
+------+-----------------------------------------------------------------
+ |
+ | 1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJKLMNOPQ
+ | 1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJKLMNOPQ
+(3 rows)
+
+SELECT '' AS three, c.f1 FROM NAME_TBL c WHERE c.f1 > '1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJKLMNOPQR' order by f1;
+ three | f1
+-------+-----------------------------------------------------------------
+ | 1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopq
+ | 343f%2a
+ | asdfghjkl;
+ | d34aaasdf
+(4 rows)
+
+SELECT '' AS four, c.f1 FROM NAME_TBL c WHERE c.f1 >= '1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJKLMNOPQR' order by f1;
+ four | f1
+------+-----------------------------------------------------------------
+ | 1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJKLMNOPQ
+ | 1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJKLMNOPQ
+ | 1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopq
+ | 343f%2a
+ | asdfghjkl;
+ | d34aaasdf
+(6 rows)
+
+SELECT '' AS seven, c.f1 FROM NAME_TBL c WHERE c.f1 ~ '.*' order by f1;
+ seven | f1
+-------+-----------------------------------------------------------------
+ |
+ | 1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJKLMNOPQ
+ | 1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJKLMNOPQ
+ | 1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopq
+ | 343f%2a
+ | asdfghjkl;
+ | d34aaasdf
+(7 rows)
+
+SELECT '' AS zero, c.f1 FROM NAME_TBL c WHERE c.f1 !~ '.*' order by f1;
+ zero | f1
+------+----
+(0 rows)
+
+SELECT '' AS three, c.f1 FROM NAME_TBL c WHERE c.f1 ~ '[0-9]' order by f1;
+ three | f1
+-------+-----------------------------------------------------------------
+ | 1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJKLMNOPQ
+ | 1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJKLMNOPQ
+ | 1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopq
+ | 343f%2a
+ | d34aaasdf
+(5 rows)
+
+SELECT '' AS two, c.f1 FROM NAME_TBL c WHERE c.f1 ~ '.*asdf.*' order by f1;
+ two | f1
+-----+------------
+ | asdfghjkl;
+ | d34aaasdf
+(2 rows)
+
+DROP TABLE NAME_TBL;
+DROP TABLE
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/f05c19ed/src/test/feature/catalog/ans/oid.ans
----------------------------------------------------------------------
diff --git a/src/test/feature/catalog/ans/oid.ans b/src/test/feature/catalog/ans/oid.ans
new file mode 100755
index 0000000..a8013ce
--- /dev/null
+++ b/src/test/feature/catalog/ans/oid.ans
@@ -0,0 +1,112 @@
+--
+-- OID
+--
+CREATE TABLE OID_TBL(f1 oid);
+CREATE TABLE
+INSERT INTO OID_TBL(f1) VALUES ('1234');
+INSERT 0 1
+INSERT INTO OID_TBL(f1) VALUES ('1235');
+INSERT 0 1
+INSERT INTO OID_TBL(f1) VALUES ('987');
+INSERT 0 1
+INSERT INTO OID_TBL(f1) VALUES ('-1040');
+INSERT 0 1
+INSERT INTO OID_TBL(f1) VALUES ('99999999');
+INSERT 0 1
+INSERT INTO OID_TBL(f1) VALUES ('5 ');
+INSERT 0 1
+INSERT INTO OID_TBL(f1) VALUES (' 10 ');
+INSERT 0 1
+-- leading/trailing hard tab is also allowed
+INSERT INTO OID_TBL(f1) VALUES (' 15 ');
+INSERT 0 1
+-- bad inputs
+INSERT INTO OID_TBL(f1) VALUES ('');
+psql:/tmp/TestType_oid.sql:21: ERROR: invalid input syntax for type oid: ""
+INSERT INTO OID_TBL(f1) VALUES (' ');
+psql:/tmp/TestType_oid.sql:22: ERROR: invalid input syntax for type oid: " "
+INSERT INTO OID_TBL(f1) VALUES ('asdfasd');
+psql:/tmp/TestType_oid.sql:23: ERROR: invalid input syntax for type oid: "asdfasd"
+INSERT INTO OID_TBL(f1) VALUES ('99asdfasd');
+psql:/tmp/TestType_oid.sql:24: ERROR: invalid input syntax for type oid: "99asdfasd"
+INSERT INTO OID_TBL(f1) VALUES ('5 d');
+psql:/tmp/TestType_oid.sql:25: ERROR: invalid input syntax for type oid: "5 d"
+INSERT INTO OID_TBL(f1) VALUES (' 5d');
+psql:/tmp/TestType_oid.sql:26: ERROR: invalid input syntax for type oid: " 5d"
+INSERT INTO OID_TBL(f1) VALUES ('5 5');
+psql:/tmp/TestType_oid.sql:27: ERROR: invalid input syntax for type oid: "5 5"
+INSERT INTO OID_TBL(f1) VALUES (' - 500');
+psql:/tmp/TestType_oid.sql:28: ERROR: invalid input syntax for type oid: " - 500"
+INSERT INTO OID_TBL(f1) VALUES ('32958209582039852935');
+psql:/tmp/TestType_oid.sql:29: ERROR: value "32958209582039852935" is out of range for type oid
+INSERT INTO OID_TBL(f1) VALUES ('-23582358720398502385');
+psql:/tmp/TestType_oid.sql:30: ERROR: value "-23582358720398502385" is out of range for type oid
+SELECT '' AS six, * FROM OID_TBL order by 1, 2;
+ six | f1
+-----+------------
+ | 5
+ | 10
+ | 15
+ | 987
+ | 1234
+ | 1235
+ | 99999999
+ | 4294966256
+(8 rows)
+
+SELECT '' AS one, o.* FROM OID_TBL o WHERE o.f1 = 1234 order by 1, 2;
+ one | f1
+-----+------
+ | 1234
+(1 row)
+
+SELECT '' AS five, o.* FROM OID_TBL o WHERE o.f1 <> '1234' order by 1,2;
+ five | f1
+------+------------
+ | 5
+ | 10
+ | 15
+ | 987
+ | 1235
+ | 99999999
+ | 4294966256
+(7 rows)
+
+SELECT '' AS three, o.* FROM OID_TBL o WHERE o.f1 <= '1234' order by 1,2;
+ three | f1
+-------+------
+ | 5
+ | 10
+ | 15
+ | 987
+ | 1234
+(5 rows)
+
+SELECT '' AS two, o.* FROM OID_TBL o WHERE o.f1 < '1234' order by 1,2;
+ two | f1
+-----+-----
+ | 5
+ | 10
+ | 15
+ | 987
+(4 rows)
+
+SELECT '' AS four, o.* FROM OID_TBL o WHERE o.f1 >= '1234' order by 1,2;
+ four | f1
+------+------------
+ | 1234
+ | 1235
+ | 99999999
+ | 4294966256
+(4 rows)
+
+SELECT '' AS three, o.* FROM OID_TBL o WHERE o.f1 > '1234' order by 1,2;
+ three | f1
+-------+------------
+ | 1235
+ | 99999999
+ | 4294966256
+(3 rows)
+
+DROP TABLE OID_TBL;
+DROP TABLE
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/f05c19ed/src/test/feature/catalog/ans/text.ans
----------------------------------------------------------------------
diff --git a/src/test/feature/catalog/ans/text.ans b/src/test/feature/catalog/ans/text.ans
new file mode 100755
index 0000000..9507957
--- /dev/null
+++ b/src/test/feature/catalog/ans/text.ans
@@ -0,0 +1,28 @@
+--
+-- TEXT
+--
+SELECT text 'this is a text string' = text 'this is a text string' AS true;
+ true
+------
+ t
+(1 row)
+
+SELECT text 'this is a text string' = text 'this is a text strin' AS false;
+ false
+-------
+ f
+(1 row)
+
+CREATE TABLE TEXT_TBL (f1 text);
+CREATE TABLE
+INSERT INTO TEXT_TBL VALUES ('doh!');
+INSERT 0 1
+INSERT INTO TEXT_TBL VALUES ('hi de ho neighbor');
+INSERT 0 1
+SELECT '' AS two, * FROM TEXT_TBL order by f1;
+ two | f1
+-----+-------------------
+ | doh!
+ | hi de ho neighbor
+(2 rows)
+
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/f05c19ed/src/test/feature/catalog/ans/time.ans
----------------------------------------------------------------------
diff --git a/src/test/feature/catalog/ans/time.ans b/src/test/feature/catalog/ans/time.ans
new file mode 100755
index 0000000..ddeea98
--- /dev/null
+++ b/src/test/feature/catalog/ans/time.ans
@@ -0,0 +1,97 @@
+--
+-- TIME
+--
+CREATE TABLE TIME_TBL (f1 time(2));
+CREATE TABLE
+INSERT INTO TIME_TBL VALUES ('00:00');
+INSERT 0 1
+INSERT INTO TIME_TBL VALUES ('01:00');
+INSERT 0 1
+-- as of 7.4, timezone spec should be accepted and ignored
+INSERT INTO TIME_TBL VALUES ('02:03 PST');
+INSERT 0 1
+INSERT INTO TIME_TBL VALUES ('11:59 EDT');
+INSERT 0 1
+INSERT INTO TIME_TBL VALUES ('12:00');
+INSERT 0 1
+INSERT INTO TIME_TBL VALUES ('12:01');
+INSERT 0 1
+INSERT INTO TIME_TBL VALUES ('23:59');
+INSERT 0 1
+INSERT INTO TIME_TBL VALUES ('11:59:59.99 PM');
+INSERT 0 1
+INSERT INTO TIME_TBL VALUES ('2003-03-07 15:36:39 America/New_York');
+INSERT 0 1
+INSERT INTO TIME_TBL VALUES ('2003-07-07 15:36:39 America/New_York');
+INSERT 0 1
+-- this should fail (the timezone offset is not known)
+INSERT INTO TIME_TBL VALUES ('15:36:39 America/New_York');
+psql:/tmp/TestType_time.sql:23: ERROR: invalid input syntax for type time: "15:36:39 America/New_York"
+SELECT f1 AS "Time" FROM TIME_TBL ORDER BY 1;
+ Time
+-------------
+ 00:00:00
+ 01:00:00
+ 02:03:00
+ 11:59:00
+ 12:00:00
+ 12:01:00
+ 15:36:39
+ 15:36:39
+ 23:59:00
+ 23:59:59.99
+(10 rows)
+
+SELECT f1 AS "Three" FROM TIME_TBL WHERE f1 < '05:06:07' ORDER BY 1;
+ Three
+----------
+ 00:00:00
+ 01:00:00
+ 02:03:00
+(3 rows)
+
+SELECT f1 AS "Five" FROM TIME_TBL WHERE f1 > '05:06:07' ORDER BY 1;
+ Five
+-------------
+ 11:59:00
+ 12:00:00
+ 12:01:00
+ 15:36:39
+ 15:36:39
+ 23:59:00
+ 23:59:59.99
+(7 rows)
+
+SELECT f1 AS "None" FROM TIME_TBL WHERE f1 < '00:00' ORDER BY 1;
+ None
+------
+(0 rows)
+
+SELECT f1 AS "Eight" FROM TIME_TBL WHERE f1 >= '00:00' ORDER BY 1;
+ Eight
+-------------
+ 00:00:00
+ 01:00:00
+ 02:03:00
+ 11:59:00
+ 12:00:00
+ 12:01:00
+ 15:36:39
+ 15:36:39
+ 23:59:00
+ 23:59:59.99
+(10 rows)
+
+--
+-- TIME simple math
+--
+-- We now make a distinction between time and intervals,
+-- and adding two times together makes no sense at all.
+-- Leave in one query to show that it is rejected,
+-- and do the rest of the testing in horology.sql
+-- where we do mixed-type arithmetic. - thomas 2000-12-02
+SELECT f1 + time '00:01' AS "Illegal" FROM TIME_TBL;
+psql:/tmp/TestType_time.sql:44: ERROR: operator is not unique: time without time zone + time without time zone
+LINE 1: SELECT f1 + time '00:01' AS "Illegal" FROM TIME_TBL;
+ ^
+HINT: Could not choose a best candidate operator. You may need to add explicit type casts.
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/f05c19ed/src/test/feature/catalog/ans/type_sanity.ans
----------------------------------------------------------------------
diff --git a/src/test/feature/catalog/ans/type_sanity.ans b/src/test/feature/catalog/ans/type_sanity.ans
new file mode 100755
index 0000000..518e3cd
--- /dev/null
+++ b/src/test/feature/catalog/ans/type_sanity.ans
@@ -0,0 +1,282 @@
+--
+-- TYPE_SANITY
+-- Sanity checks for common errors in making type-related system tables:
+-- pg_type, pg_class, pg_attribute.
+--
+-- None of the SELECTs here should ever find any matching entries,
+-- so the expected output is easy to maintain ;-).
+-- A test failure indicates someone messed up an entry in the system tables.
+--
+-- NB: we assume the oidjoins test will have caught any dangling links,
+-- that is OID or REGPROC fields that are not zero and do not match some
+-- row in the linked-to table. However, if we want to enforce that a link
+-- field can't be 0, we have to check it here.
+-- **************** pg_type ****************
+-- Look for illegal values in pg_type fields.
+SELECT p1.oid, p1.typname
+FROM pg_type as p1
+WHERE p1.typnamespace = 0 OR
+ (p1.typlen <= 0 AND p1.typlen != -1 AND p1.typlen != -2) OR
+ (p1.typtype not in ('b', 'c', 'd', 'p')) OR
+ NOT p1.typisdefined OR
+ (p1.typalign not in ('c', 's', 'i', 'd')) OR
+ (p1.typstorage not in ('p', 'x', 'e', 'm'));
+ oid | typname
+-----+---------
+(0 rows)
+
+-- Look for "pass by value" types that can't be passed by value.
+SELECT p1.oid, p1.typname
+FROM pg_type as p1
+WHERE p1.typbyval AND
+ (p1.typlen != 1 OR p1.typalign != 'c') AND
+ (p1.typlen != 2 OR p1.typalign != 's') AND
+ (p1.typlen != 4 OR p1.typalign != 'i') AND
+ (p1.typlen != 8 OR p1.typalign != 'd') ;
+ oid | typname
+-----+---------
+(0 rows)
+
+-- Look for "toastable" types that aren't varlena.
+SELECT p1.oid, p1.typname
+FROM pg_type as p1
+WHERE p1.typstorage != 'p' AND
+ (p1.typbyval OR p1.typlen != -1);
+ oid | typname
+-----+---------
+(0 rows)
+
+-- Look for complex types that do not have a typrelid entry,
+-- or basic types that do.
+SELECT p1.oid, p1.typname
+FROM pg_type as p1
+WHERE (p1.typtype = 'c' AND p1.typrelid = 0) OR
+ (p1.typtype != 'c' AND p1.typrelid != 0);
+ oid | typname
+-----+---------
+(0 rows)
+
+-- Look for basic types that don't have an array type.
+-- NOTE: as of 8.0, this check finds smgr and unknown.
+SELECT p1.oid, p1.typname
+FROM pg_type as p1
+WHERE p1.typtype in ('b') AND p1.typname NOT LIKE E'\\_%' AND NOT EXISTS
+ (SELECT 1 FROM pg_type as p2
+ WHERE p2.typname = ('_' || p1.typname)::name AND
+ p2.typelem = p1.oid);
+ oid | typname
+-----+---------
+ 210 | smgr
+ 705 | unknown
+(2 rows)
+
+-- Text conversion routines must be provided.
+SELECT p1.oid, p1.typname
+FROM pg_type as p1
+WHERE (p1.typinput = 0 OR p1.typoutput = 0);
+ oid | typname
+-----+---------
+(0 rows)
+
+-- Check for bogus typinput routines
+SELECT p1.oid, p1.typname, p2.oid, p2.proname
+FROM pg_type AS p1, pg_proc AS p2
+WHERE p1.typinput = p2.oid AND p1.typtype in ('b', 'p') AND NOT
+ ((p2.pronargs = 1 AND p2.proargtypes[0] = 'cstring'::regtype) OR
+ (p2.pronargs = 3 AND p2.proargtypes[0] = 'cstring'::regtype AND
+ p2.proargtypes[1] = 'oid'::regtype AND
+ p2.proargtypes[2] = 'int4'::regtype));
+ oid | typname | oid | proname
+-----+---------+-----+---------
+(0 rows)
+
+-- As of 8.0, this check finds refcursor, which is borrowing
+-- other types' I/O routines
+SELECT p1.oid, p1.typname, p2.oid, p2.proname
+FROM pg_type AS p1, pg_proc AS p2
+WHERE p1.typinput = p2.oid AND p1.typtype in ('b', 'p') AND NOT
+ (p1.typelem != 0 AND p1.typlen < 0) AND NOT
+ (p2.prorettype = p1.oid AND NOT p2.proretset)
+ORDER BY 1;
+ oid | typname | oid | proname
+------+-----------+-----+---------
+ 1790 | refcursor | 46 | textin
+(1 row)
+
+-- Varlena array types will point to array_in
+-- Exception as of 8.1: int2vector and oidvector have their own I/O routines
+SELECT p1.oid, p1.typname, p2.oid, p2.proname
+FROM pg_type AS p1, pg_proc AS p2
+WHERE p1.typinput = p2.oid AND p1.typtype in ('b', 'p') AND
+ (p1.typelem != 0 AND p1.typlen < 0) AND NOT
+ (p2.oid = 'array_in'::regproc)
+ORDER BY 1;
+ oid | typname | oid | proname
+-----+------------+-----+--------------
+ 22 | int2vector | 40 | int2vectorin
+ 30 | oidvector | 54 | oidvectorin
+(2 rows)
+
+-- Check for bogus typoutput routines
+-- As of 8.0, this check finds refcursor, which is borrowing
+-- other types' I/O routines
+SELECT p1.oid, p1.typname, p2.oid, p2.proname
+FROM pg_type AS p1, pg_proc AS p2
+WHERE p1.typoutput = p2.oid AND p1.typtype in ('b', 'p') AND NOT
+ (p2.pronargs = 1 AND
+ (p2.proargtypes[0] = p1.oid OR
+ (p2.oid = 'array_out'::regproc AND
+ p1.typelem != 0 AND p1.typlen = -1)))
+ORDER BY 1;
+ oid | typname | oid | proname
+------+-----------+-----+---------
+ 1790 | refcursor | 47 | textout
+(1 row)
+
+SELECT p1.oid, p1.typname, p2.oid, p2.proname
+FROM pg_type AS p1, pg_proc AS p2
+WHERE p1.typoutput = p2.oid AND p1.typtype in ('b', 'p') AND NOT
+ (p2.prorettype = 'cstring'::regtype AND NOT p2.proretset);
+ oid | typname | oid | proname
+-----+---------+-----+---------
+(0 rows)
+
+-- Check for bogus typreceive routines
+SELECT p1.oid, p1.typname, p2.oid, p2.proname
+FROM pg_type AS p1, pg_proc AS p2
+WHERE p1.typreceive = p2.oid AND p1.typtype in ('b', 'p') AND NOT
+ ((p2.pronargs = 1 AND p2.proargtypes[0] = 'internal'::regtype) OR
+ (p2.pronargs = 3 AND p2.proargtypes[0] = 'internal'::regtype AND
+ p2.proargtypes[1] = 'oid'::regtype AND
+ p2.proargtypes[2] = 'int4'::regtype));
+ oid | typname | oid | proname
+-----+---------+-----+---------
+(0 rows)
+
+-- As of 7.4, this check finds refcursor, which is borrowing
+-- other types' I/O routines
+SELECT p1.oid, p1.typname, p2.oid, p2.proname
+FROM pg_type AS p1, pg_proc AS p2
+WHERE p1.typreceive = p2.oid AND p1.typtype in ('b', 'p') AND NOT
+ (p1.typelem != 0 AND p1.typlen < 0) AND NOT
+ (p2.prorettype = p1.oid AND NOT p2.proretset)
+ORDER BY 1;
+ oid | typname | oid | proname
+------+-----------+------+----------
+ 1790 | refcursor | 2414 | textrecv
+(1 row)
+
+-- Varlena array types will point to array_recv
+-- Exception as of 8.1: int2vector and oidvector have their own I/O routines
+SELECT p1.oid, p1.typname, p2.oid, p2.proname
+FROM pg_type AS p1, pg_proc AS p2
+WHERE p1.typreceive = p2.oid AND p1.typtype in ('b', 'p') AND
+ (p1.typelem != 0 AND p1.typlen < 0) AND NOT
+ (p2.oid = 'array_recv'::regproc)
+ORDER BY 1;
+ oid | typname | oid | proname
+-----+------------+------+----------------
+ 22 | int2vector | 2410 | int2vectorrecv
+ 30 | oidvector | 2420 | oidvectorrecv
+(2 rows)
+
+-- Array types should have same typdelim as their element types
+SELECT p1.oid, p1.typname, p2.oid, p2.typname
+FROM pg_type p1, pg_type p2
+WHERE p1.typelem = p2.oid and p1.typdelim != p2.typdelim
+ AND p1.typname like E'\\_%';
+ oid | typname | oid | typname
+-----+---------+-----+---------
+(0 rows)
+
+-- Suspicious if typreceive doesn't take same number of args as typinput
+SELECT p1.oid, p1.typname, p2.oid, p2.proname, p3.oid, p3.proname
+FROM pg_type AS p1, pg_proc AS p2, pg_proc AS p3
+WHERE p1.typinput = p2.oid AND p1.typreceive = p3.oid AND
+ p2.pronargs != p3.pronargs;
+ oid | typname | oid | proname | oid | proname
+-----+---------+-----+---------+-----+---------
+(0 rows)
+
+-- Check for bogus typsend routines
+-- As of 7.4, this check finds refcursor, which is borrowing
+-- other types' I/O routines
+SELECT p1.oid, p1.typname, p2.oid, p2.proname
+FROM pg_type AS p1, pg_proc AS p2
+WHERE p1.typsend = p2.oid AND p1.typtype in ('b', 'p') AND NOT
+ (p2.pronargs = 1 AND
+ (p2.proargtypes[0] = p1.oid OR
+ (p2.oid = 'array_send'::regproc AND
+ p1.typelem != 0 AND p1.typlen = -1)))
+ORDER BY 1;
+ oid | typname | oid | proname
+------+-----------+------+----------
+ 1790 | refcursor | 2415 | textsend
+(1 row)
+
+SELECT p1.oid, p1.typname, p2.oid, p2.proname
+FROM pg_type AS p1, pg_proc AS p2
+WHERE p1.typsend = p2.oid AND p1.typtype in ('b', 'p') AND NOT
+ (p2.prorettype = 'bytea'::regtype AND NOT p2.proretset);
+ oid | typname | oid | proname
+-----+---------+-----+---------
+(0 rows)
+
+-- **************** pg_class ****************
+-- Look for illegal values in pg_class fields
+SELECT p1.oid, p1.relname
+FROM pg_class as p1
+WHERE p1.relkind NOT IN ('r', 'i', 'S', 'u', 't', 'o', 'b', 'v', 'c');
+ oid | relname
+-----+---------
+(0 rows)
+
+-- Indexes should have an access method, others not.
+SELECT p1.oid, p1.relname
+FROM pg_class as p1
+WHERE (p1.relkind = 'i' AND p1.relam = 0) OR
+ (p1.relkind != 'i' AND p1.relam != 0);
+ oid | relname
+-----+---------
+(0 rows)
+
+-- **************** pg_attribute ****************
+-- Look for illegal values in pg_attribute fields
+SELECT p1.attrelid, p1.attname
+FROM pg_attribute as p1
+WHERE p1.attrelid = 0 OR p1.atttypid = 0 OR p1.attnum = 0 OR
+ p1.attcacheoff != -1 OR p1.attinhcount < 0 OR
+ (p1.attinhcount = 0 AND NOT p1.attislocal);
+ attrelid | attname
+----------+---------
+(0 rows)
+
+-- Cross-check attnum against parent relation
+SELECT p1.attrelid, p1.attname, p2.oid, p2.relname
+FROM pg_attribute AS p1, pg_class AS p2
+WHERE p1.attrelid = p2.oid AND p1.attnum > p2.relnatts;
+ attrelid | attname | oid | relname
+----------+---------+-----+---------
+(0 rows)
+
+-- Detect missing pg_attribute entries: should have as many non-system
+-- attributes as parent relation expects
+SELECT p1.oid, p1.relname
+FROM pg_class AS p1
+WHERE p1.relnatts != (SELECT count(*) FROM pg_attribute AS p2
+ WHERE p2.attrelid = p1.oid AND p2.attnum > 0);
+ oid | relname
+-----+---------
+(0 rows)
+
+-- Cross-check against pg_type entry
+-- NOTE: we allow attstorage to be 'plain' even when typstorage is not;
+-- this is mainly for toast tables.
+-- UNDONE: Turn this off until we can figure out why the new system columns cause a bunch of rows to be generated here???
+-- SELECT p1.attrelid, p1.attname, p2.oid, p2.typname
+-- FROM pg_attribute AS p1, pg_type AS p2
+-- WHERE p1.atttypid = p2.oid AND
+-- (p1.attlen != p2.typlen OR
+-- p1.attalign != p2.typalign OR
+-- p1.attbyval != p2.typbyval OR
+-- (p1.attstorage != p2.typstorage AND p1.attstorage != 'p'));
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/f05c19ed/src/test/feature/catalog/ans/varchar.ans
----------------------------------------------------------------------
diff --git a/src/test/feature/catalog/ans/varchar.ans b/src/test/feature/catalog/ans/varchar.ans
new file mode 100755
index 0000000..1c10b15
--- /dev/null
+++ b/src/test/feature/catalog/ans/varchar.ans
@@ -0,0 +1,125 @@
+--
+-- VARCHAR
+--
+CREATE TABLE VARCHAR_TBL(f1 varchar(1));
+CREATE TABLE
+INSERT INTO VARCHAR_TBL (f1) VALUES ('a');
+INSERT 0 1
+INSERT INTO VARCHAR_TBL (f1) VALUES ('A');
+INSERT 0 1
+-- any of the following three input formats are acceptable
+INSERT INTO VARCHAR_TBL (f1) VALUES ('1');
+INSERT 0 1
+INSERT INTO VARCHAR_TBL (f1) VALUES (2);
+INSERT 0 1
+INSERT INTO VARCHAR_TBL (f1) VALUES ('3');
+INSERT 0 1
+-- zero-length char
+INSERT INTO VARCHAR_TBL (f1) VALUES ('');
+INSERT 0 1
+-- try varchar's of greater than 1 length
+INSERT INTO VARCHAR_TBL (f1) VALUES ('cd');
+psql:/tmp/TestType_varchar.sql:25: ERROR: value too long for type character varying(1)
+INSERT INTO VARCHAR_TBL (f1) VALUES ('c ');
+INSERT 0 1
+SELECT '' AS seven, * FROM VARCHAR_TBL;
+ seven | f1
+-------+----
+ | a
+ | A
+ | 1
+ | 2
+ | 3
+ |
+ | c
+(7 rows)
+
+SELECT '' AS six, c.*
+ FROM VARCHAR_TBL c
+ WHERE c.f1 <> 'a';
+ six | f1
+-----+----
+ | A
+ | 1
+ | 2
+ | 3
+ |
+ | c
+(6 rows)
+
+SELECT '' AS one, c.*
+ FROM VARCHAR_TBL c
+ WHERE c.f1 = 'a';
+ one | f1
+-----+----
+ | a
+(1 row)
+
+SELECT '' AS five, c.*
+ FROM VARCHAR_TBL c
+ WHERE c.f1 < 'a';
+ five | f1
+------+----
+ | A
+ | 1
+ | 2
+ | 3
+ |
+(5 rows)
+
+SELECT '' AS six, c.*
+ FROM VARCHAR_TBL c
+ WHERE c.f1 <= 'a';
+ six | f1
+-----+----
+ | a
+ | A
+ | 1
+ | 2
+ | 3
+ |
+(6 rows)
+
+SELECT '' AS one, c.*
+ FROM VARCHAR_TBL c
+ WHERE c.f1 > 'a';
+ one | f1
+-----+----
+ | c
+(1 row)
+
+SELECT '' AS two, c.*
+ FROM VARCHAR_TBL c
+ WHERE c.f1 >= 'a';
+ two | f1
+-----+----
+ | a
+ | c
+(2 rows)
+
+DROP TABLE VARCHAR_TBL;
+DROP TABLE
+--
+-- Now test longer arrays of char
+--
+CREATE TABLE VARCHAR_TBL(f1 varchar(4));
+CREATE TABLE
+INSERT INTO VARCHAR_TBL (f1) VALUES ('a');
+INSERT 0 1
+INSERT INTO VARCHAR_TBL (f1) VALUES ('ab');
+INSERT 0 1
+INSERT INTO VARCHAR_TBL (f1) VALUES ('abcd');
+INSERT 0 1
+INSERT INTO VARCHAR_TBL (f1) VALUES ('abcde');
+psql:/tmp/TestType_varchar.sql:66: ERROR: value too long for type character varying(4)
+INSERT INTO VARCHAR_TBL (f1) VALUES ('abcd ');
+INSERT 0 1
+SELECT '' AS four, * FROM VARCHAR_TBL;
+ four | f1
+------+------
+ | a
+ | ab
+ | abcd
+ | abcd
+(4 rows)
+
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/f05c19ed/src/test/feature/catalog/sql/boolean.sql
----------------------------------------------------------------------
diff --git a/src/test/feature/catalog/sql/boolean.sql b/src/test/feature/catalog/sql/boolean.sql
new file mode 100644
index 0000000..4282c15
--- /dev/null
+++ b/src/test/feature/catalog/sql/boolean.sql
@@ -0,0 +1,149 @@
+--
+-- BOOLEAN
+--
+
+--
+-- sanity check - if this fails go insane!
+--
+SELECT 1 AS one;
+
+
+-- ******************testing built-in type bool********************
+
+-- check bool type-casting as well as and, or, not in qualifications--
+
+SELECT bool 't' AS true;
+
+SELECT bool 'f' AS false;
+
+SELECT bool 't' or bool 'f' AS true;
+
+SELECT bool 't' and bool 'f' AS false;
+
+SELECT not bool 'f' AS true;
+
+SELECT bool 't' = bool 'f' AS false;
+
+SELECT bool 't' <> bool 'f' AS true;
+
+
+CREATE TABLE BOOLTBL1 (f1 bool);
+
+INSERT INTO BOOLTBL1 (f1) VALUES (bool 't');
+
+INSERT INTO BOOLTBL1 (f1) VALUES (bool 'True');
+
+INSERT INTO BOOLTBL1 (f1) VALUES (bool 'true');
+
+
+-- BOOLTBL1 should be full of true's at this point
+SELECT '' AS t_3, BOOLTBL1.* FROM BOOLTBL1;
+
+
+SELECT '' AS t_3, BOOLTBL1.*
+ FROM BOOLTBL1
+ WHERE f1 = bool 'true';
+
+
+SELECT '' AS t_3, BOOLTBL1.*
+ FROM BOOLTBL1
+ WHERE f1 <> bool 'false';
+
+SELECT '' AS zero, BOOLTBL1.*
+ FROM BOOLTBL1
+ WHERE booleq(bool 'false', f1);
+
+INSERT INTO BOOLTBL1 (f1) VALUES (bool 'f');
+
+SELECT '' AS f_1, BOOLTBL1.*
+ FROM BOOLTBL1
+ WHERE f1 = bool 'false';
+
+
+CREATE TABLE BOOLTBL2 (f1 bool);
+
+INSERT INTO BOOLTBL2 (f1) VALUES (bool 'f');
+
+INSERT INTO BOOLTBL2 (f1) VALUES (bool 'false');
+
+INSERT INTO BOOLTBL2 (f1) VALUES (bool 'False');
+
+INSERT INTO BOOLTBL2 (f1) VALUES (bool 'FALSE');
+
+-- This is now an invalid expression
+-- For pre-v6.3 this evaluated to false - thomas 1997-10-23
+INSERT INTO BOOLTBL2 (f1)
+ VALUES (bool 'XXX');
+
+-- BOOLTBL2 should be full of false's at this point
+SELECT '' AS f_4, BOOLTBL2.* FROM BOOLTBL2;
+
+
+SELECT '' AS tf_12, BOOLTBL1.*, BOOLTBL2.*
+ FROM BOOLTBL1, BOOLTBL2
+ WHERE BOOLTBL2.f1 <> BOOLTBL1.f1;
+
+
+SELECT '' AS tf_12, BOOLTBL1.*, BOOLTBL2.*
+ FROM BOOLTBL1, BOOLTBL2
+ WHERE boolne(BOOLTBL2.f1,BOOLTBL1.f1);
+
+
+SELECT '' AS ff_4, BOOLTBL1.*, BOOLTBL2.*
+ FROM BOOLTBL1, BOOLTBL2
+ WHERE BOOLTBL2.f1 = BOOLTBL1.f1 and BOOLTBL1.f1 = bool 'false' ;
+
+
+SELECT '' AS tf_12_ff_4, BOOLTBL1.*, BOOLTBL2.*
+ FROM BOOLTBL1, BOOLTBL2
+ WHERE BOOLTBL2.f1 = BOOLTBL1.f1 or BOOLTBL1.f1 = bool 'true'
+ ORDER BY BOOLTBL1.f1, BOOLTBL2.f1 ;
+
+--
+-- SQL92 syntax
+-- Try all combinations to ensure that we get nothing when we expect nothing
+-- - thomas 2000-01-04
+--
+
+SELECT '' AS "True", f1
+ FROM BOOLTBL1
+ WHERE f1 IS TRUE;
+
+SELECT '' AS "Not False", f1
+ FROM BOOLTBL1
+ WHERE f1 IS NOT FALSE;
+
+SELECT '' AS "False", f1
+ FROM BOOLTBL1
+ WHERE f1 IS FALSE;
+
+SELECT '' AS "Not True", f1
+ FROM BOOLTBL1
+ WHERE f1 IS NOT TRUE;
+
+SELECT '' AS "True", f1
+ FROM BOOLTBL2
+ WHERE f1 IS TRUE;
+
+SELECT '' AS "Not False", f1
+ FROM BOOLTBL2
+ WHERE f1 IS NOT FALSE;
+
+SELECT '' AS "False", f1
+ FROM BOOLTBL2
+ WHERE f1 IS FALSE;
+
+SELECT '' AS "Not True", f1
+ FROM BOOLTBL2
+ WHERE f1 IS NOT TRUE;
+
+--
+-- Clean up
+-- Many tables are retained by the regression test, but these do not seem
+-- particularly useful so just get rid of them for now.
+-- - thomas 1997-11-30
+--
+
+DROP TABLE BOOLTBL1;
+
+DROP TABLE BOOLTBL2;
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/f05c19ed/src/test/feature/catalog/sql/char.sql
----------------------------------------------------------------------
diff --git a/src/test/feature/catalog/sql/char.sql b/src/test/feature/catalog/sql/char.sql
new file mode 100644
index 0000000..fcaef7e
--- /dev/null
+++ b/src/test/feature/catalog/sql/char.sql
@@ -0,0 +1,75 @@
+--
+-- CHAR
+--
+
+-- fixed-length by value
+-- internally passed by value if <= 4 bytes in storage
+
+SELECT char 'c' = char 'c' AS true;
+
+--
+-- Build a table for testing
+--
+
+CREATE TABLE CHAR_TBL(f1 char);
+
+INSERT INTO CHAR_TBL (f1) VALUES ('a');
+
+INSERT INTO CHAR_TBL (f1) VALUES ('A');
+
+-- any of the following three input formats are acceptable
+INSERT INTO CHAR_TBL (f1) VALUES ('1');
+
+INSERT INTO CHAR_TBL (f1) VALUES (2);
+
+INSERT INTO CHAR_TBL (f1) VALUES ('3');
+
+-- zero-length char
+INSERT INTO CHAR_TBL (f1) VALUES ('');
+
+-- try char's of greater than 1 length
+INSERT INTO CHAR_TBL (f1) VALUES ('cd');
+INSERT INTO CHAR_TBL (f1) VALUES ('c ');
+
+
+SELECT '' AS seven, * FROM CHAR_TBL;
+
+SELECT '' AS six, c.*
+ FROM CHAR_TBL c
+ WHERE c.f1 <> 'a';
+
+SELECT '' AS one, c.*
+ FROM CHAR_TBL c
+ WHERE c.f1 = 'a';
+
+SELECT '' AS five, c.*
+ FROM CHAR_TBL c
+ WHERE c.f1 < 'a';
+
+SELECT '' AS six, c.*
+ FROM CHAR_TBL c
+ WHERE c.f1 <= 'a';
+
+SELECT '' AS one, c.*
+ FROM CHAR_TBL c
+ WHERE c.f1 > 'a';
+
+SELECT '' AS two, c.*
+ FROM CHAR_TBL c
+ WHERE c.f1 >= 'a';
+
+DROP TABLE CHAR_TBL;
+
+--
+-- Now test longer arrays of char
+--
+
+CREATE TABLE CHAR_TBL(f1 char(4));
+
+INSERT INTO CHAR_TBL (f1) VALUES ('a');
+INSERT INTO CHAR_TBL (f1) VALUES ('ab');
+INSERT INTO CHAR_TBL (f1) VALUES ('abcd');
+INSERT INTO CHAR_TBL (f1) VALUES ('abcde');
+INSERT INTO CHAR_TBL (f1) VALUES ('abcd ');
+
+SELECT '' AS four, * FROM CHAR_TBL;
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/f05c19ed/src/test/feature/catalog/sql/date.sql
----------------------------------------------------------------------
diff --git a/src/test/feature/catalog/sql/date.sql b/src/test/feature/catalog/sql/date.sql
new file mode 100644
index 0000000..7ed6e15
--- /dev/null
+++ b/src/test/feature/catalog/sql/date.sql
@@ -0,0 +1,271 @@
+--
+-- DATE
+--
+
+CREATE TABLE DATE_TBL (f1 date);
+
+INSERT INTO DATE_TBL VALUES ('1957-04-09');
+INSERT INTO DATE_TBL VALUES ('1957-06-13');
+INSERT INTO DATE_TBL VALUES ('1996-02-28');
+INSERT INTO DATE_TBL VALUES ('1996-02-29');
+INSERT INTO DATE_TBL VALUES ('1996-03-01');
+INSERT INTO DATE_TBL VALUES ('1996-03-02');
+INSERT INTO DATE_TBL VALUES ('1997-02-28');
+INSERT INTO DATE_TBL VALUES ('1997-02-29');
+INSERT INTO DATE_TBL VALUES ('1997-03-01');
+INSERT INTO DATE_TBL VALUES ('1997-03-02');
+INSERT INTO DATE_TBL VALUES ('2000-04-01');
+INSERT INTO DATE_TBL VALUES ('2000-04-02');
+INSERT INTO DATE_TBL VALUES ('2000-04-03');
+INSERT INTO DATE_TBL VALUES ('2038-04-08');
+INSERT INTO DATE_TBL VALUES ('2039-04-09');
+INSERT INTO DATE_TBL VALUES ('2040-04-10');
+
+SELECT f1 AS "Fifteen" FROM DATE_TBL ORDER BY 1;
+
+SELECT f1 AS "Nine" FROM DATE_TBL WHERE f1 < '2000-01-01' ORDER BY 1;
+
+SELECT f1 AS "Three" FROM DATE_TBL
+ WHERE f1 BETWEEN '2000-01-01' AND '2001-01-01' ORDER BY 1;
+
+--
+-- Check all the documented input formats
+--
+SET datestyle TO iso; -- display results in ISO
+
+SET datestyle TO ymd;
+
+SELECT date 'January 8, 1999';
+SELECT date '1999-01-08';
+SELECT date '1999-01-18';
+SELECT date '1/8/1999';
+SELECT date '1/18/1999';
+SELECT date '18/1/1999';
+SELECT date '01/02/03';
+SELECT date '19990108';
+SELECT date '990108';
+SELECT date '1999.008';
+SELECT date 'J2451187';
+SELECT date 'January 8, 99 BC';
+
+SELECT date '99-Jan-08';
+SELECT date '1999-Jan-08';
+SELECT date '08-Jan-99';
+SELECT date '08-Jan-1999';
+SELECT date 'Jan-08-99';
+SELECT date 'Jan-08-1999';
+SELECT date '99-08-Jan';
+SELECT date '1999-08-Jan';
+
+SELECT date '99 Jan 08';
+SELECT date '1999 Jan 08';
+SELECT date '08 Jan 99';
+SELECT date '08 Jan 1999';
+SELECT date 'Jan 08 99';
+SELECT date 'Jan 08 1999';
+SELECT date '99 08 Jan';
+SELECT date '1999 08 Jan';
+
+SELECT date '99-01-08';
+SELECT date '1999-01-08';
+SELECT date '08-01-99';
+SELECT date '08-01-1999';
+SELECT date '01-08-99';
+SELECT date '01-08-1999';
+SELECT date '99-08-01';
+SELECT date '1999-08-01';
+
+SELECT date '99 01 08';
+SELECT date '1999 01 08';
+SELECT date '08 01 99';
+SELECT date '08 01 1999';
+SELECT date '01 08 99';
+SELECT date '01 08 1999';
+SELECT date '99 08 01';
+SELECT date '1999 08 01';
+
+SET datestyle TO dmy;
+
+SELECT date 'January 8, 1999';
+SELECT date '1999-01-08';
+SELECT date '1999-01-18';
+SELECT date '1/8/1999';
+SELECT date '1/18/1999';
+SELECT date '18/1/1999';
+SELECT date '01/02/03';
+SELECT date '19990108';
+SELECT date '990108';
+SELECT date '1999.008';
+SELECT date 'J2451187';
+SELECT date 'January 8, 99 BC';
+
+SELECT date '99-Jan-08';
+SELECT date '1999-Jan-08';
+SELECT date '08-Jan-99';
+SELECT date '08-Jan-1999';
+SELECT date 'Jan-08-99';
+SELECT date 'Jan-08-1999';
+SELECT date '99-08-Jan';
+SELECT date '1999-08-Jan';
+
+SELECT date '99 Jan 08';
+SELECT date '1999 Jan 08';
+SELECT date '08 Jan 99';
+SELECT date '08 Jan 1999';
+SELECT date 'Jan 08 99';
+SELECT date 'Jan 08 1999';
+SELECT date '99 08 Jan';
+SELECT date '1999 08 Jan';
+
+SELECT date '99-01-08';
+SELECT date '1999-01-08';
+SELECT date '08-01-99';
+SELECT date '08-01-1999';
+SELECT date '01-08-99';
+SELECT date '01-08-1999';
+SELECT date '99-08-01';
+SELECT date '1999-08-01';
+
+SELECT date '99 01 08';
+SELECT date '1999 01 08';
+SELECT date '08 01 99';
+SELECT date '08 01 1999';
+SELECT date '01 08 99';
+SELECT date '01 08 1999';
+SELECT date '99 08 01';
+SELECT date '1999 08 01';
+
+SET datestyle TO mdy;
+
+SELECT date 'January 8, 1999';
+SELECT date '1999-01-08';
+SELECT date '1999-01-18';
+SELECT date '1/8/1999';
+SELECT date '1/18/1999';
+SELECT date '18/1/1999';
+SELECT date '01/02/03';
+SELECT date '19990108';
+SELECT date '990108';
+SELECT date '1999.008';
+SELECT date 'J2451187';
+SELECT date 'January 8, 99 BC';
+
+SELECT date '99-Jan-08';
+SELECT date '1999-Jan-08';
+SELECT date '08-Jan-99';
+SELECT date '08-Jan-1999';
+SELECT date 'Jan-08-99';
+SELECT date 'Jan-08-1999';
+SELECT date '99-08-Jan';
+SELECT date '1999-08-Jan';
+
+SELECT date '99 Jan 08';
+SELECT date '1999 Jan 08';
+SELECT date '08 Jan 99';
+SELECT date '08 Jan 1999';
+SELECT date 'Jan 08 99';
+SELECT date 'Jan 08 1999';
+SELECT date '99 08 Jan';
+SELECT date '1999 08 Jan';
+
+SELECT date '99-01-08';
+SELECT date '1999-01-08';
+SELECT date '08-01-99';
+SELECT date '08-01-1999';
+SELECT date '01-08-99';
+SELECT date '01-08-1999';
+SELECT date '99-08-01';
+SELECT date '1999-08-01';
+
+SELECT date '99 01 08';
+SELECT date '1999 01 08';
+SELECT date '08 01 99';
+SELECT date '08 01 1999';
+SELECT date '01 08 99';
+SELECT date '01 08 1999';
+SELECT date '99 08 01';
+SELECT date '1999 08 01';
+
+RESET datestyle;
+
+--
+-- Simple math
+-- Leave most of it for the horology tests
+--
+
+SELECT f1 - date '2000-01-01' AS "Days From 2K" FROM DATE_TBL ORDER BY 1;
+
+SELECT f1 - date 'epoch' AS "Days From Epoch" FROM DATE_TBL ORDER BY 1;
+
+SELECT date 'yesterday' - date 'today' AS "One day";
+
+SELECT date 'today' - date 'tomorrow' AS "One day";
+
+SELECT date 'yesterday' - date 'tomorrow' AS "Two days";
+
+SELECT date 'tomorrow' - date 'today' AS "One day";
+
+SELECT date 'today' - date 'yesterday' AS "One day";
+
+SELECT date 'tomorrow' - date 'yesterday' AS "Two days";
+
+--
+-- test extract!
+--
+-- century
+--
+SELECT EXTRACT(CENTURY FROM DATE '0101-12-31 BC'); -- -2
+SELECT EXTRACT(CENTURY FROM DATE '0100-12-31 BC'); -- -1
+SELECT EXTRACT(CENTURY FROM DATE '0001-12-31 BC'); -- -1
+SELECT EXTRACT(CENTURY FROM DATE '0001-01-01'); -- 1
+SELECT EXTRACT(CENTURY FROM DATE '0001-01-01 AD'); -- 1
+SELECT EXTRACT(CENTURY FROM DATE '1900-12-31'); -- 19
+SELECT EXTRACT(CENTURY FROM DATE '1901-01-01'); -- 20
+SELECT EXTRACT(CENTURY FROM DATE '2000-12-31'); -- 20
+SELECT EXTRACT(CENTURY FROM DATE '2001-01-01'); -- 21
+SELECT EXTRACT(CENTURY FROM CURRENT_DATE)>=21 AS True; -- true
+--
+-- millennium
+--
+SELECT EXTRACT(MILLENNIUM FROM DATE '0001-12-31 BC'); -- -1
+SELECT EXTRACT(MILLENNIUM FROM DATE '0001-01-01 AD'); -- 1
+SELECT EXTRACT(MILLENNIUM FROM DATE '1000-12-31'); -- 1
+SELECT EXTRACT(MILLENNIUM FROM DATE '1001-01-01'); -- 2
+SELECT EXTRACT(MILLENNIUM FROM DATE '2000-12-31'); -- 2
+SELECT EXTRACT(MILLENNIUM FROM DATE '2001-01-01'); -- 3
+-- next test to be fixed on the turn of the next millennium;-)
+SELECT EXTRACT(MILLENNIUM FROM CURRENT_DATE); -- 3
+--
+-- decade
+--
+SELECT EXTRACT(DECADE FROM DATE '1994-12-25'); -- 199
+SELECT EXTRACT(DECADE FROM DATE '0010-01-01'); -- 1
+SELECT EXTRACT(DECADE FROM DATE '0009-12-31'); -- 0
+SELECT EXTRACT(DECADE FROM DATE '0001-01-01 BC'); -- 0
+SELECT EXTRACT(DECADE FROM DATE '0002-12-31 BC'); -- -1
+SELECT EXTRACT(DECADE FROM DATE '0011-01-01 BC'); -- -1
+SELECT EXTRACT(DECADE FROM DATE '0012-12-31 BC'); -- -2
+--
+-- some other types:
+--
+-- on a timestamp.
+SELECT EXTRACT(CENTURY FROM NOW())>=21 AS True; -- true
+SELECT EXTRACT(CENTURY FROM TIMESTAMP '1970-03-20 04:30:00.00000'); -- 20
+-- on an interval
+SELECT EXTRACT(CENTURY FROM INTERVAL '100 y'); -- 1
+SELECT EXTRACT(CENTURY FROM INTERVAL '99 y'); -- 0
+SELECT EXTRACT(CENTURY FROM INTERVAL '-99 y'); -- 0
+SELECT EXTRACT(CENTURY FROM INTERVAL '-100 y'); -- -1
+--
+-- test trunc function!
+--
+SELECT DATE_TRUNC('MILLENNIUM', TIMESTAMP '1970-03-20 04:30:00.00000'); -- 1001
+SELECT DATE_TRUNC('MILLENNIUM', DATE '1970-03-20'); -- 1001-01-01
+SELECT DATE_TRUNC('CENTURY', TIMESTAMP '1970-03-20 04:30:00.00000'); -- 1901
+SELECT DATE_TRUNC('CENTURY', DATE '1970-03-20'); -- 1901
+SELECT DATE_TRUNC('CENTURY', DATE '2004-08-10'); -- 2001-01-01
+SELECT DATE_TRUNC('CENTURY', DATE '0002-02-04'); -- 0001-01-01
+SELECT DATE_TRUNC('CENTURY', DATE '0055-08-10 BC'); -- 0100-01-01 BC
+SELECT DATE_TRUNC('DECADE', DATE '1993-12-25'); -- 1990-01-01
+SELECT DATE_TRUNC('DECADE', DATE '0004-12-25'); -- 0001-01-01 BC
+SELECT DATE_TRUNC('DECADE', DATE '0002-12-31 BC'); -- 0011-01-01 BC
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/f05c19ed/src/test/feature/catalog/sql/float4.sql
----------------------------------------------------------------------
diff --git a/src/test/feature/catalog/sql/float4.sql b/src/test/feature/catalog/sql/float4.sql
new file mode 100644
index 0000000..f33c6d2
--- /dev/null
+++ b/src/test/feature/catalog/sql/float4.sql
@@ -0,0 +1,85 @@
+--
+-- FLOAT4
+--
+
+CREATE TABLE FLOAT4_TBL (f1 float4);
+
+INSERT INTO FLOAT4_TBL(f1) VALUES (' 0.0');
+INSERT INTO FLOAT4_TBL(f1) VALUES ('1004.30 ');
+INSERT INTO FLOAT4_TBL(f1) VALUES (' -34.84 ');
+INSERT INTO FLOAT4_TBL(f1) VALUES ('1.2345678901234e+20');
+INSERT INTO FLOAT4_TBL(f1) VALUES ('1.2345678901234e-20');
+
+-- test for over and under flow
+INSERT INTO FLOAT4_TBL(f1) VALUES ('10e40');
+INSERT INTO FLOAT4_TBL(f1) VALUES ('-10e40');
+INSERT INTO FLOAT4_TBL(f1) VALUES ('10e-40');
+INSERT INTO FLOAT4_TBL(f1) VALUES ('-10e-40');
+
+-- bad input
+INSERT INTO FLOAT4_TBL(f1) VALUES ('');
+INSERT INTO FLOAT4_TBL(f1) VALUES (' ');
+INSERT INTO FLOAT4_TBL(f1) VALUES ('xyz');
+INSERT INTO FLOAT4_TBL(f1) VALUES ('5.0.0');
+INSERT INTO FLOAT4_TBL(f1) VALUES ('5 . 0');
+INSERT INTO FLOAT4_TBL(f1) VALUES ('5. 0');
+INSERT INTO FLOAT4_TBL(f1) VALUES (' - 3.0');
+INSERT INTO FLOAT4_TBL(f1) VALUES ('123 5');
+
+-- special inputs
+SELECT 'NaN'::float4;
+SELECT 'nan'::float4;
+SELECT ' NAN '::float4;
+SELECT 'infinity'::float4;
+SELECT ' -INFINiTY '::float4;
+-- bad special inputs
+SELECT 'N A N'::float4;
+SELECT 'NaN x'::float4;
+SELECT ' INFINITY x'::float4;
+
+SELECT 'Infinity'::float4 + 100.0;
+SELECT 'Infinity'::float4 / 'Infinity'::float4;
+SELECT 'nan'::float4 / 'nan'::float4;
+
+
+SELECT '' AS five, * FROM FLOAT4_TBL ORDER BY 2;
+
+SELECT '' AS four, f.* FROM FLOAT4_TBL f WHERE f.f1 <> '1004.3' ORDER BY 2;
+
+SELECT '' AS one, f.* FROM FLOAT4_TBL f WHERE f.f1 = '1004.3' ORDER BY 2;
+
+SELECT '' AS three, f.* FROM FLOAT4_TBL f WHERE '1004.3' > f.f1 ORDER BY 2;
+
+SELECT '' AS three, f.* FROM FLOAT4_TBL f WHERE f.f1 < '1004.3' ORDER BY 2;
+
+SELECT '' AS four, f.* FROM FLOAT4_TBL f WHERE '1004.3' >= f.f1 ORDER BY 2;
+
+SELECT '' AS four, f.* FROM FLOAT4_TBL f WHERE f.f1 <= '1004.3' ORDER BY 2;
+
+SELECT '' AS three, f.f1, f.f1 * '-10' AS x FROM FLOAT4_TBL f
+ WHERE f.f1 > '0.0' ORDER BY 2;
+
+SELECT '' AS three, f.f1, f.f1 + '-10' AS x FROM FLOAT4_TBL f
+ WHERE f.f1 > '0.0' ORDER BY 2;
+
+SELECT '' AS three, f.f1, f.f1 / '-10' AS x FROM FLOAT4_TBL f
+ WHERE f.f1 > '0.0' ORDER BY 2;
+
+SELECT '' AS three, f.f1, f.f1 - '-10' AS x FROM FLOAT4_TBL f
+ WHERE f.f1 > '0.0' ORDER BY 2;
+
+-- test divide by zero
+SELECT '' AS bad, f.f1 / '0.0' from FLOAT4_TBL f;
+
+SELECT '' AS five, * FROM FLOAT4_TBL ORDER BY 2;
+
+-- test the unary float4abs operator
+SELECT '' AS five, f.f1, @f.f1 AS abs_f1 FROM FLOAT4_TBL f ORDER BY 2;
+
+-- MPP doesn't support this yet.
+--UPDATE FLOAT4_TBL
+-- SET f1 = FLOAT4_TBL.f1 * '-1'
+-- WHERE FLOAT4_TBL.f1 > '0.0';
+
+--SELECT '' AS five, * FROM FLOAT4_TBL ORDER BY 2;
+
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/f05c19ed/src/test/feature/catalog/sql/float8.sql
----------------------------------------------------------------------
diff --git a/src/test/feature/catalog/sql/float8.sql b/src/test/feature/catalog/sql/float8.sql
new file mode 100644
index 0000000..7809203
--- /dev/null
+++ b/src/test/feature/catalog/sql/float8.sql
@@ -0,0 +1,167 @@
+--
+-- FLOAT8
+--
+
+CREATE TABLE FLOAT8_TBL(i INT DEFAULT 1, f1 float8);
+
+INSERT INTO FLOAT8_TBL(f1) VALUES (' 0.0 ');
+INSERT INTO FLOAT8_TBL(f1) VALUES ('1004.30 ');
+INSERT INTO FLOAT8_TBL(f1) VALUES (' -34.84');
+INSERT INTO FLOAT8_TBL(f1) VALUES ('1.2345678901234e+200');
+INSERT INTO FLOAT8_TBL(f1) VALUES ('1.2345678901234e-200');
+
+-- test for underflow and overflow handling
+SELECT '10e400'::float8;
+SELECT '-10e400'::float8;
+SELECT '10e-400'::float8;
+SELECT '-10e-400'::float8;
+
+-- bad input
+INSERT INTO FLOAT8_TBL(f1) VALUES ('');
+INSERT INTO FLOAT8_TBL(f1) VALUES (' ');
+INSERT INTO FLOAT8_TBL(f1) VALUES ('xyz');
+INSERT INTO FLOAT8_TBL(f1) VALUES ('5.0.0');
+INSERT INTO FLOAT8_TBL(f1) VALUES ('5 . 0');
+INSERT INTO FLOAT8_TBL(f1) VALUES ('5. 0');
+INSERT INTO FLOAT8_TBL(f1) VALUES (' - 3');
+INSERT INTO FLOAT8_TBL(f1) VALUES ('123 5');
+
+-- special inputs
+SELECT 'NaN'::float8;
+SELECT 'nan'::float8;
+SELECT ' NAN '::float8;
+SELECT 'infinity'::float8;
+SELECT ' -INFINiTY '::float8;
+-- bad special inputs
+SELECT 'N A N'::float8;
+SELECT 'NaN x'::float8;
+SELECT ' INFINITY x'::float8;
+
+SELECT 'Infinity'::float8 + 100.0;
+SELECT 'Infinity'::float8 / 'Infinity'::float8;
+SELECT 'nan'::float8 / 'nan'::float8;
+
+SELECT '' AS five, f1 FROM FLOAT8_TBL ORDER BY 2;
+
+SELECT '' AS four, f.f1 FROM FLOAT8_TBL f WHERE f.f1 <> '1004.3' ORDER BY 2;
+
+SELECT '' AS one, f.f1 FROM FLOAT8_TBL f WHERE f.f1 = '1004.3' ORDER BY 2;
+
+SELECT '' AS three, f.f1 FROM FLOAT8_TBL f WHERE '1004.3' > f.f1 ORDER BY 2;
+
+SELECT '' AS three, f.f1 FROM FLOAT8_TBL f WHERE f.f1 < '1004.3' ORDER BY 2;
+
+SELECT '' AS four, f.f1 FROM FLOAT8_TBL f WHERE '1004.3' >= f.f1 ORDER BY 2;
+
+SELECT '' AS four, f.f1 FROM FLOAT8_TBL f WHERE f.f1 <= '1004.3' ORDER BY 2;
+
+SELECT '' AS three, f.f1, f.f1 * '-10' AS x
+ FROM FLOAT8_TBL f
+ WHERE f.f1 > '0.0' ORDER BY 2;
+
+SELECT '' AS three, f.f1, f.f1 + '-10' AS x
+ FROM FLOAT8_TBL f
+ WHERE f.f1 > '0.0' ORDER BY 2;
+
+SELECT '' AS three, f.f1, f.f1 / '-10' AS x
+ FROM FLOAT8_TBL f
+ WHERE f.f1 > '0.0' ORDER BY 2;
+
+SELECT '' AS three, f.f1, f.f1 - '-10' AS x
+ FROM FLOAT8_TBL f
+ WHERE f.f1 > '0.0' ORDER BY 2;
+
+SELECT '' AS one, f.f1 ^ '2.0' AS square_f1
+ FROM FLOAT8_TBL f where f.f1 = '1004.3';
+
+-- absolute value
+SELECT '' AS five, f.f1, @f.f1 AS abs_f1
+ FROM FLOAT8_TBL f ORDER BY 2;
+
+-- truncate
+SELECT '' AS five, f.f1, trunc(f.f1) AS trunc_f1
+ FROM FLOAT8_TBL f ORDER BY 2;
+
+-- round
+SELECT '' AS five, f.f1, round(f.f1) AS round_f1
+ FROM FLOAT8_TBL f ORDER BY 2;
+
+-- ceil / ceiling
+select ceil(f1) as ceil_f1 from float8_tbl f ORDER BY 1;
+select ceiling(f1) as ceiling_f1 from float8_tbl f ORDER BY 1;
+
+-- floor
+select floor(f1) as floor_f1 from float8_tbl f ORDER BY 1;
+
+-- sign
+select sign(f1) as sign_f1 from float8_tbl f ORDER BY 1;
+
+-- square root
+SELECT sqrt(float8 '64') AS eight;
+
+SELECT |/ float8 '64' AS eight;
+
+SELECT '' AS three, f.f1, |/f.f1 AS sqrt_f1
+ FROM FLOAT8_TBL f
+ WHERE f.f1 > '0.0' ORDER BY 2;
+
+-- power
+SELECT power(float8 '144', float8 '0.5');
+
+-- take exp of ln(f.f1)
+SELECT '' AS three, f.f1, exp(ln(f.f1)) AS exp_ln_f1
+ FROM FLOAT8_TBL f
+ WHERE f.f1 > '0.0' ORDER BY 2;
+
+-- cube root
+SELECT ||/ float8 '27' AS three;
+
+SELECT '' AS five, f.f1, ||/f.f1 AS cbrt_f1 FROM FLOAT8_TBL f ORDER BY 2;
+
+
+SELECT '' AS five, f1 FROM FLOAT8_TBL ORDER BY 2;
+
+UPDATE FLOAT8_TBL
+ SET f1 = FLOAT8_TBL.f1 * '-1'
+ WHERE FLOAT8_TBL.f1 > '0.0';
+
+SELECT '' AS bad, f.f1 * '1e200' from FLOAT8_TBL f;
+
+SELECT '' AS bad, f.f1 ^ '1e200' from FLOAT8_TBL f;
+
+SELECT '' AS bad, ln(f.f1) from FLOAT8_TBL f where f.f1 = '0.0' ;
+
+SELECT '' AS bad, ln(f.f1) from FLOAT8_TBL f where f.f1 < '0.0' ;
+
+SELECT '' AS bad, exp(f.f1) from FLOAT8_TBL f;
+
+SELECT '' AS bad, f.f1 / '0.0' from FLOAT8_TBL f;
+
+SELECT '' AS five, f1 FROM FLOAT8_TBL ORDER BY 2;
+
+-- test for over- and underflow
+INSERT INTO FLOAT8_TBL(f1) VALUES ('10e400');
+
+INSERT INTO FLOAT8_TBL(f1) VALUES ('-10e400');
+
+INSERT INTO FLOAT8_TBL(f1) VALUES ('10e-400');
+
+INSERT INTO FLOAT8_TBL(f1) VALUES ('-10e-400');
+
+-- maintain external table consistency across platforms
+-- delete all values and reinsert well-behaved ones
+
+DELETE FROM FLOAT8_TBL;
+
+INSERT INTO FLOAT8_TBL(f1) VALUES ('0.0');
+
+INSERT INTO FLOAT8_TBL(f1) VALUES ('-34.84');
+
+INSERT INTO FLOAT8_TBL(f1) VALUES ('-1004.30');
+
+INSERT INTO FLOAT8_TBL(f1) VALUES ('-1.2345678901234e+200');
+
+INSERT INTO FLOAT8_TBL(f1) VALUES ('-1.2345678901234e-200');
+
+SELECT '' AS five, f1 FROM FLOAT8_TBL ORDER BY 2;
+
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/f05c19ed/src/test/feature/catalog/sql/int2.sql
----------------------------------------------------------------------
diff --git a/src/test/feature/catalog/sql/int2.sql b/src/test/feature/catalog/sql/int2.sql
new file mode 100644
index 0000000..082bb5c
--- /dev/null
+++ b/src/test/feature/catalog/sql/int2.sql
@@ -0,0 +1,88 @@
+--
+-- INT2
+-- NOTE: int2 operators never check for over/underflow!
+-- Some of these answers are consequently numerically incorrect.
+--
+
+CREATE TABLE INT2_TBL(f1 int2);
+
+INSERT INTO INT2_TBL(f1) VALUES ('0 ');
+
+INSERT INTO INT2_TBL(f1) VALUES (' 1234 ');
+
+INSERT INTO INT2_TBL(f1) VALUES (' -1234');
+
+INSERT INTO INT2_TBL(f1) VALUES ('34.5');
+
+-- largest and smallest values
+INSERT INTO INT2_TBL(f1) VALUES ('32767');
+
+INSERT INTO INT2_TBL(f1) VALUES ('-32767');
+
+-- bad input values -- should give errors
+INSERT INTO INT2_TBL(f1) VALUES ('100000');
+INSERT INTO INT2_TBL(f1) VALUES ('asdf');
+INSERT INTO INT2_TBL(f1) VALUES (' ');
+INSERT INTO INT2_TBL(f1) VALUES ('- 1234');
+INSERT INTO INT2_TBL(f1) VALUES ('4 444');
+INSERT INTO INT2_TBL(f1) VALUES ('123 dt');
+INSERT INTO INT2_TBL(f1) VALUES ('');
+
+
+SELECT '' AS five, * FROM INT2_TBL order by f1;
+
+SELECT '' AS four, i.* FROM INT2_TBL i WHERE i.f1 <> int2 '0' order by f1;
+
+SELECT '' AS four, i.* FROM INT2_TBL i WHERE i.f1 <> int4 '0' order by f1;
+
+SELECT '' AS one, i.* FROM INT2_TBL i WHERE i.f1 = int2 '0' order by f1;
+
+SELECT '' AS one, i.* FROM INT2_TBL i WHERE i.f1 = int4 '0' order by f1;
+
+SELECT '' AS two, i.* FROM INT2_TBL i WHERE i.f1 < int2 '0' order by f1;
+
+SELECT '' AS two, i.* FROM INT2_TBL i WHERE i.f1 < int4 '0' order by f1;
+
+SELECT '' AS three, i.* FROM INT2_TBL i WHERE i.f1 <= int2 '0' order by f1;
+
+SELECT '' AS three, i.* FROM INT2_TBL i WHERE i.f1 <= int4 '0' order by f1;
+
+SELECT '' AS two, i.* FROM INT2_TBL i WHERE i.f1 > int2 '0' order by f1;
+
+SELECT '' AS two, i.* FROM INT2_TBL i WHERE i.f1 > int4 '0' order by f1;
+
+SELECT '' AS three, i.* FROM INT2_TBL i WHERE i.f1 >= int2 '0' order by f1;
+
+SELECT '' AS three, i.* FROM INT2_TBL i WHERE i.f1 >= int4 '0' order by f1;
+
+-- positive odds
+SELECT '' AS one, i.* FROM INT2_TBL i WHERE (i.f1 % int2 '2') = int2 '1' order by f1;
+
+-- any evens
+SELECT '' AS three, i.* FROM INT2_TBL i WHERE (i.f1 % int4 '2') = int2 '0' order by f1;
+
+SELECT '' AS five, i.f1, i.f1 * int2 '2' AS x FROM INT2_TBL i order by f1;
+
+SELECT '' AS five, i.f1, i.f1 * int2 '2' AS x FROM INT2_TBL i
+WHERE abs(f1) < 16384 order by f1;
+
+SELECT '' AS five, i.f1, i.f1 * int4 '2' AS x FROM INT2_TBL i order by f1;
+
+SELECT '' AS five, i.f1, i.f1 + int2 '2' AS x FROM INT2_TBL i order by f1;
+
+SELECT '' AS five, i.f1, i.f1 + int2 '2' AS x FROM INT2_TBL i
+WHERE f1 < 32766 order by f1;
+
+SELECT '' AS five, i.f1, i.f1 + int4 '2' AS x FROM INT2_TBL i order by f1;
+
+SELECT '' AS five, i.f1, i.f1 - int2 '2' AS x FROM INT2_TBL i order by f1;
+
+SELECT '' AS five, i.f1, i.f1 - int2 '2' AS x FROM INT2_TBL i
+WHERE f1 > -32767 order by f1;
+
+SELECT '' AS five, i.f1, i.f1 - int4 '2' AS x FROM INT2_TBL i order by f1;
+
+SELECT '' AS five, i.f1, i.f1 / int2 '2' AS x FROM INT2_TBL i order by f1;
+
+SELECT '' AS five, i.f1, i.f1 / int4 '2' AS x FROM INT2_TBL i order by f1;
+
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/f05c19ed/src/test/feature/catalog/sql/int4.sql
----------------------------------------------------------------------
diff --git a/src/test/feature/catalog/sql/int4.sql b/src/test/feature/catalog/sql/int4.sql
new file mode 100644
index 0000000..d1b4225
--- /dev/null
+++ b/src/test/feature/catalog/sql/int4.sql
@@ -0,0 +1,127 @@
+--
+-- INT4
+-- WARNING: int4 operators never check for over/underflow!
+-- Some of these answers are consequently numerically incorrect.
+--
+
+CREATE TABLE INT4_TBL(f1 int4);
+
+INSERT INTO INT4_TBL(f1) VALUES (' 0 ');
+
+INSERT INTO INT4_TBL(f1) VALUES ('123456 ');
+
+INSERT INTO INT4_TBL(f1) VALUES (' -123456');
+
+INSERT INTO INT4_TBL(f1) VALUES ('34.5');
+
+-- largest and smallest values
+INSERT INTO INT4_TBL(f1) VALUES ('2147483647');
+
+INSERT INTO INT4_TBL(f1) VALUES ('-2147483647');
+
+-- bad input values -- should give errors
+INSERT INTO INT4_TBL(f1) VALUES ('1000000000000');
+INSERT INTO INT4_TBL(f1) VALUES ('asdf');
+INSERT INTO INT4_TBL(f1) VALUES (' ');
+INSERT INTO INT4_TBL(f1) VALUES (' asdf ');
+INSERT INTO INT4_TBL(f1) VALUES ('- 1234');
+INSERT INTO INT4_TBL(f1) VALUES ('123 5');
+INSERT INTO INT4_TBL(f1) VALUES ('');
+
+
+SELECT '' AS five, * FROM INT4_TBL order by f1;
+
+SELECT '' AS four, i.* FROM INT4_TBL i WHERE i.f1 <> int2 '0' order by f1;
+
+SELECT '' AS four, i.* FROM INT4_TBL i WHERE i.f1 <> int4 '0' order by f1;
+
+SELECT '' AS one, i.* FROM INT4_TBL i WHERE i.f1 = int2 '0' order by f1;
+
+SELECT '' AS one, i.* FROM INT4_TBL i WHERE i.f1 = int4 '0' order by f1;
+
+SELECT '' AS two, i.* FROM INT4_TBL i WHERE i.f1 < int2 '0' order by f1;
+
+SELECT '' AS two, i.* FROM INT4_TBL i WHERE i.f1 < int4 '0' order by f1;
+
+SELECT '' AS three, i.* FROM INT4_TBL i WHERE i.f1 <= int2 '0' order by f1;
+
+SELECT '' AS three, i.* FROM INT4_TBL i WHERE i.f1 <= int4 '0' order by f1;
+
+SELECT '' AS two, i.* FROM INT4_TBL i WHERE i.f1 > int2 '0' order by f1;
+
+SELECT '' AS two, i.* FROM INT4_TBL i WHERE i.f1 > int4 '0' order by f1;
+
+SELECT '' AS three, i.* FROM INT4_TBL i WHERE i.f1 >= int2 '0' order by f1;
+
+SELECT '' AS three, i.* FROM INT4_TBL i WHERE i.f1 >= int4 '0' order by f1;
+
+-- positive odds
+SELECT '' AS one, i.* FROM INT4_TBL i WHERE (i.f1 % int2 '2') = int2 '1' order by f1;
+
+-- any evens
+SELECT '' AS three, i.* FROM INT4_TBL i WHERE (i.f1 % int4 '2') = int2 '0' order by f1;
+
+SELECT '' AS five, i.f1, i.f1 * int2 '2' AS x FROM INT4_TBL i order by f1;
+
+SELECT '' AS five, i.f1, i.f1 * int2 '2' AS x FROM INT4_TBL i
+WHERE abs(f1) < 1073741824 order by f1;
+
+SELECT '' AS five, i.f1, i.f1 * int4 '2' AS x FROM INT4_TBL i order by f1;
+
+SELECT '' AS five, i.f1, i.f1 * int4 '2' AS x FROM INT4_TBL i
+WHERE abs(f1) < 1073741824 order by f1;
+
+SELECT '' AS five, i.f1, i.f1 + int2 '2' AS x FROM INT4_TBL i order by f1;
+
+SELECT '' AS five, i.f1, i.f1 + int2 '2' AS x FROM INT4_TBL i
+WHERE f1 < 2147483646 order by f1;
+
+SELECT '' AS five, i.f1, i.f1 + int4 '2' AS x FROM INT4_TBL i order by f1;
+
+SELECT '' AS five, i.f1, i.f1 + int4 '2' AS x FROM INT4_TBL i
+WHERE f1 < 2147483646 order by f1;
+
+SELECT '' AS five, i.f1, i.f1 - int2 '2' AS x FROM INT4_TBL i order by f1;
+
+SELECT '' AS five, i.f1, i.f1 - int2 '2' AS x FROM INT4_TBL i
+WHERE f1 > -2147483647 order by f1;
+
+SELECT '' AS five, i.f1, i.f1 - int4 '2' AS x FROM INT4_TBL i order by f1;
+
+SELECT '' AS five, i.f1, i.f1 - int4 '2' AS x FROM INT4_TBL i
+WHERE f1 > -2147483647 order by f1;
+
+SELECT '' AS five, i.f1, i.f1 / int2 '2' AS x FROM INT4_TBL i order by f1;
+
+SELECT '' AS five, i.f1, i.f1 / int4 '2' AS x FROM INT4_TBL i order by f1;
+
+--
+-- more complex expressions
+--
+
+-- variations on unary minus parsing
+SELECT -2+3 AS one;
+
+SELECT 4-2 AS two;
+
+SELECT 2- -1 AS three;
+
+SELECT 2 - -2 AS four;
+
+SELECT int2 '2' * int2 '2' = int2 '16' / int2 '4' AS true;
+
+SELECT int4 '2' * int2 '2' = int2 '16' / int4 '4' AS true;
+
+SELECT int2 '2' * int4 '2' = int4 '16' / int2 '4' AS true;
+
+SELECT int4 '1000' < int4 '999' AS false;
+
+SELECT 4! AS twenty_four;
+
+SELECT !!3 AS six;
+
+SELECT 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 AS ten;
+
+SELECT 2 + 2 / 2 AS three;
+
+SELECT (2 + 2) / 2 AS two;
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/f05c19ed/src/test/feature/catalog/sql/int8.sql
----------------------------------------------------------------------
diff --git a/src/test/feature/catalog/sql/int8.sql b/src/test/feature/catalog/sql/int8.sql
new file mode 100644
index 0000000..a545f54
--- /dev/null
+++ b/src/test/feature/catalog/sql/int8.sql
@@ -0,0 +1,71 @@
+--
+-- INT8
+-- Test int8 64-bit integers.
+--
+CREATE TABLE INT8_TBL(q1 int8, q2 int8);
+
+INSERT INTO INT8_TBL VALUES(' 123 ',' 456');
+INSERT INTO INT8_TBL VALUES('123 ','4567890123456789');
+INSERT INTO INT8_TBL VALUES('4567890123456789','123');
+INSERT INTO INT8_TBL VALUES('4567890123456789','4567890123456789');
+INSERT INTO INT8_TBL VALUES('4567890123456789','-4567890123456789');
+
+-- bad inputs
+INSERT INTO INT8_TBL(q1) VALUES (' ');
+INSERT INTO INT8_TBL(q1) VALUES ('xxx');
+INSERT INTO INT8_TBL(q1) VALUES ('3908203590239580293850293850329485');
+INSERT INTO INT8_TBL(q1) VALUES ('-1204982019841029840928340329840934');
+INSERT INTO INT8_TBL(q1) VALUES ('- 123');
+INSERT INTO INT8_TBL(q1) VALUES (' 345 5');
+INSERT INTO INT8_TBL(q1) VALUES ('');
+
+SELECT * FROM INT8_TBL ;
+
+SELECT '' AS five, q1 AS plus, -q1 AS minus FROM INT8_TBL ;
+
+SELECT '' AS five, q1, q2, q1 + q2 AS plus FROM INT8_TBL ;
+SELECT '' AS five, q1, q2, q1 - q2 AS minus FROM INT8_TBL ;
+SELECT '' AS three, q1, q2, q1 * q2 AS multiply FROM INT8_TBL ;
+SELECT '' AS three, q1, q2, q1 * q2 AS multiply FROM INT8_TBL
+ WHERE q1 < 1000 or (q2 > 0 and q2 < 1000) ;
+SELECT '' AS five, q1, q2, q1 / q2 AS divide FROM INT8_TBL ;
+
+SELECT '' AS five, q1, float8(q1) FROM INT8_TBL ;
+SELECT '' AS five, q2, float8(q2) FROM INT8_TBL ;
+
+SELECT '' AS five, 2 * q1 AS "twice int4" FROM INT8_TBL ;
+SELECT '' AS five, q1 * 2 AS "twice int4" FROM INT8_TBL ;
+
+-- TO_CHAR()
+--
+SELECT '' AS to_char_1, to_char(q1, '9G999G999G999G999G999'), to_char(q2, '9,999,999,999,999,999')
+ FROM INT8_TBL ;
+
+SELECT '' AS to_char_2, to_char(q1, '9G999G999G999G999G999D999G999'), to_char(q2, '9,999,999,999,999,999.999,999')
+ FROM INT8_TBL ;
+
+SELECT '' AS to_char_3, to_char( (q1 * -1), '9999999999999999PR'), to_char( (q2 * -1), '9999999999999999.999PR')
+ FROM INT8_TBL ;
+
+SELECT '' AS to_char_4, to_char( (q1 * -1), '9999999999999999S'), to_char( (q2 * -1), 'S9999999999999999')
+ FROM INT8_TBL ;
+
+SELECT '' AS to_char_5, to_char(q2, 'MI9999999999999999') FROM INT8_TBL ;
+SELECT '' AS to_char_6, to_char(q2, 'FMS9999999999999999') FROM INT8_TBL ;
+SELECT '' AS to_char_7, to_char(q2, 'FM9999999999999999THPR') FROM INT8_TBL ;
+SELECT '' AS to_char_8, to_char(q2, 'SG9999999999999999th') FROM INT8_TBL ;
+SELECT '' AS to_char_9, to_char(q2, '0999999999999999') FROM INT8_TBL ;
+SELECT '' AS to_char_10, to_char(q2, 'S0999999999999999') FROM INT8_TBL ;
+SELECT '' AS to_char_11, to_char(q2, 'FM0999999999999999') FROM INT8_TBL ;
+SELECT '' AS to_char_12, to_char(q2, 'FM9999999999999999.000') FROM INT8_TBL ;
+SELECT '' AS to_char_13, to_char(q2, 'L9999999999999999.000') FROM INT8_TBL ;
+SELECT '' AS to_char_14, to_char(q2, 'FM9999999999999999.999') FROM INT8_TBL ;
+SELECT '' AS to_char_15, to_char(q2, 'S 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 . 9 9 9') FROM INT8_TBL ;
+SELECT '' AS to_char_16, to_char(q2, E'99999 "text" 9999 "9999" 999 "\\"text between quote marks\\"" 9999') FROM INT8_TBL ;
+SELECT '' AS to_char_17, to_char(q2, '999999SG9999999999') FROM INT8_TBL ;
+
+-- check min/max values
+select '-9223372036854775808'::int8;
+select '-9223372036854775809'::int8;
+select '9223372036854775807'::int8;
+select '9223372036854775808'::int8;
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/f05c19ed/src/test/feature/catalog/sql/money.sql
----------------------------------------------------------------------
diff --git a/src/test/feature/catalog/sql/money.sql b/src/test/feature/catalog/sql/money.sql
new file mode 100644
index 0000000..fd5921e
--- /dev/null
+++ b/src/test/feature/catalog/sql/money.sql
@@ -0,0 +1,68 @@
+--
+-- MONEY
+--
+
+CREATE TABLE MONEY_TBL (f1 money);
+
+INSERT INTO MONEY_TBL(f1) VALUES (' 0.0');
+INSERT INTO MONEY_TBL(f1) VALUES ('1004.30 ');
+INSERT INTO MONEY_TBL(f1) VALUES (' -34.84 ');
+INSERT INTO MONEY_TBL(f1) VALUES ('123456789012345.67');
+
+-- test money over and under flow
+SELECT '12345678901234567890.12'::money = '-13639628150831692.60'::money as x;
+SELECT '123.001'::money = '123'::money as x;
+
+-- bad input
+INSERT INTO MONEY_TBL(f1) VALUES ('xyz');
+INSERT INTO MONEY_TBL(f1) VALUES ('5.0.0');
+INSERT INTO MONEY_TBL(f1) VALUES ('5 . 0');
+INSERT INTO MONEY_TBL(f1) VALUES ('5. 0');
+INSERT INTO MONEY_TBL(f1) VALUES ('123 5');
+
+-- queries
+SELECT '' AS five, * FROM MONEY_TBL ORDER BY 2;
+
+SELECT '' AS four, f.* FROM MONEY_TBL f WHERE f.f1 <> '1004.3' ORDER BY 2;
+
+SELECT '' AS one, f.* FROM MONEY_TBL f WHERE f.f1 = '1004.3' ORDER BY 2;
+
+SELECT '' AS three, f.* FROM MONEY_TBL f WHERE '1004.3' > f.f1 ORDER BY 2;
+
+SELECT '' AS three, f.* FROM MONEY_TBL f WHERE f.f1 < '1004.3' ORDER BY 2;
+
+SELECT '' AS four, f.* FROM MONEY_TBL f WHERE '1004.3' >= f.f1 ORDER BY 2;
+
+SELECT '' AS four, f.* FROM MONEY_TBL f WHERE f.f1 <= '1004.3' ORDER BY 2;
+
+SELECT '' AS three, f.f1, f.f1 * '-10' AS x FROM MONEY_TBL f
+ WHERE f.f1 > '0.0' ORDER BY 2;
+
+SELECT '' AS three, f.f1, f.f1 + '-10' AS x FROM MONEY_TBL f
+ WHERE f.f1 > '0.0' ORDER BY 2;
+
+SELECT '' AS three, f.f1, f.f1 / '-10' AS x FROM MONEY_TBL f
+ WHERE f.f1 > '0.0' ORDER BY 2;
+
+SELECT '' AS three, f.f1, f.f1 - '-10' AS x FROM MONEY_TBL f
+ WHERE f.f1 > '0.0' ORDER BY 2;
+
+SELECT SUM(f.f1) AS x FROM MONEY_TBL f;
+
+-- test divide by zero
+SELECT '' AS bad, f.f1 / '0.0' from MONEY_TBL f;
+
+SELECT '' AS five, * FROM MONEY_TBL ORDER BY 2;
+
+-- parquet table
+CREATE TABLE MONEY_TBL_P (f1 money) with (appendonly=true, orientation=parquet);
+
+INSERT INTO MONEY_TBL_P(f1) VALUES (' 0.0');
+INSERT INTO MONEY_TBL_P(f1) VALUES ('1004.30 ');
+INSERT INTO MONEY_TBL_P(f1) VALUES (' -34.84 ');
+INSERT INTO MONEY_TBL_P(f1) VALUES ('123456789012345.67');
+
+SELECT f1 FROM MONEY_TBL_P f
+ ORDER BY f1;
+
+SELECT sum(f1) AS x, min(f1) as y, max(f1) as z FROM MONEY_TBL_P AS f;
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/f05c19ed/src/test/feature/catalog/sql/name.sql
----------------------------------------------------------------------
diff --git a/src/test/feature/catalog/sql/name.sql b/src/test/feature/catalog/sql/name.sql
new file mode 100644
index 0000000..d603f57
--- /dev/null
+++ b/src/test/feature/catalog/sql/name.sql
@@ -0,0 +1,54 @@
+--
+-- NAME
+-- all inputs are silently truncated at NAMEDATALEN-1 (63) characters
+--
+
+-- fixed-length by reference
+SELECT name 'name string' = name 'name string' AS "True";
+
+SELECT name 'name string' = name 'name string ' AS "False";
+
+--
+--
+--
+
+CREATE TABLE NAME_TBL(f1 name);
+
+INSERT INTO NAME_TBL(f1) VALUES ('1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJKLMNOPQR');
+
+INSERT INTO NAME_TBL(f1) VALUES ('1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqr');
+
+INSERT INTO NAME_TBL(f1) VALUES ('asdfghjkl;');
+
+INSERT INTO NAME_TBL(f1) VALUES ('343f%2a');
+
+INSERT INTO NAME_TBL(f1) VALUES ('d34aaasdf');
+
+INSERT INTO NAME_TBL(f1) VALUES ('');
+
+INSERT INTO NAME_TBL(f1) VALUES ('1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ');
+
+
+SELECT '' AS seven, * FROM NAME_TBL order by f1;
+
+SELECT '' AS six, c.f1 FROM NAME_TBL c WHERE c.f1 <> '1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJKLMNOPQR' order by f1;
+
+SELECT '' AS one, c.f1 FROM NAME_TBL c WHERE c.f1 = '1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJKLMNOPQR' order by f1;
+
+SELECT '' AS three, c.f1 FROM NAME_TBL c WHERE c.f1 < '1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJKLMNOPQR' order by f1;
+
+SELECT '' AS four, c.f1 FROM NAME_TBL c WHERE c.f1 <= '1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJKLMNOPQR' order by f1;
+
+SELECT '' AS three, c.f1 FROM NAME_TBL c WHERE c.f1 > '1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJKLMNOPQR' order by f1;
+
+SELECT '' AS four, c.f1 FROM NAME_TBL c WHERE c.f1 >= '1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJKLMNOPQR' order by f1;
+
+SELECT '' AS seven, c.f1 FROM NAME_TBL c WHERE c.f1 ~ '.*' order by f1;
+
+SELECT '' AS zero, c.f1 FROM NAME_TBL c WHERE c.f1 !~ '.*' order by f1;
+
+SELECT '' AS three, c.f1 FROM NAME_TBL c WHERE c.f1 ~ '[0-9]' order by f1;
+
+SELECT '' AS two, c.f1 FROM NAME_TBL c WHERE c.f1 ~ '.*asdf.*' order by f1;
+
+DROP TABLE NAME_TBL;
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/f05c19ed/src/test/feature/catalog/sql/oid.sql
----------------------------------------------------------------------
diff --git a/src/test/feature/catalog/sql/oid.sql b/src/test/feature/catalog/sql/oid.sql
new file mode 100644
index 0000000..5747b56
--- /dev/null
+++ b/src/test/feature/catalog/sql/oid.sql
@@ -0,0 +1,43 @@
+--
+-- OID
+--
+
+CREATE TABLE OID_TBL(f1 oid);
+
+INSERT INTO OID_TBL(f1) VALUES ('1234');
+INSERT INTO OID_TBL(f1) VALUES ('1235');
+INSERT INTO OID_TBL(f1) VALUES ('987');
+INSERT INTO OID_TBL(f1) VALUES ('-1040');
+INSERT INTO OID_TBL(f1) VALUES ('99999999');
+INSERT INTO OID_TBL(f1) VALUES ('5 ');
+INSERT INTO OID_TBL(f1) VALUES (' 10 ');
+-- leading/trailing hard tab is also allowed
+INSERT INTO OID_TBL(f1) VALUES (' 15 ');
+
+-- bad inputs
+INSERT INTO OID_TBL(f1) VALUES ('');
+INSERT INTO OID_TBL(f1) VALUES (' ');
+INSERT INTO OID_TBL(f1) VALUES ('asdfasd');
+INSERT INTO OID_TBL(f1) VALUES ('99asdfasd');
+INSERT INTO OID_TBL(f1) VALUES ('5 d');
+INSERT INTO OID_TBL(f1) VALUES (' 5d');
+INSERT INTO OID_TBL(f1) VALUES ('5 5');
+INSERT INTO OID_TBL(f1) VALUES (' - 500');
+INSERT INTO OID_TBL(f1) VALUES ('32958209582039852935');
+INSERT INTO OID_TBL(f1) VALUES ('-23582358720398502385');
+
+SELECT '' AS six, * FROM OID_TBL order by 1, 2;
+
+SELECT '' AS one, o.* FROM OID_TBL o WHERE o.f1 = 1234 order by 1, 2;
+
+SELECT '' AS five, o.* FROM OID_TBL o WHERE o.f1 <> '1234' order by 1,2;
+
+SELECT '' AS three, o.* FROM OID_TBL o WHERE o.f1 <= '1234' order by 1,2;
+
+SELECT '' AS two, o.* FROM OID_TBL o WHERE o.f1 < '1234' order by 1,2;
+
+SELECT '' AS four, o.* FROM OID_TBL o WHERE o.f1 >= '1234' order by 1,2;
+
+SELECT '' AS three, o.* FROM OID_TBL o WHERE o.f1 > '1234' order by 1,2;
+
+DROP TABLE OID_TBL;
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/f05c19ed/src/test/feature/catalog/sql/text.sql
----------------------------------------------------------------------
diff --git a/src/test/feature/catalog/sql/text.sql b/src/test/feature/catalog/sql/text.sql
new file mode 100644
index 0000000..c141e4b
--- /dev/null
+++ b/src/test/feature/catalog/sql/text.sql
@@ -0,0 +1,15 @@
+--
+-- TEXT
+--
+
+SELECT text 'this is a text string' = text 'this is a text string' AS true;
+
+SELECT text 'this is a text string' = text 'this is a text strin' AS false;
+
+CREATE TABLE TEXT_TBL (f1 text);
+
+INSERT INTO TEXT_TBL VALUES ('doh!');
+INSERT INTO TEXT_TBL VALUES ('hi de ho neighbor');
+
+SELECT '' AS two, * FROM TEXT_TBL order by f1;
+
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/f05c19ed/src/test/feature/catalog/sql/time.sql
----------------------------------------------------------------------
diff --git a/src/test/feature/catalog/sql/time.sql b/src/test/feature/catalog/sql/time.sql
new file mode 100644
index 0000000..02c4b7e
--- /dev/null
+++ b/src/test/feature/catalog/sql/time.sql
@@ -0,0 +1,41 @@
+--
+-- TIME
+--
+
+CREATE TABLE TIME_TBL (f1 time(2));
+
+INSERT INTO TIME_TBL VALUES ('00:00');
+INSERT INTO TIME_TBL VALUES ('01:00');
+-- as of 7.4, timezone spec should be accepted and ignored
+INSERT INTO TIME_TBL VALUES ('02:03 PST');
+INSERT INTO TIME_TBL VALUES ('11:59 EDT');
+INSERT INTO TIME_TBL VALUES ('12:00');
+INSERT INTO TIME_TBL VALUES ('12:01');
+INSERT INTO TIME_TBL VALUES ('23:59');
+INSERT INTO TIME_TBL VALUES ('11:59:59.99 PM');
+
+INSERT INTO TIME_TBL VALUES ('2003-03-07 15:36:39 America/New_York');
+INSERT INTO TIME_TBL VALUES ('2003-07-07 15:36:39 America/New_York');
+-- this should fail (the timezone offset is not known)
+INSERT INTO TIME_TBL VALUES ('15:36:39 America/New_York');
+
+SELECT f1 AS "Time" FROM TIME_TBL ORDER BY 1;
+
+SELECT f1 AS "Three" FROM TIME_TBL WHERE f1 < '05:06:07' ORDER BY 1;
+
+SELECT f1 AS "Five" FROM TIME_TBL WHERE f1 > '05:06:07' ORDER BY 1;
+
+SELECT f1 AS "None" FROM TIME_TBL WHERE f1 < '00:00' ORDER BY 1;
+
+SELECT f1 AS "Eight" FROM TIME_TBL WHERE f1 >= '00:00' ORDER BY 1;
+
+--
+-- TIME simple math
+--
+-- We now make a distinction between time and intervals,
+-- and adding two times together makes no sense at all.
+-- Leave in one query to show that it is rejected,
+-- and do the rest of the testing in horology.sql
+-- where we do mixed-type arithmetic. - thomas 2000-12-02
+
+SELECT f1 + time '00:01' AS "Illegal" FROM TIME_TBL;
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/f05c19ed/src/test/feature/catalog/sql/type_sanity.sql
----------------------------------------------------------------------
diff --git a/src/test/feature/catalog/sql/type_sanity.sql b/src/test/feature/catalog/sql/type_sanity.sql
new file mode 100644
index 0000000..14cc3b1
--- /dev/null
+++ b/src/test/feature/catalog/sql/type_sanity.sql
@@ -0,0 +1,223 @@
+--
+-- TYPE_SANITY
+-- Sanity checks for common errors in making type-related system tables:
+-- pg_type, pg_class, pg_attribute.
+--
+-- None of the SELECTs here should ever find any matching entries,
+-- so the expected output is easy to maintain ;-).
+-- A test failure indicates someone messed up an entry in the system tables.
+--
+-- NB: we assume the oidjoins test will have caught any dangling links,
+-- that is OID or REGPROC fields that are not zero and do not match some
+-- row in the linked-to table. However, if we want to enforce that a link
+-- field can't be 0, we have to check it here.
+
+-- **************** pg_type ****************
+
+-- Look for illegal values in pg_type fields.
+
+SELECT p1.oid, p1.typname
+FROM pg_type as p1
+WHERE p1.typnamespace = 0 OR
+ (p1.typlen <= 0 AND p1.typlen != -1 AND p1.typlen != -2) OR
+ (p1.typtype not in ('b', 'c', 'd', 'p')) OR
+ NOT p1.typisdefined OR
+ (p1.typalign not in ('c', 's', 'i', 'd')) OR
+ (p1.typstorage not in ('p', 'x', 'e', 'm'));
+
+-- Look for "pass by value" types that can't be passed by value.
+
+SELECT p1.oid, p1.typname
+FROM pg_type as p1
+WHERE p1.typbyval AND
+ (p1.typlen != 1 OR p1.typalign != 'c') AND
+ (p1.typlen != 2 OR p1.typalign != 's') AND
+ (p1.typlen != 4 OR p1.typalign != 'i') AND
+ (p1.typlen != 8 OR p1.typalign != 'd') ;
+
+-- Look for "toastable" types that aren't varlena.
+
+SELECT p1.oid, p1.typname
+FROM pg_type as p1
+WHERE p1.typstorage != 'p' AND
+ (p1.typbyval OR p1.typlen != -1);
+
+-- Look for complex types that do not have a typrelid entry,
+-- or basic types that do.
+
+SELECT p1.oid, p1.typname
+FROM pg_type as p1
+WHERE (p1.typtype = 'c' AND p1.typrelid = 0) OR
+ (p1.typtype != 'c' AND p1.typrelid != 0);
+
+-- Look for basic types that don't have an array type.
+-- NOTE: as of 8.0, this check finds smgr and unknown.
+
+SELECT p1.oid, p1.typname
+FROM pg_type as p1
+WHERE p1.typtype in ('b') AND p1.typname NOT LIKE E'\\_%' AND NOT EXISTS
+ (SELECT 1 FROM pg_type as p2
+ WHERE p2.typname = ('_' || p1.typname)::name AND
+ p2.typelem = p1.oid);
+
+-- Text conversion routines must be provided.
+
+SELECT p1.oid, p1.typname
+FROM pg_type as p1
+WHERE (p1.typinput = 0 OR p1.typoutput = 0);
+
+-- Check for bogus typinput routines
+
+SELECT p1.oid, p1.typname, p2.oid, p2.proname
+FROM pg_type AS p1, pg_proc AS p2
+WHERE p1.typinput = p2.oid AND p1.typtype in ('b', 'p') AND NOT
+ ((p2.pronargs = 1 AND p2.proargtypes[0] = 'cstring'::regtype) OR
+ (p2.pronargs = 3 AND p2.proargtypes[0] = 'cstring'::regtype AND
+ p2.proargtypes[1] = 'oid'::regtype AND
+ p2.proargtypes[2] = 'int4'::regtype));
+
+-- As of 8.0, this check finds refcursor, which is borrowing
+-- other types' I/O routines
+SELECT p1.oid, p1.typname, p2.oid, p2.proname
+FROM pg_type AS p1, pg_proc AS p2
+WHERE p1.typinput = p2.oid AND p1.typtype in ('b', 'p') AND NOT
+ (p1.typelem != 0 AND p1.typlen < 0) AND NOT
+ (p2.prorettype = p1.oid AND NOT p2.proretset)
+ORDER BY 1;
+
+-- Varlena array types will point to array_in
+-- Exception as of 8.1: int2vector and oidvector have their own I/O routines
+SELECT p1.oid, p1.typname, p2.oid, p2.proname
+FROM pg_type AS p1, pg_proc AS p2
+WHERE p1.typinput = p2.oid AND p1.typtype in ('b', 'p') AND
+ (p1.typelem != 0 AND p1.typlen < 0) AND NOT
+ (p2.oid = 'array_in'::regproc)
+ORDER BY 1;
+
+-- Check for bogus typoutput routines
+
+-- As of 8.0, this check finds refcursor, which is borrowing
+-- other types' I/O routines
+SELECT p1.oid, p1.typname, p2.oid, p2.proname
+FROM pg_type AS p1, pg_proc AS p2
+WHERE p1.typoutput = p2.oid AND p1.typtype in ('b', 'p') AND NOT
+ (p2.pronargs = 1 AND
+ (p2.proargtypes[0] = p1.oid OR
+ (p2.oid = 'array_out'::regproc AND
+ p1.typelem != 0 AND p1.typlen = -1)))
+ORDER BY 1;
+
+SELECT p1.oid, p1.typname, p2.oid, p2.proname
+FROM pg_type AS p1, pg_proc AS p2
+WHERE p1.typoutput = p2.oid AND p1.typtype in ('b', 'p') AND NOT
+ (p2.prorettype = 'cstring'::regtype AND NOT p2.proretset);
+
+-- Check for bogus typreceive routines
+
+SELECT p1.oid, p1.typname, p2.oid, p2.proname
+FROM pg_type AS p1, pg_proc AS p2
+WHERE p1.typreceive = p2.oid AND p1.typtype in ('b', 'p') AND NOT
+ ((p2.pronargs = 1 AND p2.proargtypes[0] = 'internal'::regtype) OR
+ (p2.pronargs = 3 AND p2.proargtypes[0] = 'internal'::regtype AND
+ p2.proargtypes[1] = 'oid'::regtype AND
+ p2.proargtypes[2] = 'int4'::regtype));
+
+-- As of 7.4, this check finds refcursor, which is borrowing
+-- other types' I/O routines
+SELECT p1.oid, p1.typname, p2.oid, p2.proname
+FROM pg_type AS p1, pg_proc AS p2
+WHERE p1.typreceive = p2.oid AND p1.typtype in ('b', 'p') AND NOT
+ (p1.typelem != 0 AND p1.typlen < 0) AND NOT
+ (p2.prorettype = p1.oid AND NOT p2.proretset)
+ORDER BY 1;
+
+-- Varlena array types will point to array_recv
+-- Exception as of 8.1: int2vector and oidvector have their own I/O routines
+SELECT p1.oid, p1.typname, p2.oid, p2.proname
+FROM pg_type AS p1, pg_proc AS p2
+WHERE p1.typreceive = p2.oid AND p1.typtype in ('b', 'p') AND
+ (p1.typelem != 0 AND p1.typlen < 0) AND NOT
+ (p2.oid = 'array_recv'::regproc)
+ORDER BY 1;
+
+-- Array types should have same typdelim as their element types
+SELECT p1.oid, p1.typname, p2.oid, p2.typname
+FROM pg_type p1, pg_type p2
+WHERE p1.typelem = p2.oid and p1.typdelim != p2.typdelim
+ AND p1.typname like E'\\_%';
+
+
+-- Suspicious if typreceive doesn't take same number of args as typinput
+SELECT p1.oid, p1.typname, p2.oid, p2.proname, p3.oid, p3.proname
+FROM pg_type AS p1, pg_proc AS p2, pg_proc AS p3
+WHERE p1.typinput = p2.oid AND p1.typreceive = p3.oid AND
+ p2.pronargs != p3.pronargs;
+
+-- Check for bogus typsend routines
+
+-- As of 7.4, this check finds refcursor, which is borrowing
+-- other types' I/O routines
+SELECT p1.oid, p1.typname, p2.oid, p2.proname
+FROM pg_type AS p1, pg_proc AS p2
+WHERE p1.typsend = p2.oid AND p1.typtype in ('b', 'p') AND NOT
+ (p2.pronargs = 1 AND
+ (p2.proargtypes[0] = p1.oid OR
+ (p2.oid = 'array_send'::regproc AND
+ p1.typelem != 0 AND p1.typlen = -1)))
+ORDER BY 1;
+
+SELECT p1.oid, p1.typname, p2.oid, p2.proname
+FROM pg_type AS p1, pg_proc AS p2
+WHERE p1.typsend = p2.oid AND p1.typtype in ('b', 'p') AND NOT
+ (p2.prorettype = 'bytea'::regtype AND NOT p2.proretset);
+
+-- **************** pg_class ****************
+
+-- Look for illegal values in pg_class fields
+
+SELECT p1.oid, p1.relname
+FROM pg_class as p1
+WHERE p1.relkind NOT IN ('r', 'i', 'S', 'u', 't', 'o', 'b', 'v', 'c');
+
+-- Indexes should have an access method, others not.
+
+SELECT p1.oid, p1.relname
+FROM pg_class as p1
+WHERE (p1.relkind = 'i' AND p1.relam = 0) OR
+ (p1.relkind != 'i' AND p1.relam != 0);
+
+-- **************** pg_attribute ****************
+
+-- Look for illegal values in pg_attribute fields
+
+SELECT p1.attrelid, p1.attname
+FROM pg_attribute as p1
+WHERE p1.attrelid = 0 OR p1.atttypid = 0 OR p1.attnum = 0 OR
+ p1.attcacheoff != -1 OR p1.attinhcount < 0 OR
+ (p1.attinhcount = 0 AND NOT p1.attislocal);
+
+-- Cross-check attnum against parent relation
+
+SELECT p1.attrelid, p1.attname, p2.oid, p2.relname
+FROM pg_attribute AS p1, pg_class AS p2
+WHERE p1.attrelid = p2.oid AND p1.attnum > p2.relnatts;
+
+-- Detect missing pg_attribute entries: should have as many non-system
+-- attributes as parent relation expects
+
+SELECT p1.oid, p1.relname
+FROM pg_class AS p1
+WHERE p1.relnatts != (SELECT count(*) FROM pg_attribute AS p2
+ WHERE p2.attrelid = p1.oid AND p2.attnum > 0);
+
+-- Cross-check against pg_type entry
+-- NOTE: we allow attstorage to be 'plain' even when typstorage is not;
+-- this is mainly for toast tables.
+-- UNDONE: Turn this off until we can figure out why the new system columns cause a bunch of rows to be generated here???
+-- SELECT p1.attrelid, p1.attname, p2.oid, p2.typname
+-- FROM pg_attribute AS p1, pg_type AS p2
+-- WHERE p1.atttypid = p2.oid AND
+-- (p1.attlen != p2.typlen OR
+-- p1.attalign != p2.typalign OR
+-- p1.attbyval != p2.typbyval OR
+-- (p1.attstorage != p2.typstorage AND p1.attstorage != 'p'));
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/f05c19ed/src/test/feature/catalog/sql/varchar.sql
----------------------------------------------------------------------
diff --git a/src/test/feature/catalog/sql/varchar.sql b/src/test/feature/catalog/sql/varchar.sql
new file mode 100644
index 0000000..414c585
--- /dev/null
+++ b/src/test/feature/catalog/sql/varchar.sql
@@ -0,0 +1,66 @@
+--
+-- VARCHAR
+--
+
+CREATE TABLE VARCHAR_TBL(f1 varchar(1));
+
+INSERT INTO VARCHAR_TBL (f1) VALUES ('a');
+
+INSERT INTO VARCHAR_TBL (f1) VALUES ('A');
+
+-- any of the following three input formats are acceptable
+INSERT INTO VARCHAR_TBL (f1) VALUES ('1');
+
+INSERT INTO VARCHAR_TBL (f1) VALUES (2);
+
+INSERT INTO VARCHAR_TBL (f1) VALUES ('3');
+
+-- zero-length char
+INSERT INTO VARCHAR_TBL (f1) VALUES ('');
+
+-- try varchar's of greater than 1 length
+INSERT INTO VARCHAR_TBL (f1) VALUES ('cd');
+INSERT INTO VARCHAR_TBL (f1) VALUES ('c ');
+
+
+SELECT '' AS seven, * FROM VARCHAR_TBL;
+
+SELECT '' AS six, c.*
+ FROM VARCHAR_TBL c
+ WHERE c.f1 <> 'a';
+
+SELECT '' AS one, c.*
+ FROM VARCHAR_TBL c
+ WHERE c.f1 = 'a';
+
+SELECT '' AS five, c.*
+ FROM VARCHAR_TBL c
+ WHERE c.f1 < 'a';
+
+SELECT '' AS six, c.*
+ FROM VARCHAR_TBL c
+ WHERE c.f1 <= 'a';
+
+SELECT '' AS one, c.*
+ FROM VARCHAR_TBL c
+ WHERE c.f1 > 'a';
+
+SELECT '' AS two, c.*
+ FROM VARCHAR_TBL c
+ WHERE c.f1 >= 'a';
+
+DROP TABLE VARCHAR_TBL;
+
+--
+-- Now test longer arrays of char
+--
+
+CREATE TABLE VARCHAR_TBL(f1 varchar(4));
+
+INSERT INTO VARCHAR_TBL (f1) VALUES ('a');
+INSERT INTO VARCHAR_TBL (f1) VALUES ('ab');
+INSERT INTO VARCHAR_TBL (f1) VALUES ('abcd');
+INSERT INTO VARCHAR_TBL (f1) VALUES ('abcde');
+INSERT INTO VARCHAR_TBL (f1) VALUES ('abcd ');
+
+SELECT '' AS four, * FROM VARCHAR_TBL;
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/f05c19ed/src/test/feature/catalog/test_type.cpp
----------------------------------------------------------------------
diff --git a/src/test/feature/catalog/test_type.cpp b/src/test/feature/catalog/test_type.cpp
new file mode 100644
index 0000000..f8bed88
--- /dev/null
+++ b/src/test/feature/catalog/test_type.cpp
@@ -0,0 +1,55 @@
+#include "gtest/gtest.h"
+
+#include "lib/sql_util.h"
+
+using std::string;
+
+class TestType: public ::testing::Test
+{
+ public:
+ TestType() {};
+ ~TestType() {};
+};
+
+#define TEST_F_FILE(TestName, basePath, testcase) \
+TEST_F(TestName, testcase) \
+{ \
+ hawq::test::SQLUtility util; \
+ string SqlFile(basePath); \
+ string AnsFile(basePath); \
+ SqlFile += "/sql/" #testcase ".sql"; \
+ AnsFile += "/ans/" #testcase ".ans"; \
+ util.execSQLFile(SqlFile, AnsFile); \
+}
+
+#define TEST_F_FILE_TYPE(testcase) TEST_F_FILE(TestType, "catalog", testcase)
+
+TEST_F_FILE_TYPE(boolean)
+
+TEST_F_FILE_TYPE(char)
+
+TEST_F_FILE_TYPE(date)
+
+TEST_F_FILE_TYPE(float4)
+
+TEST_F_FILE_TYPE(float8)
+
+TEST_F_FILE_TYPE(int2)
+
+TEST_F_FILE_TYPE(int4)
+
+TEST_F_FILE_TYPE(int8)
+
+TEST_F_FILE_TYPE(money)
+
+TEST_F_FILE_TYPE(name)
+
+TEST_F_FILE_TYPE(oid)
+
+TEST_F_FILE_TYPE(text)
+
+TEST_F_FILE_TYPE(time)
+
+TEST_F_FILE_TYPE(type_sanity)
+
+TEST_F_FILE_TYPE(varchar)
[02/14] incubator-hawq git commit: HAWQ-917. Refactor feature tests
for data type check with new googletest framework
Posted by rl...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/f05c19ed/src/test/regress/expected/name.out
----------------------------------------------------------------------
diff --git a/src/test/regress/expected/name.out b/src/test/regress/expected/name.out
deleted file mode 100755
index 2a3ceb4..0000000
--- a/src/test/regress/expected/name.out
+++ /dev/null
@@ -1,126 +0,0 @@
---
--- NAME
--- all inputs are silently truncated at NAMEDATALEN-1 (63) characters
---
--- fixed-length by reference
-SELECT name 'name string' = name 'name string' AS "True";
- True
-------
- t
-(1 row)
-
-SELECT name 'name string' = name 'name string ' AS "False";
- False
--------
- f
-(1 row)
-
---
---
---
-CREATE TABLE NAME_TBL(f1 name);
-INSERT INTO NAME_TBL(f1) VALUES ('1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJKLMNOPQR');
-INSERT INTO NAME_TBL(f1) VALUES ('1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqr');
-INSERT INTO NAME_TBL(f1) VALUES ('asdfghjkl;');
-INSERT INTO NAME_TBL(f1) VALUES ('343f%2a');
-INSERT INTO NAME_TBL(f1) VALUES ('d34aaasdf');
-INSERT INTO NAME_TBL(f1) VALUES ('');
-INSERT INTO NAME_TBL(f1) VALUES ('1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ');
-SELECT '' AS seven, * FROM NAME_TBL order by f1;
- seven | f1
--------+-----------------------------------------------------------------
- |
- | 1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJKLMNOPQ
- | 1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJKLMNOPQ
- | 1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopq
- | 343f%2a
- | asdfghjkl;
- | d34aaasdf
-(7 rows)
-
-SELECT '' AS six, c.f1 FROM NAME_TBL c WHERE c.f1 <> '1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJKLMNOPQR' order by f1;
- six | f1
------+-----------------------------------------------------------------
- |
- | 1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopq
- | 343f%2a
- | asdfghjkl;
- | d34aaasdf
-(5 rows)
-
-SELECT '' AS one, c.f1 FROM NAME_TBL c WHERE c.f1 = '1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJKLMNOPQR' order by f1;
- one | f1
------+-----------------------------------------------------------------
- | 1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJKLMNOPQ
- | 1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJKLMNOPQ
-(2 rows)
-
-SELECT '' AS three, c.f1 FROM NAME_TBL c WHERE c.f1 < '1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJKLMNOPQR' order by f1;
- three | f1
--------+----
- |
-(1 row)
-
-SELECT '' AS four, c.f1 FROM NAME_TBL c WHERE c.f1 <= '1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJKLMNOPQR' order by f1;
- four | f1
-------+-----------------------------------------------------------------
- |
- | 1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJKLMNOPQ
- | 1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJKLMNOPQ
-(3 rows)
-
-SELECT '' AS three, c.f1 FROM NAME_TBL c WHERE c.f1 > '1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJKLMNOPQR' order by f1;
- three | f1
--------+-----------------------------------------------------------------
- | 1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopq
- | 343f%2a
- | asdfghjkl;
- | d34aaasdf
-(4 rows)
-
-SELECT '' AS four, c.f1 FROM NAME_TBL c WHERE c.f1 >= '1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJKLMNOPQR' order by f1;
- four | f1
-------+-----------------------------------------------------------------
- | 1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJKLMNOPQ
- | 1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJKLMNOPQ
- | 1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopq
- | 343f%2a
- | asdfghjkl;
- | d34aaasdf
-(6 rows)
-
-SELECT '' AS seven, c.f1 FROM NAME_TBL c WHERE c.f1 ~ '.*' order by f1;
- seven | f1
--------+-----------------------------------------------------------------
- |
- | 1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJKLMNOPQ
- | 1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJKLMNOPQ
- | 1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopq
- | 343f%2a
- | asdfghjkl;
- | d34aaasdf
-(7 rows)
-
-SELECT '' AS zero, c.f1 FROM NAME_TBL c WHERE c.f1 !~ '.*' order by f1;
- zero | f1
-------+----
-(0 rows)
-
-SELECT '' AS three, c.f1 FROM NAME_TBL c WHERE c.f1 ~ '[0-9]' order by f1;
- three | f1
--------+-----------------------------------------------------------------
- | 1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJKLMNOPQ
- | 1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJKLMNOPQ
- | 1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopq
- | 343f%2a
- | d34aaasdf
-(5 rows)
-
-SELECT '' AS two, c.f1 FROM NAME_TBL c WHERE c.f1 ~ '.*asdf.*' order by f1;
- two | f1
------+------------
- | asdfghjkl;
- | d34aaasdf
-(2 rows)
-
-DROP TABLE NAME_TBL;
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/f05c19ed/src/test/regress/expected/oid.out
----------------------------------------------------------------------
diff --git a/src/test/regress/expected/oid.out b/src/test/regress/expected/oid.out
deleted file mode 100755
index 2119262..0000000
--- a/src/test/regress/expected/oid.out
+++ /dev/null
@@ -1,102 +0,0 @@
---
--- OID
---
-CREATE TABLE OID_TBL(f1 oid);
-INSERT INTO OID_TBL(f1) VALUES ('1234');
-INSERT INTO OID_TBL(f1) VALUES ('1235');
-INSERT INTO OID_TBL(f1) VALUES ('987');
-INSERT INTO OID_TBL(f1) VALUES ('-1040');
-INSERT INTO OID_TBL(f1) VALUES ('99999999');
-INSERT INTO OID_TBL(f1) VALUES ('5 ');
-INSERT INTO OID_TBL(f1) VALUES (' 10 ');
--- leading/trailing hard tab is also allowed
-INSERT INTO OID_TBL(f1) VALUES (' 15 ');
--- bad inputs
-INSERT INTO OID_TBL(f1) VALUES ('');
-ERROR: invalid input syntax for type oid: ""
-INSERT INTO OID_TBL(f1) VALUES (' ');
-ERROR: invalid input syntax for type oid: " "
-INSERT INTO OID_TBL(f1) VALUES ('asdfasd');
-ERROR: invalid input syntax for type oid: "asdfasd"
-INSERT INTO OID_TBL(f1) VALUES ('99asdfasd');
-ERROR: invalid input syntax for type oid: "99asdfasd"
-INSERT INTO OID_TBL(f1) VALUES ('5 d');
-ERROR: invalid input syntax for type oid: "5 d"
-INSERT INTO OID_TBL(f1) VALUES (' 5d');
-ERROR: invalid input syntax for type oid: " 5d"
-INSERT INTO OID_TBL(f1) VALUES ('5 5');
-ERROR: invalid input syntax for type oid: "5 5"
-INSERT INTO OID_TBL(f1) VALUES (' - 500');
-ERROR: invalid input syntax for type oid: " - 500"
-INSERT INTO OID_TBL(f1) VALUES ('32958209582039852935');
-ERROR: value "32958209582039852935" is out of range for type oid
-INSERT INTO OID_TBL(f1) VALUES ('-23582358720398502385');
-ERROR: value "-23582358720398502385" is out of range for type oid
-SELECT '' AS six, * FROM OID_TBL order by 1, 2;
- six | f1
------+------------
- | 5
- | 10
- | 15
- | 987
- | 1234
- | 1235
- | 99999999
- | 4294966256
-(8 rows)
-
-SELECT '' AS one, o.* FROM OID_TBL o WHERE o.f1 = 1234 order by 1, 2;
- one | f1
------+------
- | 1234
-(1 row)
-
-SELECT '' AS five, o.* FROM OID_TBL o WHERE o.f1 <> '1234' order by 1,2;
- five | f1
-------+------------
- | 5
- | 10
- | 15
- | 987
- | 1235
- | 99999999
- | 4294966256
-(7 rows)
-
-SELECT '' AS three, o.* FROM OID_TBL o WHERE o.f1 <= '1234' order by 1,2;
- three | f1
--------+------
- | 5
- | 10
- | 15
- | 987
- | 1234
-(5 rows)
-
-SELECT '' AS two, o.* FROM OID_TBL o WHERE o.f1 < '1234' order by 1,2;
- two | f1
------+-----
- | 5
- | 10
- | 15
- | 987
-(4 rows)
-
-SELECT '' AS four, o.* FROM OID_TBL o WHERE o.f1 >= '1234' order by 1,2;
- four | f1
-------+------------
- | 1234
- | 1235
- | 99999999
- | 4294966256
-(4 rows)
-
-SELECT '' AS three, o.* FROM OID_TBL o WHERE o.f1 > '1234' order by 1,2;
- three | f1
--------+------------
- | 1235
- | 99999999
- | 4294966256
-(3 rows)
-
-DROP TABLE OID_TBL;
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/f05c19ed/src/test/regress/expected/text.out
----------------------------------------------------------------------
diff --git a/src/test/regress/expected/text.out b/src/test/regress/expected/text.out
deleted file mode 100755
index 4d6347d..0000000
--- a/src/test/regress/expected/text.out
+++ /dev/null
@@ -1,25 +0,0 @@
---
--- TEXT
---
-SELECT text 'this is a text string' = text 'this is a text string' AS true;
- true
-------
- t
-(1 row)
-
-SELECT text 'this is a text string' = text 'this is a text strin' AS false;
- false
--------
- f
-(1 row)
-
-CREATE TABLE TEXT_TBL (f1 text);
-INSERT INTO TEXT_TBL VALUES ('doh!');
-INSERT INTO TEXT_TBL VALUES ('hi de ho neighbor');
-SELECT '' AS two, * FROM TEXT_TBL order by f1;
- two | f1
------+-------------------
- | doh!
- | hi de ho neighbor
-(2 rows)
-
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/f05c19ed/src/test/regress/expected/time.out
----------------------------------------------------------------------
diff --git a/src/test/regress/expected/time.out b/src/test/regress/expected/time.out
deleted file mode 100755
index 5881799..0000000
--- a/src/test/regress/expected/time.out
+++ /dev/null
@@ -1,86 +0,0 @@
---
--- TIME
---
-CREATE TABLE TIME_TBL (f1 time(2));
-INSERT INTO TIME_TBL VALUES ('00:00');
-INSERT INTO TIME_TBL VALUES ('01:00');
--- as of 7.4, timezone spec should be accepted and ignored
-INSERT INTO TIME_TBL VALUES ('02:03 PST');
-INSERT INTO TIME_TBL VALUES ('11:59 EDT');
-INSERT INTO TIME_TBL VALUES ('12:00');
-INSERT INTO TIME_TBL VALUES ('12:01');
-INSERT INTO TIME_TBL VALUES ('23:59');
-INSERT INTO TIME_TBL VALUES ('11:59:59.99 PM');
-INSERT INTO TIME_TBL VALUES ('2003-03-07 15:36:39 America/New_York');
-INSERT INTO TIME_TBL VALUES ('2003-07-07 15:36:39 America/New_York');
--- this should fail (the timezone offset is not known)
-INSERT INTO TIME_TBL VALUES ('15:36:39 America/New_York');
-ERROR: invalid input syntax for type time: "15:36:39 America/New_York"
-SELECT f1 AS "Time" FROM TIME_TBL ORDER BY 1;
- Time
--------------
- 00:00:00
- 01:00:00
- 02:03:00
- 11:59:00
- 12:00:00
- 12:01:00
- 15:36:39
- 15:36:39
- 23:59:00
- 23:59:59.99
-(10 rows)
-
-SELECT f1 AS "Three" FROM TIME_TBL WHERE f1 < '05:06:07' ORDER BY 1;
- Three
-----------
- 00:00:00
- 01:00:00
- 02:03:00
-(3 rows)
-
-SELECT f1 AS "Five" FROM TIME_TBL WHERE f1 > '05:06:07' ORDER BY 1;
- Five
--------------
- 11:59:00
- 12:00:00
- 12:01:00
- 15:36:39
- 15:36:39
- 23:59:00
- 23:59:59.99
-(7 rows)
-
-SELECT f1 AS "None" FROM TIME_TBL WHERE f1 < '00:00' ORDER BY 1;
- None
-------
-(0 rows)
-
-SELECT f1 AS "Eight" FROM TIME_TBL WHERE f1 >= '00:00' ORDER BY 1;
- Eight
--------------
- 00:00:00
- 01:00:00
- 02:03:00
- 11:59:00
- 12:00:00
- 12:01:00
- 15:36:39
- 15:36:39
- 23:59:00
- 23:59:59.99
-(10 rows)
-
---
--- TIME simple math
---
--- We now make a distinction between time and intervals,
--- and adding two times together makes no sense at all.
--- Leave in one query to show that it is rejected,
--- and do the rest of the testing in horology.sql
--- where we do mixed-type arithmetic. - thomas 2000-12-02
-SELECT f1 + time '00:01' AS "Illegal" FROM TIME_TBL;
-ERROR: operator is not unique: time without time zone + time without time zone
-LINE 1: SELECT f1 + time '00:01' AS "Illegal" FROM TIME_TBL;
- ^
-HINT: Could not choose a best candidate operator. You may need to add explicit type casts.
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/f05c19ed/src/test/regress/expected/type_sanity.out
----------------------------------------------------------------------
diff --git a/src/test/regress/expected/type_sanity.out b/src/test/regress/expected/type_sanity.out
deleted file mode 100755
index aa81910..0000000
--- a/src/test/regress/expected/type_sanity.out
+++ /dev/null
@@ -1,282 +0,0 @@
---
--- TYPE_SANITY
--- Sanity checks for common errors in making type-related system tables:
--- pg_type, pg_class, pg_attribute.
---
--- None of the SELECTs here should ever find any matching entries,
--- so the expected output is easy to maintain ;-).
--- A test failure indicates someone messed up an entry in the system tables.
---
--- NB: we assume the oidjoins test will have caught any dangling links,
--- that is OID or REGPROC fields that are not zero and do not match some
--- row in the linked-to table. However, if we want to enforce that a link
--- field can't be 0, we have to check it here.
--- **************** pg_type ****************
--- Look for illegal values in pg_type fields.
-SELECT p1.oid, p1.typname
-FROM pg_type as p1
-WHERE p1.typnamespace = 0 OR
- (p1.typlen <= 0 AND p1.typlen != -1 AND p1.typlen != -2) OR
- (p1.typtype not in ('b', 'c', 'd', 'p')) OR
- NOT p1.typisdefined OR
- (p1.typalign not in ('c', 's', 'i', 'd')) OR
- (p1.typstorage not in ('p', 'x', 'e', 'm'));
- oid | typname
------+---------
-(0 rows)
-
--- Look for "pass by value" types that can't be passed by value.
-SELECT p1.oid, p1.typname
-FROM pg_type as p1
-WHERE p1.typbyval AND
- (p1.typlen != 1 OR p1.typalign != 'c') AND
- (p1.typlen != 2 OR p1.typalign != 's') AND
- (p1.typlen != 4 OR p1.typalign != 'i') AND
- (p1.typlen != 8 OR p1.typalign != 'd') ;
- oid | typname
------+---------
-(0 rows)
-
--- Look for "toastable" types that aren't varlena.
-SELECT p1.oid, p1.typname
-FROM pg_type as p1
-WHERE p1.typstorage != 'p' AND
- (p1.typbyval OR p1.typlen != -1);
- oid | typname
------+---------
-(0 rows)
-
--- Look for complex types that do not have a typrelid entry,
--- or basic types that do.
-SELECT p1.oid, p1.typname
-FROM pg_type as p1
-WHERE (p1.typtype = 'c' AND p1.typrelid = 0) OR
- (p1.typtype != 'c' AND p1.typrelid != 0);
- oid | typname
------+---------
-(0 rows)
-
--- Look for basic types that don't have an array type.
--- NOTE: as of 8.0, this check finds smgr and unknown.
-SELECT p1.oid, p1.typname
-FROM pg_type as p1
-WHERE p1.typtype in ('b') AND p1.typname NOT LIKE E'\\_%' AND NOT EXISTS
- (SELECT 1 FROM pg_type as p2
- WHERE p2.typname = ('_' || p1.typname)::name AND
- p2.typelem = p1.oid);
- oid | typname
------+---------
- 210 | smgr
- 705 | unknown
-(2 rows)
-
--- Text conversion routines must be provided.
-SELECT p1.oid, p1.typname
-FROM pg_type as p1
-WHERE (p1.typinput = 0 OR p1.typoutput = 0);
- oid | typname
------+---------
-(0 rows)
-
--- Check for bogus typinput routines
-SELECT p1.oid, p1.typname, p2.oid, p2.proname
-FROM pg_type AS p1, pg_proc AS p2
-WHERE p1.typinput = p2.oid AND p1.typtype in ('b', 'p') AND NOT
- ((p2.pronargs = 1 AND p2.proargtypes[0] = 'cstring'::regtype) OR
- (p2.pronargs = 3 AND p2.proargtypes[0] = 'cstring'::regtype AND
- p2.proargtypes[1] = 'oid'::regtype AND
- p2.proargtypes[2] = 'int4'::regtype));
- oid | typname | oid | proname
------+---------+-----+---------
-(0 rows)
-
--- As of 8.0, this check finds refcursor, which is borrowing
--- other types' I/O routines
-SELECT p1.oid, p1.typname, p2.oid, p2.proname
-FROM pg_type AS p1, pg_proc AS p2
-WHERE p1.typinput = p2.oid AND p1.typtype in ('b', 'p') AND NOT
- (p1.typelem != 0 AND p1.typlen < 0) AND NOT
- (p2.prorettype = p1.oid AND NOT p2.proretset)
-ORDER BY 1;
- oid | typname | oid | proname
-------+-----------+-----+---------
- 1790 | refcursor | 46 | textin
-(1 row)
-
--- Varlena array types will point to array_in
--- Exception as of 8.1: int2vector and oidvector have their own I/O routines
-SELECT p1.oid, p1.typname, p2.oid, p2.proname
-FROM pg_type AS p1, pg_proc AS p2
-WHERE p1.typinput = p2.oid AND p1.typtype in ('b', 'p') AND
- (p1.typelem != 0 AND p1.typlen < 0) AND NOT
- (p2.oid = 'array_in'::regproc)
-ORDER BY 1;
- oid | typname | oid | proname
------+------------+-----+--------------
- 22 | int2vector | 40 | int2vectorin
- 30 | oidvector | 54 | oidvectorin
-(2 rows)
-
--- Check for bogus typoutput routines
--- As of 8.0, this check finds refcursor, which is borrowing
--- other types' I/O routines
-SELECT p1.oid, p1.typname, p2.oid, p2.proname
-FROM pg_type AS p1, pg_proc AS p2
-WHERE p1.typoutput = p2.oid AND p1.typtype in ('b', 'p') AND NOT
- (p2.pronargs = 1 AND
- (p2.proargtypes[0] = p1.oid OR
- (p2.oid = 'array_out'::regproc AND
- p1.typelem != 0 AND p1.typlen = -1)))
-ORDER BY 1;
- oid | typname | oid | proname
-------+-----------+-----+---------
- 1790 | refcursor | 47 | textout
-(1 row)
-
-SELECT p1.oid, p1.typname, p2.oid, p2.proname
-FROM pg_type AS p1, pg_proc AS p2
-WHERE p1.typoutput = p2.oid AND p1.typtype in ('b', 'p') AND NOT
- (p2.prorettype = 'cstring'::regtype AND NOT p2.proretset);
- oid | typname | oid | proname
------+---------+-----+---------
-(0 rows)
-
--- Check for bogus typreceive routines
-SELECT p1.oid, p1.typname, p2.oid, p2.proname
-FROM pg_type AS p1, pg_proc AS p2
-WHERE p1.typreceive = p2.oid AND p1.typtype in ('b', 'p') AND NOT
- ((p2.pronargs = 1 AND p2.proargtypes[0] = 'internal'::regtype) OR
- (p2.pronargs = 3 AND p2.proargtypes[0] = 'internal'::regtype AND
- p2.proargtypes[1] = 'oid'::regtype AND
- p2.proargtypes[2] = 'int4'::regtype));
- oid | typname | oid | proname
------+---------+-----+---------
-(0 rows)
-
--- As of 7.4, this check finds refcursor, which is borrowing
--- other types' I/O routines
-SELECT p1.oid, p1.typname, p2.oid, p2.proname
-FROM pg_type AS p1, pg_proc AS p2
-WHERE p1.typreceive = p2.oid AND p1.typtype in ('b', 'p') AND NOT
- (p1.typelem != 0 AND p1.typlen < 0) AND NOT
- (p2.prorettype = p1.oid AND NOT p2.proretset)
-ORDER BY 1;
- oid | typname | oid | proname
-------+-----------+------+----------
- 1790 | refcursor | 2414 | textrecv
-(1 row)
-
--- Varlena array types will point to array_recv
--- Exception as of 8.1: int2vector and oidvector have their own I/O routines
-SELECT p1.oid, p1.typname, p2.oid, p2.proname
-FROM pg_type AS p1, pg_proc AS p2
-WHERE p1.typreceive = p2.oid AND p1.typtype in ('b', 'p') AND
- (p1.typelem != 0 AND p1.typlen < 0) AND NOT
- (p2.oid = 'array_recv'::regproc)
-ORDER BY 1;
- oid | typname | oid | proname
------+------------+------+----------------
- 22 | int2vector | 2410 | int2vectorrecv
- 30 | oidvector | 2420 | oidvectorrecv
-(2 rows)
-
--- Array types should have same typdelim as their element types
-SELECT p1.oid, p1.typname, p2.oid, p2.typname
-FROM pg_type p1, pg_type p2
-WHERE p1.typelem = p2.oid and p1.typdelim != p2.typdelim
- AND p1.typname like E'\\_%';
- oid | typname | oid | typname
------+---------+-----+---------
-(0 rows)
-
--- Suspicious if typreceive doesn't take same number of args as typinput
-SELECT p1.oid, p1.typname, p2.oid, p2.proname, p3.oid, p3.proname
-FROM pg_type AS p1, pg_proc AS p2, pg_proc AS p3
-WHERE p1.typinput = p2.oid AND p1.typreceive = p3.oid AND
- p2.pronargs != p3.pronargs;
- oid | typname | oid | proname | oid | proname
------+---------+-----+---------+-----+---------
-(0 rows)
-
--- Check for bogus typsend routines
--- As of 7.4, this check finds refcursor, which is borrowing
--- other types' I/O routines
-SELECT p1.oid, p1.typname, p2.oid, p2.proname
-FROM pg_type AS p1, pg_proc AS p2
-WHERE p1.typsend = p2.oid AND p1.typtype in ('b', 'p') AND NOT
- (p2.pronargs = 1 AND
- (p2.proargtypes[0] = p1.oid OR
- (p2.oid = 'array_send'::regproc AND
- p1.typelem != 0 AND p1.typlen = -1)))
-ORDER BY 1;
- oid | typname | oid | proname
-------+-----------+------+----------
- 1790 | refcursor | 2415 | textsend
-(1 row)
-
-SELECT p1.oid, p1.typname, p2.oid, p2.proname
-FROM pg_type AS p1, pg_proc AS p2
-WHERE p1.typsend = p2.oid AND p1.typtype in ('b', 'p') AND NOT
- (p2.prorettype = 'bytea'::regtype AND NOT p2.proretset);
- oid | typname | oid | proname
------+---------+-----+---------
-(0 rows)
-
--- **************** pg_class ****************
--- Look for illegal values in pg_class fields
-SELECT p1.oid, p1.relname
-FROM pg_class as p1
-WHERE p1.relkind NOT IN ('r', 'i', 's', 'S', 'c', 't', 'v');
- oid | relname
------+---------
-(0 rows)
-
--- Indexes should have an access method, others not.
-SELECT p1.oid, p1.relname
-FROM pg_class as p1
-WHERE (p1.relkind = 'i' AND p1.relam = 0) OR
- (p1.relkind != 'i' AND p1.relam != 0);
- oid | relname
------+---------
-(0 rows)
-
--- **************** pg_attribute ****************
--- Look for illegal values in pg_attribute fields
-SELECT p1.attrelid, p1.attname
-FROM pg_attribute as p1
-WHERE p1.attrelid = 0 OR p1.atttypid = 0 OR p1.attnum = 0 OR
- p1.attcacheoff != -1 OR p1.attinhcount < 0 OR
- (p1.attinhcount = 0 AND NOT p1.attislocal);
- attrelid | attname
-----------+---------
-(0 rows)
-
--- Cross-check attnum against parent relation
-SELECT p1.attrelid, p1.attname, p2.oid, p2.relname
-FROM pg_attribute AS p1, pg_class AS p2
-WHERE p1.attrelid = p2.oid AND p1.attnum > p2.relnatts;
- attrelid | attname | oid | relname
-----------+---------+-----+---------
-(0 rows)
-
--- Detect missing pg_attribute entries: should have as many non-system
--- attributes as parent relation expects
-SELECT p1.oid, p1.relname
-FROM pg_class AS p1
-WHERE p1.relnatts != (SELECT count(*) FROM pg_attribute AS p2
- WHERE p2.attrelid = p1.oid AND p2.attnum > 0);
- oid | relname
------+---------
-(0 rows)
-
--- Cross-check against pg_type entry
--- NOTE: we allow attstorage to be 'plain' even when typstorage is not;
--- this is mainly for toast tables.
--- UNDONE: Turn this off until we can figure out why the new system columns cause a bunch of rows to be generated here???
--- SELECT p1.attrelid, p1.attname, p2.oid, p2.typname
--- FROM pg_attribute AS p1, pg_type AS p2
--- WHERE p1.atttypid = p2.oid AND
--- (p1.attlen != p2.typlen OR
--- p1.attalign != p2.typalign OR
--- p1.attbyval != p2.typbyval OR
--- (p1.attstorage != p2.typstorage AND p1.attstorage != 'p'));
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/f05c19ed/src/test/regress/expected/varchar.out
----------------------------------------------------------------------
diff --git a/src/test/regress/expected/varchar.out b/src/test/regress/expected/varchar.out
deleted file mode 100755
index 48a77f5..0000000
--- a/src/test/regress/expected/varchar.out
+++ /dev/null
@@ -1,111 +0,0 @@
---
--- VARCHAR
---
-CREATE TABLE VARCHAR_TBL(f1 varchar(1));
-INSERT INTO VARCHAR_TBL (f1) VALUES ('a');
-INSERT INTO VARCHAR_TBL (f1) VALUES ('A');
--- any of the following three input formats are acceptable
-INSERT INTO VARCHAR_TBL (f1) VALUES ('1');
-INSERT INTO VARCHAR_TBL (f1) VALUES (2);
-INSERT INTO VARCHAR_TBL (f1) VALUES ('3');
--- zero-length char
-INSERT INTO VARCHAR_TBL (f1) VALUES ('');
--- try varchar's of greater than 1 length
-INSERT INTO VARCHAR_TBL (f1) VALUES ('cd');
-ERROR: value too long for type character varying(1)
-INSERT INTO VARCHAR_TBL (f1) VALUES ('c ');
-SELECT '' AS seven, * FROM VARCHAR_TBL;
- seven | f1
--------+----
- | a
- | A
- | 1
- | 2
- | 3
- |
- | c
-(7 rows)
-
-SELECT '' AS six, c.*
- FROM VARCHAR_TBL c
- WHERE c.f1 <> 'a';
- six | f1
------+----
- | A
- | 1
- | 2
- | 3
- |
- | c
-(6 rows)
-
-SELECT '' AS one, c.*
- FROM VARCHAR_TBL c
- WHERE c.f1 = 'a';
- one | f1
------+----
- | a
-(1 row)
-
-SELECT '' AS five, c.*
- FROM VARCHAR_TBL c
- WHERE c.f1 < 'a';
- five | f1
-------+----
- | A
- | 1
- | 2
- | 3
- |
-(5 rows)
-
-SELECT '' AS six, c.*
- FROM VARCHAR_TBL c
- WHERE c.f1 <= 'a';
- six | f1
------+----
- | a
- | A
- | 1
- | 2
- | 3
- |
-(6 rows)
-
-SELECT '' AS one, c.*
- FROM VARCHAR_TBL c
- WHERE c.f1 > 'a';
- one | f1
------+----
- | c
-(1 row)
-
-SELECT '' AS two, c.*
- FROM VARCHAR_TBL c
- WHERE c.f1 >= 'a';
- two | f1
------+----
- | a
- | c
-(2 rows)
-
-DROP TABLE VARCHAR_TBL;
---
--- Now test longer arrays of char
---
-CREATE TABLE VARCHAR_TBL(f1 varchar(4));
-INSERT INTO VARCHAR_TBL (f1) VALUES ('a');
-INSERT INTO VARCHAR_TBL (f1) VALUES ('ab');
-INSERT INTO VARCHAR_TBL (f1) VALUES ('abcd');
-INSERT INTO VARCHAR_TBL (f1) VALUES ('abcde');
-ERROR: value too long for type character varying(4)
-INSERT INTO VARCHAR_TBL (f1) VALUES ('abcd ');
-SELECT '' AS four, * FROM VARCHAR_TBL;
- four | f1
-------+------
- | a
- | ab
- | abcd
- | abcd
-(4 rows)
-
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/f05c19ed/src/test/regress/sql/boolean.sql
----------------------------------------------------------------------
diff --git a/src/test/regress/sql/boolean.sql b/src/test/regress/sql/boolean.sql
deleted file mode 100644
index 4282c15..0000000
--- a/src/test/regress/sql/boolean.sql
+++ /dev/null
@@ -1,149 +0,0 @@
---
--- BOOLEAN
---
-
---
--- sanity check - if this fails go insane!
---
-SELECT 1 AS one;
-
-
--- ******************testing built-in type bool********************
-
--- check bool type-casting as well as and, or, not in qualifications--
-
-SELECT bool 't' AS true;
-
-SELECT bool 'f' AS false;
-
-SELECT bool 't' or bool 'f' AS true;
-
-SELECT bool 't' and bool 'f' AS false;
-
-SELECT not bool 'f' AS true;
-
-SELECT bool 't' = bool 'f' AS false;
-
-SELECT bool 't' <> bool 'f' AS true;
-
-
-CREATE TABLE BOOLTBL1 (f1 bool);
-
-INSERT INTO BOOLTBL1 (f1) VALUES (bool 't');
-
-INSERT INTO BOOLTBL1 (f1) VALUES (bool 'True');
-
-INSERT INTO BOOLTBL1 (f1) VALUES (bool 'true');
-
-
--- BOOLTBL1 should be full of true's at this point
-SELECT '' AS t_3, BOOLTBL1.* FROM BOOLTBL1;
-
-
-SELECT '' AS t_3, BOOLTBL1.*
- FROM BOOLTBL1
- WHERE f1 = bool 'true';
-
-
-SELECT '' AS t_3, BOOLTBL1.*
- FROM BOOLTBL1
- WHERE f1 <> bool 'false';
-
-SELECT '' AS zero, BOOLTBL1.*
- FROM BOOLTBL1
- WHERE booleq(bool 'false', f1);
-
-INSERT INTO BOOLTBL1 (f1) VALUES (bool 'f');
-
-SELECT '' AS f_1, BOOLTBL1.*
- FROM BOOLTBL1
- WHERE f1 = bool 'false';
-
-
-CREATE TABLE BOOLTBL2 (f1 bool);
-
-INSERT INTO BOOLTBL2 (f1) VALUES (bool 'f');
-
-INSERT INTO BOOLTBL2 (f1) VALUES (bool 'false');
-
-INSERT INTO BOOLTBL2 (f1) VALUES (bool 'False');
-
-INSERT INTO BOOLTBL2 (f1) VALUES (bool 'FALSE');
-
--- This is now an invalid expression
--- For pre-v6.3 this evaluated to false - thomas 1997-10-23
-INSERT INTO BOOLTBL2 (f1)
- VALUES (bool 'XXX');
-
--- BOOLTBL2 should be full of false's at this point
-SELECT '' AS f_4, BOOLTBL2.* FROM BOOLTBL2;
-
-
-SELECT '' AS tf_12, BOOLTBL1.*, BOOLTBL2.*
- FROM BOOLTBL1, BOOLTBL2
- WHERE BOOLTBL2.f1 <> BOOLTBL1.f1;
-
-
-SELECT '' AS tf_12, BOOLTBL1.*, BOOLTBL2.*
- FROM BOOLTBL1, BOOLTBL2
- WHERE boolne(BOOLTBL2.f1,BOOLTBL1.f1);
-
-
-SELECT '' AS ff_4, BOOLTBL1.*, BOOLTBL2.*
- FROM BOOLTBL1, BOOLTBL2
- WHERE BOOLTBL2.f1 = BOOLTBL1.f1 and BOOLTBL1.f1 = bool 'false' ;
-
-
-SELECT '' AS tf_12_ff_4, BOOLTBL1.*, BOOLTBL2.*
- FROM BOOLTBL1, BOOLTBL2
- WHERE BOOLTBL2.f1 = BOOLTBL1.f1 or BOOLTBL1.f1 = bool 'true'
- ORDER BY BOOLTBL1.f1, BOOLTBL2.f1 ;
-
---
--- SQL92 syntax
--- Try all combinations to ensure that we get nothing when we expect nothing
--- - thomas 2000-01-04
---
-
-SELECT '' AS "True", f1
- FROM BOOLTBL1
- WHERE f1 IS TRUE;
-
-SELECT '' AS "Not False", f1
- FROM BOOLTBL1
- WHERE f1 IS NOT FALSE;
-
-SELECT '' AS "False", f1
- FROM BOOLTBL1
- WHERE f1 IS FALSE;
-
-SELECT '' AS "Not True", f1
- FROM BOOLTBL1
- WHERE f1 IS NOT TRUE;
-
-SELECT '' AS "True", f1
- FROM BOOLTBL2
- WHERE f1 IS TRUE;
-
-SELECT '' AS "Not False", f1
- FROM BOOLTBL2
- WHERE f1 IS NOT FALSE;
-
-SELECT '' AS "False", f1
- FROM BOOLTBL2
- WHERE f1 IS FALSE;
-
-SELECT '' AS "Not True", f1
- FROM BOOLTBL2
- WHERE f1 IS NOT TRUE;
-
---
--- Clean up
--- Many tables are retained by the regression test, but these do not seem
--- particularly useful so just get rid of them for now.
--- - thomas 1997-11-30
---
-
-DROP TABLE BOOLTBL1;
-
-DROP TABLE BOOLTBL2;
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/f05c19ed/src/test/regress/sql/char.sql
----------------------------------------------------------------------
diff --git a/src/test/regress/sql/char.sql b/src/test/regress/sql/char.sql
deleted file mode 100644
index fcaef7e..0000000
--- a/src/test/regress/sql/char.sql
+++ /dev/null
@@ -1,75 +0,0 @@
---
--- CHAR
---
-
--- fixed-length by value
--- internally passed by value if <= 4 bytes in storage
-
-SELECT char 'c' = char 'c' AS true;
-
---
--- Build a table for testing
---
-
-CREATE TABLE CHAR_TBL(f1 char);
-
-INSERT INTO CHAR_TBL (f1) VALUES ('a');
-
-INSERT INTO CHAR_TBL (f1) VALUES ('A');
-
--- any of the following three input formats are acceptable
-INSERT INTO CHAR_TBL (f1) VALUES ('1');
-
-INSERT INTO CHAR_TBL (f1) VALUES (2);
-
-INSERT INTO CHAR_TBL (f1) VALUES ('3');
-
--- zero-length char
-INSERT INTO CHAR_TBL (f1) VALUES ('');
-
--- try char's of greater than 1 length
-INSERT INTO CHAR_TBL (f1) VALUES ('cd');
-INSERT INTO CHAR_TBL (f1) VALUES ('c ');
-
-
-SELECT '' AS seven, * FROM CHAR_TBL;
-
-SELECT '' AS six, c.*
- FROM CHAR_TBL c
- WHERE c.f1 <> 'a';
-
-SELECT '' AS one, c.*
- FROM CHAR_TBL c
- WHERE c.f1 = 'a';
-
-SELECT '' AS five, c.*
- FROM CHAR_TBL c
- WHERE c.f1 < 'a';
-
-SELECT '' AS six, c.*
- FROM CHAR_TBL c
- WHERE c.f1 <= 'a';
-
-SELECT '' AS one, c.*
- FROM CHAR_TBL c
- WHERE c.f1 > 'a';
-
-SELECT '' AS two, c.*
- FROM CHAR_TBL c
- WHERE c.f1 >= 'a';
-
-DROP TABLE CHAR_TBL;
-
---
--- Now test longer arrays of char
---
-
-CREATE TABLE CHAR_TBL(f1 char(4));
-
-INSERT INTO CHAR_TBL (f1) VALUES ('a');
-INSERT INTO CHAR_TBL (f1) VALUES ('ab');
-INSERT INTO CHAR_TBL (f1) VALUES ('abcd');
-INSERT INTO CHAR_TBL (f1) VALUES ('abcde');
-INSERT INTO CHAR_TBL (f1) VALUES ('abcd ');
-
-SELECT '' AS four, * FROM CHAR_TBL;
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/f05c19ed/src/test/regress/sql/date.sql
----------------------------------------------------------------------
diff --git a/src/test/regress/sql/date.sql b/src/test/regress/sql/date.sql
deleted file mode 100644
index 7ed6e15..0000000
--- a/src/test/regress/sql/date.sql
+++ /dev/null
@@ -1,271 +0,0 @@
---
--- DATE
---
-
-CREATE TABLE DATE_TBL (f1 date);
-
-INSERT INTO DATE_TBL VALUES ('1957-04-09');
-INSERT INTO DATE_TBL VALUES ('1957-06-13');
-INSERT INTO DATE_TBL VALUES ('1996-02-28');
-INSERT INTO DATE_TBL VALUES ('1996-02-29');
-INSERT INTO DATE_TBL VALUES ('1996-03-01');
-INSERT INTO DATE_TBL VALUES ('1996-03-02');
-INSERT INTO DATE_TBL VALUES ('1997-02-28');
-INSERT INTO DATE_TBL VALUES ('1997-02-29');
-INSERT INTO DATE_TBL VALUES ('1997-03-01');
-INSERT INTO DATE_TBL VALUES ('1997-03-02');
-INSERT INTO DATE_TBL VALUES ('2000-04-01');
-INSERT INTO DATE_TBL VALUES ('2000-04-02');
-INSERT INTO DATE_TBL VALUES ('2000-04-03');
-INSERT INTO DATE_TBL VALUES ('2038-04-08');
-INSERT INTO DATE_TBL VALUES ('2039-04-09');
-INSERT INTO DATE_TBL VALUES ('2040-04-10');
-
-SELECT f1 AS "Fifteen" FROM DATE_TBL ORDER BY 1;
-
-SELECT f1 AS "Nine" FROM DATE_TBL WHERE f1 < '2000-01-01' ORDER BY 1;
-
-SELECT f1 AS "Three" FROM DATE_TBL
- WHERE f1 BETWEEN '2000-01-01' AND '2001-01-01' ORDER BY 1;
-
---
--- Check all the documented input formats
---
-SET datestyle TO iso; -- display results in ISO
-
-SET datestyle TO ymd;
-
-SELECT date 'January 8, 1999';
-SELECT date '1999-01-08';
-SELECT date '1999-01-18';
-SELECT date '1/8/1999';
-SELECT date '1/18/1999';
-SELECT date '18/1/1999';
-SELECT date '01/02/03';
-SELECT date '19990108';
-SELECT date '990108';
-SELECT date '1999.008';
-SELECT date 'J2451187';
-SELECT date 'January 8, 99 BC';
-
-SELECT date '99-Jan-08';
-SELECT date '1999-Jan-08';
-SELECT date '08-Jan-99';
-SELECT date '08-Jan-1999';
-SELECT date 'Jan-08-99';
-SELECT date 'Jan-08-1999';
-SELECT date '99-08-Jan';
-SELECT date '1999-08-Jan';
-
-SELECT date '99 Jan 08';
-SELECT date '1999 Jan 08';
-SELECT date '08 Jan 99';
-SELECT date '08 Jan 1999';
-SELECT date 'Jan 08 99';
-SELECT date 'Jan 08 1999';
-SELECT date '99 08 Jan';
-SELECT date '1999 08 Jan';
-
-SELECT date '99-01-08';
-SELECT date '1999-01-08';
-SELECT date '08-01-99';
-SELECT date '08-01-1999';
-SELECT date '01-08-99';
-SELECT date '01-08-1999';
-SELECT date '99-08-01';
-SELECT date '1999-08-01';
-
-SELECT date '99 01 08';
-SELECT date '1999 01 08';
-SELECT date '08 01 99';
-SELECT date '08 01 1999';
-SELECT date '01 08 99';
-SELECT date '01 08 1999';
-SELECT date '99 08 01';
-SELECT date '1999 08 01';
-
-SET datestyle TO dmy;
-
-SELECT date 'January 8, 1999';
-SELECT date '1999-01-08';
-SELECT date '1999-01-18';
-SELECT date '1/8/1999';
-SELECT date '1/18/1999';
-SELECT date '18/1/1999';
-SELECT date '01/02/03';
-SELECT date '19990108';
-SELECT date '990108';
-SELECT date '1999.008';
-SELECT date 'J2451187';
-SELECT date 'January 8, 99 BC';
-
-SELECT date '99-Jan-08';
-SELECT date '1999-Jan-08';
-SELECT date '08-Jan-99';
-SELECT date '08-Jan-1999';
-SELECT date 'Jan-08-99';
-SELECT date 'Jan-08-1999';
-SELECT date '99-08-Jan';
-SELECT date '1999-08-Jan';
-
-SELECT date '99 Jan 08';
-SELECT date '1999 Jan 08';
-SELECT date '08 Jan 99';
-SELECT date '08 Jan 1999';
-SELECT date 'Jan 08 99';
-SELECT date 'Jan 08 1999';
-SELECT date '99 08 Jan';
-SELECT date '1999 08 Jan';
-
-SELECT date '99-01-08';
-SELECT date '1999-01-08';
-SELECT date '08-01-99';
-SELECT date '08-01-1999';
-SELECT date '01-08-99';
-SELECT date '01-08-1999';
-SELECT date '99-08-01';
-SELECT date '1999-08-01';
-
-SELECT date '99 01 08';
-SELECT date '1999 01 08';
-SELECT date '08 01 99';
-SELECT date '08 01 1999';
-SELECT date '01 08 99';
-SELECT date '01 08 1999';
-SELECT date '99 08 01';
-SELECT date '1999 08 01';
-
-SET datestyle TO mdy;
-
-SELECT date 'January 8, 1999';
-SELECT date '1999-01-08';
-SELECT date '1999-01-18';
-SELECT date '1/8/1999';
-SELECT date '1/18/1999';
-SELECT date '18/1/1999';
-SELECT date '01/02/03';
-SELECT date '19990108';
-SELECT date '990108';
-SELECT date '1999.008';
-SELECT date 'J2451187';
-SELECT date 'January 8, 99 BC';
-
-SELECT date '99-Jan-08';
-SELECT date '1999-Jan-08';
-SELECT date '08-Jan-99';
-SELECT date '08-Jan-1999';
-SELECT date 'Jan-08-99';
-SELECT date 'Jan-08-1999';
-SELECT date '99-08-Jan';
-SELECT date '1999-08-Jan';
-
-SELECT date '99 Jan 08';
-SELECT date '1999 Jan 08';
-SELECT date '08 Jan 99';
-SELECT date '08 Jan 1999';
-SELECT date 'Jan 08 99';
-SELECT date 'Jan 08 1999';
-SELECT date '99 08 Jan';
-SELECT date '1999 08 Jan';
-
-SELECT date '99-01-08';
-SELECT date '1999-01-08';
-SELECT date '08-01-99';
-SELECT date '08-01-1999';
-SELECT date '01-08-99';
-SELECT date '01-08-1999';
-SELECT date '99-08-01';
-SELECT date '1999-08-01';
-
-SELECT date '99 01 08';
-SELECT date '1999 01 08';
-SELECT date '08 01 99';
-SELECT date '08 01 1999';
-SELECT date '01 08 99';
-SELECT date '01 08 1999';
-SELECT date '99 08 01';
-SELECT date '1999 08 01';
-
-RESET datestyle;
-
---
--- Simple math
--- Leave most of it for the horology tests
---
-
-SELECT f1 - date '2000-01-01' AS "Days From 2K" FROM DATE_TBL ORDER BY 1;
-
-SELECT f1 - date 'epoch' AS "Days From Epoch" FROM DATE_TBL ORDER BY 1;
-
-SELECT date 'yesterday' - date 'today' AS "One day";
-
-SELECT date 'today' - date 'tomorrow' AS "One day";
-
-SELECT date 'yesterday' - date 'tomorrow' AS "Two days";
-
-SELECT date 'tomorrow' - date 'today' AS "One day";
-
-SELECT date 'today' - date 'yesterday' AS "One day";
-
-SELECT date 'tomorrow' - date 'yesterday' AS "Two days";
-
---
--- test extract!
---
--- century
---
-SELECT EXTRACT(CENTURY FROM DATE '0101-12-31 BC'); -- -2
-SELECT EXTRACT(CENTURY FROM DATE '0100-12-31 BC'); -- -1
-SELECT EXTRACT(CENTURY FROM DATE '0001-12-31 BC'); -- -1
-SELECT EXTRACT(CENTURY FROM DATE '0001-01-01'); -- 1
-SELECT EXTRACT(CENTURY FROM DATE '0001-01-01 AD'); -- 1
-SELECT EXTRACT(CENTURY FROM DATE '1900-12-31'); -- 19
-SELECT EXTRACT(CENTURY FROM DATE '1901-01-01'); -- 20
-SELECT EXTRACT(CENTURY FROM DATE '2000-12-31'); -- 20
-SELECT EXTRACT(CENTURY FROM DATE '2001-01-01'); -- 21
-SELECT EXTRACT(CENTURY FROM CURRENT_DATE)>=21 AS True; -- true
---
--- millennium
---
-SELECT EXTRACT(MILLENNIUM FROM DATE '0001-12-31 BC'); -- -1
-SELECT EXTRACT(MILLENNIUM FROM DATE '0001-01-01 AD'); -- 1
-SELECT EXTRACT(MILLENNIUM FROM DATE '1000-12-31'); -- 1
-SELECT EXTRACT(MILLENNIUM FROM DATE '1001-01-01'); -- 2
-SELECT EXTRACT(MILLENNIUM FROM DATE '2000-12-31'); -- 2
-SELECT EXTRACT(MILLENNIUM FROM DATE '2001-01-01'); -- 3
--- next test to be fixed on the turn of the next millennium;-)
-SELECT EXTRACT(MILLENNIUM FROM CURRENT_DATE); -- 3
---
--- decade
---
-SELECT EXTRACT(DECADE FROM DATE '1994-12-25'); -- 199
-SELECT EXTRACT(DECADE FROM DATE '0010-01-01'); -- 1
-SELECT EXTRACT(DECADE FROM DATE '0009-12-31'); -- 0
-SELECT EXTRACT(DECADE FROM DATE '0001-01-01 BC'); -- 0
-SELECT EXTRACT(DECADE FROM DATE '0002-12-31 BC'); -- -1
-SELECT EXTRACT(DECADE FROM DATE '0011-01-01 BC'); -- -1
-SELECT EXTRACT(DECADE FROM DATE '0012-12-31 BC'); -- -2
---
--- some other types:
---
--- on a timestamp.
-SELECT EXTRACT(CENTURY FROM NOW())>=21 AS True; -- true
-SELECT EXTRACT(CENTURY FROM TIMESTAMP '1970-03-20 04:30:00.00000'); -- 20
--- on an interval
-SELECT EXTRACT(CENTURY FROM INTERVAL '100 y'); -- 1
-SELECT EXTRACT(CENTURY FROM INTERVAL '99 y'); -- 0
-SELECT EXTRACT(CENTURY FROM INTERVAL '-99 y'); -- 0
-SELECT EXTRACT(CENTURY FROM INTERVAL '-100 y'); -- -1
---
--- test trunc function!
---
-SELECT DATE_TRUNC('MILLENNIUM', TIMESTAMP '1970-03-20 04:30:00.00000'); -- 1001
-SELECT DATE_TRUNC('MILLENNIUM', DATE '1970-03-20'); -- 1001-01-01
-SELECT DATE_TRUNC('CENTURY', TIMESTAMP '1970-03-20 04:30:00.00000'); -- 1901
-SELECT DATE_TRUNC('CENTURY', DATE '1970-03-20'); -- 1901
-SELECT DATE_TRUNC('CENTURY', DATE '2004-08-10'); -- 2001-01-01
-SELECT DATE_TRUNC('CENTURY', DATE '0002-02-04'); -- 0001-01-01
-SELECT DATE_TRUNC('CENTURY', DATE '0055-08-10 BC'); -- 0100-01-01 BC
-SELECT DATE_TRUNC('DECADE', DATE '1993-12-25'); -- 1990-01-01
-SELECT DATE_TRUNC('DECADE', DATE '0004-12-25'); -- 0001-01-01 BC
-SELECT DATE_TRUNC('DECADE', DATE '0002-12-31 BC'); -- 0011-01-01 BC
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/f05c19ed/src/test/regress/sql/float4.sql
----------------------------------------------------------------------
diff --git a/src/test/regress/sql/float4.sql b/src/test/regress/sql/float4.sql
deleted file mode 100644
index f33c6d2..0000000
--- a/src/test/regress/sql/float4.sql
+++ /dev/null
@@ -1,85 +0,0 @@
---
--- FLOAT4
---
-
-CREATE TABLE FLOAT4_TBL (f1 float4);
-
-INSERT INTO FLOAT4_TBL(f1) VALUES (' 0.0');
-INSERT INTO FLOAT4_TBL(f1) VALUES ('1004.30 ');
-INSERT INTO FLOAT4_TBL(f1) VALUES (' -34.84 ');
-INSERT INTO FLOAT4_TBL(f1) VALUES ('1.2345678901234e+20');
-INSERT INTO FLOAT4_TBL(f1) VALUES ('1.2345678901234e-20');
-
--- test for over and under flow
-INSERT INTO FLOAT4_TBL(f1) VALUES ('10e40');
-INSERT INTO FLOAT4_TBL(f1) VALUES ('-10e40');
-INSERT INTO FLOAT4_TBL(f1) VALUES ('10e-40');
-INSERT INTO FLOAT4_TBL(f1) VALUES ('-10e-40');
-
--- bad input
-INSERT INTO FLOAT4_TBL(f1) VALUES ('');
-INSERT INTO FLOAT4_TBL(f1) VALUES (' ');
-INSERT INTO FLOAT4_TBL(f1) VALUES ('xyz');
-INSERT INTO FLOAT4_TBL(f1) VALUES ('5.0.0');
-INSERT INTO FLOAT4_TBL(f1) VALUES ('5 . 0');
-INSERT INTO FLOAT4_TBL(f1) VALUES ('5. 0');
-INSERT INTO FLOAT4_TBL(f1) VALUES (' - 3.0');
-INSERT INTO FLOAT4_TBL(f1) VALUES ('123 5');
-
--- special inputs
-SELECT 'NaN'::float4;
-SELECT 'nan'::float4;
-SELECT ' NAN '::float4;
-SELECT 'infinity'::float4;
-SELECT ' -INFINiTY '::float4;
--- bad special inputs
-SELECT 'N A N'::float4;
-SELECT 'NaN x'::float4;
-SELECT ' INFINITY x'::float4;
-
-SELECT 'Infinity'::float4 + 100.0;
-SELECT 'Infinity'::float4 / 'Infinity'::float4;
-SELECT 'nan'::float4 / 'nan'::float4;
-
-
-SELECT '' AS five, * FROM FLOAT4_TBL ORDER BY 2;
-
-SELECT '' AS four, f.* FROM FLOAT4_TBL f WHERE f.f1 <> '1004.3' ORDER BY 2;
-
-SELECT '' AS one, f.* FROM FLOAT4_TBL f WHERE f.f1 = '1004.3' ORDER BY 2;
-
-SELECT '' AS three, f.* FROM FLOAT4_TBL f WHERE '1004.3' > f.f1 ORDER BY 2;
-
-SELECT '' AS three, f.* FROM FLOAT4_TBL f WHERE f.f1 < '1004.3' ORDER BY 2;
-
-SELECT '' AS four, f.* FROM FLOAT4_TBL f WHERE '1004.3' >= f.f1 ORDER BY 2;
-
-SELECT '' AS four, f.* FROM FLOAT4_TBL f WHERE f.f1 <= '1004.3' ORDER BY 2;
-
-SELECT '' AS three, f.f1, f.f1 * '-10' AS x FROM FLOAT4_TBL f
- WHERE f.f1 > '0.0' ORDER BY 2;
-
-SELECT '' AS three, f.f1, f.f1 + '-10' AS x FROM FLOAT4_TBL f
- WHERE f.f1 > '0.0' ORDER BY 2;
-
-SELECT '' AS three, f.f1, f.f1 / '-10' AS x FROM FLOAT4_TBL f
- WHERE f.f1 > '0.0' ORDER BY 2;
-
-SELECT '' AS three, f.f1, f.f1 - '-10' AS x FROM FLOAT4_TBL f
- WHERE f.f1 > '0.0' ORDER BY 2;
-
--- test divide by zero
-SELECT '' AS bad, f.f1 / '0.0' from FLOAT4_TBL f;
-
-SELECT '' AS five, * FROM FLOAT4_TBL ORDER BY 2;
-
--- test the unary float4abs operator
-SELECT '' AS five, f.f1, @f.f1 AS abs_f1 FROM FLOAT4_TBL f ORDER BY 2;
-
--- MPP doesn't support this yet.
---UPDATE FLOAT4_TBL
--- SET f1 = FLOAT4_TBL.f1 * '-1'
--- WHERE FLOAT4_TBL.f1 > '0.0';
-
---SELECT '' AS five, * FROM FLOAT4_TBL ORDER BY 2;
-
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/f05c19ed/src/test/regress/sql/float8.sql
----------------------------------------------------------------------
diff --git a/src/test/regress/sql/float8.sql b/src/test/regress/sql/float8.sql
deleted file mode 100644
index 7809203..0000000
--- a/src/test/regress/sql/float8.sql
+++ /dev/null
@@ -1,167 +0,0 @@
---
--- FLOAT8
---
-
-CREATE TABLE FLOAT8_TBL(i INT DEFAULT 1, f1 float8);
-
-INSERT INTO FLOAT8_TBL(f1) VALUES (' 0.0 ');
-INSERT INTO FLOAT8_TBL(f1) VALUES ('1004.30 ');
-INSERT INTO FLOAT8_TBL(f1) VALUES (' -34.84');
-INSERT INTO FLOAT8_TBL(f1) VALUES ('1.2345678901234e+200');
-INSERT INTO FLOAT8_TBL(f1) VALUES ('1.2345678901234e-200');
-
--- test for underflow and overflow handling
-SELECT '10e400'::float8;
-SELECT '-10e400'::float8;
-SELECT '10e-400'::float8;
-SELECT '-10e-400'::float8;
-
--- bad input
-INSERT INTO FLOAT8_TBL(f1) VALUES ('');
-INSERT INTO FLOAT8_TBL(f1) VALUES (' ');
-INSERT INTO FLOAT8_TBL(f1) VALUES ('xyz');
-INSERT INTO FLOAT8_TBL(f1) VALUES ('5.0.0');
-INSERT INTO FLOAT8_TBL(f1) VALUES ('5 . 0');
-INSERT INTO FLOAT8_TBL(f1) VALUES ('5. 0');
-INSERT INTO FLOAT8_TBL(f1) VALUES (' - 3');
-INSERT INTO FLOAT8_TBL(f1) VALUES ('123 5');
-
--- special inputs
-SELECT 'NaN'::float8;
-SELECT 'nan'::float8;
-SELECT ' NAN '::float8;
-SELECT 'infinity'::float8;
-SELECT ' -INFINiTY '::float8;
--- bad special inputs
-SELECT 'N A N'::float8;
-SELECT 'NaN x'::float8;
-SELECT ' INFINITY x'::float8;
-
-SELECT 'Infinity'::float8 + 100.0;
-SELECT 'Infinity'::float8 / 'Infinity'::float8;
-SELECT 'nan'::float8 / 'nan'::float8;
-
-SELECT '' AS five, f1 FROM FLOAT8_TBL ORDER BY 2;
-
-SELECT '' AS four, f.f1 FROM FLOAT8_TBL f WHERE f.f1 <> '1004.3' ORDER BY 2;
-
-SELECT '' AS one, f.f1 FROM FLOAT8_TBL f WHERE f.f1 = '1004.3' ORDER BY 2;
-
-SELECT '' AS three, f.f1 FROM FLOAT8_TBL f WHERE '1004.3' > f.f1 ORDER BY 2;
-
-SELECT '' AS three, f.f1 FROM FLOAT8_TBL f WHERE f.f1 < '1004.3' ORDER BY 2;
-
-SELECT '' AS four, f.f1 FROM FLOAT8_TBL f WHERE '1004.3' >= f.f1 ORDER BY 2;
-
-SELECT '' AS four, f.f1 FROM FLOAT8_TBL f WHERE f.f1 <= '1004.3' ORDER BY 2;
-
-SELECT '' AS three, f.f1, f.f1 * '-10' AS x
- FROM FLOAT8_TBL f
- WHERE f.f1 > '0.0' ORDER BY 2;
-
-SELECT '' AS three, f.f1, f.f1 + '-10' AS x
- FROM FLOAT8_TBL f
- WHERE f.f1 > '0.0' ORDER BY 2;
-
-SELECT '' AS three, f.f1, f.f1 / '-10' AS x
- FROM FLOAT8_TBL f
- WHERE f.f1 > '0.0' ORDER BY 2;
-
-SELECT '' AS three, f.f1, f.f1 - '-10' AS x
- FROM FLOAT8_TBL f
- WHERE f.f1 > '0.0' ORDER BY 2;
-
-SELECT '' AS one, f.f1 ^ '2.0' AS square_f1
- FROM FLOAT8_TBL f where f.f1 = '1004.3';
-
--- absolute value
-SELECT '' AS five, f.f1, @f.f1 AS abs_f1
- FROM FLOAT8_TBL f ORDER BY 2;
-
--- truncate
-SELECT '' AS five, f.f1, trunc(f.f1) AS trunc_f1
- FROM FLOAT8_TBL f ORDER BY 2;
-
--- round
-SELECT '' AS five, f.f1, round(f.f1) AS round_f1
- FROM FLOAT8_TBL f ORDER BY 2;
-
--- ceil / ceiling
-select ceil(f1) as ceil_f1 from float8_tbl f ORDER BY 1;
-select ceiling(f1) as ceiling_f1 from float8_tbl f ORDER BY 1;
-
--- floor
-select floor(f1) as floor_f1 from float8_tbl f ORDER BY 1;
-
--- sign
-select sign(f1) as sign_f1 from float8_tbl f ORDER BY 1;
-
--- square root
-SELECT sqrt(float8 '64') AS eight;
-
-SELECT |/ float8 '64' AS eight;
-
-SELECT '' AS three, f.f1, |/f.f1 AS sqrt_f1
- FROM FLOAT8_TBL f
- WHERE f.f1 > '0.0' ORDER BY 2;
-
--- power
-SELECT power(float8 '144', float8 '0.5');
-
--- take exp of ln(f.f1)
-SELECT '' AS three, f.f1, exp(ln(f.f1)) AS exp_ln_f1
- FROM FLOAT8_TBL f
- WHERE f.f1 > '0.0' ORDER BY 2;
-
--- cube root
-SELECT ||/ float8 '27' AS three;
-
-SELECT '' AS five, f.f1, ||/f.f1 AS cbrt_f1 FROM FLOAT8_TBL f ORDER BY 2;
-
-
-SELECT '' AS five, f1 FROM FLOAT8_TBL ORDER BY 2;
-
-UPDATE FLOAT8_TBL
- SET f1 = FLOAT8_TBL.f1 * '-1'
- WHERE FLOAT8_TBL.f1 > '0.0';
-
-SELECT '' AS bad, f.f1 * '1e200' from FLOAT8_TBL f;
-
-SELECT '' AS bad, f.f1 ^ '1e200' from FLOAT8_TBL f;
-
-SELECT '' AS bad, ln(f.f1) from FLOAT8_TBL f where f.f1 = '0.0' ;
-
-SELECT '' AS bad, ln(f.f1) from FLOAT8_TBL f where f.f1 < '0.0' ;
-
-SELECT '' AS bad, exp(f.f1) from FLOAT8_TBL f;
-
-SELECT '' AS bad, f.f1 / '0.0' from FLOAT8_TBL f;
-
-SELECT '' AS five, f1 FROM FLOAT8_TBL ORDER BY 2;
-
--- test for over- and underflow
-INSERT INTO FLOAT8_TBL(f1) VALUES ('10e400');
-
-INSERT INTO FLOAT8_TBL(f1) VALUES ('-10e400');
-
-INSERT INTO FLOAT8_TBL(f1) VALUES ('10e-400');
-
-INSERT INTO FLOAT8_TBL(f1) VALUES ('-10e-400');
-
--- maintain external table consistency across platforms
--- delete all values and reinsert well-behaved ones
-
-DELETE FROM FLOAT8_TBL;
-
-INSERT INTO FLOAT8_TBL(f1) VALUES ('0.0');
-
-INSERT INTO FLOAT8_TBL(f1) VALUES ('-34.84');
-
-INSERT INTO FLOAT8_TBL(f1) VALUES ('-1004.30');
-
-INSERT INTO FLOAT8_TBL(f1) VALUES ('-1.2345678901234e+200');
-
-INSERT INTO FLOAT8_TBL(f1) VALUES ('-1.2345678901234e-200');
-
-SELECT '' AS five, f1 FROM FLOAT8_TBL ORDER BY 2;
-
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/f05c19ed/src/test/regress/sql/int2.sql
----------------------------------------------------------------------
diff --git a/src/test/regress/sql/int2.sql b/src/test/regress/sql/int2.sql
deleted file mode 100644
index 082bb5c..0000000
--- a/src/test/regress/sql/int2.sql
+++ /dev/null
@@ -1,88 +0,0 @@
---
--- INT2
--- NOTE: int2 operators never check for over/underflow!
--- Some of these answers are consequently numerically incorrect.
---
-
-CREATE TABLE INT2_TBL(f1 int2);
-
-INSERT INTO INT2_TBL(f1) VALUES ('0 ');
-
-INSERT INTO INT2_TBL(f1) VALUES (' 1234 ');
-
-INSERT INTO INT2_TBL(f1) VALUES (' -1234');
-
-INSERT INTO INT2_TBL(f1) VALUES ('34.5');
-
--- largest and smallest values
-INSERT INTO INT2_TBL(f1) VALUES ('32767');
-
-INSERT INTO INT2_TBL(f1) VALUES ('-32767');
-
--- bad input values -- should give errors
-INSERT INTO INT2_TBL(f1) VALUES ('100000');
-INSERT INTO INT2_TBL(f1) VALUES ('asdf');
-INSERT INTO INT2_TBL(f1) VALUES (' ');
-INSERT INTO INT2_TBL(f1) VALUES ('- 1234');
-INSERT INTO INT2_TBL(f1) VALUES ('4 444');
-INSERT INTO INT2_TBL(f1) VALUES ('123 dt');
-INSERT INTO INT2_TBL(f1) VALUES ('');
-
-
-SELECT '' AS five, * FROM INT2_TBL order by f1;
-
-SELECT '' AS four, i.* FROM INT2_TBL i WHERE i.f1 <> int2 '0' order by f1;
-
-SELECT '' AS four, i.* FROM INT2_TBL i WHERE i.f1 <> int4 '0' order by f1;
-
-SELECT '' AS one, i.* FROM INT2_TBL i WHERE i.f1 = int2 '0' order by f1;
-
-SELECT '' AS one, i.* FROM INT2_TBL i WHERE i.f1 = int4 '0' order by f1;
-
-SELECT '' AS two, i.* FROM INT2_TBL i WHERE i.f1 < int2 '0' order by f1;
-
-SELECT '' AS two, i.* FROM INT2_TBL i WHERE i.f1 < int4 '0' order by f1;
-
-SELECT '' AS three, i.* FROM INT2_TBL i WHERE i.f1 <= int2 '0' order by f1;
-
-SELECT '' AS three, i.* FROM INT2_TBL i WHERE i.f1 <= int4 '0' order by f1;
-
-SELECT '' AS two, i.* FROM INT2_TBL i WHERE i.f1 > int2 '0' order by f1;
-
-SELECT '' AS two, i.* FROM INT2_TBL i WHERE i.f1 > int4 '0' order by f1;
-
-SELECT '' AS three, i.* FROM INT2_TBL i WHERE i.f1 >= int2 '0' order by f1;
-
-SELECT '' AS three, i.* FROM INT2_TBL i WHERE i.f1 >= int4 '0' order by f1;
-
--- positive odds
-SELECT '' AS one, i.* FROM INT2_TBL i WHERE (i.f1 % int2 '2') = int2 '1' order by f1;
-
--- any evens
-SELECT '' AS three, i.* FROM INT2_TBL i WHERE (i.f1 % int4 '2') = int2 '0' order by f1;
-
-SELECT '' AS five, i.f1, i.f1 * int2 '2' AS x FROM INT2_TBL i order by f1;
-
-SELECT '' AS five, i.f1, i.f1 * int2 '2' AS x FROM INT2_TBL i
-WHERE abs(f1) < 16384 order by f1;
-
-SELECT '' AS five, i.f1, i.f1 * int4 '2' AS x FROM INT2_TBL i order by f1;
-
-SELECT '' AS five, i.f1, i.f1 + int2 '2' AS x FROM INT2_TBL i order by f1;
-
-SELECT '' AS five, i.f1, i.f1 + int2 '2' AS x FROM INT2_TBL i
-WHERE f1 < 32766 order by f1;
-
-SELECT '' AS five, i.f1, i.f1 + int4 '2' AS x FROM INT2_TBL i order by f1;
-
-SELECT '' AS five, i.f1, i.f1 - int2 '2' AS x FROM INT2_TBL i order by f1;
-
-SELECT '' AS five, i.f1, i.f1 - int2 '2' AS x FROM INT2_TBL i
-WHERE f1 > -32767 order by f1;
-
-SELECT '' AS five, i.f1, i.f1 - int4 '2' AS x FROM INT2_TBL i order by f1;
-
-SELECT '' AS five, i.f1, i.f1 / int2 '2' AS x FROM INT2_TBL i order by f1;
-
-SELECT '' AS five, i.f1, i.f1 / int4 '2' AS x FROM INT2_TBL i order by f1;
-
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/f05c19ed/src/test/regress/sql/int4.sql
----------------------------------------------------------------------
diff --git a/src/test/regress/sql/int4.sql b/src/test/regress/sql/int4.sql
deleted file mode 100644
index d1b4225..0000000
--- a/src/test/regress/sql/int4.sql
+++ /dev/null
@@ -1,127 +0,0 @@
---
--- INT4
--- WARNING: int4 operators never check for over/underflow!
--- Some of these answers are consequently numerically incorrect.
---
-
-CREATE TABLE INT4_TBL(f1 int4);
-
-INSERT INTO INT4_TBL(f1) VALUES (' 0 ');
-
-INSERT INTO INT4_TBL(f1) VALUES ('123456 ');
-
-INSERT INTO INT4_TBL(f1) VALUES (' -123456');
-
-INSERT INTO INT4_TBL(f1) VALUES ('34.5');
-
--- largest and smallest values
-INSERT INTO INT4_TBL(f1) VALUES ('2147483647');
-
-INSERT INTO INT4_TBL(f1) VALUES ('-2147483647');
-
--- bad input values -- should give errors
-INSERT INTO INT4_TBL(f1) VALUES ('1000000000000');
-INSERT INTO INT4_TBL(f1) VALUES ('asdf');
-INSERT INTO INT4_TBL(f1) VALUES (' ');
-INSERT INTO INT4_TBL(f1) VALUES (' asdf ');
-INSERT INTO INT4_TBL(f1) VALUES ('- 1234');
-INSERT INTO INT4_TBL(f1) VALUES ('123 5');
-INSERT INTO INT4_TBL(f1) VALUES ('');
-
-
-SELECT '' AS five, * FROM INT4_TBL order by f1;
-
-SELECT '' AS four, i.* FROM INT4_TBL i WHERE i.f1 <> int2 '0' order by f1;
-
-SELECT '' AS four, i.* FROM INT4_TBL i WHERE i.f1 <> int4 '0' order by f1;
-
-SELECT '' AS one, i.* FROM INT4_TBL i WHERE i.f1 = int2 '0' order by f1;
-
-SELECT '' AS one, i.* FROM INT4_TBL i WHERE i.f1 = int4 '0' order by f1;
-
-SELECT '' AS two, i.* FROM INT4_TBL i WHERE i.f1 < int2 '0' order by f1;
-
-SELECT '' AS two, i.* FROM INT4_TBL i WHERE i.f1 < int4 '0' order by f1;
-
-SELECT '' AS three, i.* FROM INT4_TBL i WHERE i.f1 <= int2 '0' order by f1;
-
-SELECT '' AS three, i.* FROM INT4_TBL i WHERE i.f1 <= int4 '0' order by f1;
-
-SELECT '' AS two, i.* FROM INT4_TBL i WHERE i.f1 > int2 '0' order by f1;
-
-SELECT '' AS two, i.* FROM INT4_TBL i WHERE i.f1 > int4 '0' order by f1;
-
-SELECT '' AS three, i.* FROM INT4_TBL i WHERE i.f1 >= int2 '0' order by f1;
-
-SELECT '' AS three, i.* FROM INT4_TBL i WHERE i.f1 >= int4 '0' order by f1;
-
--- positive odds
-SELECT '' AS one, i.* FROM INT4_TBL i WHERE (i.f1 % int2 '2') = int2 '1' order by f1;
-
--- any evens
-SELECT '' AS three, i.* FROM INT4_TBL i WHERE (i.f1 % int4 '2') = int2 '0' order by f1;
-
-SELECT '' AS five, i.f1, i.f1 * int2 '2' AS x FROM INT4_TBL i order by f1;
-
-SELECT '' AS five, i.f1, i.f1 * int2 '2' AS x FROM INT4_TBL i
-WHERE abs(f1) < 1073741824 order by f1;
-
-SELECT '' AS five, i.f1, i.f1 * int4 '2' AS x FROM INT4_TBL i order by f1;
-
-SELECT '' AS five, i.f1, i.f1 * int4 '2' AS x FROM INT4_TBL i
-WHERE abs(f1) < 1073741824 order by f1;
-
-SELECT '' AS five, i.f1, i.f1 + int2 '2' AS x FROM INT4_TBL i order by f1;
-
-SELECT '' AS five, i.f1, i.f1 + int2 '2' AS x FROM INT4_TBL i
-WHERE f1 < 2147483646 order by f1;
-
-SELECT '' AS five, i.f1, i.f1 + int4 '2' AS x FROM INT4_TBL i order by f1;
-
-SELECT '' AS five, i.f1, i.f1 + int4 '2' AS x FROM INT4_TBL i
-WHERE f1 < 2147483646 order by f1;
-
-SELECT '' AS five, i.f1, i.f1 - int2 '2' AS x FROM INT4_TBL i order by f1;
-
-SELECT '' AS five, i.f1, i.f1 - int2 '2' AS x FROM INT4_TBL i
-WHERE f1 > -2147483647 order by f1;
-
-SELECT '' AS five, i.f1, i.f1 - int4 '2' AS x FROM INT4_TBL i order by f1;
-
-SELECT '' AS five, i.f1, i.f1 - int4 '2' AS x FROM INT4_TBL i
-WHERE f1 > -2147483647 order by f1;
-
-SELECT '' AS five, i.f1, i.f1 / int2 '2' AS x FROM INT4_TBL i order by f1;
-
-SELECT '' AS five, i.f1, i.f1 / int4 '2' AS x FROM INT4_TBL i order by f1;
-
---
--- more complex expressions
---
-
--- variations on unary minus parsing
-SELECT -2+3 AS one;
-
-SELECT 4-2 AS two;
-
-SELECT 2- -1 AS three;
-
-SELECT 2 - -2 AS four;
-
-SELECT int2 '2' * int2 '2' = int2 '16' / int2 '4' AS true;
-
-SELECT int4 '2' * int2 '2' = int2 '16' / int4 '4' AS true;
-
-SELECT int2 '2' * int4 '2' = int4 '16' / int2 '4' AS true;
-
-SELECT int4 '1000' < int4 '999' AS false;
-
-SELECT 4! AS twenty_four;
-
-SELECT !!3 AS six;
-
-SELECT 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 AS ten;
-
-SELECT 2 + 2 / 2 AS three;
-
-SELECT (2 + 2) / 2 AS two;
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/f05c19ed/src/test/regress/sql/int8.sql
----------------------------------------------------------------------
diff --git a/src/test/regress/sql/int8.sql b/src/test/regress/sql/int8.sql
deleted file mode 100644
index a545f54..0000000
--- a/src/test/regress/sql/int8.sql
+++ /dev/null
@@ -1,71 +0,0 @@
---
--- INT8
--- Test int8 64-bit integers.
---
-CREATE TABLE INT8_TBL(q1 int8, q2 int8);
-
-INSERT INTO INT8_TBL VALUES(' 123 ',' 456');
-INSERT INTO INT8_TBL VALUES('123 ','4567890123456789');
-INSERT INTO INT8_TBL VALUES('4567890123456789','123');
-INSERT INTO INT8_TBL VALUES('4567890123456789','4567890123456789');
-INSERT INTO INT8_TBL VALUES('4567890123456789','-4567890123456789');
-
--- bad inputs
-INSERT INTO INT8_TBL(q1) VALUES (' ');
-INSERT INTO INT8_TBL(q1) VALUES ('xxx');
-INSERT INTO INT8_TBL(q1) VALUES ('3908203590239580293850293850329485');
-INSERT INTO INT8_TBL(q1) VALUES ('-1204982019841029840928340329840934');
-INSERT INTO INT8_TBL(q1) VALUES ('- 123');
-INSERT INTO INT8_TBL(q1) VALUES (' 345 5');
-INSERT INTO INT8_TBL(q1) VALUES ('');
-
-SELECT * FROM INT8_TBL ;
-
-SELECT '' AS five, q1 AS plus, -q1 AS minus FROM INT8_TBL ;
-
-SELECT '' AS five, q1, q2, q1 + q2 AS plus FROM INT8_TBL ;
-SELECT '' AS five, q1, q2, q1 - q2 AS minus FROM INT8_TBL ;
-SELECT '' AS three, q1, q2, q1 * q2 AS multiply FROM INT8_TBL ;
-SELECT '' AS three, q1, q2, q1 * q2 AS multiply FROM INT8_TBL
- WHERE q1 < 1000 or (q2 > 0 and q2 < 1000) ;
-SELECT '' AS five, q1, q2, q1 / q2 AS divide FROM INT8_TBL ;
-
-SELECT '' AS five, q1, float8(q1) FROM INT8_TBL ;
-SELECT '' AS five, q2, float8(q2) FROM INT8_TBL ;
-
-SELECT '' AS five, 2 * q1 AS "twice int4" FROM INT8_TBL ;
-SELECT '' AS five, q1 * 2 AS "twice int4" FROM INT8_TBL ;
-
--- TO_CHAR()
---
-SELECT '' AS to_char_1, to_char(q1, '9G999G999G999G999G999'), to_char(q2, '9,999,999,999,999,999')
- FROM INT8_TBL ;
-
-SELECT '' AS to_char_2, to_char(q1, '9G999G999G999G999G999D999G999'), to_char(q2, '9,999,999,999,999,999.999,999')
- FROM INT8_TBL ;
-
-SELECT '' AS to_char_3, to_char( (q1 * -1), '9999999999999999PR'), to_char( (q2 * -1), '9999999999999999.999PR')
- FROM INT8_TBL ;
-
-SELECT '' AS to_char_4, to_char( (q1 * -1), '9999999999999999S'), to_char( (q2 * -1), 'S9999999999999999')
- FROM INT8_TBL ;
-
-SELECT '' AS to_char_5, to_char(q2, 'MI9999999999999999') FROM INT8_TBL ;
-SELECT '' AS to_char_6, to_char(q2, 'FMS9999999999999999') FROM INT8_TBL ;
-SELECT '' AS to_char_7, to_char(q2, 'FM9999999999999999THPR') FROM INT8_TBL ;
-SELECT '' AS to_char_8, to_char(q2, 'SG9999999999999999th') FROM INT8_TBL ;
-SELECT '' AS to_char_9, to_char(q2, '0999999999999999') FROM INT8_TBL ;
-SELECT '' AS to_char_10, to_char(q2, 'S0999999999999999') FROM INT8_TBL ;
-SELECT '' AS to_char_11, to_char(q2, 'FM0999999999999999') FROM INT8_TBL ;
-SELECT '' AS to_char_12, to_char(q2, 'FM9999999999999999.000') FROM INT8_TBL ;
-SELECT '' AS to_char_13, to_char(q2, 'L9999999999999999.000') FROM INT8_TBL ;
-SELECT '' AS to_char_14, to_char(q2, 'FM9999999999999999.999') FROM INT8_TBL ;
-SELECT '' AS to_char_15, to_char(q2, 'S 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 . 9 9 9') FROM INT8_TBL ;
-SELECT '' AS to_char_16, to_char(q2, E'99999 "text" 9999 "9999" 999 "\\"text between quote marks\\"" 9999') FROM INT8_TBL ;
-SELECT '' AS to_char_17, to_char(q2, '999999SG9999999999') FROM INT8_TBL ;
-
--- check min/max values
-select '-9223372036854775808'::int8;
-select '-9223372036854775809'::int8;
-select '9223372036854775807'::int8;
-select '9223372036854775808'::int8;
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/f05c19ed/src/test/regress/sql/money.sql
----------------------------------------------------------------------
diff --git a/src/test/regress/sql/money.sql b/src/test/regress/sql/money.sql
deleted file mode 100644
index fd5921e..0000000
--- a/src/test/regress/sql/money.sql
+++ /dev/null
@@ -1,68 +0,0 @@
---
--- MONEY
---
-
-CREATE TABLE MONEY_TBL (f1 money);
-
-INSERT INTO MONEY_TBL(f1) VALUES (' 0.0');
-INSERT INTO MONEY_TBL(f1) VALUES ('1004.30 ');
-INSERT INTO MONEY_TBL(f1) VALUES (' -34.84 ');
-INSERT INTO MONEY_TBL(f1) VALUES ('123456789012345.67');
-
--- test money over and under flow
-SELECT '12345678901234567890.12'::money = '-13639628150831692.60'::money as x;
-SELECT '123.001'::money = '123'::money as x;
-
--- bad input
-INSERT INTO MONEY_TBL(f1) VALUES ('xyz');
-INSERT INTO MONEY_TBL(f1) VALUES ('5.0.0');
-INSERT INTO MONEY_TBL(f1) VALUES ('5 . 0');
-INSERT INTO MONEY_TBL(f1) VALUES ('5. 0');
-INSERT INTO MONEY_TBL(f1) VALUES ('123 5');
-
--- queries
-SELECT '' AS five, * FROM MONEY_TBL ORDER BY 2;
-
-SELECT '' AS four, f.* FROM MONEY_TBL f WHERE f.f1 <> '1004.3' ORDER BY 2;
-
-SELECT '' AS one, f.* FROM MONEY_TBL f WHERE f.f1 = '1004.3' ORDER BY 2;
-
-SELECT '' AS three, f.* FROM MONEY_TBL f WHERE '1004.3' > f.f1 ORDER BY 2;
-
-SELECT '' AS three, f.* FROM MONEY_TBL f WHERE f.f1 < '1004.3' ORDER BY 2;
-
-SELECT '' AS four, f.* FROM MONEY_TBL f WHERE '1004.3' >= f.f1 ORDER BY 2;
-
-SELECT '' AS four, f.* FROM MONEY_TBL f WHERE f.f1 <= '1004.3' ORDER BY 2;
-
-SELECT '' AS three, f.f1, f.f1 * '-10' AS x FROM MONEY_TBL f
- WHERE f.f1 > '0.0' ORDER BY 2;
-
-SELECT '' AS three, f.f1, f.f1 + '-10' AS x FROM MONEY_TBL f
- WHERE f.f1 > '0.0' ORDER BY 2;
-
-SELECT '' AS three, f.f1, f.f1 / '-10' AS x FROM MONEY_TBL f
- WHERE f.f1 > '0.0' ORDER BY 2;
-
-SELECT '' AS three, f.f1, f.f1 - '-10' AS x FROM MONEY_TBL f
- WHERE f.f1 > '0.0' ORDER BY 2;
-
-SELECT SUM(f.f1) AS x FROM MONEY_TBL f;
-
--- test divide by zero
-SELECT '' AS bad, f.f1 / '0.0' from MONEY_TBL f;
-
-SELECT '' AS five, * FROM MONEY_TBL ORDER BY 2;
-
--- parquet table
-CREATE TABLE MONEY_TBL_P (f1 money) with (appendonly=true, orientation=parquet);
-
-INSERT INTO MONEY_TBL_P(f1) VALUES (' 0.0');
-INSERT INTO MONEY_TBL_P(f1) VALUES ('1004.30 ');
-INSERT INTO MONEY_TBL_P(f1) VALUES (' -34.84 ');
-INSERT INTO MONEY_TBL_P(f1) VALUES ('123456789012345.67');
-
-SELECT f1 FROM MONEY_TBL_P f
- ORDER BY f1;
-
-SELECT sum(f1) AS x, min(f1) as y, max(f1) as z FROM MONEY_TBL_P AS f;
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/f05c19ed/src/test/regress/sql/name.sql
----------------------------------------------------------------------
diff --git a/src/test/regress/sql/name.sql b/src/test/regress/sql/name.sql
deleted file mode 100644
index d603f57..0000000
--- a/src/test/regress/sql/name.sql
+++ /dev/null
@@ -1,54 +0,0 @@
---
--- NAME
--- all inputs are silently truncated at NAMEDATALEN-1 (63) characters
---
-
--- fixed-length by reference
-SELECT name 'name string' = name 'name string' AS "True";
-
-SELECT name 'name string' = name 'name string ' AS "False";
-
---
---
---
-
-CREATE TABLE NAME_TBL(f1 name);
-
-INSERT INTO NAME_TBL(f1) VALUES ('1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJKLMNOPQR');
-
-INSERT INTO NAME_TBL(f1) VALUES ('1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqr');
-
-INSERT INTO NAME_TBL(f1) VALUES ('asdfghjkl;');
-
-INSERT INTO NAME_TBL(f1) VALUES ('343f%2a');
-
-INSERT INTO NAME_TBL(f1) VALUES ('d34aaasdf');
-
-INSERT INTO NAME_TBL(f1) VALUES ('');
-
-INSERT INTO NAME_TBL(f1) VALUES ('1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ');
-
-
-SELECT '' AS seven, * FROM NAME_TBL order by f1;
-
-SELECT '' AS six, c.f1 FROM NAME_TBL c WHERE c.f1 <> '1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJKLMNOPQR' order by f1;
-
-SELECT '' AS one, c.f1 FROM NAME_TBL c WHERE c.f1 = '1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJKLMNOPQR' order by f1;
-
-SELECT '' AS three, c.f1 FROM NAME_TBL c WHERE c.f1 < '1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJKLMNOPQR' order by f1;
-
-SELECT '' AS four, c.f1 FROM NAME_TBL c WHERE c.f1 <= '1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJKLMNOPQR' order by f1;
-
-SELECT '' AS three, c.f1 FROM NAME_TBL c WHERE c.f1 > '1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJKLMNOPQR' order by f1;
-
-SELECT '' AS four, c.f1 FROM NAME_TBL c WHERE c.f1 >= '1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJKLMNOPQR' order by f1;
-
-SELECT '' AS seven, c.f1 FROM NAME_TBL c WHERE c.f1 ~ '.*' order by f1;
-
-SELECT '' AS zero, c.f1 FROM NAME_TBL c WHERE c.f1 !~ '.*' order by f1;
-
-SELECT '' AS three, c.f1 FROM NAME_TBL c WHERE c.f1 ~ '[0-9]' order by f1;
-
-SELECT '' AS two, c.f1 FROM NAME_TBL c WHERE c.f1 ~ '.*asdf.*' order by f1;
-
-DROP TABLE NAME_TBL;
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/f05c19ed/src/test/regress/sql/oid.sql
----------------------------------------------------------------------
diff --git a/src/test/regress/sql/oid.sql b/src/test/regress/sql/oid.sql
deleted file mode 100644
index 5747b56..0000000
--- a/src/test/regress/sql/oid.sql
+++ /dev/null
@@ -1,43 +0,0 @@
---
--- OID
---
-
-CREATE TABLE OID_TBL(f1 oid);
-
-INSERT INTO OID_TBL(f1) VALUES ('1234');
-INSERT INTO OID_TBL(f1) VALUES ('1235');
-INSERT INTO OID_TBL(f1) VALUES ('987');
-INSERT INTO OID_TBL(f1) VALUES ('-1040');
-INSERT INTO OID_TBL(f1) VALUES ('99999999');
-INSERT INTO OID_TBL(f1) VALUES ('5 ');
-INSERT INTO OID_TBL(f1) VALUES (' 10 ');
--- leading/trailing hard tab is also allowed
-INSERT INTO OID_TBL(f1) VALUES (' 15 ');
-
--- bad inputs
-INSERT INTO OID_TBL(f1) VALUES ('');
-INSERT INTO OID_TBL(f1) VALUES (' ');
-INSERT INTO OID_TBL(f1) VALUES ('asdfasd');
-INSERT INTO OID_TBL(f1) VALUES ('99asdfasd');
-INSERT INTO OID_TBL(f1) VALUES ('5 d');
-INSERT INTO OID_TBL(f1) VALUES (' 5d');
-INSERT INTO OID_TBL(f1) VALUES ('5 5');
-INSERT INTO OID_TBL(f1) VALUES (' - 500');
-INSERT INTO OID_TBL(f1) VALUES ('32958209582039852935');
-INSERT INTO OID_TBL(f1) VALUES ('-23582358720398502385');
-
-SELECT '' AS six, * FROM OID_TBL order by 1, 2;
-
-SELECT '' AS one, o.* FROM OID_TBL o WHERE o.f1 = 1234 order by 1, 2;
-
-SELECT '' AS five, o.* FROM OID_TBL o WHERE o.f1 <> '1234' order by 1,2;
-
-SELECT '' AS three, o.* FROM OID_TBL o WHERE o.f1 <= '1234' order by 1,2;
-
-SELECT '' AS two, o.* FROM OID_TBL o WHERE o.f1 < '1234' order by 1,2;
-
-SELECT '' AS four, o.* FROM OID_TBL o WHERE o.f1 >= '1234' order by 1,2;
-
-SELECT '' AS three, o.* FROM OID_TBL o WHERE o.f1 > '1234' order by 1,2;
-
-DROP TABLE OID_TBL;
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/f05c19ed/src/test/regress/sql/text.sql
----------------------------------------------------------------------
diff --git a/src/test/regress/sql/text.sql b/src/test/regress/sql/text.sql
deleted file mode 100644
index c141e4b..0000000
--- a/src/test/regress/sql/text.sql
+++ /dev/null
@@ -1,15 +0,0 @@
---
--- TEXT
---
-
-SELECT text 'this is a text string' = text 'this is a text string' AS true;
-
-SELECT text 'this is a text string' = text 'this is a text strin' AS false;
-
-CREATE TABLE TEXT_TBL (f1 text);
-
-INSERT INTO TEXT_TBL VALUES ('doh!');
-INSERT INTO TEXT_TBL VALUES ('hi de ho neighbor');
-
-SELECT '' AS two, * FROM TEXT_TBL order by f1;
-
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/f05c19ed/src/test/regress/sql/time.sql
----------------------------------------------------------------------
diff --git a/src/test/regress/sql/time.sql b/src/test/regress/sql/time.sql
deleted file mode 100644
index 02c4b7e..0000000
--- a/src/test/regress/sql/time.sql
+++ /dev/null
@@ -1,41 +0,0 @@
---
--- TIME
---
-
-CREATE TABLE TIME_TBL (f1 time(2));
-
-INSERT INTO TIME_TBL VALUES ('00:00');
-INSERT INTO TIME_TBL VALUES ('01:00');
--- as of 7.4, timezone spec should be accepted and ignored
-INSERT INTO TIME_TBL VALUES ('02:03 PST');
-INSERT INTO TIME_TBL VALUES ('11:59 EDT');
-INSERT INTO TIME_TBL VALUES ('12:00');
-INSERT INTO TIME_TBL VALUES ('12:01');
-INSERT INTO TIME_TBL VALUES ('23:59');
-INSERT INTO TIME_TBL VALUES ('11:59:59.99 PM');
-
-INSERT INTO TIME_TBL VALUES ('2003-03-07 15:36:39 America/New_York');
-INSERT INTO TIME_TBL VALUES ('2003-07-07 15:36:39 America/New_York');
--- this should fail (the timezone offset is not known)
-INSERT INTO TIME_TBL VALUES ('15:36:39 America/New_York');
-
-SELECT f1 AS "Time" FROM TIME_TBL ORDER BY 1;
-
-SELECT f1 AS "Three" FROM TIME_TBL WHERE f1 < '05:06:07' ORDER BY 1;
-
-SELECT f1 AS "Five" FROM TIME_TBL WHERE f1 > '05:06:07' ORDER BY 1;
-
-SELECT f1 AS "None" FROM TIME_TBL WHERE f1 < '00:00' ORDER BY 1;
-
-SELECT f1 AS "Eight" FROM TIME_TBL WHERE f1 >= '00:00' ORDER BY 1;
-
---
--- TIME simple math
---
--- We now make a distinction between time and intervals,
--- and adding two times together makes no sense at all.
--- Leave in one query to show that it is rejected,
--- and do the rest of the testing in horology.sql
--- where we do mixed-type arithmetic. - thomas 2000-12-02
-
-SELECT f1 + time '00:01' AS "Illegal" FROM TIME_TBL;
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/f05c19ed/src/test/regress/sql/type_sanity.sql
----------------------------------------------------------------------
diff --git a/src/test/regress/sql/type_sanity.sql b/src/test/regress/sql/type_sanity.sql
deleted file mode 100644
index e5531ba..0000000
--- a/src/test/regress/sql/type_sanity.sql
+++ /dev/null
@@ -1,223 +0,0 @@
---
--- TYPE_SANITY
--- Sanity checks for common errors in making type-related system tables:
--- pg_type, pg_class, pg_attribute.
---
--- None of the SELECTs here should ever find any matching entries,
--- so the expected output is easy to maintain ;-).
--- A test failure indicates someone messed up an entry in the system tables.
---
--- NB: we assume the oidjoins test will have caught any dangling links,
--- that is OID or REGPROC fields that are not zero and do not match some
--- row in the linked-to table. However, if we want to enforce that a link
--- field can't be 0, we have to check it here.
-
--- **************** pg_type ****************
-
--- Look for illegal values in pg_type fields.
-
-SELECT p1.oid, p1.typname
-FROM pg_type as p1
-WHERE p1.typnamespace = 0 OR
- (p1.typlen <= 0 AND p1.typlen != -1 AND p1.typlen != -2) OR
- (p1.typtype not in ('b', 'c', 'd', 'p')) OR
- NOT p1.typisdefined OR
- (p1.typalign not in ('c', 's', 'i', 'd')) OR
- (p1.typstorage not in ('p', 'x', 'e', 'm'));
-
--- Look for "pass by value" types that can't be passed by value.
-
-SELECT p1.oid, p1.typname
-FROM pg_type as p1
-WHERE p1.typbyval AND
- (p1.typlen != 1 OR p1.typalign != 'c') AND
- (p1.typlen != 2 OR p1.typalign != 's') AND
- (p1.typlen != 4 OR p1.typalign != 'i') AND
- (p1.typlen != 8 OR p1.typalign != 'd') ;
-
--- Look for "toastable" types that aren't varlena.
-
-SELECT p1.oid, p1.typname
-FROM pg_type as p1
-WHERE p1.typstorage != 'p' AND
- (p1.typbyval OR p1.typlen != -1);
-
--- Look for complex types that do not have a typrelid entry,
--- or basic types that do.
-
-SELECT p1.oid, p1.typname
-FROM pg_type as p1
-WHERE (p1.typtype = 'c' AND p1.typrelid = 0) OR
- (p1.typtype != 'c' AND p1.typrelid != 0);
-
--- Look for basic types that don't have an array type.
--- NOTE: as of 8.0, this check finds smgr and unknown.
-
-SELECT p1.oid, p1.typname
-FROM pg_type as p1
-WHERE p1.typtype in ('b') AND p1.typname NOT LIKE E'\\_%' AND NOT EXISTS
- (SELECT 1 FROM pg_type as p2
- WHERE p2.typname = ('_' || p1.typname)::name AND
- p2.typelem = p1.oid);
-
--- Text conversion routines must be provided.
-
-SELECT p1.oid, p1.typname
-FROM pg_type as p1
-WHERE (p1.typinput = 0 OR p1.typoutput = 0);
-
--- Check for bogus typinput routines
-
-SELECT p1.oid, p1.typname, p2.oid, p2.proname
-FROM pg_type AS p1, pg_proc AS p2
-WHERE p1.typinput = p2.oid AND p1.typtype in ('b', 'p') AND NOT
- ((p2.pronargs = 1 AND p2.proargtypes[0] = 'cstring'::regtype) OR
- (p2.pronargs = 3 AND p2.proargtypes[0] = 'cstring'::regtype AND
- p2.proargtypes[1] = 'oid'::regtype AND
- p2.proargtypes[2] = 'int4'::regtype));
-
--- As of 8.0, this check finds refcursor, which is borrowing
--- other types' I/O routines
-SELECT p1.oid, p1.typname, p2.oid, p2.proname
-FROM pg_type AS p1, pg_proc AS p2
-WHERE p1.typinput = p2.oid AND p1.typtype in ('b', 'p') AND NOT
- (p1.typelem != 0 AND p1.typlen < 0) AND NOT
- (p2.prorettype = p1.oid AND NOT p2.proretset)
-ORDER BY 1;
-
--- Varlena array types will point to array_in
--- Exception as of 8.1: int2vector and oidvector have their own I/O routines
-SELECT p1.oid, p1.typname, p2.oid, p2.proname
-FROM pg_type AS p1, pg_proc AS p2
-WHERE p1.typinput = p2.oid AND p1.typtype in ('b', 'p') AND
- (p1.typelem != 0 AND p1.typlen < 0) AND NOT
- (p2.oid = 'array_in'::regproc)
-ORDER BY 1;
-
--- Check for bogus typoutput routines
-
--- As of 8.0, this check finds refcursor, which is borrowing
--- other types' I/O routines
-SELECT p1.oid, p1.typname, p2.oid, p2.proname
-FROM pg_type AS p1, pg_proc AS p2
-WHERE p1.typoutput = p2.oid AND p1.typtype in ('b', 'p') AND NOT
- (p2.pronargs = 1 AND
- (p2.proargtypes[0] = p1.oid OR
- (p2.oid = 'array_out'::regproc AND
- p1.typelem != 0 AND p1.typlen = -1)))
-ORDER BY 1;
-
-SELECT p1.oid, p1.typname, p2.oid, p2.proname
-FROM pg_type AS p1, pg_proc AS p2
-WHERE p1.typoutput = p2.oid AND p1.typtype in ('b', 'p') AND NOT
- (p2.prorettype = 'cstring'::regtype AND NOT p2.proretset);
-
--- Check for bogus typreceive routines
-
-SELECT p1.oid, p1.typname, p2.oid, p2.proname
-FROM pg_type AS p1, pg_proc AS p2
-WHERE p1.typreceive = p2.oid AND p1.typtype in ('b', 'p') AND NOT
- ((p2.pronargs = 1 AND p2.proargtypes[0] = 'internal'::regtype) OR
- (p2.pronargs = 3 AND p2.proargtypes[0] = 'internal'::regtype AND
- p2.proargtypes[1] = 'oid'::regtype AND
- p2.proargtypes[2] = 'int4'::regtype));
-
--- As of 7.4, this check finds refcursor, which is borrowing
--- other types' I/O routines
-SELECT p1.oid, p1.typname, p2.oid, p2.proname
-FROM pg_type AS p1, pg_proc AS p2
-WHERE p1.typreceive = p2.oid AND p1.typtype in ('b', 'p') AND NOT
- (p1.typelem != 0 AND p1.typlen < 0) AND NOT
- (p2.prorettype = p1.oid AND NOT p2.proretset)
-ORDER BY 1;
-
--- Varlena array types will point to array_recv
--- Exception as of 8.1: int2vector and oidvector have their own I/O routines
-SELECT p1.oid, p1.typname, p2.oid, p2.proname
-FROM pg_type AS p1, pg_proc AS p2
-WHERE p1.typreceive = p2.oid AND p1.typtype in ('b', 'p') AND
- (p1.typelem != 0 AND p1.typlen < 0) AND NOT
- (p2.oid = 'array_recv'::regproc)
-ORDER BY 1;
-
--- Array types should have same typdelim as their element types
-SELECT p1.oid, p1.typname, p2.oid, p2.typname
-FROM pg_type p1, pg_type p2
-WHERE p1.typelem = p2.oid and p1.typdelim != p2.typdelim
- AND p1.typname like E'\\_%';
-
-
--- Suspicious if typreceive doesn't take same number of args as typinput
-SELECT p1.oid, p1.typname, p2.oid, p2.proname, p3.oid, p3.proname
-FROM pg_type AS p1, pg_proc AS p2, pg_proc AS p3
-WHERE p1.typinput = p2.oid AND p1.typreceive = p3.oid AND
- p2.pronargs != p3.pronargs;
-
--- Check for bogus typsend routines
-
--- As of 7.4, this check finds refcursor, which is borrowing
--- other types' I/O routines
-SELECT p1.oid, p1.typname, p2.oid, p2.proname
-FROM pg_type AS p1, pg_proc AS p2
-WHERE p1.typsend = p2.oid AND p1.typtype in ('b', 'p') AND NOT
- (p2.pronargs = 1 AND
- (p2.proargtypes[0] = p1.oid OR
- (p2.oid = 'array_send'::regproc AND
- p1.typelem != 0 AND p1.typlen = -1)))
-ORDER BY 1;
-
-SELECT p1.oid, p1.typname, p2.oid, p2.proname
-FROM pg_type AS p1, pg_proc AS p2
-WHERE p1.typsend = p2.oid AND p1.typtype in ('b', 'p') AND NOT
- (p2.prorettype = 'bytea'::regtype AND NOT p2.proretset);
-
--- **************** pg_class ****************
-
--- Look for illegal values in pg_class fields
-
-SELECT p1.oid, p1.relname
-FROM pg_class as p1
-WHERE p1.relkind NOT IN ('r', 'i', 's', 'S', 'c', 't', 'v');
-
--- Indexes should have an access method, others not.
-
-SELECT p1.oid, p1.relname
-FROM pg_class as p1
-WHERE (p1.relkind = 'i' AND p1.relam = 0) OR
- (p1.relkind != 'i' AND p1.relam != 0);
-
--- **************** pg_attribute ****************
-
--- Look for illegal values in pg_attribute fields
-
-SELECT p1.attrelid, p1.attname
-FROM pg_attribute as p1
-WHERE p1.attrelid = 0 OR p1.atttypid = 0 OR p1.attnum = 0 OR
- p1.attcacheoff != -1 OR p1.attinhcount < 0 OR
- (p1.attinhcount = 0 AND NOT p1.attislocal);
-
--- Cross-check attnum against parent relation
-
-SELECT p1.attrelid, p1.attname, p2.oid, p2.relname
-FROM pg_attribute AS p1, pg_class AS p2
-WHERE p1.attrelid = p2.oid AND p1.attnum > p2.relnatts;
-
--- Detect missing pg_attribute entries: should have as many non-system
--- attributes as parent relation expects
-
-SELECT p1.oid, p1.relname
-FROM pg_class AS p1
-WHERE p1.relnatts != (SELECT count(*) FROM pg_attribute AS p2
- WHERE p2.attrelid = p1.oid AND p2.attnum > 0);
-
--- Cross-check against pg_type entry
--- NOTE: we allow attstorage to be 'plain' even when typstorage is not;
--- this is mainly for toast tables.
--- UNDONE: Turn this off until we can figure out why the new system columns cause a bunch of rows to be generated here???
--- SELECT p1.attrelid, p1.attname, p2.oid, p2.typname
--- FROM pg_attribute AS p1, pg_type AS p2
--- WHERE p1.atttypid = p2.oid AND
--- (p1.attlen != p2.typlen OR
--- p1.attalign != p2.typalign OR
--- p1.attbyval != p2.typbyval OR
--- (p1.attstorage != p2.typstorage AND p1.attstorage != 'p'));
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/f05c19ed/src/test/regress/sql/varchar.sql
----------------------------------------------------------------------
diff --git a/src/test/regress/sql/varchar.sql b/src/test/regress/sql/varchar.sql
deleted file mode 100644
index 414c585..0000000
--- a/src/test/regress/sql/varchar.sql
+++ /dev/null
@@ -1,66 +0,0 @@
---
--- VARCHAR
---
-
-CREATE TABLE VARCHAR_TBL(f1 varchar(1));
-
-INSERT INTO VARCHAR_TBL (f1) VALUES ('a');
-
-INSERT INTO VARCHAR_TBL (f1) VALUES ('A');
-
--- any of the following three input formats are acceptable
-INSERT INTO VARCHAR_TBL (f1) VALUES ('1');
-
-INSERT INTO VARCHAR_TBL (f1) VALUES (2);
-
-INSERT INTO VARCHAR_TBL (f1) VALUES ('3');
-
--- zero-length char
-INSERT INTO VARCHAR_TBL (f1) VALUES ('');
-
--- try varchar's of greater than 1 length
-INSERT INTO VARCHAR_TBL (f1) VALUES ('cd');
-INSERT INTO VARCHAR_TBL (f1) VALUES ('c ');
-
-
-SELECT '' AS seven, * FROM VARCHAR_TBL;
-
-SELECT '' AS six, c.*
- FROM VARCHAR_TBL c
- WHERE c.f1 <> 'a';
-
-SELECT '' AS one, c.*
- FROM VARCHAR_TBL c
- WHERE c.f1 = 'a';
-
-SELECT '' AS five, c.*
- FROM VARCHAR_TBL c
- WHERE c.f1 < 'a';
-
-SELECT '' AS six, c.*
- FROM VARCHAR_TBL c
- WHERE c.f1 <= 'a';
-
-SELECT '' AS one, c.*
- FROM VARCHAR_TBL c
- WHERE c.f1 > 'a';
-
-SELECT '' AS two, c.*
- FROM VARCHAR_TBL c
- WHERE c.f1 >= 'a';
-
-DROP TABLE VARCHAR_TBL;
-
---
--- Now test longer arrays of char
---
-
-CREATE TABLE VARCHAR_TBL(f1 varchar(4));
-
-INSERT INTO VARCHAR_TBL (f1) VALUES ('a');
-INSERT INTO VARCHAR_TBL (f1) VALUES ('ab');
-INSERT INTO VARCHAR_TBL (f1) VALUES ('abcd');
-INSERT INTO VARCHAR_TBL (f1) VALUES ('abcde');
-INSERT INTO VARCHAR_TBL (f1) VALUES ('abcd ');
-
-SELECT '' AS four, * FROM VARCHAR_TBL;
[12/14] incubator-hawq git commit: HAWQ-808. Refactor feature test
for external_oid with new framework.
Posted by rl...@apache.org.
HAWQ-808. Refactor feature test for external_oid with new 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/0e6fe7a4
Tree: http://git-wip-us.apache.org/repos/asf/incubator-hawq/tree/0e6fe7a4
Diff: http://git-wip-us.apache.org/repos/asf/incubator-hawq/diff/0e6fe7a4
Branch: refs/heads/2.0.0.0-incubating
Commit: 0e6fe7a4f1431ed5d01f0fdc8b48e648869c177e
Parents: e308af6
Author: xunzhang <xu...@gmail.com>
Authored: Tue Jul 12 14:14:08 2016 +0800
Committer: rlei <rl...@pivotal.io>
Committed: Tue Jul 19 10:49:42 2016 +0800
----------------------------------------------------------------------
.../ExternalSource/ans/external_oid.ans.source | 209 ++++++
.../ExternalSource/data/multi_table.json | 1 +
.../ExternalSource/data/single_table.json | 1 +
src/test/feature/ExternalSource/lib/Makefile | 44 ++
src/test/feature/ExternalSource/lib/function.c | 727 +++++++++++++++++++
.../ExternalSource/sql/external_oid.sql.source | 108 +++
.../ExternalSource/test_external_oid.cpp | 35 +
src/test/feature/Makefile | 2 +
src/test/regress/input/external_oid.source | 118 ---
src/test/regress/known_good_schedule | 1 -
src/test/regress/output/external_oid.source | 211 ------
11 files changed, 1127 insertions(+), 330 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/0e6fe7a4/src/test/feature/ExternalSource/ans/external_oid.ans.source
----------------------------------------------------------------------
diff --git a/src/test/feature/ExternalSource/ans/external_oid.ans.source b/src/test/feature/ExternalSource/ans/external_oid.ans.source
new file mode 100644
index 0000000..3f3f3ae
--- /dev/null
+++ b/src/test/feature/ExternalSource/ans/external_oid.ans.source
@@ -0,0 +1,209 @@
+-- --------------------------------------
+-- test first external Oid initialization
+-- --------------------------------------
+-- start_matchsubs
+--
+-- # create a match/subs expression to handle ip addresses that change
+--
+-- m/.*inserted tuple to heap table pg_class \(oid \d+, relname table_xl\).*/
+-- s/oid \d+/oid SOME_OID/
+--
+-- m/.*deleted tuple oid=\d+ from heap table pg_class.*/
+-- s/oid=\d+/oid=OID/
+--
+-- end_matchsubs
+-- Create function that returns the first external Oid boundary
+CREATE OR REPLACE FUNCTION min_external_oid() RETURNS oid
+ AS '@SHARE_LIBRARY_PATH@', 'min_external_oid'
+ LANGUAGE C;
+CREATE FUNCTION
+-- Create function that returns the current external Oid
+CREATE OR REPLACE FUNCTION get_next_external_oid() RETURNS oid
+ AS '@SHARE_LIBRARY_PATH@', 'get_next_external_oid'
+ LANGUAGE C;
+CREATE FUNCTION
+-- Create function that sets the current external Oid
+CREATE OR REPLACE FUNCTION set_next_external_oid(ext_oid oid) RETURNS oid
+ AS '@SHARE_LIBRARY_PATH@', 'set_next_external_oid'
+ LANGUAGE C;
+CREATE FUNCTION
+-- Create function to insert and scan in-memory data to pg_class
+CREATE OR REPLACE FUNCTION load_json_data(filename text) RETURNS text
+ AS '@SHARE_LIBRARY_PATH@', 'load_json_data'
+ LANGUAGE C;
+CREATE FUNCTION
+-- Create function that inserts tuple with given Oid
+CREATE OR REPLACE FUNCTION caql_insert_into_heap_pg_class(relid oid, tblname text) RETURNS text
+ AS '@SHARE_LIBRARY_PATH@', 'caql_insert_into_heap_pg_class'
+ LANGUAGE C;
+CREATE FUNCTION
+-- Create function that inserts tuple with given Oid
+CREATE OR REPLACE FUNCTION caql_delete_from_heap_pg_class(relid oid) RETURNS text
+ AS '@SHARE_LIBRARY_PATH@', 'caql_delete_from_heap_pg_class'
+ LANGUAGE C;
+CREATE FUNCTION
+-- --------------------------------------
+-- Test hcat table external oid initialization
+-- --------------------------------------
+-- Boundary should be at FirstExternalObjectId
+--SELECT min_external_oid();
+-- NextExternalObjectId is uninitialized
+SELECT get_next_external_oid();
+ get_next_external_oid
+-----------------------
+ 0
+(1 row)
+
+SELECT load_json_data('@abs_datadir@/single_table.json');
+ load_json_data
+------------------
+ default.mytable
+(1 row)
+
+SELECT get_next_external_oid()::bigint - min_external_oid()::bigint;
+ ?column?
+----------
+ 0
+(1 row)
+
+BEGIN TRANSACTION;
+BEGIN
+SELECT get_next_external_oid()::bigint - min_external_oid()::bigint;
+ ?column?
+----------
+ 0
+(1 row)
+
+-- load default.mytable -> +3 oids
+-- 1 oid for namespace 'default', 1 oid for relation 'mytable', 1 oid for reltype
+SELECT load_json_data('@abs_datadir@/single_table.json');
+ load_json_data
+------------------
+ default.mytable
+(1 row)
+
+SELECT get_next_external_oid()::bigint - min_external_oid()::bigint;
+ ?column?
+----------
+ 3
+(1 row)
+
+-- load db1.ht1, db2.ht1, db2.ht2 -> +8 oids
+-- oids: db1, ht1(db1), db2, ht1(db2), ht2, reltype(ht1, ht1, ht2)
+SELECT load_json_data('@abs_datadir@/multi_table.json');
+ load_json_data
+--------------------------
+ db1.ht1 db2.ht1 db2.ht2
+(1 row)
+
+SELECT get_next_external_oid()::bigint - min_external_oid()::bigint;
+ ?column?
+----------
+ 11
+(1 row)
+
+END TRANSACTION;
+COMMIT
+-- New transaction will reset external Oid start point
+-- Yields the same result as previous transaction
+BEGIN TRANSACTION;
+BEGIN
+SELECT get_next_external_oid()::bigint - min_external_oid()::bigint;
+ ?column?
+----------
+ 0
+(1 row)
+
+SELECT load_json_data('@abs_datadir@/single_table.json');
+ load_json_data
+------------------
+ default.mytable
+(1 row)
+
+SELECT get_next_external_oid()::bigint - min_external_oid()::bigint;
+ ?column?
+----------
+ 3
+(1 row)
+
+SELECT load_json_data('@abs_datadir@/multi_table.json');
+ load_json_data
+--------------------------
+ db1.ht1 db2.ht1 db2.ht2
+(1 row)
+
+SELECT get_next_external_oid()::bigint - min_external_oid()::bigint;
+ ?column?
+----------
+ 11
+(1 row)
+
+END TRANSACTION;
+COMMIT
+-- --------------------------------------
+-- Test external oid rollover
+-- --------------------------------------
+BEGIN TRANSACTION;
+BEGIN
+SELECT get_next_external_oid()::bigint - min_external_oid()::bigint;
+ ?column?
+----------
+ 0
+(1 row)
+
+SELECT set_next_external_oid( oid(min_external_oid()::bigint + (10*power(2,20))::bigint - 8 + 1) ) > 0;
+ ?column?
+----------
+ t
+(1 row)
+
+SELECT load_json_data('@abs_datadir@/multi_table.json');
+ load_json_data
+--------------------------
+ db1.ht1 db2.ht1 db2.ht2
+(1 row)
+
+-- Used up external Oids result in Oid overflow
+SELECT get_next_external_oid();
+ get_next_external_oid
+-----------------------
+ 0
+(1 row)
+
+-- Rollover disallowed!
+SELECT load_json_data('@abs_datadir@/single_table.json');
+psql:/tmp/TestExternalOid_TestExternalOidAll.sql:92: ERROR: number of external objects from HCatalog exceeded 10M during transaction
+HINT: Separate HCatalog queries into different transactions to process.
+END TRANSACTION;
+ROLLBACK
+-- --------------------------------------
+-- Test external Oid boundary
+-- --------------------------------------
+-- Create a tuple with Oid larger than FirstExternalObjectId
+-- Will fail during next session when try to query HCatalog
+-- Because external Oid boundary is violated
+SELECT caql_insert_into_heap_pg_class(min_external_oid()::bigint + 20, 'table_xl');
+ caql_insert_into_heap_pg_class
+--------------------------------------------------------------------------
+ inserted tuple to heap table pg_class (oid 4284481555, relname table_xl)
+(1 row)
+
+-- cleanup
+SELECT caql_delete_from_heap_pg_class(min_external_oid()::bigint + 20);
+ caql_delete_from_heap_pg_class
+-------------------------------------------------------
+ deleted tuple oid=4284481555 from heap table pg_class
+(1 row)
+
+DROP FUNCTION caql_delete_from_heap_pg_class(relid oid);
+DROP FUNCTION
+DROP FUNCTION caql_insert_into_heap_pg_class(relid oid, tblname text);
+DROP FUNCTION
+DROP FUNCTION load_json_data(filename text);
+DROP FUNCTION
+DROP FUNCTION get_next_external_oid();
+DROP FUNCTION
+DROP FUNCTION set_next_external_oid(ext_oid oid);
+DROP FUNCTION
+DROP FUNCTION min_external_oid();
+DROP FUNCTION
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/0e6fe7a4/src/test/feature/ExternalSource/data/multi_table.json
----------------------------------------------------------------------
diff --git a/src/test/feature/ExternalSource/data/multi_table.json b/src/test/feature/ExternalSource/data/multi_table.json
new file mode 100644
index 0000000..82e70b0
--- /dev/null
+++ b/src/test/feature/ExternalSource/data/multi_table.json
@@ -0,0 +1 @@
+{"PXFMetadata":[{"item":{"path":"db1","name":"ht1"},"fields":[{"name":"c1","type":"bpchar","modifiers":["3"],"sourceType":"char"},{"name":"vc2","type":"varchar","modifiers":["3"],"sourceType":"varchar"}]},{"item":{"path":"db2","name":"ht1"},"fields":[{"name":"c1","type":"bpchar","modifiers":["3"],"sourceType":"char"},{"name":"vc2","type":"varchar","modifiers":["3"],"sourceType":"varchar"}]},{"item":{"path":"db2","name":"ht2"},"fields":[{"name":"c1","type":"bpchar","modifiers":["3"],"sourceType":"char"},{"name":"vc2","type":"varchar","modifiers":["3"],"sourceType":"varchar"}]}]}
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/0e6fe7a4/src/test/feature/ExternalSource/data/single_table.json
----------------------------------------------------------------------
diff --git a/src/test/feature/ExternalSource/data/single_table.json b/src/test/feature/ExternalSource/data/single_table.json
new file mode 100644
index 0000000..b571e5d
--- /dev/null
+++ b/src/test/feature/ExternalSource/data/single_table.json
@@ -0,0 +1 @@
+{"PXFMetadata":[{"item":{"path":"default","name":"mytable"},"fields":[{"name":"s1","type":"text","sourceType":"string"},{"name":"s2","type":"text","sourceType":"string"},{"name":"n1","type":"int4","sourceType":"int"},{"name":"d1","type":"float8","sourceType":"double"},{"name":"dc1","type":"numeric","modifiers":["38","18"],"sourceType":"decimal"},{"name":"tm","type":"timestamp","sourceType":"timestamp"},{"name":"f","type":"float4","sourceType":"float"},{"name":"bg","type":"int8","sourceType":"bigint"},{"name":"b","type":"bool","sourceType":"boolean"},{"name":"tn","type":"int2","sourceType":"tinyint"},{"name":"sml","type":"int2","sourceType":"tinyint"},{"name":"dt","type":"date","sourceType":"date"},{"name":"vc1","type":"varchar","modifiers":["5"],"sourceType":"varchar"},{"name":"c1","type":"bpchar","modifiers":["3"],"sourceType":"char"},{"name":"bin","type":"bytea","sourceType":"binary"}]}]}
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/0e6fe7a4/src/test/feature/ExternalSource/lib/Makefile
----------------------------------------------------------------------
diff --git a/src/test/feature/ExternalSource/lib/Makefile b/src/test/feature/ExternalSource/lib/Makefile
new file mode 100644
index 0000000..46f6c20
--- /dev/null
+++ b/src/test/feature/ExternalSource/lib/Makefile
@@ -0,0 +1,44 @@
+top_builddir = ../../../../..
+include $(top_builddir)/src/Makefile.global
+
+OS = $(shell uname)
+
+CXX = gcc
+CXXFLAGS = -Wall -O1 -g -std=gnu99 -Wmissing-prototypes -Wpointer-arith -Wendif-labels -Wformat-security -fno-strict-aliasing -fwrapv -fPIC
+
+CC = gcc
+CFLAGS = -Wall -O1 -g -std=gnu99 -Wmissing-prototypes -Wpointer-arith -Wendif-labels -Wformat-security -fno-strict-aliasing -fwrapv -fPIC
+
+CPPFLAGS = -I$(abs_top_srcdir)/src/include
+CPPFLAGS += -I$(abs_top_srcdir)/depends/libhdfs3/build/install$(prefix)/include
+CPPFLAGS += -I$(abs_top_srcdir)/depends/libyarn/build/install$(prefix)/include
+
+LDFLAGS = -L$(libdir)
+LDFLAGS += -L$(abs_top_srcdir)/src/port
+LDFLAGS += -L$(abs_top_builddir)/src/port
+LDFLAGS += -L$(abs_top_srcdir)/depends/libhdfs3/build/install$(prefix)/lib
+LDFLAGS += -L$(abs_top_srcdir)/depends/libyarn/build/install$(prefix)/lib
+
+POSTGRES = $(abs_top_srcdir)/src/backend/postgres
+
+PROG = function.c
+OBJS = function.o
+TARGET = function.so
+
+RM = rm -rf
+
+all: $(TARGET)
+
+$(OBJS): $(PROG)
+ $(CXX) $(CXXFLAGS) $(CPPFLAGS) -c -o $(OBJS) $(PROG)
+
+$(TARGET): $(OBJS)
+ifeq ($(OS),Darwin)
+ $(CXX) $(CXXFLAGS) -bundle $(OBJS) -bundle_loader $(POSTGRES) $(LDFLAGS) -o $@
+else
+ $(CXX) $(CXXFLAGS) -shared $(OBJS) $(LDFLAGS) -Wl,-rpath,'$(abs_top_builddir)/lib' -o $@
+endif
+
+clean:
+ $(RM) *.o
+ $(RM) *.so
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/0e6fe7a4/src/test/feature/ExternalSource/lib/function.c
----------------------------------------------------------------------
diff --git a/src/test/feature/ExternalSource/lib/function.c b/src/test/feature/ExternalSource/lib/function.c
new file mode 100644
index 0000000..4275edc
--- /dev/null
+++ b/src/test/feature/ExternalSource/lib/function.c
@@ -0,0 +1,727 @@
+/*
+ * json_utils.c
+ *
+ * Created on: Mar 5, 2015
+ * Author: antova
+ */
+
+#include "catalog/external/externalmd.h"
+#include "postgres.h"
+#include "access/hd_work_mgr.h"
+#include "funcapi.h"
+#include "catalog/catquery.h"
+#include "catalog/gp_policy.h"
+#include "catalog/namespace.h"
+#include "catalog/pg_database.h"
+#include "catalog/pg_exttable.h"
+#include "catalog/pg_namespace.h"
+#include "cdb/cdbinmemheapam.h"
+#include "nodes/makefuncs.h"
+#include "utils/array.h"
+#include "utils/builtins.h"
+#include "utils/lsyscache.h"
+#include "access/transam.h"
+
+/*
+ * number of output columns for the UDFs for scanning in memory catalog tables
+ */
+#define NUM_COLS 3
+
+#ifdef PG_MODULE_MAGIC
+PG_MODULE_MAGIC;
+#endif
+
+static
+char *read_file(const char *filename);
+
+static
+Oid GetRelationOid(char *tableName);
+
+/* utility functions for loading json files */
+extern Datum load_json_data(PG_FUNCTION_ARGS);
+extern Datum caql_scan_in_memory_pg_namespace(PG_FUNCTION_ARGS);
+extern Datum caql_scan_in_memory_pg_type(PG_FUNCTION_ARGS);
+extern Datum caql_scan_in_memory_gp_distribution_policy(PG_FUNCTION_ARGS);
+extern Datum caql_scan_in_memory_pg_exttable(PG_FUNCTION_ARGS);
+extern Datum caql_scan_in_memory_pg_attribute(PG_FUNCTION_ARGS);
+extern Datum caql_insert_into_heap_pg_class(PG_FUNCTION_ARGS);
+extern Datum caql_delete_from_heap_pg_class(PG_FUNCTION_ARGS);
+extern Datum get_next_external_oid(PG_FUNCTION_ARGS);
+extern Datum set_next_external_oid(PG_FUNCTION_ARGS);
+extern Datum min_external_oid(PG_FUNCTION_ARGS);
+
+PG_FUNCTION_INFO_V1(load_json_data);
+PG_FUNCTION_INFO_V1(caql_scan_in_memory_pg_namespace);
+PG_FUNCTION_INFO_V1(caql_scan_in_memory_pg_type);
+PG_FUNCTION_INFO_V1(caql_scan_in_memory_gp_distribution_policy);
+PG_FUNCTION_INFO_V1(caql_scan_in_memory_pg_exttable);
+PG_FUNCTION_INFO_V1(caql_scan_in_memory_pg_attribute);
+PG_FUNCTION_INFO_V1(caql_insert_into_heap_pg_class);
+PG_FUNCTION_INFO_V1(caql_delete_from_heap_pg_class);
+PG_FUNCTION_INFO_V1(get_next_external_oid);
+PG_FUNCTION_INFO_V1(set_next_external_oid);
+PG_FUNCTION_INFO_V1(min_external_oid);
+
+Datum
+load_json_data(PG_FUNCTION_ARGS)
+{
+ text *filename = PG_GETARG_TEXT_P(0);
+ char *filenameStr = text_to_cstring(filename);
+
+ char *pcbuf = read_file(filenameStr);
+ StringInfoData buf;
+ initStringInfo(&buf);
+ appendStringInfo(&buf, "%s", pcbuf);
+
+ List *items = ParsePxfEntries(&buf, HiveProfileName, HcatalogDbOid);
+ pfree(buf.data);
+
+ StringInfoData tblNames;
+ initStringInfo(&tblNames);
+ ListCell *lc = NULL;
+ foreach (lc, items)
+ {
+ PxfItem *item = (PxfItem *) lfirst(lc);
+ appendStringInfo(&tblNames, "%s.%s ", item->path, item->name);
+ }
+
+ PG_RETURN_TEXT_P(cstring_to_text(tblNames.data));
+}
+
+char *
+read_file(const char *filename)
+{
+ FILE *pf = fopen(filename, "r");
+ if (NULL == pf)
+ {
+ elog(ERROR, "Could not open file %s for reading", filename);
+ }
+
+ StringInfoData strinfo;
+ initStringInfo(&strinfo);
+
+ const int len = 1024;
+ char buf[len];
+
+ while (NULL != fgets(buf, len, pf))
+ {
+ appendStringInfo(&strinfo, "%s", buf);
+ }
+
+ fclose(pf);
+ return strinfo.data;
+}
+
+Datum
+caql_scan_in_memory_pg_namespace(PG_FUNCTION_ARGS)
+{
+ text *namespaceNameText = PG_GETARG_TEXT_P(0);
+ char *namespaceNameStr = text_to_cstring(namespaceNameText);
+
+ FuncCallContext *funcctx;
+ Datum result;
+ MemoryContext oldcontext;
+ TupleDesc tupdesc;
+ HeapTuple restuple;
+ HeapTuple readtup = NULL;
+ cqContext *pcqCtx;
+ StringInfoData buf;
+ initStringInfo(&buf);
+
+ if (SRF_IS_FIRSTCALL())
+ {
+ funcctx = SRF_FIRSTCALL_INIT();
+ /* switch context when allocating stuff to be used in later calls */
+ oldcontext = MemoryContextSwitchTo(funcctx->multi_call_memory_ctx);
+
+ tupdesc = CreateTemplateTupleDesc(NUM_COLS, false);
+ TupleDescInitEntry(tupdesc, (AttrNumber) 1, "nspname",
+ TEXTOID, -1, 0);
+ TupleDescInitEntry(tupdesc, (AttrNumber) 2, "nspdboid",
+ OIDOID, -1, 0);
+ TupleDescInitEntry(tupdesc, (AttrNumber) 3, "oid",
+ OIDOID, -1, 0);
+ funcctx->tuple_desc = BlessTupleDesc(tupdesc);
+
+ /* create tuples for pg_namespace table */
+ pcqCtx = caql_beginscan(
+ NULL,
+ cql("SELECT * FROM pg_namespace "
+ " WHERE nspname = :1 and nspdboid = :2",
+ CStringGetDatum((char *) namespaceNameStr), ObjectIdGetDatum(HcatalogDbOid)));
+
+ funcctx->user_fctx = pcqCtx;
+
+ /* return to original context when allocating transient memory */
+ MemoryContextSwitchTo(oldcontext);
+ }
+
+ funcctx = SRF_PERCALL_SETUP();
+ pcqCtx = (cqContext *)funcctx->user_fctx;
+
+ if (NULL != (readtup = caql_getnext(pcqCtx)))
+ {
+ Datum values[NUM_COLS];
+ bool nulls[NUM_COLS];
+
+ Relation relation = RelationIdGetRelation(NamespaceRelationId);
+ TupleDesc tupleDesc = RelationGetDescr(relation);
+
+ char *nspname = DatumGetCString(tuple_getattr(readtup, tupleDesc, Anum_pg_namespace_nspname));
+ text *t = cstring_to_text(nspname);
+
+ values[0] = PointerGetDatum(t);
+ nulls[0] = false;
+
+ values[1] = tuple_getattr(readtup, tupleDesc, Anum_pg_namespace_nspdboid);
+ nulls[1] = false;
+
+ values[2] = ObjectIdGetDatum(HeapTupleGetOid(readtup));
+ nulls[2] = false;
+
+ elog(DEBUG1, "Namespace oid: %d", HeapTupleGetOid(readtup));
+
+ /* build tuple */
+ restuple = heap_form_tuple(funcctx->tuple_desc, values, nulls);
+
+ /* make the tuple into a datum */
+ result = HeapTupleGetDatum(restuple);
+
+ RelationClose(relation);
+ SRF_RETURN_NEXT(funcctx, result);
+ }
+ else
+ {
+ caql_endscan(pcqCtx);
+ SRF_RETURN_DONE(funcctx);
+ }
+}
+
+Datum
+caql_scan_in_memory_pg_type(PG_FUNCTION_ARGS)
+{
+ text *relNameText = PG_GETARG_TEXT_P(0);
+ char *relNameStr = text_to_cstring(relNameText);
+
+ FuncCallContext *funcctx;
+ Datum result;
+ MemoryContext oldcontext;
+ TupleDesc tupdesc;
+ HeapTuple restuple;
+ HeapTuple readtup = NULL;
+ cqContext *pcqCtx;
+ StringInfoData buf;
+ initStringInfo(&buf);
+
+ if (SRF_IS_FIRSTCALL())
+ {
+ funcctx = SRF_FIRSTCALL_INIT();
+ /* switch context when allocating stuff to be used in later calls */
+ oldcontext = MemoryContextSwitchTo(funcctx->multi_call_memory_ctx);
+
+ tupdesc = CreateTemplateTupleDesc(NUM_COLS, false);
+ TupleDescInitEntry(tupdesc, (AttrNumber) 1, "typoid",
+ OIDOID, -1, 0);
+ TupleDescInitEntry(tupdesc, (AttrNumber) 2, "typname",
+ TEXTOID, -1, 0);
+ TupleDescInitEntry(tupdesc, (AttrNumber) 3, "typnamespace",
+ OIDOID, -1, 0);
+ funcctx->tuple_desc = BlessTupleDesc(tupdesc);
+
+ /* create tuples for pg_type table */
+ pcqCtx = caql_beginscan(
+ NULL,
+ cql("SELECT * FROM pg_type "
+ " WHERE typname = :1",
+ CStringGetDatum((char *) relNameStr)));
+
+ funcctx->user_fctx = pcqCtx;
+
+ /* return to original context when allocating transient memory */
+ MemoryContextSwitchTo(oldcontext);
+ }
+
+ funcctx = SRF_PERCALL_SETUP();
+ pcqCtx = (cqContext *)funcctx->user_fctx;
+
+ if (NULL != (readtup = caql_getnext(pcqCtx)))
+ {
+ Datum values[NUM_COLS];
+ bool nulls[NUM_COLS];
+
+ Relation relation = RelationIdGetRelation(TypeRelationId);
+ TupleDesc tupleDesc = RelationGetDescr(relation);
+
+ values[0] = ObjectIdGetDatum(HeapTupleGetOid(readtup));
+ nulls[0] = false;
+
+ elog(DEBUG1, "Type oid: %d", HeapTupleGetOid(readtup));
+
+ char *typname = DatumGetCString(tuple_getattr(readtup, tupleDesc, Anum_pg_type_typname));
+ text *t = cstring_to_text(typname);
+
+ values[1] = PointerGetDatum(t);
+ nulls[1] = false;
+
+ values[2] = tuple_getattr(readtup, tupleDesc, Anum_pg_type_typnamespace);
+ nulls[2] = false;
+
+ /* build tuple */
+ restuple = heap_form_tuple(funcctx->tuple_desc, values, nulls);
+
+ /* make the tuple into a datum */
+ result = HeapTupleGetDatum(restuple);
+
+ RelationClose(relation);
+ SRF_RETURN_NEXT(funcctx, result);
+ }
+ else
+ {
+ caql_endscan(pcqCtx);
+ SRF_RETURN_DONE(funcctx);
+ }
+}
+
+Datum
+caql_scan_in_memory_gp_distribution_policy(PG_FUNCTION_ARGS)
+{
+ text *tableName = PG_GETARG_TEXT_P(0);
+ char *tableNameStr = text_to_cstring(tableName);
+ Oid reloid = InvalidOid;
+
+ FuncCallContext *funcctx;
+ Datum result;
+ MemoryContext oldcontext;
+ TupleDesc tupdesc;
+ HeapTuple restuple;
+ HeapTuple pgclasstup = NULL;
+ HeapTuple readtup = NULL;
+ cqContext *pcqCtx;
+ StringInfoData buf;
+ initStringInfo(&buf);
+
+ if (SRF_IS_FIRSTCALL())
+ {
+ funcctx = SRF_FIRSTCALL_INIT();
+ /* switch context when allocating stuff to be used in later calls */
+ oldcontext = MemoryContextSwitchTo(funcctx->multi_call_memory_ctx);
+
+ tupdesc = CreateTemplateTupleDesc(NUM_COLS, false);
+ TupleDescInitEntry(tupdesc, (AttrNumber) 1, "tableoid",
+ OIDOID, -1, 0);
+ TupleDescInitEntry(tupdesc, (AttrNumber) 2, "tablename",
+ TEXTOID, -1, 0);
+ TupleDescInitEntry(tupdesc, (AttrNumber) 3, "distpolicy",
+ TEXTOID, -1, 0);
+ funcctx->tuple_desc = BlessTupleDesc(tupdesc);
+
+ /* iterate on pg_class and query
+ * gp_distribution_policy by given oid */
+ pcqCtx = caql_beginscan(
+ NULL,
+ cql("SELECT oid FROM pg_class "
+ " WHERE relname = :1",
+ CStringGetDatum(tableNameStr)));
+
+ funcctx->user_fctx = pcqCtx;
+
+ /* return to original context when allocating transient memory */
+ MemoryContextSwitchTo(oldcontext);
+ }
+
+ funcctx = SRF_PERCALL_SETUP();
+ pcqCtx = (cqContext *)funcctx->user_fctx;
+
+ if (NULL != (pgclasstup = caql_getnext(pcqCtx)))
+ {
+ Datum values[NUM_COLS];
+ bool nulls[NUM_COLS];
+
+ /* create tuples for pg_exttable table */
+ cqContext* pcqCtx1 = caql_beginscan(
+ NULL,
+ cql("SELECT * FROM gp_distribution_policy "
+ " WHERE localoid = :1",
+ ObjectIdGetDatum(HeapTupleGetOid(pgclasstup))));
+
+ Relation relation = RelationIdGetRelation(GpPolicyRelationId);
+ TupleDesc tupleDesc = RelationGetDescr(relation);
+
+ readtup = caql_getnext(pcqCtx1);
+
+ values[0] = ObjectIdGetDatum(reloid);
+ nulls[0] = false;
+
+ text *t1 = cstring_to_text(tableNameStr);
+
+ values[1] = PointerGetDatum(t1);
+ nulls[1] = false;
+
+ text *t2 = NULL;
+ bool isnull;
+ Datum policy = heap_getattr(readtup, Anum_gp_policy_attrnums, tupleDesc, &isnull);
+ if (isnull)
+ {
+ t2 = cstring_to_text("null");
+ }
+ else
+ {
+ /* not tested! */
+ Datum* elems = NULL;
+ int nelems;
+ deconstruct_array(DatumGetArrayTypeP(policy),
+ INT2OID, -1, false, 'i',
+ &elems, NULL, &nelems);
+ Assert(nelems > 0);
+ StringInfoData elems_str;
+ initStringInfo(&elems_str);
+ for (int i = 0; i < nelems; i++)
+ {
+ appendStringInfo(&elems_str, "%d", DatumGetInt16(elems[0]));
+ if (i != nelems)
+ {
+ appendStringInfo(&elems_str, ", ");
+ }
+ }
+ t2 = cstring_to_text(elems_str.data);
+ pfree(elems_str.data);
+ }
+
+ values[2] = PointerGetDatum(t2);
+ nulls[2] = false;
+
+ /* build tuple */
+ restuple = heap_form_tuple(funcctx->tuple_desc, values, nulls);
+
+ /* make the tuple into a datum */
+ result = HeapTupleGetDatum(restuple);
+
+ RelationClose(relation);
+ /* there should be only one value per oid */
+ Assert(NULL == caql_getnext(pcqCtx1)) ;
+ caql_endscan(pcqCtx1);
+
+ SRF_RETURN_NEXT(funcctx, result);
+ }
+ else
+ {
+ caql_endscan(pcqCtx);
+ SRF_RETURN_DONE(funcctx);
+ }
+}
+
+Datum
+caql_scan_in_memory_pg_exttable(PG_FUNCTION_ARGS)
+{
+ text *tableName = PG_GETARG_TEXT_P(0);
+ char *tableNameStr = text_to_cstring(tableName);
+ Oid reloid = InvalidOid;
+
+ FuncCallContext *funcctx;
+ Datum result;
+ MemoryContext oldcontext;
+ TupleDesc tupdesc;
+ HeapTuple restuple;
+ HeapTuple pgclasstup = NULL;
+ HeapTuple readtup = NULL;
+ cqContext *pcqCtx;
+ StringInfoData buf;
+ initStringInfo(&buf);
+
+ if (SRF_IS_FIRSTCALL())
+ {
+ funcctx = SRF_FIRSTCALL_INIT();
+ /* switch context when allocating stuff to be used in later calls */
+ oldcontext = MemoryContextSwitchTo(funcctx->multi_call_memory_ctx);
+
+ tupdesc = CreateTemplateTupleDesc(NUM_COLS, false);
+ TupleDescInitEntry(tupdesc, (AttrNumber) 1, "exttableoid",
+ OIDOID, -1, 0);
+ TupleDescInitEntry(tupdesc, (AttrNumber) 2, "exttablename",
+ TEXTOID, -1, 0);
+ TupleDescInitEntry(tupdesc, (AttrNumber) 3, "exttablelocation",
+ TEXTOID, -1, 0);
+ funcctx->tuple_desc = BlessTupleDesc(tupdesc);
+
+ /* iterate on pg_class and query
+ * pg_exttable by given oid */
+ pcqCtx = caql_beginscan(
+ NULL,
+ cql("SELECT oid FROM pg_class "
+ " WHERE relname = :1",
+ CStringGetDatum(tableNameStr)));
+
+ funcctx->user_fctx = pcqCtx;
+
+ /* return to original context when allocating transient memory */
+ MemoryContextSwitchTo(oldcontext);
+ }
+
+ funcctx = SRF_PERCALL_SETUP();
+ pcqCtx = (cqContext *)funcctx->user_fctx;
+
+ if (NULL != (pgclasstup = caql_getnext(pcqCtx)))
+ {
+ Datum values[NUM_COLS];
+ bool nulls[NUM_COLS];
+
+ /* create tuples for pg_exttable table */
+ cqContext* pcqCtx1 = caql_beginscan(
+ NULL,
+ cql("SELECT * FROM pg_exttable "
+ " WHERE reloid = :1",
+ ObjectIdGetDatum(HeapTupleGetOid(pgclasstup))));
+
+ Relation relation = RelationIdGetRelation(ExtTableRelationId);
+ TupleDesc tupleDesc = RelationGetDescr(relation);
+
+ readtup = caql_getnext(pcqCtx1);
+
+ values[0] = ObjectIdGetDatum(reloid);
+ nulls[0] = false;
+
+ text *t1 = cstring_to_text(tableNameStr);
+
+ values[1] = PointerGetDatum(t1);
+ nulls[1] = false;
+
+ Datum locations = tuple_getattr(readtup, tupleDesc, Anum_pg_exttable_location);
+ Datum* elems = NULL;
+ int nelems;
+ deconstruct_array(DatumGetArrayTypeP(locations),
+ TEXTOID, -1, false, 'i',
+ &elems, NULL, &nelems);
+ Assert(nelems > 0);
+ char *loc_str = DatumGetCString(DirectFunctionCall1(textout, elems[0]));
+ text *t2 = cstring_to_text(loc_str);
+
+ values[2] = PointerGetDatum(t2);
+ nulls[2] = false;
+
+ /* build tuple */
+ restuple = heap_form_tuple(funcctx->tuple_desc, values, nulls);
+
+ /* make the tuple into a datum */
+ result = HeapTupleGetDatum(restuple);
+
+ RelationClose(relation);
+ /* there should be only one value per oid */
+ Assert(NULL == caql_getnext(pcqCtx1)) ;
+ caql_endscan(pcqCtx1);
+
+ SRF_RETURN_NEXT(funcctx, result);
+ }
+ else
+ {
+ caql_endscan(pcqCtx);
+ SRF_RETURN_DONE(funcctx);
+ }
+}
+
+Datum
+caql_scan_in_memory_pg_attribute(PG_FUNCTION_ARGS)
+{
+ text *tableNameText = PG_GETARG_TEXT_P(0);
+ char *tableNameStr = text_to_cstring(tableNameText);
+
+ FuncCallContext *funcctx;
+ Datum result;
+ MemoryContext oldcontext;
+ TupleDesc tupdesc;
+ HeapTuple restuple;
+ HeapTuple readtup = NULL;
+ cqContext *pcqCtx;
+ StringInfoData buf;
+ initStringInfo(&buf);
+
+ Oid relid = GetRelationOid(tableNameStr);
+ if (SRF_IS_FIRSTCALL())
+ {
+ funcctx = SRF_FIRSTCALL_INIT();
+ /* switch context when allocating stuff to be used in later calls */
+ oldcontext = MemoryContextSwitchTo(funcctx->multi_call_memory_ctx);
+
+ tupdesc = CreateTemplateTupleDesc(NUM_COLS, false);
+ TupleDescInitEntry(tupdesc, (AttrNumber) 1, "attname",
+ TEXTOID, -1, 0);
+ TupleDescInitEntry(tupdesc, (AttrNumber) 2, "atttype",
+ OIDOID, -1, 0);
+ TupleDescInitEntry(tupdesc, (AttrNumber) 3, "atttypmod",
+ INT4OID, -1, 0);
+ funcctx->tuple_desc = BlessTupleDesc(tupdesc);
+
+ /* create tuples for pg_attribute table */
+ pcqCtx = caql_beginscan(
+ NULL,
+ cql("SELECT * FROM pg_attribute "
+ " WHERE attrelid = :1",
+ ObjectIdGetDatum(relid)));
+ funcctx->user_fctx = pcqCtx;
+
+ /* return to original context when allocating transient memory */
+ MemoryContextSwitchTo(oldcontext);
+ }
+
+ funcctx = SRF_PERCALL_SETUP();
+ pcqCtx = (cqContext *)funcctx->user_fctx;
+
+ if (NULL != (readtup = caql_getnext(pcqCtx)))
+ {
+ Datum values[NUM_COLS];
+ bool nulls[NUM_COLS];
+
+ Relation relation = RelationIdGetRelation(AttributeRelationId);
+ TupleDesc tupleDesc = RelationGetDescr(relation);
+
+ char *attname = DatumGetCString(tuple_getattr(readtup, tupleDesc, Anum_pg_attribute_attname));
+ text *t = cstring_to_text(attname);
+
+ values[0] = PointerGetDatum(t);
+ nulls[0] = false;
+
+ values[1] = tuple_getattr(readtup, tupleDesc, Anum_pg_attribute_atttypid);
+ nulls[1] = false;
+
+ values[2] = tuple_getattr(readtup, tupleDesc, Anum_pg_attribute_atttypmod);
+ nulls[2] = false;
+
+ /* build tuple */
+ restuple = heap_form_tuple(funcctx->tuple_desc, values, nulls);
+
+ /* make the tuple into a datum */
+ result = HeapTupleGetDatum(restuple);
+
+ RelationClose(relation);
+ SRF_RETURN_NEXT(funcctx, result);
+ }
+ else
+ {
+ caql_endscan(pcqCtx);
+ SRF_RETURN_DONE(funcctx);
+ }
+}
+
+Oid GetRelationOid(char *tableName)
+{
+ cqContext *pcqCtx = caql_beginscan(
+ NULL,
+ cql("SELECT * FROM pg_class "
+ " WHERE relname = :1",
+ CStringGetDatum((char *) tableName)));
+
+ HeapTuple ht = caql_getnext(pcqCtx);
+ Oid result = InvalidOid;
+ if (NULL != ht)
+ {
+ result = HeapTupleGetOid(ht);
+ }
+
+ elog(DEBUG1, "Found relname %s, oid: %d", tableName, result);
+ caql_endscan(pcqCtx);
+ return result;
+}
+
+/*
+ * This function must be used in conjunction with
+ * caql_delete_from_heap_pg_class
+ * and exclusively for testing external Oid setting
+ */
+Datum
+caql_insert_into_heap_pg_class(PG_FUNCTION_ARGS)
+ {
+ Oid relid = PG_GETARG_OID(0);
+ char *tblname = text_to_cstring(PG_GETARG_TEXT_P(1));
+
+ Datum values[Natts_pg_class];
+ bool nulls[Natts_pg_class];
+
+ for (int i = 0; i < Natts_pg_class; i++)
+ {
+ nulls[i] = true;
+ values[i] = (Datum) 0;
+ }
+
+ NameData name;
+ namestrcpy(&name, tblname);
+
+ values[Anum_pg_class_relname - 1] = NameGetDatum(&name);
+ values[Anum_pg_class_relnamespace - 1] = ObjectIdGetDatum((Oid) NSPDBOID_CURRENT);
+ nulls[Anum_pg_class_relname - 1] = false;
+ nulls[Anum_pg_class_relnamespace - 1] = false;
+
+ cqContext *pcqCtx = caql_beginscan(
+ NULL,
+ cql("INSERT INTO pg_class", NULL));
+
+ HeapTuple tup = caql_form_tuple(pcqCtx, values, nulls);
+ HeapTupleSetOid(tup, relid);
+
+ caql_insert(pcqCtx, tup);
+ caql_endscan(pcqCtx);
+
+ StringInfoData buf;
+ initStringInfo(&buf);
+
+ appendStringInfo(&buf, "inserted tuple to heap table pg_class (oid %u, relname %s)", relid, tblname);
+
+ PG_RETURN_TEXT_P(cstring_to_text(buf.data));
+}
+
+/*
+ * This function must be used in conjunction with
+ * caql_insert_into_heap_pg_class
+ * and exclusively for testing external Oid setting
+ */
+Datum
+caql_delete_from_heap_pg_class(PG_FUNCTION_ARGS)
+{
+ Oid relid = PG_GETARG_OID(0);
+
+ cqContext *pcqCtx = caql_beginscan(
+ NULL,
+ cql("SELECT * FROM pg_class "
+ " WHERE oid = :1 "
+ " FOR UPDATE ",
+ ObjectIdGetDatum(relid)));
+
+ HeapTuple tuple = caql_getnext(pcqCtx);
+
+ if (!HeapTupleIsValid(tuple))
+ ereport(ERROR,
+ (errcode(ERRCODE_UNDEFINED_OBJECT),
+ errmsg("pg_class table relid=%u does not exist", relid)));
+
+ /* Delete the pg_class table entry from the catalog (pg_class) */
+ caql_delete_current(pcqCtx);
+
+ /* Finish up scan and close pg_class catalog */
+ caql_endscan(pcqCtx);
+
+ StringInfoData buf;
+ initStringInfo(&buf);
+
+ appendStringInfo(&buf, "deleted tuple oid=%u from heap table pg_class", relid);
+
+ PG_RETURN_TEXT_P(cstring_to_text(buf.data));
+}
+
+Datum
+get_next_external_oid(PG_FUNCTION_ARGS)
+{
+ PG_RETURN_OID(GetCurrentExternalObjectId());
+}
+
+Datum
+set_next_external_oid(PG_FUNCTION_ARGS)
+{
+ Oid oid = PG_GETARG_OID(0);
+ SetCurrentExternalObjectId(oid);
+
+ PG_RETURN_OID(GetCurrentExternalObjectId());
+}
+
+Datum
+min_external_oid(PG_FUNCTION_ARGS)
+{
+ PG_RETURN_OID(FirstExternalObjectId);
+}
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/0e6fe7a4/src/test/feature/ExternalSource/sql/external_oid.sql.source
----------------------------------------------------------------------
diff --git a/src/test/feature/ExternalSource/sql/external_oid.sql.source b/src/test/feature/ExternalSource/sql/external_oid.sql.source
new file mode 100644
index 0000000..bded23e
--- /dev/null
+++ b/src/test/feature/ExternalSource/sql/external_oid.sql.source
@@ -0,0 +1,108 @@
+-- --------------------------------------
+-- test first external Oid initialization
+-- --------------------------------------
+
+-- start_matchsubs
+--
+-- # create a match/subs expression to handle ip addresses that change
+--
+-- m/.*inserted tuple to heap table pg_class \(oid \d+, relname table_xl\).*/
+-- s/oid \d+/oid SOME_OID/
+--
+-- m/.*deleted tuple oid=\d+ from heap table pg_class.*/
+-- s/oid=\d+/oid=OID/
+--
+-- end_matchsubs
+
+-- Create function that returns the first external Oid boundary
+CREATE OR REPLACE FUNCTION min_external_oid() RETURNS oid
+ AS '@SHARE_LIBRARY_PATH@', 'min_external_oid'
+ LANGUAGE C;
+
+-- Create function that returns the current external Oid
+CREATE OR REPLACE FUNCTION get_next_external_oid() RETURNS oid
+ AS '@SHARE_LIBRARY_PATH@', 'get_next_external_oid'
+ LANGUAGE C;
+
+-- Create function that sets the current external Oid
+CREATE OR REPLACE FUNCTION set_next_external_oid(ext_oid oid) RETURNS oid
+ AS '@SHARE_LIBRARY_PATH@', 'set_next_external_oid'
+ LANGUAGE C;
+
+-- Create function to insert and scan in-memory data to pg_class
+CREATE OR REPLACE FUNCTION load_json_data(filename text) RETURNS text
+ AS '@SHARE_LIBRARY_PATH@', 'load_json_data'
+ LANGUAGE C;
+
+-- Create function that inserts tuple with given Oid
+CREATE OR REPLACE FUNCTION caql_insert_into_heap_pg_class(relid oid, tblname text) RETURNS text
+ AS '@SHARE_LIBRARY_PATH@', 'caql_insert_into_heap_pg_class'
+ LANGUAGE C;
+
+-- Create function that inserts tuple with given Oid
+CREATE OR REPLACE FUNCTION caql_delete_from_heap_pg_class(relid oid) RETURNS text
+ AS '@SHARE_LIBRARY_PATH@', 'caql_delete_from_heap_pg_class'
+ LANGUAGE C;
+
+-- --------------------------------------
+-- Test hcat table external oid initialization
+-- --------------------------------------
+-- Boundary should be at FirstExternalObjectId
+--SELECT min_external_oid();
+-- NextExternalObjectId is uninitialized
+SELECT get_next_external_oid();
+SELECT load_json_data('@abs_datadir@/single_table.json');
+SELECT get_next_external_oid()::bigint - min_external_oid()::bigint;
+
+BEGIN TRANSACTION;
+SELECT get_next_external_oid()::bigint - min_external_oid()::bigint;
+-- load default.mytable -> +3 oids
+-- 1 oid for namespace 'default', 1 oid for relation 'mytable', 1 oid for reltype
+SELECT load_json_data('@abs_datadir@/single_table.json');
+SELECT get_next_external_oid()::bigint - min_external_oid()::bigint;
+-- load db1.ht1, db2.ht1, db2.ht2 -> +8 oids
+-- oids: db1, ht1(db1), db2, ht1(db2), ht2, reltype(ht1, ht1, ht2)
+SELECT load_json_data('@abs_datadir@/multi_table.json');
+SELECT get_next_external_oid()::bigint - min_external_oid()::bigint;
+END TRANSACTION;
+
+-- New transaction will reset external Oid start point
+-- Yields the same result as previous transaction
+BEGIN TRANSACTION;
+SELECT get_next_external_oid()::bigint - min_external_oid()::bigint;
+SELECT load_json_data('@abs_datadir@/single_table.json');
+SELECT get_next_external_oid()::bigint - min_external_oid()::bigint;
+SELECT load_json_data('@abs_datadir@/multi_table.json');
+SELECT get_next_external_oid()::bigint - min_external_oid()::bigint;
+END TRANSACTION;
+
+-- --------------------------------------
+-- Test external oid rollover
+-- --------------------------------------
+BEGIN TRANSACTION;
+SELECT get_next_external_oid()::bigint - min_external_oid()::bigint;
+SELECT set_next_external_oid( oid(min_external_oid()::bigint + (10*power(2,20))::bigint - 8 + 1) ) > 0;
+SELECT load_json_data('@abs_datadir@/multi_table.json');
+-- Used up external Oids result in Oid overflow
+SELECT get_next_external_oid();
+-- Rollover disallowed!
+SELECT load_json_data('@abs_datadir@/single_table.json');
+END TRANSACTION;
+
+-- --------------------------------------
+-- Test external Oid boundary
+-- --------------------------------------
+-- Create a tuple with Oid larger than FirstExternalObjectId
+-- Will fail during next session when try to query HCatalog
+-- Because external Oid boundary is violated
+SELECT caql_insert_into_heap_pg_class(min_external_oid()::bigint + 20, 'table_xl');
+
+-- cleanup
+SELECT caql_delete_from_heap_pg_class(min_external_oid()::bigint + 20);
+
+DROP FUNCTION caql_delete_from_heap_pg_class(relid oid);
+DROP FUNCTION caql_insert_into_heap_pg_class(relid oid, tblname text);
+DROP FUNCTION load_json_data(filename text);
+DROP FUNCTION get_next_external_oid();
+DROP FUNCTION set_next_external_oid(ext_oid oid);
+DROP FUNCTION min_external_oid();
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/0e6fe7a4/src/test/feature/ExternalSource/test_external_oid.cpp
----------------------------------------------------------------------
diff --git a/src/test/feature/ExternalSource/test_external_oid.cpp b/src/test/feature/ExternalSource/test_external_oid.cpp
new file mode 100644
index 0000000..3326514
--- /dev/null
+++ b/src/test/feature/ExternalSource/test_external_oid.cpp
@@ -0,0 +1,35 @@
+#include <string>
+#include <iostream>
+#include "gtest/gtest.h"
+
+#include "lib/sql_util.h"
+#include "lib/file_replace.h"
+
+using hawq::test::SQLUtility;
+using hawq::test::FileReplace;
+
+class TestExternalOid : public ::testing::Test {
+ public:
+ TestExternalOid() {}
+ ~TestExternalOid() {}
+};
+
+TEST_F(TestExternalOid, TestExternalOidAll) {
+ SQLUtility util;
+ FileReplace frep;
+ auto test_root = util.getTestRootPath();
+ std::cout << test_root << std::endl;
+
+ std::unordered_map<std::string, std::string> D;
+ D["@SHARE_LIBRARY_PATH@"] = test_root + "/ExternalSource/lib/function.so";
+ D["@abs_datadir@"] = test_root + "/ExternalSource/data";
+ frep.replace(test_root + "/ExternalSource/sql/external_oid.sql.source",
+ test_root + "/ExternalSource/sql/external_oid.sql",
+ D);
+ frep.replace(test_root + "/ExternalSource/ans/external_oid.ans.source",
+ test_root + "/ExternalSource/ans/external_oid.ans",
+ D);
+
+ util.execSQLFile("ExternalSource/sql/external_oid.sql",
+ "ExternalSource/ans/external_oid.ans");
+}
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/0e6fe7a4/src/test/feature/Makefile
----------------------------------------------------------------------
diff --git a/src/test/feature/Makefile b/src/test/feature/Makefile
index adc6acc..f393a76 100644
--- a/src/test/feature/Makefile
+++ b/src/test/feature/Makefile
@@ -27,9 +27,11 @@ all: $(OBJS) sharelib
sharelib:
cd UDF/lib || exit 1; $(MAKE) || exit 2
+ cd ExternalSource/lib || exit 1; $(MAKE) || exit 2
sharelibclean:
cd UDF/lib || exit 1; $(RM) *.o *.so || exit 2
+ cd ExternalSource/lib || exit 1; $(MAKE) || exit 2
doc:
doxygen doxygen_template
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/0e6fe7a4/src/test/regress/input/external_oid.source
----------------------------------------------------------------------
diff --git a/src/test/regress/input/external_oid.source b/src/test/regress/input/external_oid.source
deleted file mode 100644
index bd4724a..0000000
--- a/src/test/regress/input/external_oid.source
+++ /dev/null
@@ -1,118 +0,0 @@
--- --------------------------------------
--- test first external Oid initialization
--- --------------------------------------
-
--- start_matchsubs
---
--- # create a match/subs expression to handle ip addresses that change
---
--- m/.*inserted tuple to heap table pg_class \(oid \d+, relname table_xl\).*/
--- s/oid \d+/oid SOME_OID/
---
--- m/.*deleted tuple oid=\d+ from heap table pg_class.*/
--- s/oid=\d+/oid=OID/
---
--- end_matchsubs
-
--- Create function that returns the first external Oid boundary
-CREATE OR REPLACE FUNCTION min_external_oid() RETURNS oid
- AS '@abs_builddir@/regress@DLSUFFIX@', 'min_external_oid'
- LANGUAGE C;
-
--- Create function that returns the current external Oid
-CREATE OR REPLACE FUNCTION get_next_external_oid() RETURNS oid
- AS '@abs_builddir@/regress@DLSUFFIX@', 'get_next_external_oid'
- LANGUAGE C;
-
--- Create function that sets the current external Oid
-CREATE OR REPLACE FUNCTION set_next_external_oid(ext_oid oid) RETURNS oid
- AS '@abs_builddir@/regress@DLSUFFIX@', 'set_next_external_oid'
- LANGUAGE C;
-
--- Create function to insert and scan in-memory data to pg_class
-CREATE OR REPLACE FUNCTION load_json_data(filename text) RETURNS text
- AS '@abs_builddir@/regress@DLSUFFIX@', 'load_json_data'
- LANGUAGE C;
-
--- Create function that inserts tuple with given Oid
-CREATE OR REPLACE FUNCTION caql_insert_into_heap_pg_class(relid oid, tblname text) RETURNS text
- AS '@abs_builddir@/regress@DLSUFFIX@', 'caql_insert_into_heap_pg_class'
- LANGUAGE C;
-
--- Create function that inserts tuple with given Oid
-CREATE OR REPLACE FUNCTION caql_delete_from_heap_pg_class(relid oid) RETURNS text
- AS '@abs_builddir@/regress@DLSUFFIX@', 'caql_delete_from_heap_pg_class'
- LANGUAGE C;
-
--- --------------------------------------
--- Test hcat table external oid initialization
--- --------------------------------------
--- Boundary should be at FirstExternalObjectId
---SELECT min_external_oid();
--- NextExternalObjectId is uninitialized
-SELECT get_next_external_oid();
-SELECT load_json_data('@abs_builddir@/data/hcatalog/single_table.json');
-SELECT get_next_external_oid()::bigint - min_external_oid()::bigint;
-
-BEGIN TRANSACTION;
-SELECT get_next_external_oid()::bigint - min_external_oid()::bigint;
--- load default.mytable -> +3 oids
--- 1 oid for namespace 'default', 1 oid for relation 'mytable', 1 oid for reltype
-SELECT load_json_data('@abs_builddir@/data/hcatalog/single_table.json');
-SELECT get_next_external_oid()::bigint - min_external_oid()::bigint;
--- load db1.ht1, db2.ht1, db2.ht2 -> +8 oids
--- oids: db1, ht1(db1), db2, ht1(db2), ht2, reltype(ht1, ht1, ht2)
-SELECT load_json_data('@abs_builddir@/data/hcatalog/multi_table.json');
-SELECT get_next_external_oid()::bigint - min_external_oid()::bigint;
-END TRANSACTION;
-
--- New transaction will reset external Oid start point
--- Yields the same result as previous transaction
-BEGIN TRANSACTION;
-SELECT get_next_external_oid()::bigint - min_external_oid()::bigint;
-SELECT load_json_data('@abs_builddir@/data/hcatalog/single_table.json');
-SELECT get_next_external_oid()::bigint - min_external_oid()::bigint;
-SELECT load_json_data('@abs_builddir@/data/hcatalog/multi_table.json');
-SELECT get_next_external_oid()::bigint - min_external_oid()::bigint;
-END TRANSACTION;
-
--- --------------------------------------
--- Test external oid rollover
--- --------------------------------------
-BEGIN TRANSACTION;
-SELECT get_next_external_oid()::bigint - min_external_oid()::bigint;
-SELECT set_next_external_oid( oid(min_external_oid()::bigint + (10*power(2,20))::bigint - 8 + 1) ) > 0;
-SELECT load_json_data('@abs_builddir@/data/hcatalog/multi_table.json');
--- Used up external Oids result in Oid overflow
-SELECT get_next_external_oid();
--- Rollover disallowed!
-SELECT load_json_data('@abs_builddir@/data/hcatalog/single_table.json');
-END TRANSACTION;
-
--- --------------------------------------
--- Test external Oid boundary
--- --------------------------------------
--- Create a tuple with Oid larger than FirstExternalObjectId
--- Will fail during next session when try to query HCatalog
--- Because external Oid boundary is violated
-SELECT caql_insert_into_heap_pg_class(min_external_oid()::bigint + 20, 'table_xl');
-
--- Fresh session
-\c
--- NextExternalObjectId is uninitialized
-SELECT get_next_external_oid();
--- Should fail
-SELECT load_json_data('@abs_builddir@/data/hcatalog/single_table.json');
--- NextExternalObjectId is still uninitialized
-SELECT get_next_external_oid();
-
--- cleanup
-SELECT caql_delete_from_heap_pg_class(min_external_oid()::bigint + 20);
-
-DROP FUNCTION caql_delete_from_heap_pg_class(relid oid);
-DROP FUNCTION caql_insert_into_heap_pg_class(relid oid, tblname text);
-DROP FUNCTION load_json_data(filename text);
-DROP FUNCTION get_next_external_oid();
-DROP FUNCTION set_next_external_oid(ext_oid oid);
-DROP FUNCTION min_external_oid();
-
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/0e6fe7a4/src/test/regress/known_good_schedule
----------------------------------------------------------------------
diff --git a/src/test/regress/known_good_schedule b/src/test/regress/known_good_schedule
index 0cd48f3..1f95e49 100755
--- a/src/test/regress/known_good_schedule
+++ b/src/test/regress/known_good_schedule
@@ -202,5 +202,4 @@ ignore: co_disabled
test: caqlinmem
test: hcatalog_lookup
test: json_load
-test: external_oid
test: validator_function
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/0e6fe7a4/src/test/regress/output/external_oid.source
----------------------------------------------------------------------
diff --git a/src/test/regress/output/external_oid.source b/src/test/regress/output/external_oid.source
deleted file mode 100644
index d0a3730..0000000
--- a/src/test/regress/output/external_oid.source
+++ /dev/null
@@ -1,211 +0,0 @@
--- --------------------------------------
--- test first external Oid initialization
--- --------------------------------------
--- start_matchsubs
---
--- # create a match/subs expression to handle ip addresses that change
---
--- m/.*inserted tuple to heap table pg_class \(oid \d+, relname table_xl\).*/
--- s/oid \d+/oid SOME_OID/
---
--- m/.*deleted tuple oid=\d+ from heap table pg_class.*/
--- s/oid=\d+/oid=OID/
---
--- end_matchsubs
--- Create function that returns the first external Oid boundary
-CREATE OR REPLACE FUNCTION min_external_oid() RETURNS oid
- AS '@abs_builddir@/regress@DLSUFFIX@', 'min_external_oid'
- LANGUAGE C;
--- Create function that returns the current external Oid
-CREATE OR REPLACE FUNCTION get_next_external_oid() RETURNS oid
- AS '@abs_builddir@/regress@DLSUFFIX@', 'get_next_external_oid'
- LANGUAGE C;
--- Create function that sets the current external Oid
-CREATE OR REPLACE FUNCTION set_next_external_oid(ext_oid oid) RETURNS oid
- AS '@abs_builddir@/regress@DLSUFFIX@', 'set_next_external_oid'
- LANGUAGE C;
--- Create function to insert and scan in-memory data to pg_class
-CREATE OR REPLACE FUNCTION load_json_data(filename text) RETURNS text
- AS '@abs_builddir@/regress@DLSUFFIX@', 'load_json_data'
- LANGUAGE C;
--- Create function that inserts tuple with given Oid
-CREATE OR REPLACE FUNCTION caql_insert_into_heap_pg_class(relid oid, tblname text) RETURNS text
- AS '@abs_builddir@/regress@DLSUFFIX@', 'caql_insert_into_heap_pg_class'
- LANGUAGE C;
--- Create function that inserts tuple with given Oid
-CREATE OR REPLACE FUNCTION caql_delete_from_heap_pg_class(relid oid) RETURNS text
- AS '@abs_builddir@/regress@DLSUFFIX@', 'caql_delete_from_heap_pg_class'
- LANGUAGE C;
--- --------------------------------------
--- Test hcat table external oid initialization
--- --------------------------------------
--- Boundary should be at FirstExternalObjectId
---SELECT min_external_oid();
--- NextExternalObjectId is uninitialized
-SELECT get_next_external_oid();
- get_next_external_oid
------------------------
- 0
-(1 row)
-
-SELECT load_json_data('@abs_builddir@/data/hcatalog/single_table.json');
- load_json_data
-------------------
- default.mytable
-(1 row)
-
-SELECT get_next_external_oid()::bigint - min_external_oid()::bigint;
- ?column?
-----------
- 0
-(1 row)
-
-BEGIN TRANSACTION;
-SELECT get_next_external_oid()::bigint - min_external_oid()::bigint;
- ?column?
-----------
- 0
-(1 row)
-
--- load default.mytable -> +3 oids
--- 1 oid for namespace 'default', 1 oid for relation 'mytable', 1 oid for reltype
-SELECT load_json_data('@abs_builddir@/data/hcatalog/single_table.json');
- load_json_data
-------------------
- default.mytable
-(1 row)
-
-SELECT get_next_external_oid()::bigint - min_external_oid()::bigint;
- ?column?
-----------
- 3
-(1 row)
-
--- load db1.ht1, db2.ht1, db2.ht2 -> +8 oids
--- oids: db1, ht1(db1), db2, ht1(db2), ht2, reltype(ht1, ht1, ht2)
-SELECT load_json_data('@abs_builddir@/data/hcatalog/multi_table.json');
- load_json_data
---------------------------
- db1.ht1 db2.ht1 db2.ht2
-(1 row)
-
-SELECT get_next_external_oid()::bigint - min_external_oid()::bigint;
- ?column?
-----------
- 11
-(1 row)
-
-END TRANSACTION;
--- New transaction will reset external Oid start point
--- Yields the same result as previous transaction
-BEGIN TRANSACTION;
-SELECT get_next_external_oid()::bigint - min_external_oid()::bigint;
- ?column?
-----------
- 0
-(1 row)
-
-SELECT load_json_data('@abs_builddir@/data/hcatalog/single_table.json');
- load_json_data
-------------------
- default.mytable
-(1 row)
-
-SELECT get_next_external_oid()::bigint - min_external_oid()::bigint;
- ?column?
-----------
- 3
-(1 row)
-
-SELECT load_json_data('@abs_builddir@/data/hcatalog/multi_table.json');
- load_json_data
---------------------------
- db1.ht1 db2.ht1 db2.ht2
-(1 row)
-
-SELECT get_next_external_oid()::bigint - min_external_oid()::bigint;
- ?column?
-----------
- 11
-(1 row)
-
-END TRANSACTION;
--- --------------------------------------
--- Test external oid rollover
--- --------------------------------------
-BEGIN TRANSACTION;
-SELECT get_next_external_oid()::bigint - min_external_oid()::bigint;
- ?column?
-----------
- 0
-(1 row)
-
-SELECT set_next_external_oid( oid(min_external_oid()::bigint + (10*power(2,20))::bigint - 8 + 1) ) > 0;
- ?column?
-----------
- t
-(1 row)
-
-SELECT load_json_data('@abs_builddir@/data/hcatalog/multi_table.json');
- load_json_data
---------------------------
- db1.ht1 db2.ht1 db2.ht2
-(1 row)
-
--- Used up external Oids result in Oid overflow
-SELECT get_next_external_oid();
- get_next_external_oid
------------------------
- 0
-(1 row)
-
--- Rollover disallowed!
-SELECT load_json_data('@abs_builddir@/data/hcatalog/single_table.json');
-ERROR: number of external objects from HCatalog exceeded 10M during transaction
-HINT: Separate HCatalog queries into different transactions to process.
-END TRANSACTION;
--- --------------------------------------
--- Test external Oid boundary
--- --------------------------------------
--- Create a tuple with Oid larger than FirstExternalObjectId
--- Will fail during next session when try to query HCatalog
--- Because external Oid boundary is violated
-SELECT caql_insert_into_heap_pg_class(min_external_oid()::bigint + 20, 'table_xl');
- caql_insert_into_heap_pg_class
---------------------------------------------------------------------------
- inserted tuple to heap table pg_class (oid 4293918750, relname table_xl)
-(1 row)
-
--- Fresh session
-\c
--- NextExternalObjectId is uninitialized
-SELECT get_next_external_oid();
- get_next_external_oid
------------------------
- 0
-(1 row)
-
--- Should fail
-SELECT load_json_data('@abs_builddir@/data/hcatalog/single_table.json');
-ERROR: database does not have enough available Oids to support HCatalog queries
-HINT: Database VACUUM may recycle unused Oids.
--- NextExternalObjectId is still uninitialized
-SELECT get_next_external_oid();
- get_next_external_oid
------------------------
- 0
-(1 row)
-
--- cleanup
-SELECT caql_delete_from_heap_pg_class(min_external_oid()::bigint + 20);
- caql_delete_from_heap_pg_class
--------------------------------------------------------
- deleted tuple oid=4293918750 from heap table pg_class
-(1 row)
-
-DROP FUNCTION caql_delete_from_heap_pg_class(relid oid);
-DROP FUNCTION caql_insert_into_heap_pg_class(relid oid, tblname text);
-DROP FUNCTION load_json_data(filename text);
-DROP FUNCTION get_next_external_oid();
-DROP FUNCTION set_next_external_oid(ext_oid oid);
-DROP FUNCTION min_external_oid();
[07/14] incubator-hawq git commit: HAWQ-918. Fix memtuple forming bug
when null-saved size is larger than 32763 bytes
Posted by rl...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/a2a79c6d/src/test/regress/known_good_schedule
----------------------------------------------------------------------
diff --git a/src/test/regress/known_good_schedule b/src/test/regress/known_good_schedule
index 1f95e49..a402997 100755
--- a/src/test/regress/known_good_schedule
+++ b/src/test/regress/known_good_schedule
@@ -68,6 +68,7 @@ ignore: triggers
ignore: create_misc
test: create_aggregate
test: aggregate_with_groupingsets
+test: aggregates_null
test: nested_case_null
ignore: create_operator
ignore: create_index
[14/14] incubator-hawq git commit: HAWQ-933. Warning fix for
gpnetbench.
Posted by rl...@apache.org.
HAWQ-933. Warning fix for gpnetbench.
Project: http://git-wip-us.apache.org/repos/asf/incubator-hawq/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-hawq/commit/9bdad43e
Tree: http://git-wip-us.apache.org/repos/asf/incubator-hawq/tree/9bdad43e
Diff: http://git-wip-us.apache.org/repos/asf/incubator-hawq/diff/9bdad43e
Branch: refs/heads/2.0.0.0-incubating
Commit: 9bdad43ebbbcefce23db193c3a7dd62ea6a3d805
Parents: ed443c1
Author: xunzhang <xu...@gmail.com>
Authored: Tue Jul 19 09:49:38 2016 +0800
Committer: rlei <rl...@pivotal.io>
Committed: Tue Jul 19 10:50:00 2016 +0800
----------------------------------------------------------------------
tools/gpnetbench/gpnetbenchClient.c | 36 +++++++++++++++++---------------
tools/gpnetbench/gpnetbenchServer.c | 10 +++++----
2 files changed, 25 insertions(+), 21 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/9bdad43e/tools/gpnetbench/gpnetbenchClient.c
----------------------------------------------------------------------
diff --git a/tools/gpnetbench/gpnetbenchClient.c b/tools/gpnetbench/gpnetbenchClient.c
index d95f8a9..4669d16 100644
--- a/tools/gpnetbench/gpnetbenchClient.c
+++ b/tools/gpnetbench/gpnetbenchClient.c
@@ -29,25 +29,11 @@
#include <sys/time.h>
#define INIT_RETRIES 5
+void usage(void);
void send_buffer(int fd, char* buffer, int bytes);
-void print_headers();
+void print_headers(void);
double subtractTimeOfDay(struct timeval* begin, struct timeval* end);
-void usage()
-{
- fprintf(stdout, "usage: gpnetbench -p PORT -H HOST [-l SECONDS] [-t EXPERIMENT] [-f UNITS] [-P HEADERS] [-b KB] [-h]\n");
- fprintf(stdout, "where\n");
- fprintf(stdout, " PORT is the port to connect to for the server\n");
- fprintf(stdout, " HOST is the hostname to connect to for the server\n");
- fprintf(stdout, " SECONDS is the number of seconds to sample the network, where the default is 60\n");
- fprintf(stdout, " EXPERIMENT is the experiment name to run, where the default is TCP_STREAM\n");
- fprintf(stdout, " UNITS is the output units, where the default is M megabytes\n");
- fprintf(stdout, " HEADERS is 0 (don't) or 1 (do) display headers in the output\n");
- fprintf(stdout, " KB is the size of the send buffer in kilobytes, where the default is 32\n");
-
- fprintf(stdout, " -h shows this help message\n");
-}
-
int main(int argc, char** argv)
{
int socketFd;
@@ -188,9 +174,24 @@ int main(int argc, char** argv)
return 0;
}
+void usage()
+{
+ fprintf(stdout, "usage: gpnetbench -p PORT -H HOST [-l SECONDS] [-t EXPERIMENT] [-f UNITS] [-P HEADERS] [-b KB] [-h]\n");
+ fprintf(stdout, "where\n");
+ fprintf(stdout, " PORT is the port to connect to for the server\n");
+ fprintf(stdout, " HOST is the hostname to connect to for the server\n");
+ fprintf(stdout, " SECONDS is the number of seconds to sample the network, where the default is 60\n");
+ fprintf(stdout, " EXPERIMENT is the experiment name to run, where the default is TCP_STREAM\n");
+ fprintf(stdout, " UNITS is the output units, where the default is M megabytes\n");
+ fprintf(stdout, " HEADERS is 0 (don't) or 1 (do) display headers in the output\n");
+ fprintf(stdout, " KB is the size of the send buffer in kilobytes, where the default is 32\n");
+
+ fprintf(stdout, " -h shows this help message\n");
+}
+
void send_buffer(int fd, char* buffer, int bytes)
{
- size_t retval;
+ ssize_t retval;
while(bytes > 0)
{
@@ -235,3 +236,4 @@ void print_headers()
printf(" Size Time Throughput\n");
printf("n/a n/a bytes secs. MBytes/sec\n");
}
+
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/9bdad43e/tools/gpnetbench/gpnetbenchServer.c
----------------------------------------------------------------------
diff --git a/tools/gpnetbench/gpnetbenchServer.c b/tools/gpnetbench/gpnetbenchServer.c
index abe1afd..e25c13b 100644
--- a/tools/gpnetbench/gpnetbenchServer.c
+++ b/tools/gpnetbench/gpnetbenchServer.c
@@ -31,10 +31,7 @@ char* receiveBuffer = NULL;
void handleIncomingConnection(int fd);
-void usage()
-{
- fprintf(stdout, "usage: gpnetbenchServer -p PORT [-h]\n");
-}
+void usage(void);
int main(int argc, char** argv)
{
@@ -149,6 +146,11 @@ int main(int argc, char** argv)
return 0;
}
+void usage()
+{
+ fprintf(stdout, "usage: gpnetbenchServer -p PORT [-h]\n");
+}
+
void handleIncomingConnection(int fd)
{
ssize_t bytes;
[11/14] incubator-hawq git commit: HAWQ-894. Add missed answer file
for polymorphism case
Posted by rl...@apache.org.
HAWQ-894. Add missed answer file for polymorphism case
Project: http://git-wip-us.apache.org/repos/asf/incubator-hawq/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-hawq/commit/2e1b093f
Tree: http://git-wip-us.apache.org/repos/asf/incubator-hawq/tree/2e1b093f
Diff: http://git-wip-us.apache.org/repos/asf/incubator-hawq/diff/2e1b093f
Branch: refs/heads/2.0.0.0-incubating
Commit: 2e1b093f35faba2511eafcd0a2826ce8a7d5afb9
Parents: 0081706
Author: YI JIN <yj...@pivotal.io>
Authored: Thu Jul 14 18:58:33 2016 +1000
Committer: rlei <rl...@pivotal.io>
Committed: Tue Jul 19 10:49:42 2016 +0800
----------------------------------------------------------------------
.../query/ans/polimorphism-test1-query.ans | 190 +++++++++++++++++++
1 file changed, 190 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/2e1b093f/src/test/feature/query/ans/polimorphism-test1-query.ans
----------------------------------------------------------------------
diff --git a/src/test/feature/query/ans/polimorphism-test1-query.ans b/src/test/feature/query/ans/polimorphism-test1-query.ans
new file mode 100644
index 0000000..decdf01
--- /dev/null
+++ b/src/test/feature/query/ans/polimorphism-test1-query.ans
@@ -0,0 +1,190 @@
+select f3, myaggp01a(*) from (select * from t order by f1 limit 10) as foo group by f3 order by f3;
+ f3 | myaggp01a
+----+-----------
+ a | {}
+ b | {}
+ c | {}
+(3 rows)
+
+select f3, myaggp03a(*) from (select * from t order by f1 limit 10) as foo group by f3 order by f3;
+ f3 | myaggp03a
+----+-----------
+ a | {}
+ b | {}
+ c | {}
+(3 rows)
+
+select f3, myaggp03b(*) from (select * from t order by f1 limit 10) as foo group by f3 order by f3;
+ f3 | myaggp03b
+----+-----------
+ a | {}
+ b | {}
+ c | {}
+(3 rows)
+
+select f3, myaggp05a(f1) from (select * from t order by f1 limit 10) as foo group by f3 order by f3;
+ f3 | myaggp05a
+----+-----------
+ a | {1,4,7}
+ b | {5,2,8}
+ c | {3,6}
+(3 rows)
+
+select f3, myaggp06a(f1) from (select * from t order by f1 limit 10) as foo group by f3 order by f3;
+ f3 | myaggp06a
+----+-----------
+ a | {}
+ b | {}
+ c | {}
+(3 rows)
+
+select f3, myaggp08a(f1) from (select * from t order by f1 limit 10) as foo group by f3 order by f3;
+ f3 | myaggp08a
+----+-----------
+ a | {}
+ b | {}
+ c | {}
+(3 rows)
+
+select f3, myaggp09a(f1) from (select * from t order by f1 limit 10) as foo group by f3 order by f3;
+ f3 | myaggp09a
+----+-----------
+ a | {}
+ b | {}
+ c | {}
+(3 rows)
+
+select f3, myaggp09b(f1) from (select * from t order by f1 limit 10) as foo group by f3 order by f3;
+ f3 | myaggp09b
+----+-----------
+ a | {}
+ b | {}
+ c | {}
+(3 rows)
+
+select f3, myaggp10a(f1) from (select * from t order by f1 limit 10) as foo group by f3 order by f3;
+ f3 | myaggp10a
+----+-----------
+ a | {1,4,7}
+ b | {5,2,8}
+ c | {3,6}
+(3 rows)
+
+select f3, myaggp10b(f1) from (select * from t order by f1 limit 10) as foo group by f3 order by f3;
+ f3 | myaggp10b
+----+-----------
+ a | {1,4,7}
+ b | {5,2,8}
+ c | {3,6}
+(3 rows)
+
+select f3, myaggp20a(f1) from (select * from t order by f1 limit 10) as foo group by f3 order by f3;
+ f3 | myaggp20a
+----+-----------
+ a | {1,4,7}
+ b | {5,2,8}
+ c | {3,6}
+(3 rows)
+
+select f3, myaggp20b(f1) from (select * from t order by f1 limit 10) as foo group by f3 order by f3;
+ f3 | myaggp20b
+----+-----------
+ a | {1,4,7}
+ b | {5,2,8}
+ c | {3,6}
+(3 rows)
+
+select f3, myaggn01a(*) from (select * from t order by f1 limit 10) as foo group by f3 order by f3;
+ f3 | myaggn01a
+----+-----------
+ a | {}
+ b | {}
+ c | {}
+(3 rows)
+
+select f3, myaggn01b(*) from (select * from t order by f1 limit 10) as foo group by f3 order by f3;
+ f3 | myaggn01b
+----+-----------
+ a | {}
+ b | {}
+ c | {}
+(3 rows)
+
+select f3, myaggn03a(*) from (select * from t order by f1 limit 10) as foo group by f3 order by f3;
+ f3 | myaggn03a
+----+-----------
+ a | {}
+ b | {}
+ c | {}
+(3 rows)
+
+select f3, myaggn05a(f1) from (select * from t order by f1 limit 10) as foo group by f3 order by f3;
+ f3 | myaggn05a
+----+-----------
+ a | {1,4,7}
+ b | {5,2,8}
+ c | {3,6}
+(3 rows)
+
+select f3, myaggn05b(f1) from (select * from t order by f1 limit 10) as foo group by f3 order by f3;
+ f3 | myaggn05b
+----+-----------
+ a | {1,4,7}
+ b | {5,2,8}
+ c | {3,6}
+(3 rows)
+
+select f3, myaggn06a(f1) from (select * from t order by f1 limit 10) as foo group by f3 order by f3;
+ f3 | myaggn06a
+----+-----------
+ a | {}
+ b | {}
+ c | {}
+(3 rows)
+
+select f3, myaggn06b(f1) from (select * from t order by f1 limit 10) as foo group by f3 order by f3;
+ f3 | myaggn06b
+----+-----------
+ a | {}
+ b | {}
+ c | {}
+(3 rows)
+
+select f3, myaggn08a(f1) from (select * from t order by f1 limit 10) as foo group by f3 order by f3;
+ f3 | myaggn08a
+----+-----------
+ a | {}
+ b | {}
+ c | {}
+(3 rows)
+
+select f3, myaggn08b(f1) from (select * from t order by f1 limit 10) as foo group by f3 order by f3;
+ f3 | myaggn08b
+----+-----------
+ a | {}
+ b | {}
+ c | {}
+(3 rows)
+
+select f3, myaggn09a(f1) from (select * from t order by f1 limit 10) as foo group by f3 order by f3;
+ f3 | myaggn09a
+----+-----------
+ a | {}
+ b | {}
+ c | {}
+(3 rows)
+
+select f3, myaggn10a(f1) from (select * from t order by f1 limit 10) as foo group by f3 order by f3;
+ f3 | myaggn10a
+----+-----------
+ a | {1,4,7}
+ b | {5,2,8}
+ c | {3,6}
+(3 rows)
+
+select mysum2(f1, f1 + 1) from t;
+ mysum2
+--------
+ 80
+(1 row)
+
[06/14] incubator-hawq git commit: HAWQ-918. Fix memtuple forming bug
when null-saved size is larger than 32763 bytes
Posted by rl...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/a2a79c6d/src/test/regress/sql/aggregates_null.sql
----------------------------------------------------------------------
diff --git a/src/test/regress/sql/aggregates_null.sql b/src/test/regress/sql/aggregates_null.sql
new file mode 100644
index 0000000..4dec179
--- /dev/null
+++ b/src/test/regress/sql/aggregates_null.sql
@@ -0,0 +1,24 @@
+create temporary table mtup1(
+c0 text,
+c1 text,
+c3 int,
+c4 int
+)
+with (appendonly = true, compresstype=zlib)
+distributed by (c0, c3);
+
+insert into mtup1 values ('foo', '2015-09-1', 1);
+insert into mtup1 values ('foo', '2015-09-1', 2);
+insert into mtup1 values ('foo', '2015-09-1', 3);
+insert into mtup1 values ('foo', '2015-09-1', 4);
+insert into mtup1 values ('foo', '2015-09-1', 5);
+insert into mtup1 values ('foo', '2015-09-1', 6);
+insert into mtup1 values ('foo', '2015-09-1', 7);
+insert into mtup1 values ('foo', '2015-09-1', 8);
+insert into mtup1 values ('foo', '2015-09-1', 9);
+
+select c0, c1::timestamp, ARRAY[
+SUM(CASE WHEN c4 = 2 THEN 1 ELSE 0 END),
+SUM(CASE WHEN c4 = 3 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 4 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 5 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 6 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 7 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 8 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 9 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 10 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 11 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 12 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 13 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 14 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 15 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 16 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 17 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 18 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 19 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 20 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 21 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 22 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 23 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 24 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 25 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 26 THEN 1 ELSE 0 EN
D), SUM(CASE WHEN c4 = 27 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 28 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 29 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 30 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 31 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 32 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 33 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 34 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 35 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 36 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 37 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 38 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 39 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 40 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 41 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 42 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 43 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 44 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 45 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 46 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 47 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 48 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 49 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 50 THEN
1 ELSE 0 END), SUM(CASE WHEN c4 = 51 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 52 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 53 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 54 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 55 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 56 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 57 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 58 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 59 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 60 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 61 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 62 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 63 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 64 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 65 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 66 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 67 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 68 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 69 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 70 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 71 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 72 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 73 THEN 1 ELSE 0 END), SUM(CASE WHEN c4
= 74 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 75 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 76 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 77 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 78 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 79 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 80 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 81 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 82 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 83 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 84 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 85 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 86 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 87 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 88 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 89 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 90 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 91 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 92 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 93 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 94 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 95 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 96 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 97 THEN 1 ELSE 0 END), SUM(C
ASE WHEN c4 = 98 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 99 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 100 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 101 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 102 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 103 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 104 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 105 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 106 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 107 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 108 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 109 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 110 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 111 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 112 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 113 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 114 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 115 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 116 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 117 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 118 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 119 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 120 THEN 1 ELSE 0 END), SUM(CASE WHEN c
4 = 121 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 122 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 123 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 124 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 125 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 126 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 127 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 128 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 129 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 130 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 131 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 132 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 133 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 134 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 135 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 136 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 137 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 138 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 139 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 140 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 141 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 142 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 143 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 144
THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 145 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 146 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 147 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 148 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 149 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 150 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 151 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 152 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 153 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 154 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 155 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 156 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 157 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 158 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 159 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 160 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 161 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 162 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 163 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 164 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 165 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 166 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 167 THEN 1 E
LSE 0 END), SUM(CASE WHEN c4 = 168 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 169 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 170 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 171 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 172 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 173 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 174 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 175 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 176 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 177 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 178 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 179 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 180 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 181 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 182 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 183 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 184 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 185 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 186 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 187 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 188 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 189 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 190 THEN 1 ELSE 0 EN
D), SUM(CASE WHEN c4 = 191 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 192 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 193 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 194 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 195 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 196 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 197 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 198 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 199 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 200 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 201 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 202 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 203 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 204 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 205 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 206 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 207 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 208 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 209 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 210 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 211 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 212 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 213 THEN 1 ELSE 0 END), SUM(
CASE WHEN c4 = 214 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 215 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 216 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 217 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 218 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 219 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 220 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 221 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 222 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 223 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 224 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 225 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 226 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 227 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 228 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 229 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 230 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 231 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 232 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 233 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 234 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 235 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 236 THEN 1 ELSE 0 END), SUM(CASE WHE
N c4 = 237 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 238 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 239 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 240 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 241 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 242 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 243 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 244 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 245 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 246 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 247 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 248 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 249 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 250 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 251 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 252 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 253 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 254 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 255 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 256 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 257 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 258 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 259 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 2
60 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 261 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 262 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 263 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 264 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 265 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 266 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 267 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 268 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 269 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 270 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 271 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 272 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 273 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 274 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 275 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 276 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 277 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 278 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 279 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 280 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 281 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 282 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 283 THEN
1 ELSE 0 END), SUM(CASE WHEN c4 = 284 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 285 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 286 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 287 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 288 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 289 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 290 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 291 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 292 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 293 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 294 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 295 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 296 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 297 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 298 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 299 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 300 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 301 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 302 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 303 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 304 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 305 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 306 THEN 1 ELSE 0
END), SUM(CASE WHEN c4 = 307 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 308 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 309 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 310 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 311 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 312 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 313 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 314 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 315 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 316 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 317 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 318 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 319 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 320 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 321 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 322 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 323 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 324 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 325 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 326 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 327 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 328 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 329 THEN 1 ELSE 0 END), S
UM(CASE WHEN c4 = 330 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 331 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 332 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 333 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 334 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 335 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 336 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 337 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 338 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 339 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 340 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 341 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 342 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 343 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 344 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 345 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 346 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 347 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 348 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 349 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 350 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 351 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 352 THEN 1 ELSE 0 END), SUM(CASE
WHEN c4 = 353 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 354 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 355 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 356 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 357 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 358 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 359 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 360 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 361 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 362 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 363 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 364 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 365 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 366 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 367 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 368 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 369 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 370 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 371 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 372 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 373 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 374 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 375 THEN 1 ELSE 0 END), SUM(CASE WHEN c4
= 376 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 377 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 378 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 379 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 380 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 381 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 382 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 383 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 384 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 385 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 386 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 387 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 388 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 389 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 390 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 391 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 392 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 393 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 394 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 395 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 396 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 397 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 398 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 399 TH
EN 1 ELSE 0 END), SUM(CASE WHEN c4 = 400 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 401 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 402 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 403 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 404 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 405 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 406 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 407 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 408 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 409 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 410 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 411 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 412 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 413 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 414 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 415 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 416 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 417 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 418 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 419 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 420 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 421 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 422 THEN 1 ELS
E 0 END), SUM(CASE WHEN c4 = 423 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 424 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 425 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 426 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 427 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 428 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 429 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 430 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 431 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 432 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 433 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 434 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 435 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 436 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 437 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 438 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 439 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 440 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 441 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 442 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 443 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 444 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 445 THEN 1 ELSE 0 END)
, SUM(CASE WHEN c4 = 446 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 447 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 448 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 449 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 450 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 451 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 452 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 453 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 454 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 455 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 456 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 457 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 458 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 459 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 460 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 461 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 462 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 463 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 464 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 465 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 466 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 467 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 468 THEN 1 ELSE 0 END), SUM(CA
SE WHEN c4 = 469 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 470 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 471 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 472 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 473 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 474 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 475 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 476 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 477 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 478 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 479 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 480 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 481 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 482 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 483 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 484 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 485 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 486 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 487 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 488 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 489 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 490 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 491 THEN 1 ELSE 0 END), SUM(CASE WHEN
c4 = 492 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 493 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 494 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 495 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 496 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 497 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 498 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 499 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 500 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 501 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 502 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 503 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 504 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 505 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 506 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 507 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 508 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 509 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 510 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 511 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 512 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 513 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 514 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 515
THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 516 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 517 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 518 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 519 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 520 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 521 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 522 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 523 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 524 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 525 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 526 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 527 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 528 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 529 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 530 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 531 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 532 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 533 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 534 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 535 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 536 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 537 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 538 THEN 1
ELSE 0 END), SUM(CASE WHEN c4 = 539 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 540 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 541 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 542 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 543 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 544 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 545 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 546 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 547 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 548 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 549 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 550 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 551 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 552 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 553 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 554 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 555 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 556 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 557 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 558 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 559 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 560 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 561 THEN 1 ELSE 0 E
ND), SUM(CASE WHEN c4 = 562 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 563 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 564 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 565 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 566 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 567 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 568 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 569 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 570 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 571 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 572 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 573 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 574 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 575 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 576 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 577 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 578 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 579 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 580 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 581 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 582 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 583 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 584 THEN 1 ELSE 0 END), SUM
(CASE WHEN c4 = 585 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 586 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 587 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 588 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 589 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 590 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 591 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 592 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 593 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 594 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 595 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 596 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 597 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 598 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 599 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 600 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 601 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 602 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 603 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 604 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 605 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 606 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 607 THEN 1 ELSE 0 END), SUM(CASE WH
EN c4 = 608 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 609 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 610 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 611 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 612 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 613 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 614 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 615 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 616 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 617 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 618 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 619 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 620 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 621 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 622 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 623 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 624 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 625 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 626 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 627 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 628 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 629 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 630 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 =
631 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 632 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 633 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 634 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 635 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 636 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 637 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 638 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 639 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 640 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 641 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 642 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 643 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 644 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 645 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 646 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 647 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 648 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 649 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 650 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 651 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 652 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 653 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 654 THEN
1 ELSE 0 END), SUM(CASE WHEN c4 = 655 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 656 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 657 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 658 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 659 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 660 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 661 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 662 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 663 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 664 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 665 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 666 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 667 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 668 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 669 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 670 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 671 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 672 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 673 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 674 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 675 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 676 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 677 THEN 1 ELSE
0 END), SUM(CASE WHEN c4 = 678 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 679 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 680 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 681 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 682 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 683 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 684 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 685 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 686 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 687 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 688 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 689 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 690 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 691 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 692 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 693 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 694 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 695 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 696 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 697 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 698 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 699 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 700 THEN 1 ELSE 0 END),
SUM(CASE WHEN c4 = 701 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 702 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 703 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 704 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 705 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 706 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 707 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 708 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 709 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 710 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 711 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 712 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 713 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 714 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 715 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 716 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 717 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 718 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 719 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 720 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 721 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 722 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 723 THEN 1 ELSE 0 END), SUM(CASE
WHEN c4 = 724 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 725 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 726 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 727 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 728 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 729 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 730 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 731 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 732 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 733 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 734 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 735 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 736 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 737 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 738 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 739 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 740 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 741 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 742 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 743 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 744 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 745 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 746 THEN 1 ELSE 0 END), SUM(CASE WHEN c4
= 747 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 748 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 749 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 750 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 751 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 752 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 753 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 754 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 755 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 756 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 757 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 758 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 759 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 760 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 761 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 762 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 763 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 764 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 765 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 766 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 767 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 768 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 769 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 770 T
HEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 771 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 772 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 773 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 774 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 775 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 776 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 777 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 778 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 779 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 780 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 781 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 782 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 783 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 784 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 785 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 786 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 787 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 788 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 789 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 790 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 791 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 792 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 793 THEN 1 EL
SE 0 END), SUM(CASE WHEN c4 = 794 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 795 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 796 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 797 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 798 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 799 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 800 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 801 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 802 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 803 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 804 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 805 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 806 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 807 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 808 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 809 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 810 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 811 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 812 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 813 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 814 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 815 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 816 THEN 1 ELSE 0 END
), SUM(CASE WHEN c4 = 817 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 818 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 819 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 820 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 821 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 822 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 823 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 824 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 825 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 826 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 827 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 828 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 829 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 830 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 831 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 832 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 833 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 834 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 835 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 836 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 837 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 838 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 839 THEN 1 ELSE 0 END), SUM(C
ASE WHEN c4 = 840 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 841 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 842 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 843 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 844 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 845 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 846 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 847 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 848 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 849 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 850 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 851 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 852 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 853 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 854 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 855 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 856 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 857 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 858 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 859 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 860 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 861 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 862 THEN 1 ELSE 0 END), SUM(CASE WHEN
c4 = 863 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 864 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 865 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 866 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 867 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 868 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 869 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 870 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 871 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 872 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 873 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 874 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 875 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 876 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 877 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 878 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 879 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 880 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 881 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 882 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 883 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 884 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 885 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 88
6 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 887 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 888 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 889 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 890 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 891 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 892 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 893 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 894 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 895 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 896 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 897 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 898 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 899 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 900 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 901 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 902 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 903 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 904 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 905 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 906 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 907 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 908 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 909 THEN 1
ELSE 0 END), SUM(CASE WHEN c4 = 910 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 911 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 912 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 913 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 914 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 915 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 916 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 917 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 918 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 919 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 920 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 921 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 922 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 923 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 924 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 925 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 926 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 927 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 928 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 929 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 930 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 931 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 932 THEN 1 ELSE 0
END), SUM(CASE WHEN c4 = 933 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 934 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 935 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 936 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 937 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 938 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 939 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 940 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 941 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 942 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 943 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 944 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 945 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 946 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 947 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 948 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 949 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 950 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 951 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 952 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 953 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 954 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 955 THEN 1 ELSE 0 END), SU
M(CASE WHEN c4 = 956 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 957 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 958 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 959 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 960 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 961 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 962 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 963 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 964 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 965 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 966 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 967 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 968 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 969 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 970 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 971 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 972 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 973 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 974 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 975 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 976 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 977 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 978 THEN 1 ELSE 0 END), SUM(CASE W
HEN c4 = 979 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 980 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 981 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 982 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 983 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 984 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 985 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 986 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 987 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 988 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 989 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 990 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 991 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 992 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 993 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 994 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 995 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 996 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 997 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 998 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 999 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1000 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1001 THEN 1 ELSE 0 END), SUM(CASE WHEN c4
= 1002 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1003 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1004 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1005 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1006 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1007 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1008 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1009 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1010 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1011 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1012 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1013 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1014 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1015 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1016 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1017 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1018 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1019 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1020 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1021 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1022 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1023 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1024 THEN 1 ELSE 0 END), S
UM(CASE WHEN c4 = 1025 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1026 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1027 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1028 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1029 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1030 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1031 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1032 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1033 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1034 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1035 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1036 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1037 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1038 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1039 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1040 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1041 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1042 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1043 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1044 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1045 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1046 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1047 THEN 1
ELSE 0 END), SUM(CASE WHEN c4 = 1048 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1049 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1050 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1051 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1052 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1053 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1054 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1055 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1056 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1057 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1058 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1059 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1060 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1061 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1062 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1063 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1064 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1065 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1066 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1067 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1068 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1069 THEN 1 ELSE 0 END), SUM(CASE WHEN c
4 = 1070 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1071 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1072 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1073 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1074 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1075 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1076 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1077 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1078 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1079 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1080 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1081 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1082 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1083 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1084 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1085 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1086 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1087 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1088 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1089 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1090 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1091 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1092 THEN 1 ELSE 0 END),
SUM(CASE WHEN c4 = 1093 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1094 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1095 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1096 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1097 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1098 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1099 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1100 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1101 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1102 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1103 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1104 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1105 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1106 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1107 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1108 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1109 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1110 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1111 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1112 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1113 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1114 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1115 THEN
1 ELSE 0 END), SUM(CASE WHEN c4 = 1116 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1117 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1118 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1119 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1120 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1121 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1122 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1123 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1124 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1125 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1126 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1127 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1128 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1129 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1130 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1131 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1132 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1133 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1134 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1135 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1136 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1137 THEN 1 ELSE 0 END), SUM(CASE WHEN
c4 = 1138 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1139 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1140 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1141 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1142 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1143 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1144 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1145 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1146 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1147 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1148 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1149 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1150 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1151 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1152 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1153 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1154 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1155 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1156 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1157 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1158 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1159 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1160 THEN 1 ELSE 0 END),
SUM(CASE WHEN c4 = 1161 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1162 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1163 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1164 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1165 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1166 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1167 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1168 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1169 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1170 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1171 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1172 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1173 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1174 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1175 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1176 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1177 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1178 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1179 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1180 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1181 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1182 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1183 THEN
1 ELSE 0 END), SUM(CASE WHEN c4 = 1184 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1185 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1186 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1187 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1188 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1189 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1190 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1191 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1192 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1193 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1194 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1195 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1196 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1197 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1198 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1199 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1200 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1201 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1202 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1203 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1204 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1205 THEN 1 ELSE 0 END), SUM(CASE WHEN
c4 = 1206 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1207 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1208 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1209 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1210 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1211 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1212 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1213 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1214 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1215 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1216 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1217 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1218 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1219 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1220 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1221 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1222 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1223 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1224 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1225 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1226 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1227 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1228 THEN 1 ELSE 0 END)
, SUM(CASE WHEN c4 = 1229 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1230 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1231 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1232 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1233 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1234 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1235 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1236 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1237 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1238 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1239 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1240 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1241 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1242 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1243 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1244 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1245 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1246 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1247 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1248 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1249 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1250 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1251 THE
N 1 ELSE 0 END), SUM(CASE WHEN c4 = 1252 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1253 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1254 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1255 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1256 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1257 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1258 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1259 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1260 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1261 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1262 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1263 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1264 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1265 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1266 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1267 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1268 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1269 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1270 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1271 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1272 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1273 THEN 1 ELSE 0 END), SUM(CASE WHE
N c4 = 1274 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1275 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1276 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1277 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1278 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1279 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1280 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1281 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1282 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1283 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1284 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1285 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1286 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1287 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1288 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1289 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1290 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1291 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1292 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1293 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1294 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1295 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1296 THEN 1 ELSE 0 END
), SUM(CASE WHEN c4 = 1297 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1298 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1299 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1300 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1301 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1302 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1303 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1304 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1305 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1306 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1307 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1308 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1309 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1310 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1311 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1312 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1313 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1314 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1315 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1316 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1317 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1318 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1319 TH
EN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1320 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1321 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1322 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1323 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1324 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1325 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1326 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1327 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1328 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1329 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1330 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1331 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1332 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1333 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1334 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1335 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1336 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1337 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1338 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1339 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1340 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1341 THEN 1 ELSE 0 END), SUM(CASE WH
EN c4 = 1342 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1343 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1344 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1345 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1346 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1347 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1348 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1349 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1350 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1351 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1352 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1353 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1354 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1355 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1356 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1357 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1358 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1359 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1360 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1361 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1362 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1363 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1364 THEN 1 ELSE 0 EN
D), SUM(CASE WHEN c4 = 1365 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1366 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1367 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1368 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1369 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1370 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1371 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1372 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1373 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1374 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1375 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1376 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1377 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1378 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1379 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1380 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1381 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1382 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1383 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1384 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1385 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1386 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1387 T
HEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1388 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1389 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1390 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1391 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1392 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1393 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1394 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1395 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1396 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1397 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1398 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1399 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1400 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1401 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1402 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1403 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1404 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1405 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1406 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1407 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1408 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1409 THEN 1 ELSE 0 END), SUM(CASE W
HEN c4 = 1410 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1411 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1412 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1413 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1414 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1415 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1416 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1417 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1418 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1419 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1420 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1421 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1422 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1423 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1424 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1425 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1426 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1427 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1428 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1429 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1430 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1431 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1432 THEN 1 ELSE 0 E
ND), SUM(CASE WHEN c4 = 1433 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1434 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1435 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1436 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1437 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1438 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1439 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1440 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1441 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1442 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1443 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1444 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1445 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1446 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1447 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1448 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1449 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1450 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1451 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1452 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1453 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1454 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1455
THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1456 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1457 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1458 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1459 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1460 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1461 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1462 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1463 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1464 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1465 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1466 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1467 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1468 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1469 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1470 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1471 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1472 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1473 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1474 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1475 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1476 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1477 THEN 1 ELSE 0 END), SUM(CASE
WHEN c4 = 1478 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1479 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1480 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1481 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1482 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1483 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1484 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1485 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1486 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1487 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1488 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1489 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1490 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1491 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1492 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1493 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1494 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1495 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1496 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1497 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1498 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1499 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1500 THEN 1 ELSE 0
END), SUM(CASE WHEN c4 = 1501 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1502 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1503 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1504 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1505 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1506 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1507 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1508 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1509 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1510 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1511 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1512 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1513 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1514 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1515 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1516 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1517 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1518 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1519 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1520 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1521 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1522 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1523
THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1524 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1525 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1526 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1527 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1528 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1529 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1530 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1531 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1532 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1533 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1534 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1535 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1536 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1537 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1538 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1539 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1540 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1541 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1542 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1543 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1544 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1545 THEN 1 ELSE 0 END), SUM(CASE
WHEN c4 = 1546 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1547 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1548 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1549 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1550 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1551 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1552 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1553 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1554 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1555 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1556 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1557 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1558 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1559 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1560 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1561 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1562 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1563 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1564 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1565 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1566 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1567 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1568 THEN 1 ELSE 0
END), SUM(CASE WHEN c4 = 1569 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1570 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1571 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1572 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1573 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1574 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1575 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1576 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1577 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1578 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1579 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1580 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1581 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1582 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1583 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1584 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1585 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1586 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1587 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1588 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1589 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1590 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 159
1 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1592 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1593 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1594 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1595 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1596 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1597 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1598 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1599 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1600 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1601 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1602 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1603 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1604 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1605 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1606 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1607 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1608 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1609 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1610 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1611 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1612 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1613 THEN 1 ELSE 0 END), SUM(CAS
E WHEN c4 = 1614 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1615 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1616 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1617 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1618 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1619 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1620 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1621 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1622 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1623 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1624 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1625 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1626 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1627 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1628 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1629 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1630 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1631 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1632 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1633 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1634 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1635 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1636 THEN 1 ELSE
0 END), SUM(CASE WHEN c4 = 1637 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1638 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1639 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1640 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1641 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1642 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1643 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1644 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1645 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1646 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1647 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1648 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1649 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1650 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1651 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1652 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1653 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1654 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1655 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1656 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1657 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1658 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 16
59 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1660 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1661 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1662 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1663 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1664 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1665 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1666 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1667 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1668 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1669 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1670 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1671 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1672 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1673 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1674 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1675 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1676 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1677 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1678 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1679 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1680 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1681 THEN 1 ELSE 0 END), SUM(CA
SE WHEN c4 = 1682 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1683 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1684 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1685 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1686 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1687 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1688 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1689 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1690 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1691 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1692 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1693 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1694 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1695 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1696 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1697 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1698 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1699 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1700 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1701 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1702 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1703 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1704 THEN 1 ELSE
0 END), SUM(CASE WHEN c4 = 1705 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1706 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1707 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1708 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1709 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1710 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1711 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1712 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1713 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1714 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1715 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1716 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1717 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1718 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1719 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1720 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1721 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1722 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1723 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1724 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1725 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1726 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1
727 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1728 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1729 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1730 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1731 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1732 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1733 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1734 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1735 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1736 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1737 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1738 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1739 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1740 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1741 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1742 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1743 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1744 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1745 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1746 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1747 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1748 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1749 THEN 1 ELSE 0 END), SUM(C
ASE WHEN c4 = 1750 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1751 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1752 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1753 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1754 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1755 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1756 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1757 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1758 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1759 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1760 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1761 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1762 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1763 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1764 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1765 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1766 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1767 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1768 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1769 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1770 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1771 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1772 THEN 1 ELS
E 0 END), SUM(CASE WHEN c4 = 1773 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1774 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1775 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1776 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1777 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1778 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1779 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1780 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1781 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1782 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1783 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1784 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1785 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1786 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1787 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1788 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1789 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1790 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1791 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1792 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1793 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1794 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 =
1795 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1796 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1797 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1798 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1799 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1800 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1801 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1802 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1803 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1804 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1805 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1806 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1807 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1808 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1809 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1810 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1811 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1812 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1813 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1814 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1815 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1816 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1817 THEN 1 ELSE 0 END), SUM(
CASE WHEN c4 = 1818 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1819 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1820 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1821 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1822 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1823 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1824 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1825 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1826 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1827 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1828 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1829 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1830 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1831 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1832 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1833 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1834 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1835 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1836 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1837 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1838 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1839 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1840 THEN 1 EL
SE 0 END), SUM(CASE WHEN c4 = 1841 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1842 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1843 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1844 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1845 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1846 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1847 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1848 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1849 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1850 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1851 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1852 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1853 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1854 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1855 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1856 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1857 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1858 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1859 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1860 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1861 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1862 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 =
1863 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1864 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1865 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1866 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1867 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1868 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1869 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1870 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1871 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1872 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1873 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1874 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1875 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1876 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1877 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1878 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1879 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1880 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1881 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1882 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1883 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1884 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1885 THEN 1 ELSE 0 END), SUM
(CASE WHEN c4 = 1886 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1887 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1888 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1889 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1890 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1891 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1892 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1893 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1894 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1895 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1896 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1897 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1898 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1899 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1900 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1901 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1902 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1903 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1904 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1905 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1906 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1907 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1908 THEN 1 E
LSE 0 END), SUM(CASE WHEN c4 = 1909 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1910 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1911 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1912 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1913 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1914 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1915 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1916 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1917 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1918 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1919 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1920 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1921 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1922 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1923 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1924 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1925 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1926 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1927 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1928 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1929 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1930 THEN 1 ELSE 0 END), SUM(CASE WHEN c4
= 1931 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1932 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1933 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1934 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1935 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1936 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1937 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1938 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1939 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1940 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1941 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1942 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1943 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1944 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1945 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1946 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1947 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1948 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1949 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1950 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1951 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1952 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1953 THEN 1 ELSE 0 END), SU
M(CASE WHEN c4 = 1954 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1955 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1956 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1957 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1958 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1959 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1960 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1961 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1962 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1963 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1964 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1965 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1966 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1967 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1968 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1969 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1970 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1971 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1972 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1973 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1974 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1975 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1976 THEN 1
ELSE 0 END), SUM(CASE WHEN c4 = 1977 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1978 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1979 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1980 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1981 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1982 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1983 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1984 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1985 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1986 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1987 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1988 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1989 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1990 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1991 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1992 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1993 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1994 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1995 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1996 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1997 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1998 THEN 1 ELSE 0 END), SUM(CASE WHEN c4
= 1999 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 2000 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 2001 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 2002 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 2003 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 2004 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 2005 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 2006 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 2007 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 2008 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 2009 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 2010 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 2011 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 2012 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 2013 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 2014 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 2015 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 2016 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 2017 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 2018 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 2019 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 2020 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 2021 THEN 1 ELSE 0 END), S
UM(CASE WHEN c4 = 2022 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 2023 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 2024 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 2025 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 2026 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 2027 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 2028 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 2029 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 2030 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 2031 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 2032 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 2033 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 2034 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 2035 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 2036 THEN 1 ELSE 0 END), SUM(CASE WH
<TRUNCATED>
[03/14] incubator-hawq git commit: HAWQ-917. Refactor feature tests
for data type check with new googletest framework
Posted by rl...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/f05c19ed/src/test/regress/expected/boolean.out
----------------------------------------------------------------------
diff --git a/src/test/regress/expected/boolean.out b/src/test/regress/expected/boolean.out
deleted file mode 100755
index 8c6b5d2..0000000
--- a/src/test/regress/expected/boolean.out
+++ /dev/null
@@ -1,289 +0,0 @@
---
--- BOOLEAN
---
---
--- sanity check - if this fails go insane!
---
-SELECT 1 AS one;
- one
------
- 1
-(1 row)
-
--- ******************testing built-in type bool********************
--- check bool type-casting as well as and, or, not in qualifications--
-SELECT bool 't' AS true;
- true
-------
- t
-(1 row)
-
-SELECT bool 'f' AS false;
- false
--------
- f
-(1 row)
-
-SELECT bool 't' or bool 'f' AS true;
- true
-------
- t
-(1 row)
-
-SELECT bool 't' and bool 'f' AS false;
- false
--------
- f
-(1 row)
-
-SELECT not bool 'f' AS true;
- true
-------
- t
-(1 row)
-
-SELECT bool 't' = bool 'f' AS false;
- false
--------
- f
-(1 row)
-
-SELECT bool 't' <> bool 'f' AS true;
- true
-------
- t
-(1 row)
-
-CREATE TABLE BOOLTBL1 (f1 bool);
-NOTICE: Table doesn't have 'DISTRIBUTED BY' clause -- Using column named 'f1' as the Greenplum Database data distribution key for this table.
-HINT: The 'DISTRIBUTED BY' clause determines the distribution of data. Make sure column(s) chosen are the optimal data distribution key to minimize skew.
-INSERT INTO BOOLTBL1 (f1) VALUES (bool 't');
-INSERT INTO BOOLTBL1 (f1) VALUES (bool 'True');
-INSERT INTO BOOLTBL1 (f1) VALUES (bool 'true');
--- BOOLTBL1 should be full of true's at this point
-SELECT '' AS t_3, BOOLTBL1.* FROM BOOLTBL1;
- t_3 | f1
------+----
- | t
- | t
- | t
-(3 rows)
-
-SELECT '' AS t_3, BOOLTBL1.*
- FROM BOOLTBL1
- WHERE f1 = bool 'true';
- t_3 | f1
------+----
- | t
- | t
- | t
-(3 rows)
-
-SELECT '' AS t_3, BOOLTBL1.*
- FROM BOOLTBL1
- WHERE f1 <> bool 'false';
- t_3 | f1
------+----
- | t
- | t
- | t
-(3 rows)
-
-SELECT '' AS zero, BOOLTBL1.*
- FROM BOOLTBL1
- WHERE booleq(bool 'false', f1);
- zero | f1
-------+----
-(0 rows)
-
-INSERT INTO BOOLTBL1 (f1) VALUES (bool 'f');
-SELECT '' AS f_1, BOOLTBL1.*
- FROM BOOLTBL1
- WHERE f1 = bool 'false';
- f_1 | f1
------+----
- | f
-(1 row)
-
-CREATE TABLE BOOLTBL2 (f1 bool);
-NOTICE: Table doesn't have 'DISTRIBUTED BY' clause -- Using column named 'f1' as the Greenplum Database data distribution key for this table.
-HINT: The 'DISTRIBUTED BY' clause determines the distribution of data. Make sure column(s) chosen are the optimal data distribution key to minimize skew.
-INSERT INTO BOOLTBL2 (f1) VALUES (bool 'f');
-INSERT INTO BOOLTBL2 (f1) VALUES (bool 'false');
-INSERT INTO BOOLTBL2 (f1) VALUES (bool 'False');
-INSERT INTO BOOLTBL2 (f1) VALUES (bool 'FALSE');
--- This is now an invalid expression
--- For pre-v6.3 this evaluated to false - thomas 1997-10-23
-INSERT INTO BOOLTBL2 (f1)
- VALUES (bool 'XXX');
-ERROR: invalid input syntax for type boolean: "XXX"
-LINE 2: VALUES (bool 'XXX');
- ^
--- BOOLTBL2 should be full of false's at this point
-SELECT '' AS f_4, BOOLTBL2.* FROM BOOLTBL2;
- f_4 | f1
------+----
- | f
- | f
- | f
- | f
-(4 rows)
-
-SELECT '' AS tf_12, BOOLTBL1.*, BOOLTBL2.*
- FROM BOOLTBL1, BOOLTBL2
- WHERE BOOLTBL2.f1 <> BOOLTBL1.f1;
- tf_12 | f1 | f1
--------+----+----
- | t | f
- | t | f
- | t | f
- | t | f
- | t | f
- | t | f
- | t | f
- | t | f
- | t | f
- | t | f
- | t | f
- | t | f
-(12 rows)
-
-SELECT '' AS tf_12, BOOLTBL1.*, BOOLTBL2.*
- FROM BOOLTBL1, BOOLTBL2
- WHERE boolne(BOOLTBL2.f1,BOOLTBL1.f1);
- tf_12 | f1 | f1
--------+----+----
- | t | f
- | t | f
- | t | f
- | t | f
- | t | f
- | t | f
- | t | f
- | t | f
- | t | f
- | t | f
- | t | f
- | t | f
-(12 rows)
-
-SELECT '' AS ff_4, BOOLTBL1.*, BOOLTBL2.*
- FROM BOOLTBL1, BOOLTBL2
- WHERE BOOLTBL2.f1 = BOOLTBL1.f1 and BOOLTBL1.f1 = bool 'false' ;
- ff_4 | f1 | f1
-------+----+----
- | f | f
- | f | f
- | f | f
- | f | f
-(4 rows)
-
-SELECT '' AS tf_12_ff_4, BOOLTBL1.*, BOOLTBL2.*
- FROM BOOLTBL1, BOOLTBL2
- WHERE BOOLTBL2.f1 = BOOLTBL1.f1 or BOOLTBL1.f1 = bool 'true'
- ORDER BY BOOLTBL1.f1, BOOLTBL2.f1 ;
- tf_12_ff_4 | f1 | f1
-------------+----+----
- | f | f
- | f | f
- | f | f
- | f | f
- | t | f
- | t | f
- | t | f
- | t | f
- | t | f
- | t | f
- | t | f
- | t | f
- | t | f
- | t | f
- | t | f
- | t | f
-(16 rows)
-
---
--- SQL92 syntax
--- Try all combinations to ensure that we get nothing when we expect nothing
--- - thomas 2000-01-04
---
-SELECT '' AS "True", f1
- FROM BOOLTBL1
- WHERE f1 IS TRUE;
- True | f1
-------+----
- | t
- | t
- | t
-(3 rows)
-
-SELECT '' AS "Not False", f1
- FROM BOOLTBL1
- WHERE f1 IS NOT FALSE;
- Not False | f1
------------+----
- | t
- | t
- | t
-(3 rows)
-
-SELECT '' AS "False", f1
- FROM BOOLTBL1
- WHERE f1 IS FALSE;
- False | f1
--------+----
- | f
-(1 row)
-
-SELECT '' AS "Not True", f1
- FROM BOOLTBL1
- WHERE f1 IS NOT TRUE;
- Not True | f1
-----------+----
- | f
-(1 row)
-
-SELECT '' AS "True", f1
- FROM BOOLTBL2
- WHERE f1 IS TRUE;
- True | f1
-------+----
-(0 rows)
-
-SELECT '' AS "Not False", f1
- FROM BOOLTBL2
- WHERE f1 IS NOT FALSE;
- Not False | f1
------------+----
-(0 rows)
-
-SELECT '' AS "False", f1
- FROM BOOLTBL2
- WHERE f1 IS FALSE;
- False | f1
--------+----
- | f
- | f
- | f
- | f
-(4 rows)
-
-SELECT '' AS "Not True", f1
- FROM BOOLTBL2
- WHERE f1 IS NOT TRUE;
- Not True | f1
-----------+----
- | f
- | f
- | f
- | f
-(4 rows)
-
---
--- Clean up
--- Many tables are retained by the regression test, but these do not seem
--- particularly useful so just get rid of them for now.
--- - thomas 1997-11-30
---
-DROP TABLE BOOLTBL1;
-DROP TABLE BOOLTBL2;
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/f05c19ed/src/test/regress/expected/char.out
----------------------------------------------------------------------
diff --git a/src/test/regress/expected/char.out b/src/test/regress/expected/char.out
deleted file mode 100755
index a0ba3d4..0000000
--- a/src/test/regress/expected/char.out
+++ /dev/null
@@ -1,122 +0,0 @@
---
--- CHAR
---
--- fixed-length by value
--- internally passed by value if <= 4 bytes in storage
-SELECT char 'c' = char 'c' AS true;
- true
-------
- t
-(1 row)
-
---
--- Build a table for testing
---
-CREATE TABLE CHAR_TBL(f1 char);
-INSERT INTO CHAR_TBL (f1) VALUES ('a');
-INSERT INTO CHAR_TBL (f1) VALUES ('A');
--- any of the following three input formats are acceptable
-INSERT INTO CHAR_TBL (f1) VALUES ('1');
-INSERT INTO CHAR_TBL (f1) VALUES (2);
-INSERT INTO CHAR_TBL (f1) VALUES ('3');
--- zero-length char
-INSERT INTO CHAR_TBL (f1) VALUES ('');
--- try char's of greater than 1 length
-INSERT INTO CHAR_TBL (f1) VALUES ('cd');
-ERROR: value too long for type character(1)
-INSERT INTO CHAR_TBL (f1) VALUES ('c ');
-SELECT '' AS seven, * FROM CHAR_TBL;
- seven | f1
--------+----
- | a
- | A
- | 1
- | 2
- | 3
- |
- | c
-(7 rows)
-
-SELECT '' AS six, c.*
- FROM CHAR_TBL c
- WHERE c.f1 <> 'a';
- six | f1
------+----
- | A
- | 1
- | 2
- | 3
- |
- | c
-(6 rows)
-
-SELECT '' AS one, c.*
- FROM CHAR_TBL c
- WHERE c.f1 = 'a';
- one | f1
------+----
- | a
-(1 row)
-
-SELECT '' AS five, c.*
- FROM CHAR_TBL c
- WHERE c.f1 < 'a';
- five | f1
-------+----
- | A
- | 1
- | 2
- | 3
- |
-(5 rows)
-
-SELECT '' AS six, c.*
- FROM CHAR_TBL c
- WHERE c.f1 <= 'a';
- six | f1
------+----
- | a
- | A
- | 1
- | 2
- | 3
- |
-(6 rows)
-
-SELECT '' AS one, c.*
- FROM CHAR_TBL c
- WHERE c.f1 > 'a';
- one | f1
------+----
- | c
-(1 row)
-
-SELECT '' AS two, c.*
- FROM CHAR_TBL c
- WHERE c.f1 >= 'a';
- two | f1
------+----
- | a
- | c
-(2 rows)
-
-DROP TABLE CHAR_TBL;
---
--- Now test longer arrays of char
---
-CREATE TABLE CHAR_TBL(f1 char(4));
-INSERT INTO CHAR_TBL (f1) VALUES ('a');
-INSERT INTO CHAR_TBL (f1) VALUES ('ab');
-INSERT INTO CHAR_TBL (f1) VALUES ('abcd');
-INSERT INTO CHAR_TBL (f1) VALUES ('abcde');
-ERROR: value too long for type character(4)
-INSERT INTO CHAR_TBL (f1) VALUES ('abcd ');
-SELECT '' AS four, * FROM CHAR_TBL;
- four | f1
-------+------
- | a
- | ab
- | abcd
- | abcd
-(4 rows)
-
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/f05c19ed/src/test/regress/expected/date.out
----------------------------------------------------------------------
diff --git a/src/test/regress/expected/date.out b/src/test/regress/expected/date.out
deleted file mode 100755
index 33b5745..0000000
--- a/src/test/regress/expected/date.out
+++ /dev/null
@@ -1,1157 +0,0 @@
---
--- DATE
---
-CREATE TABLE DATE_TBL (f1 date);
-INSERT INTO DATE_TBL VALUES ('1957-04-09');
-INSERT INTO DATE_TBL VALUES ('1957-06-13');
-INSERT INTO DATE_TBL VALUES ('1996-02-28');
-INSERT INTO DATE_TBL VALUES ('1996-02-29');
-INSERT INTO DATE_TBL VALUES ('1996-03-01');
-INSERT INTO DATE_TBL VALUES ('1996-03-02');
-INSERT INTO DATE_TBL VALUES ('1997-02-28');
-INSERT INTO DATE_TBL VALUES ('1997-02-29');
-ERROR: date/time field value out of range: "1997-02-29"
-INSERT INTO DATE_TBL VALUES ('1997-03-01');
-INSERT INTO DATE_TBL VALUES ('1997-03-02');
-INSERT INTO DATE_TBL VALUES ('2000-04-01');
-INSERT INTO DATE_TBL VALUES ('2000-04-02');
-INSERT INTO DATE_TBL VALUES ('2000-04-03');
-INSERT INTO DATE_TBL VALUES ('2038-04-08');
-INSERT INTO DATE_TBL VALUES ('2039-04-09');
-INSERT INTO DATE_TBL VALUES ('2040-04-10');
-SELECT f1 AS "Fifteen" FROM DATE_TBL ORDER BY 1;
- Fifteen
-------------
- 04-09-1957
- 06-13-1957
- 02-28-1996
- 02-29-1996
- 03-01-1996
- 03-02-1996
- 02-28-1997
- 03-01-1997
- 03-02-1997
- 04-01-2000
- 04-02-2000
- 04-03-2000
- 04-08-2038
- 04-09-2039
- 04-10-2040
-(15 rows)
-
-SELECT f1 AS "Nine" FROM DATE_TBL WHERE f1 < '2000-01-01' ORDER BY 1;
- Nine
-------------
- 04-09-1957
- 06-13-1957
- 02-28-1996
- 02-29-1996
- 03-01-1996
- 03-02-1996
- 02-28-1997
- 03-01-1997
- 03-02-1997
-(9 rows)
-
-SELECT f1 AS "Three" FROM DATE_TBL
- WHERE f1 BETWEEN '2000-01-01' AND '2001-01-01' ORDER BY 1;
- Three
-------------
- 04-01-2000
- 04-02-2000
- 04-03-2000
-(3 rows)
-
---
--- Check all the documented input formats
---
-SET datestyle TO iso; -- display results in ISO
-SET datestyle TO ymd;
-SELECT date 'January 8, 1999';
- date
-------------
- 1999-01-08
-(1 row)
-
-SELECT date '1999-01-08';
- date
-------------
- 1999-01-08
-(1 row)
-
-SELECT date '1999-01-18';
- date
-------------
- 1999-01-18
-(1 row)
-
-SELECT date '1/8/1999';
-ERROR: date/time field value out of range: "1/8/1999"
-LINE 1: SELECT date '1/8/1999';
- ^
-HINT: Perhaps you need a different "datestyle" setting.
-SELECT date '1/18/1999';
-ERROR: date/time field value out of range: "1/18/1999"
-LINE 1: SELECT date '1/18/1999';
- ^
-HINT: Perhaps you need a different "datestyle" setting.
-SELECT date '18/1/1999';
-ERROR: date/time field value out of range: "18/1/1999"
-LINE 1: SELECT date '18/1/1999';
- ^
-HINT: Perhaps you need a different "datestyle" setting.
-SELECT date '01/02/03';
- date
-------------
- 2001-02-03
-(1 row)
-
-SELECT date '19990108';
- date
-------------
- 1999-01-08
-(1 row)
-
-SELECT date '990108';
- date
-------------
- 1999-01-08
-(1 row)
-
-SELECT date '1999.008';
- date
-------------
- 1999-01-08
-(1 row)
-
-SELECT date 'J2451187';
- date
-------------
- 1999-01-08
-(1 row)
-
-SELECT date 'January 8, 99 BC';
-ERROR: date/time field value out of range: "January 8, 99 BC"
-LINE 1: SELECT date 'January 8, 99 BC';
- ^
-HINT: Perhaps you need a different "datestyle" setting.
-SELECT date '99-Jan-08';
- date
-------------
- 1999-01-08
-(1 row)
-
-SELECT date '1999-Jan-08';
- date
-------------
- 1999-01-08
-(1 row)
-
-SELECT date '08-Jan-99';
-ERROR: date/time field value out of range: "08-Jan-99"
-LINE 1: SELECT date '08-Jan-99';
- ^
-HINT: Perhaps you need a different "datestyle" setting.
-SELECT date '08-Jan-1999';
- date
-------------
- 1999-01-08
-(1 row)
-
-SELECT date 'Jan-08-99';
-ERROR: date/time field value out of range: "Jan-08-99"
-LINE 1: SELECT date 'Jan-08-99';
- ^
-HINT: Perhaps you need a different "datestyle" setting.
-SELECT date 'Jan-08-1999';
- date
-------------
- 1999-01-08
-(1 row)
-
-SELECT date '99-08-Jan';
-ERROR: invalid input syntax for type date: "99-08-Jan"
-LINE 1: SELECT date '99-08-Jan';
- ^
-SELECT date '1999-08-Jan';
-ERROR: invalid input syntax for type date: "1999-08-Jan"
-LINE 1: SELECT date '1999-08-Jan';
- ^
-SELECT date '99 Jan 08';
- date
-------------
- 1999-01-08
-(1 row)
-
-SELECT date '1999 Jan 08';
- date
-------------
- 1999-01-08
-(1 row)
-
-SELECT date '08 Jan 99';
-ERROR: date/time field value out of range: "08 Jan 99"
-LINE 1: SELECT date '08 Jan 99';
- ^
-HINT: Perhaps you need a different "datestyle" setting.
-SELECT date '08 Jan 1999';
- date
-------------
- 1999-01-08
-(1 row)
-
-SELECT date 'Jan 08 99';
-ERROR: date/time field value out of range: "Jan 08 99"
-LINE 1: SELECT date 'Jan 08 99';
- ^
-HINT: Perhaps you need a different "datestyle" setting.
-SELECT date 'Jan 08 1999';
- date
-------------
- 1999-01-08
-(1 row)
-
-SELECT date '99 08 Jan';
- date
-------------
- 1999-01-08
-(1 row)
-
-SELECT date '1999 08 Jan';
- date
-------------
- 1999-01-08
-(1 row)
-
-SELECT date '99-01-08';
- date
-------------
- 1999-01-08
-(1 row)
-
-SELECT date '1999-01-08';
- date
-------------
- 1999-01-08
-(1 row)
-
-SELECT date '08-01-99';
-ERROR: date/time field value out of range: "08-01-99"
-LINE 1: SELECT date '08-01-99';
- ^
-HINT: Perhaps you need a different "datestyle" setting.
-SELECT date '08-01-1999';
-ERROR: date/time field value out of range: "08-01-1999"
-LINE 1: SELECT date '08-01-1999';
- ^
-HINT: Perhaps you need a different "datestyle" setting.
-SELECT date '01-08-99';
-ERROR: date/time field value out of range: "01-08-99"
-LINE 1: SELECT date '01-08-99';
- ^
-HINT: Perhaps you need a different "datestyle" setting.
-SELECT date '01-08-1999';
-ERROR: date/time field value out of range: "01-08-1999"
-LINE 1: SELECT date '01-08-1999';
- ^
-HINT: Perhaps you need a different "datestyle" setting.
-SELECT date '99-08-01';
- date
-------------
- 1999-08-01
-(1 row)
-
-SELECT date '1999-08-01';
- date
-------------
- 1999-08-01
-(1 row)
-
-SELECT date '99 01 08';
- date
-------------
- 1999-01-08
-(1 row)
-
-SELECT date '1999 01 08';
- date
-------------
- 1999-01-08
-(1 row)
-
-SELECT date '08 01 99';
-ERROR: date/time field value out of range: "08 01 99"
-LINE 1: SELECT date '08 01 99';
- ^
-HINT: Perhaps you need a different "datestyle" setting.
-SELECT date '08 01 1999';
-ERROR: date/time field value out of range: "08 01 1999"
-LINE 1: SELECT date '08 01 1999';
- ^
-HINT: Perhaps you need a different "datestyle" setting.
-SELECT date '01 08 99';
-ERROR: date/time field value out of range: "01 08 99"
-LINE 1: SELECT date '01 08 99';
- ^
-HINT: Perhaps you need a different "datestyle" setting.
-SELECT date '01 08 1999';
-ERROR: date/time field value out of range: "01 08 1999"
-LINE 1: SELECT date '01 08 1999';
- ^
-HINT: Perhaps you need a different "datestyle" setting.
-SELECT date '99 08 01';
- date
-------------
- 1999-08-01
-(1 row)
-
-SELECT date '1999 08 01';
- date
-------------
- 1999-08-01
-(1 row)
-
-SET datestyle TO dmy;
-SELECT date 'January 8, 1999';
- date
-------------
- 1999-01-08
-(1 row)
-
-SELECT date '1999-01-08';
- date
-------------
- 1999-01-08
-(1 row)
-
-SELECT date '1999-01-18';
- date
-------------
- 1999-01-18
-(1 row)
-
-SELECT date '1/8/1999';
- date
-------------
- 1999-08-01
-(1 row)
-
-SELECT date '1/18/1999';
-ERROR: date/time field value out of range: "1/18/1999"
-LINE 1: SELECT date '1/18/1999';
- ^
-HINT: Perhaps you need a different "datestyle" setting.
-SELECT date '18/1/1999';
- date
-------------
- 1999-01-18
-(1 row)
-
-SELECT date '01/02/03';
- date
-------------
- 2003-02-01
-(1 row)
-
-SELECT date '19990108';
- date
-------------
- 1999-01-08
-(1 row)
-
-SELECT date '990108';
- date
-------------
- 1999-01-08
-(1 row)
-
-SELECT date '1999.008';
- date
-------------
- 1999-01-08
-(1 row)
-
-SELECT date 'J2451187';
- date
-------------
- 1999-01-08
-(1 row)
-
-SELECT date 'January 8, 99 BC';
- date
----------------
- 0099-01-08 BC
-(1 row)
-
-SELECT date '99-Jan-08';
-ERROR: date/time field value out of range: "99-Jan-08"
-LINE 1: SELECT date '99-Jan-08';
- ^
-HINT: Perhaps you need a different "datestyle" setting.
-SELECT date '1999-Jan-08';
- date
-------------
- 1999-01-08
-(1 row)
-
-SELECT date '08-Jan-99';
- date
-------------
- 1999-01-08
-(1 row)
-
-SELECT date '08-Jan-1999';
- date
-------------
- 1999-01-08
-(1 row)
-
-SELECT date 'Jan-08-99';
- date
-------------
- 1999-01-08
-(1 row)
-
-SELECT date 'Jan-08-1999';
- date
-------------
- 1999-01-08
-(1 row)
-
-SELECT date '99-08-Jan';
-ERROR: invalid input syntax for type date: "99-08-Jan"
-LINE 1: SELECT date '99-08-Jan';
- ^
-SELECT date '1999-08-Jan';
-ERROR: invalid input syntax for type date: "1999-08-Jan"
-LINE 1: SELECT date '1999-08-Jan';
- ^
-SELECT date '99 Jan 08';
-ERROR: date/time field value out of range: "99 Jan 08"
-LINE 1: SELECT date '99 Jan 08';
- ^
-HINT: Perhaps you need a different "datestyle" setting.
-SELECT date '1999 Jan 08';
- date
-------------
- 1999-01-08
-(1 row)
-
-SELECT date '08 Jan 99';
- date
-------------
- 1999-01-08
-(1 row)
-
-SELECT date '08 Jan 1999';
- date
-------------
- 1999-01-08
-(1 row)
-
-SELECT date 'Jan 08 99';
- date
-------------
- 1999-01-08
-(1 row)
-
-SELECT date 'Jan 08 1999';
- date
-------------
- 1999-01-08
-(1 row)
-
-SELECT date '99 08 Jan';
-ERROR: invalid input syntax for type date: "99 08 Jan"
-LINE 1: SELECT date '99 08 Jan';
- ^
-SELECT date '1999 08 Jan';
- date
-------------
- 1999-01-08
-(1 row)
-
-SELECT date '99-01-08';
-ERROR: date/time field value out of range: "99-01-08"
-LINE 1: SELECT date '99-01-08';
- ^
-HINT: Perhaps you need a different "datestyle" setting.
-SELECT date '1999-01-08';
- date
-------------
- 1999-01-08
-(1 row)
-
-SELECT date '08-01-99';
- date
-------------
- 1999-01-08
-(1 row)
-
-SELECT date '08-01-1999';
- date
-------------
- 1999-01-08
-(1 row)
-
-SELECT date '01-08-99';
- date
-------------
- 1999-08-01
-(1 row)
-
-SELECT date '01-08-1999';
- date
-------------
- 1999-08-01
-(1 row)
-
-SELECT date '99-08-01';
-ERROR: date/time field value out of range: "99-08-01"
-LINE 1: SELECT date '99-08-01';
- ^
-HINT: Perhaps you need a different "datestyle" setting.
-SELECT date '1999-08-01';
- date
-------------
- 1999-08-01
-(1 row)
-
-SELECT date '99 01 08';
-ERROR: date/time field value out of range: "99 01 08"
-LINE 1: SELECT date '99 01 08';
- ^
-HINT: Perhaps you need a different "datestyle" setting.
-SELECT date '1999 01 08';
- date
-------------
- 1999-01-08
-(1 row)
-
-SELECT date '08 01 99';
- date
-------------
- 1999-01-08
-(1 row)
-
-SELECT date '08 01 1999';
- date
-------------
- 1999-01-08
-(1 row)
-
-SELECT date '01 08 99';
- date
-------------
- 1999-08-01
-(1 row)
-
-SELECT date '01 08 1999';
- date
-------------
- 1999-08-01
-(1 row)
-
-SELECT date '99 08 01';
-ERROR: date/time field value out of range: "99 08 01"
-LINE 1: SELECT date '99 08 01';
- ^
-HINT: Perhaps you need a different "datestyle" setting.
-SELECT date '1999 08 01';
- date
-------------
- 1999-08-01
-(1 row)
-
-SET datestyle TO mdy;
-SELECT date 'January 8, 1999';
- date
-------------
- 1999-01-08
-(1 row)
-
-SELECT date '1999-01-08';
- date
-------------
- 1999-01-08
-(1 row)
-
-SELECT date '1999-01-18';
- date
-------------
- 1999-01-18
-(1 row)
-
-SELECT date '1/8/1999';
- date
-------------
- 1999-01-08
-(1 row)
-
-SELECT date '1/18/1999';
- date
-------------
- 1999-01-18
-(1 row)
-
-SELECT date '18/1/1999';
-ERROR: date/time field value out of range: "18/1/1999"
-LINE 1: SELECT date '18/1/1999';
- ^
-HINT: Perhaps you need a different "datestyle" setting.
-SELECT date '01/02/03';
- date
-------------
- 2003-01-02
-(1 row)
-
-SELECT date '19990108';
- date
-------------
- 1999-01-08
-(1 row)
-
-SELECT date '990108';
- date
-------------
- 1999-01-08
-(1 row)
-
-SELECT date '1999.008';
- date
-------------
- 1999-01-08
-(1 row)
-
-SELECT date 'J2451187';
- date
-------------
- 1999-01-08
-(1 row)
-
-SELECT date 'January 8, 99 BC';
- date
----------------
- 0099-01-08 BC
-(1 row)
-
-SELECT date '99-Jan-08';
-ERROR: date/time field value out of range: "99-Jan-08"
-LINE 1: SELECT date '99-Jan-08';
- ^
-HINT: Perhaps you need a different "datestyle" setting.
-SELECT date '1999-Jan-08';
- date
-------------
- 1999-01-08
-(1 row)
-
-SELECT date '08-Jan-99';
- date
-------------
- 1999-01-08
-(1 row)
-
-SELECT date '08-Jan-1999';
- date
-------------
- 1999-01-08
-(1 row)
-
-SELECT date 'Jan-08-99';
- date
-------------
- 1999-01-08
-(1 row)
-
-SELECT date 'Jan-08-1999';
- date
-------------
- 1999-01-08
-(1 row)
-
-SELECT date '99-08-Jan';
-ERROR: invalid input syntax for type date: "99-08-Jan"
-LINE 1: SELECT date '99-08-Jan';
- ^
-SELECT date '1999-08-Jan';
-ERROR: invalid input syntax for type date: "1999-08-Jan"
-LINE 1: SELECT date '1999-08-Jan';
- ^
-SELECT date '99 Jan 08';
-ERROR: invalid input syntax for type date: "99 Jan 08"
-LINE 1: SELECT date '99 Jan 08';
- ^
-SELECT date '1999 Jan 08';
- date
-------------
- 1999-01-08
-(1 row)
-
-SELECT date '08 Jan 99';
- date
-------------
- 1999-01-08
-(1 row)
-
-SELECT date '08 Jan 1999';
- date
-------------
- 1999-01-08
-(1 row)
-
-SELECT date 'Jan 08 99';
- date
-------------
- 1999-01-08
-(1 row)
-
-SELECT date 'Jan 08 1999';
- date
-------------
- 1999-01-08
-(1 row)
-
-SELECT date '99 08 Jan';
-ERROR: invalid input syntax for type date: "99 08 Jan"
-LINE 1: SELECT date '99 08 Jan';
- ^
-SELECT date '1999 08 Jan';
- date
-------------
- 1999-01-08
-(1 row)
-
-SELECT date '99-01-08';
-ERROR: date/time field value out of range: "99-01-08"
-LINE 1: SELECT date '99-01-08';
- ^
-HINT: Perhaps you need a different "datestyle" setting.
-SELECT date '1999-01-08';
- date
-------------
- 1999-01-08
-(1 row)
-
-SELECT date '08-01-99';
- date
-------------
- 1999-08-01
-(1 row)
-
-SELECT date '08-01-1999';
- date
-------------
- 1999-08-01
-(1 row)
-
-SELECT date '01-08-99';
- date
-------------
- 1999-01-08
-(1 row)
-
-SELECT date '01-08-1999';
- date
-------------
- 1999-01-08
-(1 row)
-
-SELECT date '99-08-01';
-ERROR: date/time field value out of range: "99-08-01"
-LINE 1: SELECT date '99-08-01';
- ^
-HINT: Perhaps you need a different "datestyle" setting.
-SELECT date '1999-08-01';
- date
-------------
- 1999-08-01
-(1 row)
-
-SELECT date '99 01 08';
-ERROR: date/time field value out of range: "99 01 08"
-LINE 1: SELECT date '99 01 08';
- ^
-HINT: Perhaps you need a different "datestyle" setting.
-SELECT date '1999 01 08';
- date
-------------
- 1999-01-08
-(1 row)
-
-SELECT date '08 01 99';
- date
-------------
- 1999-08-01
-(1 row)
-
-SELECT date '08 01 1999';
- date
-------------
- 1999-08-01
-(1 row)
-
-SELECT date '01 08 99';
- date
-------------
- 1999-01-08
-(1 row)
-
-SELECT date '01 08 1999';
- date
-------------
- 1999-01-08
-(1 row)
-
-SELECT date '99 08 01';
-ERROR: date/time field value out of range: "99 08 01"
-LINE 1: SELECT date '99 08 01';
- ^
-HINT: Perhaps you need a different "datestyle" setting.
-SELECT date '1999 08 01';
- date
-------------
- 1999-08-01
-(1 row)
-
-RESET datestyle;
---
--- Simple math
--- Leave most of it for the horology tests
---
-SELECT f1 - date '2000-01-01' AS "Days From 2K" FROM DATE_TBL ORDER BY 1;
- Days From 2K
---------------
- -15607
- -15542
- -1403
- -1402
- -1401
- -1400
- -1037
- -1036
- -1035
- 91
- 92
- 93
- 13977
- 14343
- 14710
-(15 rows)
-
-SELECT f1 - date 'epoch' AS "Days From Epoch" FROM DATE_TBL ORDER BY 1;
- Days From Epoch
------------------
- -4650
- -4585
- 9554
- 9555
- 9556
- 9557
- 9920
- 9921
- 9922
- 11048
- 11049
- 11050
- 24934
- 25300
- 25667
-(15 rows)
-
-SELECT date 'yesterday' - date 'today' AS "One day";
- One day
----------
- -1
-(1 row)
-
-SELECT date 'today' - date 'tomorrow' AS "One day";
- One day
----------
- -1
-(1 row)
-
-SELECT date 'yesterday' - date 'tomorrow' AS "Two days";
- Two days
-----------
- -2
-(1 row)
-
-SELECT date 'tomorrow' - date 'today' AS "One day";
- One day
----------
- 1
-(1 row)
-
-SELECT date 'today' - date 'yesterday' AS "One day";
- One day
----------
- 1
-(1 row)
-
-SELECT date 'tomorrow' - date 'yesterday' AS "Two days";
- Two days
-----------
- 2
-(1 row)
-
---
--- test extract!
---
--- century
---
-SELECT EXTRACT(CENTURY FROM DATE '0101-12-31 BC'); -- -2
- date_part
------------
- -2
-(1 row)
-
-SELECT EXTRACT(CENTURY FROM DATE '0100-12-31 BC'); -- -1
- date_part
------------
- -1
-(1 row)
-
-SELECT EXTRACT(CENTURY FROM DATE '0001-12-31 BC'); -- -1
- date_part
------------
- -1
-(1 row)
-
-SELECT EXTRACT(CENTURY FROM DATE '0001-01-01'); -- 1
- date_part
------------
- 1
-(1 row)
-
-SELECT EXTRACT(CENTURY FROM DATE '0001-01-01 AD'); -- 1
- date_part
------------
- 1
-(1 row)
-
-SELECT EXTRACT(CENTURY FROM DATE '1900-12-31'); -- 19
- date_part
------------
- 19
-(1 row)
-
-SELECT EXTRACT(CENTURY FROM DATE '1901-01-01'); -- 20
- date_part
------------
- 20
-(1 row)
-
-SELECT EXTRACT(CENTURY FROM DATE '2000-12-31'); -- 20
- date_part
------------
- 20
-(1 row)
-
-SELECT EXTRACT(CENTURY FROM DATE '2001-01-01'); -- 21
- date_part
------------
- 21
-(1 row)
-
-SELECT EXTRACT(CENTURY FROM CURRENT_DATE)>=21 AS True; -- true
- true
-------
- t
-(1 row)
-
---
--- millennium
---
-SELECT EXTRACT(MILLENNIUM FROM DATE '0001-12-31 BC'); -- -1
- date_part
------------
- -1
-(1 row)
-
-SELECT EXTRACT(MILLENNIUM FROM DATE '0001-01-01 AD'); -- 1
- date_part
------------
- 1
-(1 row)
-
-SELECT EXTRACT(MILLENNIUM FROM DATE '1000-12-31'); -- 1
- date_part
------------
- 1
-(1 row)
-
-SELECT EXTRACT(MILLENNIUM FROM DATE '1001-01-01'); -- 2
- date_part
------------
- 2
-(1 row)
-
-SELECT EXTRACT(MILLENNIUM FROM DATE '2000-12-31'); -- 2
- date_part
------------
- 2
-(1 row)
-
-SELECT EXTRACT(MILLENNIUM FROM DATE '2001-01-01'); -- 3
- date_part
------------
- 3
-(1 row)
-
--- next test to be fixed on the turn of the next millennium;-)
-SELECT EXTRACT(MILLENNIUM FROM CURRENT_DATE); -- 3
- date_part
------------
- 3
-(1 row)
-
---
--- decade
---
-SELECT EXTRACT(DECADE FROM DATE '1994-12-25'); -- 199
- date_part
------------
- 199
-(1 row)
-
-SELECT EXTRACT(DECADE FROM DATE '0010-01-01'); -- 1
- date_part
------------
- 1
-(1 row)
-
-SELECT EXTRACT(DECADE FROM DATE '0009-12-31'); -- 0
- date_part
------------
- 0
-(1 row)
-
-SELECT EXTRACT(DECADE FROM DATE '0001-01-01 BC'); -- 0
- date_part
------------
- 0
-(1 row)
-
-SELECT EXTRACT(DECADE FROM DATE '0002-12-31 BC'); -- -1
- date_part
------------
- -1
-(1 row)
-
-SELECT EXTRACT(DECADE FROM DATE '0011-01-01 BC'); -- -1
- date_part
------------
- -1
-(1 row)
-
-SELECT EXTRACT(DECADE FROM DATE '0012-12-31 BC'); -- -2
- date_part
------------
- -2
-(1 row)
-
---
--- some other types:
---
--- on a timestamp.
-SELECT EXTRACT(CENTURY FROM NOW())>=21 AS True; -- true
- true
-------
- t
-(1 row)
-
-SELECT EXTRACT(CENTURY FROM TIMESTAMP '1970-03-20 04:30:00.00000'); -- 20
- date_part
------------
- 20
-(1 row)
-
--- on an interval
-SELECT EXTRACT(CENTURY FROM INTERVAL '100 y'); -- 1
- date_part
------------
- 1
-(1 row)
-
-SELECT EXTRACT(CENTURY FROM INTERVAL '99 y'); -- 0
- date_part
------------
- 0
-(1 row)
-
-SELECT EXTRACT(CENTURY FROM INTERVAL '-99 y'); -- 0
- date_part
------------
- 0
-(1 row)
-
-SELECT EXTRACT(CENTURY FROM INTERVAL '-100 y'); -- -1
- date_part
------------
- -1
-(1 row)
-
---
--- test trunc function!
---
-SELECT DATE_TRUNC('MILLENNIUM', TIMESTAMP '1970-03-20 04:30:00.00000'); -- 1001
- date_trunc
---------------------------
- Thu Jan 01 00:00:00 1001
-(1 row)
-
-SELECT DATE_TRUNC('MILLENNIUM', DATE '1970-03-20'); -- 1001-01-01
- date_trunc
-------------------------------
- Thu Jan 01 00:00:00 1001 PST
-(1 row)
-
-SELECT DATE_TRUNC('CENTURY', TIMESTAMP '1970-03-20 04:30:00.00000'); -- 1901
- date_trunc
---------------------------
- Tue Jan 01 00:00:00 1901
-(1 row)
-
-SELECT DATE_TRUNC('CENTURY', DATE '1970-03-20'); -- 1901
- date_trunc
-------------------------------
- Tue Jan 01 00:00:00 1901 PST
-(1 row)
-
-SELECT DATE_TRUNC('CENTURY', DATE '2004-08-10'); -- 2001-01-01
- date_trunc
-------------------------------
- Mon Jan 01 00:00:00 2001 PST
-(1 row)
-
-SELECT DATE_TRUNC('CENTURY', DATE '0002-02-04'); -- 0001-01-01
- date_trunc
-------------------------------
- Mon Jan 01 00:00:00 0001 PST
-(1 row)
-
-SELECT DATE_TRUNC('CENTURY', DATE '0055-08-10 BC'); -- 0100-01-01 BC
- date_trunc
----------------------------------
- Tue Jan 01 00:00:00 0100 PST BC
-(1 row)
-
-SELECT DATE_TRUNC('DECADE', DATE '1993-12-25'); -- 1990-01-01
- date_trunc
-------------------------------
- Mon Jan 01 00:00:00 1990 PST
-(1 row)
-
-SELECT DATE_TRUNC('DECADE', DATE '0004-12-25'); -- 0001-01-01 BC
- date_trunc
----------------------------------
- Sat Jan 01 00:00:00 0001 PST BC
-(1 row)
-
-SELECT DATE_TRUNC('DECADE', DATE '0002-12-31 BC'); -- 0011-01-01 BC
- date_trunc
----------------------------------
- Mon Jan 01 00:00:00 0011 PST BC
-(1 row)
-
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/f05c19ed/src/test/regress/expected/float4.out
----------------------------------------------------------------------
diff --git a/src/test/regress/expected/float4.out b/src/test/regress/expected/float4.out
deleted file mode 100755
index f0847a0..0000000
--- a/src/test/regress/expected/float4.out
+++ /dev/null
@@ -1,241 +0,0 @@
---
--- FLOAT4
---
-CREATE TABLE FLOAT4_TBL (f1 float4);
-NOTICE: Table doesn't have 'DISTRIBUTED BY' clause -- Using column named 'f1' as the Greenplum Database data distribution key for this table.
-HINT: The 'DISTRIBUTED BY' clause determines the distribution of data. Make sure column(s) chosen are the optimal data distribution key to minimize skew.
-INSERT INTO FLOAT4_TBL(f1) VALUES (' 0.0');
-INSERT INTO FLOAT4_TBL(f1) VALUES ('1004.30 ');
-INSERT INTO FLOAT4_TBL(f1) VALUES (' -34.84 ');
-INSERT INTO FLOAT4_TBL(f1) VALUES ('1.2345678901234e+20');
-INSERT INTO FLOAT4_TBL(f1) VALUES ('1.2345678901234e-20');
--- test for over and under flow
-INSERT INTO FLOAT4_TBL(f1) VALUES ('10e40');
-ERROR: value out of range: overflow
-INSERT INTO FLOAT4_TBL(f1) VALUES ('-10e40');
-ERROR: value out of range: overflow
-INSERT INTO FLOAT4_TBL(f1) VALUES ('10e-40');
-INSERT INTO FLOAT4_TBL(f1) VALUES ('-10e-40');
--- bad input
-INSERT INTO FLOAT4_TBL(f1) VALUES ('');
-ERROR: invalid input syntax for type real: ""
-INSERT INTO FLOAT4_TBL(f1) VALUES (' ');
-ERROR: invalid input syntax for type real: " "
-INSERT INTO FLOAT4_TBL(f1) VALUES ('xyz');
-ERROR: invalid input syntax for type real: "xyz"
-INSERT INTO FLOAT4_TBL(f1) VALUES ('5.0.0');
-ERROR: invalid input syntax for type real: "5.0.0"
-INSERT INTO FLOAT4_TBL(f1) VALUES ('5 . 0');
-ERROR: invalid input syntax for type real: "5 . 0"
-INSERT INTO FLOAT4_TBL(f1) VALUES ('5. 0');
-ERROR: invalid input syntax for type real: "5. 0"
-INSERT INTO FLOAT4_TBL(f1) VALUES (' - 3.0');
-ERROR: invalid input syntax for type real: " - 3.0"
-INSERT INTO FLOAT4_TBL(f1) VALUES ('123 5');
-ERROR: invalid input syntax for type real: "123 5"
--- special inputs
-SELECT 'NaN'::float4;
- float4
---------
- NaN
-(1 row)
-
-SELECT 'nan'::float4;
- float4
---------
- NaN
-(1 row)
-
-SELECT ' NAN '::float4;
- float4
---------
- NaN
-(1 row)
-
-SELECT 'infinity'::float4;
- float4
-----------
- Infinity
-(1 row)
-
-SELECT ' -INFINiTY '::float4;
- float4
------------
- -Infinity
-(1 row)
-
--- bad special inputs
-SELECT 'N A N'::float4;
-ERROR: invalid input syntax for type real: "N A N"
-LINE 1: SELECT 'N A N'::float4;
- ^
-SELECT 'NaN x'::float4;
-ERROR: invalid input syntax for type real: "NaN x"
-LINE 1: SELECT 'NaN x'::float4;
- ^
-SELECT ' INFINITY x'::float4;
-ERROR: invalid input syntax for type real: " INFINITY x"
-LINE 1: SELECT ' INFINITY x'::float4;
- ^
-SELECT 'Infinity'::float4 + 100.0;
- ?column?
-----------
- Infinity
-(1 row)
-
-SELECT 'Infinity'::float4 / 'Infinity'::float4;
- ?column?
-----------
- NaN
-(1 row)
-
-SELECT 'nan'::float4 / 'nan'::float4;
- ?column?
-----------
- NaN
-(1 row)
-
-SELECT '' AS five, * FROM FLOAT4_TBL ORDER BY 2;
- five | f1
-------+-------------
- | -34.84
- | -1e-39
- | 0
- | 1e-39
- | 1.23457e-20
- | 1004.3
- | 1.23457e+20
-(7 rows)
-
-SELECT '' AS four, f.* FROM FLOAT4_TBL f WHERE f.f1 <> '1004.3' ORDER BY 2;
- four | f1
-------+-------------
- | -34.84
- | -1e-39
- | 0
- | 1e-39
- | 1.23457e-20
- | 1.23457e+20
-(6 rows)
-
-SELECT '' AS one, f.* FROM FLOAT4_TBL f WHERE f.f1 = '1004.3' ORDER BY 2;
- one | f1
------+--------
- | 1004.3
-(1 row)
-
-SELECT '' AS three, f.* FROM FLOAT4_TBL f WHERE '1004.3' > f.f1 ORDER BY 2;
- three | f1
--------+-------------
- | -34.84
- | -1e-39
- | 0
- | 1e-39
- | 1.23457e-20
-(5 rows)
-
-SELECT '' AS three, f.* FROM FLOAT4_TBL f WHERE f.f1 < '1004.3' ORDER BY 2;
- three | f1
--------+-------------
- | -34.84
- | -1e-39
- | 0
- | 1e-39
- | 1.23457e-20
-(5 rows)
-
-SELECT '' AS four, f.* FROM FLOAT4_TBL f WHERE '1004.3' >= f.f1 ORDER BY 2;
- four | f1
-------+-------------
- | -34.84
- | -1e-39
- | 0
- | 1e-39
- | 1.23457e-20
- | 1004.3
-(6 rows)
-
-SELECT '' AS four, f.* FROM FLOAT4_TBL f WHERE f.f1 <= '1004.3' ORDER BY 2;
- four | f1
-------+-------------
- | -34.84
- | -1e-39
- | 0
- | 1e-39
- | 1.23457e-20
- | 1004.3
-(6 rows)
-
-SELECT '' AS three, f.f1, f.f1 * '-10' AS x FROM FLOAT4_TBL f
- WHERE f.f1 > '0.0' ORDER BY 2;
- three | f1 | x
--------+-------------+--------------
- | 1e-39 | -1e-38
- | 1.23457e-20 | -1.23457e-19
- | 1004.3 | -10043
- | 1.23457e+20 | -1.23457e+21
-(4 rows)
-
-SELECT '' AS three, f.f1, f.f1 + '-10' AS x FROM FLOAT4_TBL f
- WHERE f.f1 > '0.0' ORDER BY 2;
- three | f1 | x
--------+-------------+-------------
- | 1e-39 | -10
- | 1.23457e-20 | -10
- | 1004.3 | 994.3
- | 1.23457e+20 | 1.23457e+20
-(4 rows)
-
-SELECT '' AS three, f.f1, f.f1 / '-10' AS x FROM FLOAT4_TBL f
- WHERE f.f1 > '0.0' ORDER BY 2;
- three | f1 | x
--------+-------------+--------------
- | 1e-39 | -9.99995e-41
- | 1.23457e-20 | -1.23457e-21
- | 1004.3 | -100.43
- | 1.23457e+20 | -1.23457e+19
-(4 rows)
-
-SELECT '' AS three, f.f1, f.f1 - '-10' AS x FROM FLOAT4_TBL f
- WHERE f.f1 > '0.0' ORDER BY 2;
- three | f1 | x
--------+-------------+-------------
- | 1e-39 | 10
- | 1.23457e-20 | 10
- | 1004.3 | 1014.3
- | 1.23457e+20 | 1.23457e+20
-(4 rows)
-
--- test divide by zero
-SELECT '' AS bad, f.f1 / '0.0' from FLOAT4_TBL f;
-ERROR: division by zero (seg0 slice1 localhost:50001 pid=1829)
-SELECT '' AS five, * FROM FLOAT4_TBL ORDER BY 2;
- five | f1
-------+-------------
- | -34.84
- | -1e-39
- | 0
- | 1e-39
- | 1.23457e-20
- | 1004.3
- | 1.23457e+20
-(7 rows)
-
--- test the unary float4abs operator
-SELECT '' AS five, f.f1, @f.f1 AS abs_f1 FROM FLOAT4_TBL f ORDER BY 2;
- five | f1 | abs_f1
-------+-------------+-------------
- | -34.84 | 34.84
- | -1e-39 | 1e-39
- | 0 | 0
- | 1e-39 | 1e-39
- | 1.23457e-20 | 1.23457e-20
- | 1004.3 | 1004.3
- | 1.23457e+20 | 1.23457e+20
-(7 rows)
-
--- MPP doesn't support this yet.
---UPDATE FLOAT4_TBL
--- SET f1 = FLOAT4_TBL.f1 * '-1'
--- WHERE FLOAT4_TBL.f1 > '0.0';
---SELECT '' AS five, * FROM FLOAT4_TBL ORDER BY 2;
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/f05c19ed/src/test/regress/expected/float8.out
----------------------------------------------------------------------
diff --git a/src/test/regress/expected/float8.out b/src/test/regress/expected/float8.out
deleted file mode 100755
index 34b2ca8..0000000
--- a/src/test/regress/expected/float8.out
+++ /dev/null
@@ -1,412 +0,0 @@
---
--- FLOAT8
---
-CREATE TABLE FLOAT8_TBL(i INT DEFAULT 1, f1 float8);
-NOTICE: Table doesn't have 'DISTRIBUTED BY' clause -- Using column named 'i' as the Greenplum Database data distribution key for this table.
-HINT: The 'DISTRIBUTED BY' clause determines the distribution of data. Make sure column(s) chosen are the optimal data distribution key to minimize skew.
-INSERT INTO FLOAT8_TBL(f1) VALUES (' 0.0 ');
-INSERT INTO FLOAT8_TBL(f1) VALUES ('1004.30 ');
-INSERT INTO FLOAT8_TBL(f1) VALUES (' -34.84');
-INSERT INTO FLOAT8_TBL(f1) VALUES ('1.2345678901234e+200');
-INSERT INTO FLOAT8_TBL(f1) VALUES ('1.2345678901234e-200');
--- test for underflow and overflow handling
-SELECT '10e400'::float8;
-ERROR: "10e400" is out of range for type double precision
-LINE 1: SELECT '10e400'::float8;
- ^
-SELECT '-10e400'::float8;
-ERROR: "-10e400" is out of range for type double precision
-LINE 1: SELECT '-10e400'::float8;
- ^
-SELECT '10e-400'::float8;
-ERROR: "10e-400" is out of range for type double precision
-LINE 1: SELECT '10e-400'::float8;
- ^
-SELECT '-10e-400'::float8;
-ERROR: "-10e-400" is out of range for type double precision
-LINE 1: SELECT '-10e-400'::float8;
- ^
--- bad input
-INSERT INTO FLOAT8_TBL(f1) VALUES ('');
-ERROR: invalid input syntax for type double precision: ""
-INSERT INTO FLOAT8_TBL(f1) VALUES (' ');
-ERROR: invalid input syntax for type double precision: " "
-INSERT INTO FLOAT8_TBL(f1) VALUES ('xyz');
-ERROR: invalid input syntax for type double precision: "xyz"
-INSERT INTO FLOAT8_TBL(f1) VALUES ('5.0.0');
-ERROR: invalid input syntax for type double precision: "5.0.0"
-INSERT INTO FLOAT8_TBL(f1) VALUES ('5 . 0');
-ERROR: invalid input syntax for type double precision: "5 . 0"
-INSERT INTO FLOAT8_TBL(f1) VALUES ('5. 0');
-ERROR: invalid input syntax for type double precision: "5. 0"
-INSERT INTO FLOAT8_TBL(f1) VALUES (' - 3');
-ERROR: invalid input syntax for type double precision: " - 3"
-INSERT INTO FLOAT8_TBL(f1) VALUES ('123 5');
-ERROR: invalid input syntax for type double precision: "123 5"
--- special inputs
-SELECT 'NaN'::float8;
- float8
---------
- NaN
-(1 row)
-
-SELECT 'nan'::float8;
- float8
---------
- NaN
-(1 row)
-
-SELECT ' NAN '::float8;
- float8
---------
- NaN
-(1 row)
-
-SELECT 'infinity'::float8;
- float8
-----------
- Infinity
-(1 row)
-
-SELECT ' -INFINiTY '::float8;
- float8
------------
- -Infinity
-(1 row)
-
--- bad special inputs
-SELECT 'N A N'::float8;
-ERROR: invalid input syntax for type double precision: "N A N"
-LINE 1: SELECT 'N A N'::float8;
- ^
-SELECT 'NaN x'::float8;
-ERROR: invalid input syntax for type double precision: "NaN x"
-LINE 1: SELECT 'NaN x'::float8;
- ^
-SELECT ' INFINITY x'::float8;
-ERROR: invalid input syntax for type double precision: " INFINITY x"
-LINE 1: SELECT ' INFINITY x'::float8;
- ^
-SELECT 'Infinity'::float8 + 100.0;
- ?column?
-----------
- Infinity
-(1 row)
-
-SELECT 'Infinity'::float8 / 'Infinity'::float8;
- ?column?
-----------
- NaN
-(1 row)
-
-SELECT 'nan'::float8 / 'nan'::float8;
- ?column?
-----------
- NaN
-(1 row)
-
-SELECT '' AS five, f1 FROM FLOAT8_TBL ORDER BY 2;
- five | f1
-------+----------------------
- | -34.84
- | 0
- | 1.2345678901234e-200
- | 1004.3
- | 1.2345678901234e+200
-(5 rows)
-
-SELECT '' AS four, f.f1 FROM FLOAT8_TBL f WHERE f.f1 <> '1004.3' ORDER BY 2;
- four | f1
-------+----------------------
- | -34.84
- | 0
- | 1.2345678901234e-200
- | 1.2345678901234e+200
-(4 rows)
-
-SELECT '' AS one, f.f1 FROM FLOAT8_TBL f WHERE f.f1 = '1004.3' ORDER BY 2;
- one | f1
------+--------
- | 1004.3
-(1 row)
-
-SELECT '' AS three, f.f1 FROM FLOAT8_TBL f WHERE '1004.3' > f.f1 ORDER BY 2;
- three | f1
--------+----------------------
- | -34.84
- | 0
- | 1.2345678901234e-200
-(3 rows)
-
-SELECT '' AS three, f.f1 FROM FLOAT8_TBL f WHERE f.f1 < '1004.3' ORDER BY 2;
- three | f1
--------+----------------------
- | -34.84
- | 0
- | 1.2345678901234e-200
-(3 rows)
-
-SELECT '' AS four, f.f1 FROM FLOAT8_TBL f WHERE '1004.3' >= f.f1 ORDER BY 2;
- four | f1
-------+----------------------
- | -34.84
- | 0
- | 1.2345678901234e-200
- | 1004.3
-(4 rows)
-
-SELECT '' AS four, f.f1 FROM FLOAT8_TBL f WHERE f.f1 <= '1004.3' ORDER BY 2;
- four | f1
-------+----------------------
- | -34.84
- | 0
- | 1.2345678901234e-200
- | 1004.3
-(4 rows)
-
-SELECT '' AS three, f.f1, f.f1 * '-10' AS x
- FROM FLOAT8_TBL f
- WHERE f.f1 > '0.0' ORDER BY 2;
- three | f1 | x
--------+----------------------+-----------------------
- | 1.2345678901234e-200 | -1.2345678901234e-199
- | 1004.3 | -10043
- | 1.2345678901234e+200 | -1.2345678901234e+201
-(3 rows)
-
-SELECT '' AS three, f.f1, f.f1 + '-10' AS x
- FROM FLOAT8_TBL f
- WHERE f.f1 > '0.0' ORDER BY 2;
- three | f1 | x
--------+----------------------+----------------------
- | 1.2345678901234e-200 | -10
- | 1004.3 | 994.3
- | 1.2345678901234e+200 | 1.2345678901234e+200
-(3 rows)
-
-SELECT '' AS three, f.f1, f.f1 / '-10' AS x
- FROM FLOAT8_TBL f
- WHERE f.f1 > '0.0' ORDER BY 2;
- three | f1 | x
--------+----------------------+-----------------------
- | 1.2345678901234e-200 | -1.2345678901234e-201
- | 1004.3 | -100.43
- | 1.2345678901234e+200 | -1.2345678901234e+199
-(3 rows)
-
-SELECT '' AS three, f.f1, f.f1 - '-10' AS x
- FROM FLOAT8_TBL f
- WHERE f.f1 > '0.0' ORDER BY 2;
- three | f1 | x
--------+----------------------+----------------------
- | 1.2345678901234e-200 | 10
- | 1004.3 | 1014.3
- | 1.2345678901234e+200 | 1.2345678901234e+200
-(3 rows)
-
-SELECT '' AS one, f.f1 ^ '2.0' AS square_f1
- FROM FLOAT8_TBL f where f.f1 = '1004.3';
- one | square_f1
------+------------
- | 1008618.49
-(1 row)
-
--- absolute value
-SELECT '' AS five, f.f1, @f.f1 AS abs_f1
- FROM FLOAT8_TBL f ORDER BY 2;
- five | f1 | abs_f1
-------+----------------------+----------------------
- | -34.84 | 34.84
- | 0 | 0
- | 1.2345678901234e-200 | 1.2345678901234e-200
- | 1004.3 | 1004.3
- | 1.2345678901234e+200 | 1.2345678901234e+200
-(5 rows)
-
--- truncate
-SELECT '' AS five, f.f1, trunc(f.f1) AS trunc_f1
- FROM FLOAT8_TBL f ORDER BY 2;
- five | f1 | trunc_f1
-------+----------------------+----------------------
- | -34.84 | -34
- | 0 | 0
- | 1.2345678901234e-200 | 0
- | 1004.3 | 1004
- | 1.2345678901234e+200 | 1.2345678901234e+200
-(5 rows)
-
--- round
-SELECT '' AS five, f.f1, round(f.f1) AS round_f1
- FROM FLOAT8_TBL f ORDER BY 2;
- five | f1 | round_f1
-------+----------------------+----------------------
- | -34.84 | -35
- | 0 | 0
- | 1.2345678901234e-200 | 0
- | 1004.3 | 1004
- | 1.2345678901234e+200 | 1.2345678901234e+200
-(5 rows)
-
--- ceil / ceiling
-select ceil(f1) as ceil_f1 from float8_tbl f ORDER BY 1;
- ceil_f1
-----------------------
- -34
- 0
- 1
- 1005
- 1.2345678901234e+200
-(5 rows)
-
-select ceiling(f1) as ceiling_f1 from float8_tbl f ORDER BY 1;
- ceiling_f1
-----------------------
- -34
- 0
- 1
- 1005
- 1.2345678901234e+200
-(5 rows)
-
--- floor
-select floor(f1) as floor_f1 from float8_tbl f ORDER BY 1;
- floor_f1
-----------------------
- -35
- 0
- 0
- 1004
- 1.2345678901234e+200
-(5 rows)
-
--- sign
-select sign(f1) as sign_f1 from float8_tbl f ORDER BY 1;
- sign_f1
----------
- -1
- 0
- 1
- 1
- 1
-(5 rows)
-
--- square root
-SELECT sqrt(float8 '64') AS eight;
- eight
--------
- 8
-(1 row)
-
-SELECT |/ float8 '64' AS eight;
- eight
--------
- 8
-(1 row)
-
-SELECT '' AS three, f.f1, |/f.f1 AS sqrt_f1
- FROM FLOAT8_TBL f
- WHERE f.f1 > '0.0' ORDER BY 2;
- three | f1 | sqrt_f1
--------+----------------------+-----------------------
- | 1.2345678901234e-200 | 1.11111110611109e-100
- | 1004.3 | 31.6906926399535
- | 1.2345678901234e+200 | 1.11111110611109e+100
-(3 rows)
-
--- power
-SELECT power(float8 '144', float8 '0.5');
- power
--------
- 12
-(1 row)
-
--- take exp of ln(f.f1)
-SELECT '' AS three, f.f1, exp(ln(f.f1)) AS exp_ln_f1
- FROM FLOAT8_TBL f
- WHERE f.f1 > '0.0' ORDER BY 2;
- three | f1 | exp_ln_f1
--------+----------------------+-----------------------
- | 1.2345678901234e-200 | 1.23456789012339e-200
- | 1004.3 | 1004.3
- | 1.2345678901234e+200 | 1.23456789012338e+200
-(3 rows)
-
--- cube root
-SELECT ||/ float8 '27' AS three;
- three
--------
- 3
-(1 row)
-
-SELECT '' AS five, f.f1, ||/f.f1 AS cbrt_f1 FROM FLOAT8_TBL f ORDER BY 2;
- five | f1 | cbrt_f1
-------+----------------------+----------------------
- | -34.84 | -3.26607421344208
- | 0 | 0
- | 1.2345678901234e-200 | 2.3112042409018e-67
- | 1004.3 | 10.014312837827
- | 1.2345678901234e+200 | 4.97933859234765e+66
-(5 rows)
-
-SELECT '' AS five, f1 FROM FLOAT8_TBL ORDER BY 2;
- five | f1
-------+----------------------
- | -34.84
- | 0
- | 1.2345678901234e-200
- | 1004.3
- | 1.2345678901234e+200
-(5 rows)
-
-UPDATE FLOAT8_TBL
- SET f1 = FLOAT8_TBL.f1 * '-1'
- WHERE FLOAT8_TBL.f1 > '0.0';
-SELECT '' AS bad, f.f1 * '1e200' from FLOAT8_TBL f;
-ERROR: value out of range: overflow (seg0 slice1 localhost:50001 pid=1946)
-SELECT '' AS bad, f.f1 ^ '1e200' from FLOAT8_TBL f;
-ERROR: value out of range: overflow (seg0 slice1 localhost:50001 pid=1946)
-SELECT '' AS bad, ln(f.f1) from FLOAT8_TBL f where f.f1 = '0.0' ;
-ERROR: cannot take logarithm of zero (seg0 slice1 localhost:50001 pid=1946)
-SELECT '' AS bad, ln(f.f1) from FLOAT8_TBL f where f.f1 < '0.0' ;
-ERROR: cannot take logarithm of a negative number (seg0 slice1 localhost:50001 pid=1946)
-SELECT '' AS bad, exp(f.f1) from FLOAT8_TBL f;
-ERROR: value out of range: underflow (seg0 slice1 localhost:50001 pid=1946)
-SELECT '' AS bad, f.f1 / '0.0' from FLOAT8_TBL f;
-ERROR: division by zero (seg0 slice1 localhost:50001 pid=1946)
-SELECT '' AS five, f1 FROM FLOAT8_TBL ORDER BY 2;
- five | f1
-------+-----------------------
- | -1.2345678901234e+200
- | -1004.3
- | -34.84
- | -1.2345678901234e-200
- | 0
-(5 rows)
-
--- test for over- and underflow
-INSERT INTO FLOAT8_TBL(f1) VALUES ('10e400');
-ERROR: "10e400" is out of range for type double precision
-INSERT INTO FLOAT8_TBL(f1) VALUES ('-10e400');
-ERROR: "-10e400" is out of range for type double precision
-INSERT INTO FLOAT8_TBL(f1) VALUES ('10e-400');
-ERROR: "10e-400" is out of range for type double precision
-INSERT INTO FLOAT8_TBL(f1) VALUES ('-10e-400');
-ERROR: "-10e-400" is out of range for type double precision
--- maintain external table consistency across platforms
--- delete all values and reinsert well-behaved ones
-DELETE FROM FLOAT8_TBL;
-INSERT INTO FLOAT8_TBL(f1) VALUES ('0.0');
-INSERT INTO FLOAT8_TBL(f1) VALUES ('-34.84');
-INSERT INTO FLOAT8_TBL(f1) VALUES ('-1004.30');
-INSERT INTO FLOAT8_TBL(f1) VALUES ('-1.2345678901234e+200');
-INSERT INTO FLOAT8_TBL(f1) VALUES ('-1.2345678901234e-200');
-SELECT '' AS five, f1 FROM FLOAT8_TBL ORDER BY 2;
- five | f1
-------+-----------------------
- | -1.2345678901234e+200
- | -1004.3
- | -34.84
- | -1.2345678901234e-200
- | 0
-(5 rows)
-
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/f05c19ed/src/test/regress/expected/int2.out
----------------------------------------------------------------------
diff --git a/src/test/regress/expected/int2.out b/src/test/regress/expected/int2.out
deleted file mode 100755
index dc1f34c..0000000
--- a/src/test/regress/expected/int2.out
+++ /dev/null
@@ -1,230 +0,0 @@
---
--- INT2
--- NOTE: int2 operators never check for over/underflow!
--- Some of these answers are consequently numerically incorrect.
---
-CREATE TABLE INT2_TBL(f1 int2);
-INSERT INTO INT2_TBL(f1) VALUES ('0 ');
-INSERT INTO INT2_TBL(f1) VALUES (' 1234 ');
-INSERT INTO INT2_TBL(f1) VALUES (' -1234');
-INSERT INTO INT2_TBL(f1) VALUES ('34.5');
-ERROR: invalid input syntax for integer: "34.5"
--- largest and smallest values
-INSERT INTO INT2_TBL(f1) VALUES ('32767');
-INSERT INTO INT2_TBL(f1) VALUES ('-32767');
--- bad input values -- should give errors
-INSERT INTO INT2_TBL(f1) VALUES ('100000');
-ERROR: value "100000" is out of range for type smallint
-INSERT INTO INT2_TBL(f1) VALUES ('asdf');
-ERROR: invalid input syntax for integer: "asdf"
-INSERT INTO INT2_TBL(f1) VALUES (' ');
-ERROR: invalid input syntax for integer: " "
-INSERT INTO INT2_TBL(f1) VALUES ('- 1234');
-ERROR: invalid input syntax for integer: "- 1234"
-INSERT INTO INT2_TBL(f1) VALUES ('4 444');
-ERROR: invalid input syntax for integer: "4 444"
-INSERT INTO INT2_TBL(f1) VALUES ('123 dt');
-ERROR: invalid input syntax for integer: "123 dt"
-INSERT INTO INT2_TBL(f1) VALUES ('');
-ERROR: invalid input syntax for integer: ""
-SELECT '' AS five, * FROM INT2_TBL order by f1;
- five | f1
-------+--------
- | -32767
- | -1234
- | 0
- | 1234
- | 32767
-(5 rows)
-
-SELECT '' AS four, i.* FROM INT2_TBL i WHERE i.f1 <> int2 '0' order by f1;
- four | f1
-------+--------
- | -32767
- | -1234
- | 1234
- | 32767
-(4 rows)
-
-SELECT '' AS four, i.* FROM INT2_TBL i WHERE i.f1 <> int4 '0' order by f1;
- four | f1
-------+--------
- | -32767
- | -1234
- | 1234
- | 32767
-(4 rows)
-
-SELECT '' AS one, i.* FROM INT2_TBL i WHERE i.f1 = int2 '0' order by f1;
- one | f1
------+----
- | 0
-(1 row)
-
-SELECT '' AS one, i.* FROM INT2_TBL i WHERE i.f1 = int4 '0' order by f1;
- one | f1
------+----
- | 0
-(1 row)
-
-SELECT '' AS two, i.* FROM INT2_TBL i WHERE i.f1 < int2 '0' order by f1;
- two | f1
------+--------
- | -32767
- | -1234
-(2 rows)
-
-SELECT '' AS two, i.* FROM INT2_TBL i WHERE i.f1 < int4 '0' order by f1;
- two | f1
------+--------
- | -32767
- | -1234
-(2 rows)
-
-SELECT '' AS three, i.* FROM INT2_TBL i WHERE i.f1 <= int2 '0' order by f1;
- three | f1
--------+--------
- | -32767
- | -1234
- | 0
-(3 rows)
-
-SELECT '' AS three, i.* FROM INT2_TBL i WHERE i.f1 <= int4 '0' order by f1;
- three | f1
--------+--------
- | -32767
- | -1234
- | 0
-(3 rows)
-
-SELECT '' AS two, i.* FROM INT2_TBL i WHERE i.f1 > int2 '0' order by f1;
- two | f1
------+-------
- | 1234
- | 32767
-(2 rows)
-
-SELECT '' AS two, i.* FROM INT2_TBL i WHERE i.f1 > int4 '0' order by f1;
- two | f1
------+-------
- | 1234
- | 32767
-(2 rows)
-
-SELECT '' AS three, i.* FROM INT2_TBL i WHERE i.f1 >= int2 '0' order by f1;
- three | f1
--------+-------
- | 0
- | 1234
- | 32767
-(3 rows)
-
-SELECT '' AS three, i.* FROM INT2_TBL i WHERE i.f1 >= int4 '0' order by f1;
- three | f1
--------+-------
- | 0
- | 1234
- | 32767
-(3 rows)
-
--- positive odds
-SELECT '' AS one, i.* FROM INT2_TBL i WHERE (i.f1 % int2 '2') = int2 '1' order by f1;
- one | f1
------+-------
- | 32767
-(1 row)
-
--- any evens
-SELECT '' AS three, i.* FROM INT2_TBL i WHERE (i.f1 % int4 '2') = int2 '0' order by f1;
- three | f1
--------+-------
- | -1234
- | 0
- | 1234
-(3 rows)
-
-SELECT '' AS five, i.f1, i.f1 * int2 '2' AS x FROM INT2_TBL i order by f1;
-ERROR: smallint out of range
-SELECT '' AS five, i.f1, i.f1 * int2 '2' AS x FROM INT2_TBL i
-WHERE abs(f1) < 16384 order by f1;
- five | f1 | x
-------+-------+-------
- | -1234 | -2468
- | 0 | 0
- | 1234 | 2468
-(3 rows)
-
-SELECT '' AS five, i.f1, i.f1 * int4 '2' AS x FROM INT2_TBL i order by f1;
- five | f1 | x
-------+--------+--------
- | -32767 | -65534
- | -1234 | -2468
- | 0 | 0
- | 1234 | 2468
- | 32767 | 65534
-(5 rows)
-
-SELECT '' AS five, i.f1, i.f1 + int2 '2' AS x FROM INT2_TBL i order by f1;
-ERROR: smallint out of range
-SELECT '' AS five, i.f1, i.f1 + int2 '2' AS x FROM INT2_TBL i
-WHERE f1 < 32766 order by f1;
- five | f1 | x
-------+--------+--------
- | -32767 | -32765
- | -1234 | -1232
- | 0 | 2
- | 1234 | 1236
-(4 rows)
-
-SELECT '' AS five, i.f1, i.f1 + int4 '2' AS x FROM INT2_TBL i order by f1;
- five | f1 | x
-------+--------+--------
- | -32767 | -32765
- | -1234 | -1232
- | 0 | 2
- | 1234 | 1236
- | 32767 | 32769
-(5 rows)
-
-SELECT '' AS five, i.f1, i.f1 - int2 '2' AS x FROM INT2_TBL i order by f1;
-ERROR: smallint out of range
-SELECT '' AS five, i.f1, i.f1 - int2 '2' AS x FROM INT2_TBL i
-WHERE f1 > -32767 order by f1;
- five | f1 | x
-------+-------+-------
- | -1234 | -1236
- | 0 | -2
- | 1234 | 1232
- | 32767 | 32765
-(4 rows)
-
-SELECT '' AS five, i.f1, i.f1 - int4 '2' AS x FROM INT2_TBL i order by f1;
- five | f1 | x
-------+--------+--------
- | -32767 | -32769
- | -1234 | -1236
- | 0 | -2
- | 1234 | 1232
- | 32767 | 32765
-(5 rows)
-
-SELECT '' AS five, i.f1, i.f1 / int2 '2' AS x FROM INT2_TBL i order by f1;
- five | f1 | x
-------+--------+--------
- | -32767 | -16383
- | -1234 | -617
- | 0 | 0
- | 1234 | 617
- | 32767 | 16383
-(5 rows)
-
-SELECT '' AS five, i.f1, i.f1 / int4 '2' AS x FROM INT2_TBL i order by f1;
- five | f1 | x
-------+--------+--------
- | -32767 | -16383
- | -1234 | -617
- | 0 | 0
- | 1234 | 617
- | 32767 | 16383
-(5 rows)
-
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/f05c19ed/src/test/regress/expected/int4.out
----------------------------------------------------------------------
diff --git a/src/test/regress/expected/int4.out b/src/test/regress/expected/int4.out
deleted file mode 100755
index b8d018f..0000000
--- a/src/test/regress/expected/int4.out
+++ /dev/null
@@ -1,317 +0,0 @@
---
--- INT4
--- WARNING: int4 operators never check for over/underflow!
--- Some of these answers are consequently numerically incorrect.
---
-CREATE TABLE INT4_TBL(f1 int4);
-INSERT INTO INT4_TBL(f1) VALUES (' 0 ');
-INSERT INTO INT4_TBL(f1) VALUES ('123456 ');
-INSERT INTO INT4_TBL(f1) VALUES (' -123456');
-INSERT INTO INT4_TBL(f1) VALUES ('34.5');
-ERROR: invalid input syntax for integer: "34.5"
--- largest and smallest values
-INSERT INTO INT4_TBL(f1) VALUES ('2147483647');
-INSERT INTO INT4_TBL(f1) VALUES ('-2147483647');
--- bad input values -- should give errors
-INSERT INTO INT4_TBL(f1) VALUES ('1000000000000');
-ERROR: value "1000000000000" is out of range for type integer
-INSERT INTO INT4_TBL(f1) VALUES ('asdf');
-ERROR: invalid input syntax for integer: "asdf"
-INSERT INTO INT4_TBL(f1) VALUES (' ');
-ERROR: invalid input syntax for integer: " "
-INSERT INTO INT4_TBL(f1) VALUES (' asdf ');
-ERROR: invalid input syntax for integer: " asdf "
-INSERT INTO INT4_TBL(f1) VALUES ('- 1234');
-ERROR: invalid input syntax for integer: "- 1234"
-INSERT INTO INT4_TBL(f1) VALUES ('123 5');
-ERROR: invalid input syntax for integer: "123 5"
-INSERT INTO INT4_TBL(f1) VALUES ('');
-ERROR: invalid input syntax for integer: ""
-SELECT '' AS five, * FROM INT4_TBL order by f1;
- five | f1
-------+-------------
- | -2147483647
- | -123456
- | 0
- | 123456
- | 2147483647
-(5 rows)
-
-SELECT '' AS four, i.* FROM INT4_TBL i WHERE i.f1 <> int2 '0' order by f1;
- four | f1
-------+-------------
- | -2147483647
- | -123456
- | 123456
- | 2147483647
-(4 rows)
-
-SELECT '' AS four, i.* FROM INT4_TBL i WHERE i.f1 <> int4 '0' order by f1;
- four | f1
-------+-------------
- | -2147483647
- | -123456
- | 123456
- | 2147483647
-(4 rows)
-
-SELECT '' AS one, i.* FROM INT4_TBL i WHERE i.f1 = int2 '0' order by f1;
- one | f1
------+----
- | 0
-(1 row)
-
-SELECT '' AS one, i.* FROM INT4_TBL i WHERE i.f1 = int4 '0' order by f1;
- one | f1
------+----
- | 0
-(1 row)
-
-SELECT '' AS two, i.* FROM INT4_TBL i WHERE i.f1 < int2 '0' order by f1;
- two | f1
------+-------------
- | -2147483647
- | -123456
-(2 rows)
-
-SELECT '' AS two, i.* FROM INT4_TBL i WHERE i.f1 < int4 '0' order by f1;
- two | f1
------+-------------
- | -2147483647
- | -123456
-(2 rows)
-
-SELECT '' AS three, i.* FROM INT4_TBL i WHERE i.f1 <= int2 '0' order by f1;
- three | f1
--------+-------------
- | -2147483647
- | -123456
- | 0
-(3 rows)
-
-SELECT '' AS three, i.* FROM INT4_TBL i WHERE i.f1 <= int4 '0' order by f1;
- three | f1
--------+-------------
- | -2147483647
- | -123456
- | 0
-(3 rows)
-
-SELECT '' AS two, i.* FROM INT4_TBL i WHERE i.f1 > int2 '0' order by f1;
- two | f1
------+------------
- | 123456
- | 2147483647
-(2 rows)
-
-SELECT '' AS two, i.* FROM INT4_TBL i WHERE i.f1 > int4 '0' order by f1;
- two | f1
------+------------
- | 123456
- | 2147483647
-(2 rows)
-
-SELECT '' AS three, i.* FROM INT4_TBL i WHERE i.f1 >= int2 '0' order by f1;
- three | f1
--------+------------
- | 0
- | 123456
- | 2147483647
-(3 rows)
-
-SELECT '' AS three, i.* FROM INT4_TBL i WHERE i.f1 >= int4 '0' order by f1;
- three | f1
--------+------------
- | 0
- | 123456
- | 2147483647
-(3 rows)
-
--- positive odds
-SELECT '' AS one, i.* FROM INT4_TBL i WHERE (i.f1 % int2 '2') = int2 '1' order by f1;
- one | f1
------+------------
- | 2147483647
-(1 row)
-
--- any evens
-SELECT '' AS three, i.* FROM INT4_TBL i WHERE (i.f1 % int4 '2') = int2 '0' order by f1;
- three | f1
--------+---------
- | -123456
- | 0
- | 123456
-(3 rows)
-
-SELECT '' AS five, i.f1, i.f1 * int2 '2' AS x FROM INT4_TBL i order by f1;
-ERROR: integer out of range
-SELECT '' AS five, i.f1, i.f1 * int2 '2' AS x FROM INT4_TBL i
-WHERE abs(f1) < 1073741824 order by f1;
- five | f1 | x
-------+---------+---------
- | -123456 | -246912
- | 0 | 0
- | 123456 | 246912
-(3 rows)
-
-SELECT '' AS five, i.f1, i.f1 * int4 '2' AS x FROM INT4_TBL i order by f1;
-ERROR: integer out of range
-SELECT '' AS five, i.f1, i.f1 * int4 '2' AS x FROM INT4_TBL i
-WHERE abs(f1) < 1073741824 order by f1;
- five | f1 | x
-------+---------+---------
- | -123456 | -246912
- | 0 | 0
- | 123456 | 246912
-(3 rows)
-
-SELECT '' AS five, i.f1, i.f1 + int2 '2' AS x FROM INT4_TBL i order by f1;
-ERROR: integer out of range
-SELECT '' AS five, i.f1, i.f1 + int2 '2' AS x FROM INT4_TBL i
-WHERE f1 < 2147483646 order by f1;
- five | f1 | x
-------+-------------+-------------
- | -2147483647 | -2147483645
- | -123456 | -123454
- | 0 | 2
- | 123456 | 123458
-(4 rows)
-
-SELECT '' AS five, i.f1, i.f1 + int4 '2' AS x FROM INT4_TBL i order by f1;
-ERROR: integer out of range
-SELECT '' AS five, i.f1, i.f1 + int4 '2' AS x FROM INT4_TBL i
-WHERE f1 < 2147483646 order by f1;
- five | f1 | x
-------+-------------+-------------
- | -2147483647 | -2147483645
- | -123456 | -123454
- | 0 | 2
- | 123456 | 123458
-(4 rows)
-
-SELECT '' AS five, i.f1, i.f1 - int2 '2' AS x FROM INT4_TBL i order by f1;
-ERROR: integer out of range
-SELECT '' AS five, i.f1, i.f1 - int2 '2' AS x FROM INT4_TBL i
-WHERE f1 > -2147483647 order by f1;
- five | f1 | x
-------+------------+------------
- | -123456 | -123458
- | 0 | -2
- | 123456 | 123454
- | 2147483647 | 2147483645
-(4 rows)
-
-SELECT '' AS five, i.f1, i.f1 - int4 '2' AS x FROM INT4_TBL i order by f1;
-ERROR: integer out of range
-SELECT '' AS five, i.f1, i.f1 - int4 '2' AS x FROM INT4_TBL i
-WHERE f1 > -2147483647 order by f1;
- five | f1 | x
-------+------------+------------
- | -123456 | -123458
- | 0 | -2
- | 123456 | 123454
- | 2147483647 | 2147483645
-(4 rows)
-
-SELECT '' AS five, i.f1, i.f1 / int2 '2' AS x FROM INT4_TBL i order by f1;
- five | f1 | x
-------+-------------+-------------
- | -2147483647 | -1073741823
- | -123456 | -61728
- | 0 | 0
- | 123456 | 61728
- | 2147483647 | 1073741823
-(5 rows)
-
-SELECT '' AS five, i.f1, i.f1 / int4 '2' AS x FROM INT4_TBL i order by f1;
- five | f1 | x
-------+-------------+-------------
- | -2147483647 | -1073741823
- | -123456 | -61728
- | 0 | 0
- | 123456 | 61728
- | 2147483647 | 1073741823
-(5 rows)
-
---
--- more complex expressions
---
--- variations on unary minus parsing
-SELECT -2+3 AS one;
- one
------
- 1
-(1 row)
-
-SELECT 4-2 AS two;
- two
------
- 2
-(1 row)
-
-SELECT 2- -1 AS three;
- three
--------
- 3
-(1 row)
-
-SELECT 2 - -2 AS four;
- four
-------
- 4
-(1 row)
-
-SELECT int2 '2' * int2 '2' = int2 '16' / int2 '4' AS true;
- true
-------
- t
-(1 row)
-
-SELECT int4 '2' * int2 '2' = int2 '16' / int4 '4' AS true;
- true
-------
- t
-(1 row)
-
-SELECT int2 '2' * int4 '2' = int4 '16' / int2 '4' AS true;
- true
-------
- t
-(1 row)
-
-SELECT int4 '1000' < int4 '999' AS false;
- false
--------
- f
-(1 row)
-
-SELECT 4! AS twenty_four;
- twenty_four
--------------
- 24
-(1 row)
-
-SELECT !!3 AS six;
- six
------
- 6
-(1 row)
-
-SELECT 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 AS ten;
- ten
------
- 10
-(1 row)
-
-SELECT 2 + 2 / 2 AS three;
- three
--------
- 3
-(1 row)
-
-SELECT (2 + 2) / 2 AS two;
- two
------
- 2
-(1 row)
-
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/f05c19ed/src/test/regress/expected/int8.out
----------------------------------------------------------------------
diff --git a/src/test/regress/expected/int8.out b/src/test/regress/expected/int8.out
deleted file mode 100755
index 91e1b36..0000000
--- a/src/test/regress/expected/int8.out
+++ /dev/null
@@ -1,325 +0,0 @@
---
--- INT8
--- Test int8 64-bit integers.
---
-CREATE TABLE INT8_TBL(q1 int8, q2 int8);
-NOTICE: Table doesn't have 'DISTRIBUTED BY' clause -- Using column named 'q1' as the Greenplum Database data distribution key for this table.
-HINT: The 'DISTRIBUTED BY' clause determines the distribution of data. Make sure column(s) chosen are the optimal data distribution key to minimize skew.
-INSERT INTO INT8_TBL VALUES(' 123 ',' 456');
-INSERT INTO INT8_TBL VALUES('123 ','4567890123456789');
-INSERT INTO INT8_TBL VALUES('4567890123456789','123');
-INSERT INTO INT8_TBL VALUES('4567890123456789','4567890123456789');
-INSERT INTO INT8_TBL VALUES('4567890123456789','-4567890123456789');
--- bad inputs
-INSERT INTO INT8_TBL(q1) VALUES (' ');
-ERROR: invalid input syntax for integer: " "
-INSERT INTO INT8_TBL(q1) VALUES ('xxx');
-ERROR: invalid input syntax for integer: "xxx"
-INSERT INTO INT8_TBL(q1) VALUES ('3908203590239580293850293850329485');
-ERROR: value "3908203590239580293850293850329485" is out of range for type bigint
-INSERT INTO INT8_TBL(q1) VALUES ('-1204982019841029840928340329840934');
-ERROR: value "-1204982019841029840928340329840934" is out of range for type bigint
-INSERT INTO INT8_TBL(q1) VALUES ('- 123');
-ERROR: invalid input syntax for integer: "- 123"
-INSERT INTO INT8_TBL(q1) VALUES (' 345 5');
-ERROR: invalid input syntax for integer: " 345 5"
-INSERT INTO INT8_TBL(q1) VALUES ('');
-ERROR: invalid input syntax for integer: ""
-SELECT * FROM INT8_TBL ;
- q1 | q2
-------------------+-------------------
- 123 | 456
- 123 | 4567890123456789
- 4567890123456789 | -4567890123456789
- 4567890123456789 | 123
- 4567890123456789 | 4567890123456789
-(5 rows)
-
-SELECT '' AS five, q1 AS plus, -q1 AS minus FROM INT8_TBL ;
- five | plus | minus
-------+------------------+-------------------
- | 123 | -123
- | 123 | -123
- | 4567890123456789 | -4567890123456789
- | 4567890123456789 | -4567890123456789
- | 4567890123456789 | -4567890123456789
-(5 rows)
-
-SELECT '' AS five, q1, q2, q1 + q2 AS plus FROM INT8_TBL ;
- five | q1 | q2 | plus
-------+------------------+-------------------+------------------
- | 123 | 456 | 579
- | 123 | 4567890123456789 | 4567890123456912
- | 4567890123456789 | -4567890123456789 | 0
- | 4567890123456789 | 123 | 4567890123456912
- | 4567890123456789 | 4567890123456789 | 9135780246913578
-(5 rows)
-
-SELECT '' AS five, q1, q2, q1 - q2 AS minus FROM INT8_TBL ;
- five | q1 | q2 | minus
-------+------------------+-------------------+-------------------
- | 123 | 456 | -333
- | 123 | 4567890123456789 | -4567890123456666
- | 4567890123456789 | -4567890123456789 | 9135780246913578
- | 4567890123456789 | 123 | 4567890123456666
- | 4567890123456789 | 4567890123456789 | 0
-(5 rows)
-
-SELECT '' AS three, q1, q2, q1 * q2 AS multiply FROM INT8_TBL ;
-ERROR: bigint out of range
-SELECT '' AS three, q1, q2, q1 * q2 AS multiply FROM INT8_TBL
- WHERE q1 < 1000 or (q2 > 0 and q2 < 1000) ;
- three | q1 | q2 | multiply
--------+------------------+------------------+--------------------
- | 123 | 456 | 56088
- | 123 | 4567890123456789 | 561850485185185047
- | 4567890123456789 | 123 | 561850485185185047
-(3 rows)
-
-SELECT '' AS five, q1, q2, q1 / q2 AS divide FROM INT8_TBL ;
- five | q1 | q2 | divide
-------+------------------+-------------------+----------------
- | 123 | 456 | 0
- | 123 | 4567890123456789 | 0
- | 4567890123456789 | -4567890123456789 | -1
- | 4567890123456789 | 123 | 37137318076884
- | 4567890123456789 | 4567890123456789 | 1
-(5 rows)
-
-SELECT '' AS five, q1, float8(q1) FROM INT8_TBL ;
- five | q1 | float8
-------+------------------+----------------------
- | 123 | 123
- | 123 | 123
- | 4567890123456789 | 4.56789012345679e+15
- | 4567890123456789 | 4.56789012345679e+15
- | 4567890123456789 | 4.56789012345679e+15
-(5 rows)
-
-SELECT '' AS five, q2, float8(q2) FROM INT8_TBL ;
- five | q2 | float8
-------+-------------------+-----------------------
- | -4567890123456789 | -4.56789012345679e+15
- | 123 | 123
- | 456 | 456
- | 4567890123456789 | 4.56789012345679e+15
- | 4567890123456789 | 4.56789012345679e+15
-(5 rows)
-
-SELECT '' AS five, 2 * q1 AS "twice int4" FROM INT8_TBL ;
- five | twice int4
-------+------------------
- | 246
- | 246
- | 9135780246913578
- | 9135780246913578
- | 9135780246913578
-(5 rows)
-
-SELECT '' AS five, q1 * 2 AS "twice int4" FROM INT8_TBL ;
- five | twice int4
-------+------------------
- | 246
- | 246
- | 9135780246913578
- | 9135780246913578
- | 9135780246913578
-(5 rows)
-
--- TO_CHAR()
---
-SELECT '' AS to_char_1, to_char(q1, '9G999G999G999G999G999'), to_char(q2, '9,999,999,999,999,999')
- FROM INT8_TBL ;
- to_char_1 | to_char | to_char
------------+------------------------+------------------------
- | 123 | 456
- | 123 | 4,567,890,123,456,789
- | 4,567,890,123,456,789 | 123
- | 4,567,890,123,456,789 | 4,567,890,123,456,789
- | 4,567,890,123,456,789 | -4,567,890,123,456,789
-(5 rows)
-
-SELECT '' AS to_char_2, to_char(q1, '9G999G999G999G999G999D999G999'), to_char(q2, '9,999,999,999,999,999.999,999')
- FROM INT8_TBL ;
- to_char_2 | to_char | to_char
------------+--------------------------------+--------------------------------
- | 123.000,000 | 456.000,000
- | 123.000,000 | 4,567,890,123,456,789.000,000
- | 4,567,890,123,456,789.000,000 | 123.000,000
- | 4,567,890,123,456,789.000,000 | 4,567,890,123,456,789.000,000
- | 4,567,890,123,456,789.000,000 | -4,567,890,123,456,789.000,000
-(5 rows)
-
-SELECT '' AS to_char_3, to_char( (q1 * -1), '9999999999999999PR'), to_char( (q2 * -1), '9999999999999999.999PR')
- FROM INT8_TBL ;
- to_char_3 | to_char | to_char
------------+--------------------+------------------------
- | <123> | <456.000>
- | <123> | <4567890123456789.000>
- | <4567890123456789> | <123.000>
- | <4567890123456789> | <4567890123456789.000>
- | <4567890123456789> | 4567890123456789.000
-(5 rows)
-
-SELECT '' AS to_char_4, to_char( (q1 * -1), '9999999999999999S'), to_char( (q2 * -1), 'S9999999999999999')
- FROM INT8_TBL ;
- to_char_4 | to_char | to_char
------------+-------------------+-------------------
- | 123- | -456
- | 123- | -4567890123456789
- | 4567890123456789- | -123
- | 4567890123456789- | -4567890123456789
- | 4567890123456789- | +4567890123456789
-(5 rows)
-
-SELECT '' AS to_char_5, to_char(q2, 'MI9999999999999999') FROM INT8_TBL ;
- to_char_5 | to_char
------------+-------------------
- | 123
- | 456
- | 4567890123456789
- | 4567890123456789
- | -4567890123456789
-(5 rows)
-
-SELECT '' AS to_char_6, to_char(q2, 'FMS9999999999999999') FROM INT8_TBL ;
- to_char_6 | to_char
------------+-------------------
- | +123
- | +456
- | -4567890123456789
- | +4567890123456789
- | +4567890123456789
-(5 rows)
-
-SELECT '' AS to_char_7, to_char(q2, 'FM9999999999999999THPR') FROM INT8_TBL ;
- to_char_7 | to_char
------------+--------------------
- | 123RD
- | <4567890123456789>
- | 4567890123456789TH
- | 4567890123456789TH
- | 456TH
-(5 rows)
-
-SELECT '' AS to_char_8, to_char(q2, 'SG9999999999999999th') FROM INT8_TBL ;
- to_char_8 | to_char
------------+---------------------
- | + 123rd
- | -4567890123456789
- | +4567890123456789th
- | +4567890123456789th
- | + 456th
-(5 rows)
-
-SELECT '' AS to_char_9, to_char(q2, '0999999999999999') FROM INT8_TBL ;
- to_char_9 | to_char
------------+-------------------
- | 0000000000000123
- | 0000000000000456
- | 4567890123456789
- | 4567890123456789
- | -4567890123456789
-(5 rows)
-
-SELECT '' AS to_char_10, to_char(q2, 'S0999999999999999') FROM INT8_TBL ;
- to_char_10 | to_char
-------------+-------------------
- | +0000000000000123
- | +0000000000000456
- | -4567890123456789
- | +4567890123456789
- | +4567890123456789
-(5 rows)
-
-SELECT '' AS to_char_11, to_char(q2, 'FM0999999999999999') FROM INT8_TBL ;
- to_char_11 | to_char
-------------+-------------------
- | 0000000000000123
- | 0000000000000456
- | 4567890123456789
- | 4567890123456789
- | -4567890123456789
-(5 rows)
-
-SELECT '' AS to_char_12, to_char(q2, 'FM9999999999999999.000') FROM INT8_TBL ;
- to_char_12 | to_char
-------------+-----------------------
- | 123.000
- | 456.000
- | -4567890123456789.000
- | 4567890123456789.000
- | 4567890123456789.000
-(5 rows)
-
-SELECT '' AS to_char_13, to_char(q2, 'L9999999999999999.000') FROM INT8_TBL ;
- to_char_13 | to_char
-------------+------------------------
- | 123.000
- | 456.000
- | 4567890123456789.000
- | 4567890123456789.000
- | -4567890123456789.000
-(5 rows)
-
-SELECT '' AS to_char_14, to_char(q2, 'FM9999999999999999.999') FROM INT8_TBL ;
- to_char_14 | to_char
-------------+--------------------
- | 123.
- | 456.
- | -4567890123456789.
- | 4567890123456789.
- | 4567890123456789.
-(5 rows)
-
-SELECT '' AS to_char_15, to_char(q2, 'S 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 . 9 9 9') FROM INT8_TBL ;
- to_char_15 | to_char
-------------+-------------------------------------------
- | +1 2 3 . 0 0 0
- | +4 5 6 . 0 0 0
- | -4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 . 0 0 0
- | +4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 . 0 0 0
- | +4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 . 0 0 0
-(5 rows)
-
-SELECT '' AS to_char_16, to_char(q2, E'99999 "text" 9999 "9999" 999 "\\"text between quote marks\\"" 9999') FROM INT8_TBL ;
- to_char_16 | to_char
-------------+-----------------------------------------------------------
- | 45678 text 9012 9999 345 "text between quote marks" 6789
- | 45678 text 9012 9999 345 "text between quote marks" 6789
- | -45678 text 9012 9999 345 "text between quote marks" 6789
- | text 9999 "text between quote marks" 123
- | text 9999 "text between quote marks" 456
-(5 rows)
-
-SELECT '' AS to_char_17, to_char(q2, '999999SG9999999999') FROM INT8_TBL ;
- to_char_17 | to_char
-------------+-------------------
- | + 123
- | + 456
- | 456789-0123456789
- | 456789+0123456789
- | 456789+0123456789
-(5 rows)
-
--- check min/max values
-select '-9223372036854775808'::int8;
- int8
-----------------------
- -9223372036854775808
-(1 row)
-
-select '-9223372036854775809'::int8;
-ERROR: value "-9223372036854775809" is out of range for type bigint
-LINE 1: select '-9223372036854775809'::int8;
- ^
-select '9223372036854775807'::int8;
- int8
----------------------
- 9223372036854775807
-(1 row)
-
-select '9223372036854775808'::int8;
-ERROR: value "9223372036854775808" is out of range for type bigint
-LINE 1: select '9223372036854775808'::int8;
- ^
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/f05c19ed/src/test/regress/expected/money.out
----------------------------------------------------------------------
diff --git a/src/test/regress/expected/money.out b/src/test/regress/expected/money.out
deleted file mode 100755
index a4028c4..0000000
--- a/src/test/regress/expected/money.out
+++ /dev/null
@@ -1,158 +0,0 @@
---
--- MONEY
---
-CREATE TABLE MONEY_TBL (f1 money);
-INSERT INTO MONEY_TBL(f1) VALUES (' 0.0');
-INSERT INTO MONEY_TBL(f1) VALUES ('1004.30 ');
-INSERT INTO MONEY_TBL(f1) VALUES (' -34.84 ');
-INSERT INTO MONEY_TBL(f1) VALUES ('123456789012345.67');
--- test money over and under flow
-SELECT '12345678901234567890.12'::money = '-13639628150831692.60'::money as x;
- x
----
- t
-(1 row)
-
-SELECT '123.001'::money = '123'::money as x;
- x
----
- t
-(1 row)
-
--- bad input
-INSERT INTO MONEY_TBL(f1) VALUES ('xyz');
-ERROR: invalid input syntax for type money: "xyz"
-INSERT INTO MONEY_TBL(f1) VALUES ('5.0.0');
-ERROR: invalid input syntax for type money: "5.0.0"
-INSERT INTO MONEY_TBL(f1) VALUES ('5 . 0');
-ERROR: invalid input syntax for type money: "5 . 0"
-INSERT INTO MONEY_TBL(f1) VALUES ('5. 0');
-ERROR: invalid input syntax for type money: "5. 0"
-INSERT INTO MONEY_TBL(f1) VALUES ('123 5');
-ERROR: invalid input syntax for type money: "123 5"
--- queries
-SELECT '' AS five, * FROM MONEY_TBL ORDER BY 2;
- five | f1
-------+-------------------------
- | -$34.84
- | $0.00
- | $1,004.30
- | $123,456,789,012,345.67
-(4 rows)
-
-SELECT '' AS four, f.* FROM MONEY_TBL f WHERE f.f1 <> '1004.3' ORDER BY 2;
- four | f1
-------+-------------------------
- | -$34.84
- | $0.00
- | $123,456,789,012,345.67
-(3 rows)
-
-SELECT '' AS one, f.* FROM MONEY_TBL f WHERE f.f1 = '1004.3' ORDER BY 2;
- one | f1
------+-----------
- | $1,004.30
-(1 row)
-
-SELECT '' AS three, f.* FROM MONEY_TBL f WHERE '1004.3' > f.f1 ORDER BY 2;
- three | f1
--------+---------
- | -$34.84
- | $0.00
-(2 rows)
-
-SELECT '' AS three, f.* FROM MONEY_TBL f WHERE f.f1 < '1004.3' ORDER BY 2;
- three | f1
--------+---------
- | -$34.84
- | $0.00
-(2 rows)
-
-SELECT '' AS four, f.* FROM MONEY_TBL f WHERE '1004.3' >= f.f1 ORDER BY 2;
- four | f1
-------+-----------
- | -$34.84
- | $0.00
- | $1,004.30
-(3 rows)
-
-SELECT '' AS four, f.* FROM MONEY_TBL f WHERE f.f1 <= '1004.3' ORDER BY 2;
- four | f1
-------+-----------
- | -$34.84
- | $0.00
- | $1,004.30
-(3 rows)
-
-SELECT '' AS three, f.f1, f.f1 * '-10' AS x FROM MONEY_TBL f
- WHERE f.f1 > '0.0' ORDER BY 2;
- three | f1 | x
--------+-------------------------+----------------------------
- | $1,004.30 | -$10,043.00
- | $123,456,789,012,345.67 | -$1,234,567,890,123,456.80
-(2 rows)
-
-SELECT '' AS three, f.f1, f.f1 + '-10' AS x FROM MONEY_TBL f
- WHERE f.f1 > '0.0' ORDER BY 2;
- three | f1 | x
--------+-------------------------+-------------------------
- | $1,004.30 | $994.30
- | $123,456,789,012,345.67 | $123,456,789,012,335.67
-(2 rows)
-
-SELECT '' AS three, f.f1, f.f1 / '-10' AS x FROM MONEY_TBL f
- WHERE f.f1 > '0.0' ORDER BY 2;
- three | f1 | x
--------+-------------------------+-------------------------
- | $1,004.30 | -$100.43
- | $123,456,789,012,345.67 | -$12,345,678,901,234.57
-(2 rows)
-
-SELECT '' AS three, f.f1, f.f1 - '-10' AS x FROM MONEY_TBL f
- WHERE f.f1 > '0.0' ORDER BY 2;
- three | f1 | x
--------+-------------------------+-------------------------
- | $1,004.30 | $1,014.30
- | $123,456,789,012,345.67 | $123,456,789,012,355.67
-(2 rows)
-
-SELECT SUM(f.f1) AS x FROM MONEY_TBL f;
- x
--------------------------
- $123,456,789,013,315.13
-(1 row)
-
--- test divide by zero
-SELECT '' AS bad, f.f1 / '0.0' from MONEY_TBL f;
-ERROR: division by zero (seg0 localhost:40000 pid=281608)
-SELECT '' AS five, * FROM MONEY_TBL ORDER BY 2;
- five | f1
-------+-------------------------
- | -$34.84
- | $0.00
- | $1,004.30
- | $123,456,789,012,345.67
-(4 rows)
-
--- parquet table
-CREATE TABLE MONEY_TBL_P (f1 money) with (appendonly=true, orientation=parquet);
-INSERT INTO MONEY_TBL_P(f1) VALUES (' 0.0');
-INSERT INTO MONEY_TBL_P(f1) VALUES ('1004.30 ');
-INSERT INTO MONEY_TBL_P(f1) VALUES (' -34.84 ');
-INSERT INTO MONEY_TBL_P(f1) VALUES ('123456789012345.67');
-SELECT f1 FROM MONEY_TBL_P f
- ORDER BY f1;
- f1
--------------------------
- -$34.84
- $0.00
- $1,004.30
- $123,456,789,012,345.67
-(4 rows)
-
-SELECT sum(f1) AS x, min(f1) as y, max(f1) as z FROM MONEY_TBL_P AS f;
- x | y | z
--------------------------+---------+-------------------------
- $123,456,789,013,315.13 | -$34.84 | $123,456,789,012,345.67
-(1 row)
-
[13/14] incubator-hawq git commit: HAWQ-894. Add feature test for
polymorphism with new test framework
Posted by rl...@apache.org.
HAWQ-894. Add feature test for polymorphism with 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/0081706d
Tree: http://git-wip-us.apache.org/repos/asf/incubator-hawq/tree/0081706d
Diff: http://git-wip-us.apache.org/repos/asf/incubator-hawq/diff/0081706d
Branch: refs/heads/2.0.0.0-incubating
Commit: 0081706dcf35c81e5365929e8089f861fd37cd6c
Parents: e65d463
Author: YI JIN <yj...@pivotal.io>
Authored: Thu Jul 14 14:55:30 2016 +1000
Committer: rlei <rl...@pivotal.io>
Committed: Tue Jul 19 10:49:42 2016 +0800
----------------------------------------------------------------------
src/test/feature/lib/sql_util.cpp | 6 +
src/test/feature/lib/sql_util.h | 7 +
.../feature/query/ans/polimorphism-test1.ans | 56 ++
.../feature/query/sql/polimorphism-test1.sql | 48 ++
src/test/feature/query/test_polymorphism.cpp | 497 +++++++++++++++++
src/test/regress/expected/polymorphism.out | 544 -------------------
src/test/regress/known_good_schedule | 1 -
src/test/regress/sql/polymorphism.sql | 377 -------------
8 files changed, 614 insertions(+), 922 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/0081706d/src/test/feature/lib/sql_util.cpp
----------------------------------------------------------------------
diff --git a/src/test/feature/lib/sql_util.cpp b/src/test/feature/lib/sql_util.cpp
index ea0c805..35e8ffe 100644
--- a/src/test/feature/lib/sql_util.cpp
+++ b/src/test/feature/lib/sql_util.cpp
@@ -62,6 +62,12 @@ string SQLUtility::execute(const string &sql, bool check) {
return conn.get()->getLastResult();
}
+void SQLUtility::executeExpectErrorMsgStartWith(const std::string &sql,
+ const std::string &errmsg) {
+ std::string errout = execute(sql, false);
+ EXPECT_STREQ(errmsg.c_str(), errout.substr(0, errmsg.size()).c_str());
+}
+
void SQLUtility::executeIgnore(const string &sql) {
conn->runSQLCommand("SET SEARCH_PATH=" + schemaName + ";" + sql);
EXPECT_NE(conn.get(), nullptr);
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/0081706d/src/test/feature/lib/sql_util.h
----------------------------------------------------------------------
diff --git a/src/test/feature/lib/sql_util.h b/src/test/feature/lib/sql_util.h
index 768dfc9..ea75aa3 100644
--- a/src/test/feature/lib/sql_util.h
+++ b/src/test/feature/lib/sql_util.h
@@ -70,6 +70,13 @@ class SQLUtility {
// Get GUC value
std::string getGUCValue(const std::string &guc);
+ // execute expect error message
+ // @param sql the given sql command
+ // @param errmsg the expected sql error message
+ // @return void
+ void executeExpectErrorMsgStartWith(const std::string &sql, const std::string &errmsg);
+
+
private:
std::unique_ptr<hawq::test::PSQL> getConnection();
const std::string generateSQLFile(const std::string &sqlFile);
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/0081706d/src/test/feature/query/ans/polimorphism-test1.ans
----------------------------------------------------------------------
diff --git a/src/test/feature/query/ans/polimorphism-test1.ans b/src/test/feature/query/ans/polimorphism-test1.ans
new file mode 100644
index 0000000..ff2fd93
--- /dev/null
+++ b/src/test/feature/query/ans/polimorphism-test1.ans
@@ -0,0 +1,56 @@
+-- Legend:
+-----------
+-- A = type is ANY
+-- P = type is polymorphic
+-- N = type is non-polymorphic
+-- B = aggregate base type
+-- S = aggregate state type
+-- R = aggregate return type
+-- 1 = arg1 of a function
+-- 2 = arg2 of a function
+-- ag = aggregate
+-- tf = trans (state) function
+-- ff = final function
+-- rt = return type of a function
+-- -> = implies
+-- => = allowed
+-- !> = not allowed
+-- E = exists
+-- NE = not-exists
+--
+-- Possible states:
+-- ----------------
+-- B = (A || P || N)
+-- when (B = A) -> (tf2 = NE)
+-- S = (P || N)
+-- ff = (E || NE)
+-- tf1 = (P || N)
+-- tf2 = (NE || P || N)
+-- R = (P || N)
+-- polymorphic single arg transfn
+CREATE FUNCTION stfp(anyarray) RETURNS anyarray AS 'select $1' LANGUAGE SQL;
+CREATE FUNCTION
+-- non-polymorphic single arg transfn
+CREATE FUNCTION stfnp(int[]) RETURNS int[] AS 'select $1' LANGUAGE SQL;
+CREATE FUNCTION
+-- dual polymorphic transfn
+CREATE FUNCTION tfp(anyarray,anyelement) RETURNS anyarray AS 'select $1 || $2' LANGUAGE SQL;
+CREATE FUNCTION
+-- dual non-polymorphic transfn
+CREATE FUNCTION tfnp(int[],int) RETURNS int[] AS 'select $1 || $2' LANGUAGE SQL;
+CREATE FUNCTION
+-- arg1 only polymorphic transfn
+CREATE FUNCTION tf1p(anyarray,int) RETURNS anyarray AS 'select $1' LANGUAGE SQL;
+CREATE FUNCTION
+-- arg2 only polymorphic transfn
+CREATE FUNCTION tf2p(int[],anyelement) RETURNS int[] AS 'select $1' LANGUAGE SQL;
+CREATE FUNCTION
+-- multi-arg polymorphic
+CREATE FUNCTION sum3(anyelement,anyelement,anyelement) RETURNS anyelement AS 'select $1+$2+$3' LANGUAGE SQL STRICT;
+CREATE FUNCTION
+-- finalfn polymorphic
+CREATE FUNCTION ffp(anyarray) RETURNS anyarray AS 'select $1' LANGUAGE SQL;
+CREATE FUNCTION
+-- finalfn non-polymorphic
+CREATE FUNCTION ffnp(int[]) RETURNS int[] AS 'select $1' LANGUAGE SQL;
+CREATE FUNCTION
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/0081706d/src/test/feature/query/sql/polimorphism-test1.sql
----------------------------------------------------------------------
diff --git a/src/test/feature/query/sql/polimorphism-test1.sql b/src/test/feature/query/sql/polimorphism-test1.sql
new file mode 100644
index 0000000..5cdb507
--- /dev/null
+++ b/src/test/feature/query/sql/polimorphism-test1.sql
@@ -0,0 +1,48 @@
+-- Legend:
+-----------
+-- A = type is ANY
+-- P = type is polymorphic
+-- N = type is non-polymorphic
+-- B = aggregate base type
+-- S = aggregate state type
+-- R = aggregate return type
+-- 1 = arg1 of a function
+-- 2 = arg2 of a function
+-- ag = aggregate
+-- tf = trans (state) function
+-- ff = final function
+-- rt = return type of a function
+-- -> = implies
+-- => = allowed
+-- !> = not allowed
+-- E = exists
+-- NE = not-exists
+--
+-- Possible states:
+-- ----------------
+-- B = (A || P || N)
+-- when (B = A) -> (tf2 = NE)
+-- S = (P || N)
+-- ff = (E || NE)
+-- tf1 = (P || N)
+-- tf2 = (NE || P || N)
+-- R = (P || N)
+
+-- polymorphic single arg transfn
+CREATE FUNCTION stfp(anyarray) RETURNS anyarray AS 'select $1' LANGUAGE SQL;
+-- non-polymorphic single arg transfn
+CREATE FUNCTION stfnp(int[]) RETURNS int[] AS 'select $1' LANGUAGE SQL;
+-- dual polymorphic transfn
+CREATE FUNCTION tfp(anyarray,anyelement) RETURNS anyarray AS 'select $1 || $2' LANGUAGE SQL;
+-- dual non-polymorphic transfn
+CREATE FUNCTION tfnp(int[],int) RETURNS int[] AS 'select $1 || $2' LANGUAGE SQL;
+-- arg1 only polymorphic transfn
+CREATE FUNCTION tf1p(anyarray,int) RETURNS anyarray AS 'select $1' LANGUAGE SQL;
+-- arg2 only polymorphic transfn
+CREATE FUNCTION tf2p(int[],anyelement) RETURNS int[] AS 'select $1' LANGUAGE SQL;
+-- multi-arg polymorphic
+CREATE FUNCTION sum3(anyelement,anyelement,anyelement) RETURNS anyelement AS 'select $1+$2+$3' LANGUAGE SQL STRICT;
+-- finalfn polymorphic
+CREATE FUNCTION ffp(anyarray) RETURNS anyarray AS 'select $1' LANGUAGE SQL;
+-- finalfn non-polymorphic
+CREATE FUNCTION ffnp(int[]) RETURNS int[] AS 'select $1' LANGUAGE SQL;
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/0081706d/src/test/feature/query/test_polymorphism.cpp
----------------------------------------------------------------------
diff --git a/src/test/feature/query/test_polymorphism.cpp b/src/test/feature/query/test_polymorphism.cpp
new file mode 100644
index 0000000..42d5a6a
--- /dev/null
+++ b/src/test/feature/query/test_polymorphism.cpp
@@ -0,0 +1,497 @@
+#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 TestQueryPolymorphism : public ::testing::Test {
+ public:
+ TestQueryPolymorphism() {}
+ ~TestQueryPolymorphism() {}
+};
+
+
+TEST_F(TestQueryPolymorphism, Test1) {
+ hawq::test::SQLUtility util;
+
+ // prepare
+ util.execute("DROP AGGREGATE IF EXISTS myaggp01a(*) CASCADE");
+ util.execute("DROP AGGREGATE IF EXISTS myaggp02a(*) CASCADE");
+ util.execute("DROP AGGREGATE IF EXISTS myaggp03a(*) CASCADE");
+ util.execute("DROP AGGREGATE IF EXISTS myaggp03b(*) CASCADE");
+ util.execute("DROP AGGREGATE IF EXISTS myaggp04a(*) CASCADE");
+ util.execute("DROP AGGREGATE IF EXISTS myaggp04b(*) CASCADE");
+ util.execute("DROP AGGREGATE IF EXISTS myaggp05a(int) CASCADE");
+ util.execute("DROP AGGREGATE IF EXISTS myaggp06a(int) CASCADE");
+ util.execute("DROP AGGREGATE IF EXISTS myaggp07a(anyelement) CASCADE");
+ util.execute("DROP AGGREGATE IF EXISTS myaggp08a(anyelement) CASCADE");
+ util.execute("DROP AGGREGATE IF EXISTS myaggp09a(int) CASCADE");
+ util.execute("DROP AGGREGATE IF EXISTS myaggp09b(int) CASCADE");
+ util.execute("DROP AGGREGATE IF EXISTS myaggp10a(int) CASCADE");
+ util.execute("DROP AGGREGATE IF EXISTS myaggp10b(int) CASCADE");
+ util.execute("DROP AGGREGATE IF EXISTS myaggp11a(anyelement) CASCADE");
+ util.execute("DROP AGGREGATE IF EXISTS myaggp11b(anyelement) CASCADE");
+ util.execute("DROP AGGREGATE IF EXISTS myaggp12a(anyelement) CASCADE");
+ util.execute("DROP AGGREGATE IF EXISTS myaggp12b(anyelement) CASCADE");
+ util.execute("DROP AGGREGATE IF EXISTS myaggp13a(int) CASCADE");
+ util.execute("DROP AGGREGATE IF EXISTS myaggp14a(int) CASCADE");
+ util.execute("DROP AGGREGATE IF EXISTS myaggp15a(anyelement) CASCADE");
+ util.execute("DROP AGGREGATE IF EXISTS myaggp16a(anyelement) CASCADE");
+ util.execute("DROP AGGREGATE IF EXISTS myaggp17a(int) CASCADE");
+ util.execute("DROP AGGREGATE IF EXISTS myaggp17b(int) CASCADE");
+ util.execute("DROP AGGREGATE IF EXISTS myaggp18a(int) CASCADE");
+ util.execute("DROP AGGREGATE IF EXISTS myaggp18b(int) CASCADE");
+ util.execute("DROP AGGREGATE IF EXISTS myaggp19a(anyelement) CASCADE");
+ util.execute("DROP AGGREGATE IF EXISTS myaggp19b(anyelement) CASCADE");
+ util.execute("DROP AGGREGATE IF EXISTS myaggp20a(anyelement) CASCADE");
+ util.execute("DROP AGGREGATE IF EXISTS myaggp20b(anyelement) CASCADE");
+
+ util.execute("DROP AGGREGATE IF EXISTS myaggn01a(*) CASCADE");
+ util.execute("DROP AGGREGATE IF EXISTS myaggn01b(*) CASCADE");
+ util.execute("DROP AGGREGATE IF EXISTS myaggn02a(*) CASCADE");
+ util.execute("DROP AGGREGATE IF EXISTS myaggn02b(*) CASCADE");
+ util.execute("DROP AGGREGATE IF EXISTS myaggn03a(*) CASCADE");
+ util.execute("DROP AGGREGATE IF EXISTS myaggn04a(*) CASCADE");
+ util.execute("DROP AGGREGATE IF EXISTS myaggn05a(int) CASCADE");
+ util.execute("DROP AGGREGATE IF EXISTS myaggn05b(int) CASCADE");
+ util.execute("DROP AGGREGATE IF EXISTS myaggn06a(int) CASCADE");
+ util.execute("DROP AGGREGATE IF EXISTS myaggn06b(int) CASCADE");
+ util.execute("DROP AGGREGATE IF EXISTS myaggn07a(*) CASCADE");
+ util.execute("DROP AGGREGATE IF EXISTS myaggn07b(*) CASCADE");
+ util.execute("DROP AGGREGATE IF EXISTS myaggn08a(*) CASCADE");
+ util.execute("DROP AGGREGATE IF EXISTS myaggn08b(*) CASCADE");
+ util.execute("DROP AGGREGATE IF EXISTS myaggn09a(int) CASCADE");
+ util.execute("DROP AGGREGATE IF EXISTS myaggn10a(int) CASCADE");
+ util.execute("DROP AGGREGATE IF EXISTS myaggn11a(*) CASCADE");
+ util.execute("DROP AGGREGATE IF EXISTS myaggn12a(*) CASCADE");
+ util.execute("DROP AGGREGATE IF EXISTS myaggn13a(int) CASCADE");
+ util.execute("DROP AGGREGATE IF EXISTS myaggn13b(int) CASCADE");
+ util.execute("DROP AGGREGATE IF EXISTS myaggn14a(int) CASCADE");
+ util.execute("DROP AGGREGATE IF EXISTS myaggn14b(int) CASCADE");
+ util.execute("DROP AGGREGATE IF EXISTS myaggn15a(*) CASCADE");
+ util.execute("DROP AGGREGATE IF EXISTS myaggn15b(*) CASCADE");
+ util.execute("DROP AGGREGATE IF EXISTS myaggn16a(*) CASCADE");
+ util.execute("DROP AGGREGATE IF EXISTS myaggn16b(*) CASCADE");
+ util.execute("DROP AGGREGATE IF EXISTS myaggn17a(int) CASCADE");
+ util.execute("DROP AGGREGATE IF EXISTS myaggn18a(int) CASCADE");
+ util.execute("DROP AGGREGATE IF EXISTS myaggn19a(*) CASCADE");
+ util.execute("DROP AGGREGATE IF EXISTS myaggn20a(*) CASCADE");
+
+ util.execute("DROP AGGREGATE IF EXISTS mysum2(anyelement,anyelement) CASCADE");
+
+ util.execute("DROP FUNCTION IF EXISTS stfp(anyarray) CASCADE");
+ util.execute("DROP FUNCTION IF EXISTS stfnp(int[]) CASCADE");
+ util.execute("DROP FUNCTION IF EXISTS tfp(anyarray,anyelement) CASCADE");
+ util.execute("DROP FUNCTION IF EXISTS tfnp(int[],int) CASCADE");
+ util.execute("DROP FUNCTION IF EXISTS tf1p(anyarray,int) CASCADE");
+ util.execute("DROP FUNCTION IF EXISTS tf2p(int[],anyelement) CASCADE");
+ util.execute("DROP FUNCTION IF EXISTS sum3(anyelement,anyelement,anyelement) CASCADE");
+ util.execute("DROP FUNCTION IF EXISTS ffp(anyarray) CASCADE");
+ util.execute("DROP FUNCTION IF EXISTS ffnp(int[]) CASCADE");
+
+ util.execute("DROP TABLE IF EXISTS t");
+
+ // test starts here
+
+ util.execSQLFile("query/sql/polimorphism-test1.sql",
+ "query/ans/polimorphism-test1.ans");
+
+ // Legend:
+ // -----------
+ // A = type is ANY
+ // P = type is polymorphic
+ // N = type is non-polymorphic
+ // B = aggregate base type
+ // S = aggregate state type
+ // R = aggregate return type
+ // 1 = arg1 of a function
+ // 2 = arg2 of a function
+ // ag = aggregate
+ // tf = trans (state) function
+ // ff = final function
+ // rt = return type of a function
+ // -> = implies
+ // => = allowed
+ // !> = not allowed
+ // E = exists
+ // NE = not-exists
+ // --
+ // Possible states:
+ // ----------------
+ // B = (A || P || N)
+ // when (B = A) -> (tf2 = NE)
+ // S = (P || N)
+ // ff = (E || NE)
+ // tf1 = (P || N)
+ // tf2 = (NE || P || N)
+ // R = (P || N)
+
+ // Try to cover all the possible states:
+ //
+ // Note: in Cases 1 & 2, we are trying to return P. Therefore, if the transfn
+ // is stfnp, tfnp, or tf2p, we must use ffp as finalfn, because stfnp, tfnp,
+ // and tf2p do not return P. Conversely, in Cases 3 & 4, we are trying to
+ // return N. Therefore, if the transfn is stfp, tfp, or tf1p, we must use ffnp
+ // as finalfn, because stfp, tfp, and tf1p do not return N.
+ //
+ // Case1 (R = P) && (B = A)
+ // ------------------------
+ // S tf1
+ // -------
+ // N N
+
+ util.execute("CREATE AGGREGATE myaggp01a(*) "
+ "(SFUNC = stfnp, STYPE = int4[], FINALFUNC = ffp, INITCOND = '{}')");
+ // P N
+ util.executeExpectErrorMsgStartWith(
+ "CREATE AGGREGATE myaggp02a(*) (SFUNC = stfnp, STYPE = anyarray, FINALFUNC = ffp, INITCOND = '{}')",
+ "ERROR: cannot determine transition data type");
+ // N P
+ util.execute("CREATE AGGREGATE myaggp03a(*) "
+ "(SFUNC = stfp, STYPE = int4[], FINALFUNC = ffp, INITCOND = '{}')");
+ util.execute("CREATE AGGREGATE myaggp03b(*) "
+ "(SFUNC = stfp, STYPE = int4[], INITCOND = '{}')");
+
+ // P P
+ util.executeExpectErrorMsgStartWith(
+ "CREATE AGGREGATE myaggp04a(*) (SFUNC = stfp, STYPE = anyarray, FINALFUNC = ffp, INITCOND = '{}')",
+ "ERROR: cannot determine transition data type");
+ util.executeExpectErrorMsgStartWith(
+ "CREATE AGGREGATE myaggp04b(*) (SFUNC = stfp, STYPE = anyarray, INITCOND = '{}')",
+ "ERROR: cannot determine transition data type");
+
+ // -- Case2 (R = P) && ((B = P) || (B = N))
+ // -- -------------------------------------
+ // -- S tf1 B tf2
+ // -- -----------------------
+ // -- N N N N
+ util.execute("CREATE AGGREGATE myaggp05a"
+ "(BASETYPE = int, SFUNC = tfnp, STYPE = int[], FINALFUNC = ffp, INITCOND = '{}')");
+ // -- N N N P
+ util.execute("CREATE AGGREGATE myaggp06a"
+ "(BASETYPE = int, SFUNC = tf2p, STYPE = int[], FINALFUNC = ffp, INITCOND = '{}')");
+ // -- N N P N
+ util.executeExpectErrorMsgStartWith(
+ "CREATE AGGREGATE myaggp07a"
+ "(BASETYPE = anyelement, SFUNC = tfnp, STYPE = int[], FINALFUNC = ffp, INITCOND = '{}')",
+ "ERROR: function tfnp(integer[], anyelement) does not exist");
+ // -- N N P P
+ util.execute("CREATE AGGREGATE myaggp08a"
+ "(BASETYPE = anyelement, SFUNC = tf2p, STYPE = int[], FINALFUNC = ffp, INITCOND = '{}')");
+ // -- N P N N
+ util.execute("CREATE AGGREGATE myaggp09a"
+ "(BASETYPE = int, SFUNC = tf1p, STYPE = int[], FINALFUNC = ffp, INITCOND = '{}')");
+ util.execute("CREATE AGGREGATE myaggp09b"
+ "(BASETYPE = int, SFUNC = tf1p, STYPE = int[], INITCOND = '{}')");
+ // -- N P N P
+ util.execute("CREATE AGGREGATE myaggp10a"
+ "(BASETYPE = int, SFUNC = tfp, STYPE = int[], FINALFUNC = ffp, INITCOND = '{}')");
+ util.execute("CREATE AGGREGATE myaggp10b"
+ "(BASETYPE = int, SFUNC = tfp, STYPE = int[], INITCOND = '{}')");
+ // -- N P P N
+ util.executeExpectErrorMsgStartWith(
+ "CREATE AGGREGATE myaggp11a"
+ "(BASETYPE = anyelement, SFUNC = tf1p, STYPE = int[], FINALFUNC = ffp, INITCOND = '{}')",
+ "ERROR: function tf1p(integer[], anyelement) does not exist");
+ util.executeExpectErrorMsgStartWith(
+ "CREATE AGGREGATE myaggp11b"
+ "(BASETYPE = anyelement, SFUNC = tf1p, STYPE = int[], INITCOND = '{}')",
+ "ERROR: function tf1p(integer[], anyelement) does not exist");
+ // -- N P P P
+ util.executeExpectErrorMsgStartWith(
+ "CREATE AGGREGATE myaggp12a"
+ "(BASETYPE = anyelement, SFUNC = tfp, STYPE = int[], FINALFUNC = ffp, INITCOND = '{}')",
+ "ERROR: function tfp(integer[], anyelement) does not exist");
+ util.executeExpectErrorMsgStartWith(
+ "CREATE AGGREGATE myaggp12b"
+ "(BASETYPE = anyelement, SFUNC = tfp, STYPE = int[], INITCOND = '{}')",
+ "ERROR: function tfp(integer[], anyelement) does not exist");
+ // -- P N N N
+ util.executeExpectErrorMsgStartWith(
+ "CREATE AGGREGATE myaggp13a"
+ "(BASETYPE = int, SFUNC = tfnp, STYPE = anyarray, FINALFUNC = ffp, INITCOND = '{}')",
+ "ERROR: cannot determine transition data type");
+ // -- P N N P
+ util.executeExpectErrorMsgStartWith(
+ "CREATE AGGREGATE myaggp14a"
+ "(BASETYPE = int, SFUNC = tf2p, STYPE = anyarray, FINALFUNC = ffp, INITCOND = '{}')",
+ "ERROR: cannot determine transition data type");
+ // -- P N P N
+ util.executeExpectErrorMsgStartWith(
+ "CREATE AGGREGATE myaggp15a"
+ "(BASETYPE = anyelement, SFUNC = tfnp, STYPE = anyarray, FINALFUNC = ffp, INITCOND = '{}')",
+ "ERROR: function tfnp(anyarray, anyelement) does not exist");
+ // -- P N P P
+ util.executeExpectErrorMsgStartWith(
+ "CREATE AGGREGATE myaggp16a"
+ "(BASETYPE = anyelement, SFUNC = tf2p, STYPE = anyarray, FINALFUNC = ffp, INITCOND = '{}')",
+ "ERROR: function tf2p(anyarray, anyelement) does not exist");
+ // -- P P N N
+ util.executeExpectErrorMsgStartWith(
+ "CREATE AGGREGATE myaggp17a"
+ "(BASETYPE = int, SFUNC = tf1p, STYPE = anyarray, FINALFUNC = ffp, INITCOND = '{}')",
+ "ERROR: cannot determine transition data type");
+ util.executeExpectErrorMsgStartWith(
+ "CREATE AGGREGATE myaggp17b"
+ "(BASETYPE = int, SFUNC = tf1p, STYPE = anyarray, INITCOND = '{}')",
+ "ERROR: cannot determine transition data type");
+ // -- P P N P
+ util.executeExpectErrorMsgStartWith(
+ "CREATE AGGREGATE myaggp18a"
+ "(BASETYPE = int, SFUNC = tfp, STYPE = anyarray, FINALFUNC = ffp, INITCOND = '{}')",
+ "ERROR: cannot determine transition data type");
+
+ util.executeExpectErrorMsgStartWith(
+ "CREATE AGGREGATE myaggp18b"
+ "(BASETYPE = int, SFUNC = tfp, STYPE = anyarray, INITCOND = '{}')",
+ "ERROR: cannot determine transition data type");
+ // -- P P P N
+ util.executeExpectErrorMsgStartWith(
+ "CREATE AGGREGATE myaggp19a"
+ "(BASETYPE = anyelement, SFUNC = tf1p, STYPE = anyarray, FINALFUNC = ffp, INITCOND = '{}')",
+ "ERROR: function tf1p(anyarray, anyelement) does not exist");
+ util.executeExpectErrorMsgStartWith(
+ "CREATE AGGREGATE myaggp19b"
+ "(BASETYPE = anyelement, SFUNC = tf1p, STYPE = anyarray, INITCOND = '{}')",
+ "ERROR: function tf1p(anyarray, anyelement) does not exist");
+ // -- P P P P
+ util.execute("CREATE AGGREGATE myaggp20a"
+ "(BASETYPE = anyelement, SFUNC = tfp, STYPE = anyarray, FINALFUNC = ffp, INITCOND = '{}')");
+
+ util.execute("CREATE AGGREGATE myaggp20b"
+ "(BASETYPE = anyelement, SFUNC = tfp, STYPE = anyarray, INITCOND = '{}')");
+
+ // -- Case3 (R = N) && (B = A)
+ // -- ------------------------
+ // -- S tf1
+ // -- -------
+ // -- N N
+ util.execute("CREATE AGGREGATE myaggn01a(*) "
+ "(SFUNC = stfnp, STYPE = int4[], FINALFUNC = ffnp, INITCOND = '{}')");
+ util.execute("CREATE AGGREGATE myaggn01b(*) "
+ "(SFUNC = stfnp, STYPE = int4[], INITCOND = '{}');");
+ // -- P N
+ util.executeExpectErrorMsgStartWith(
+ "CREATE AGGREGATE myaggn02a(*) "
+ "(SFUNC = stfnp, STYPE = anyarray, FINALFUNC = ffnp, INITCOND = '{}')",
+ "ERROR: cannot determine transition data type");
+ util.executeExpectErrorMsgStartWith(
+ "CREATE AGGREGATE myaggn02b(*) "
+ "(SFUNC = stfnp, STYPE = anyarray, INITCOND = '{}')",
+ "ERROR: cannot determine transition data type");
+ // -- N P
+ util.execute("CREATE AGGREGATE myaggn03a(*) "
+ "(SFUNC = stfp, STYPE = int4[], FINALFUNC = ffnp, INITCOND = '{}')");
+ // -- P P
+ util.executeExpectErrorMsgStartWith(
+ "CREATE AGGREGATE myaggn04a(*) "
+ "(SFUNC = stfp, STYPE = anyarray, FINALFUNC = ffnp, INITCOND = '{}')",
+ "ERROR: cannot determine transition data type");
+
+ // -- Case4 (R = N) && ((B = P) || (B = N))
+ // -- -------------------------------------
+ // -- S tf1 B tf2
+ // -- -----------------------
+ // -- N N N N
+ util.execute("CREATE AGGREGATE myaggn05a"
+ "(BASETYPE = int, SFUNC = tfnp, STYPE = int[], FINALFUNC = ffnp, INITCOND = '{}')");
+ util.execute("CREATE AGGREGATE myaggn05b"
+ "(BASETYPE = int, SFUNC = tfnp, STYPE = int[], INITCOND = '{}')");
+ // -- N N N P
+ util.execute("CREATE AGGREGATE myaggn06a"
+ "(BASETYPE = int, SFUNC = tf2p, STYPE = int[], FINALFUNC = ffnp, INITCOND = '{}')");
+ util.execute("CREATE AGGREGATE myaggn06b"
+ "(BASETYPE = int, SFUNC = tf2p, STYPE = int[], INITCOND = '{}')");
+ // -- N N P N
+ util.executeExpectErrorMsgStartWith(
+ "CREATE AGGREGATE myaggn07a "
+ "(BASETYPE = anyelement, SFUNC = tfnp, STYPE = int[], FINALFUNC = ffnp, INITCOND = '{}')",
+ "ERROR: function tfnp(integer[], anyelement) does not exist");
+ util.executeExpectErrorMsgStartWith(
+ "CREATE AGGREGATE myaggn07b "
+ "(BASETYPE = anyelement, SFUNC = tfnp, STYPE = int[], INITCOND = '{}')",
+ "ERROR: function tfnp(integer[], anyelement) does not exist");
+ // -- N N P P
+ util.execute("CREATE AGGREGATE myaggn08a"
+ "(BASETYPE = anyelement, SFUNC = tf2p, STYPE = int[], FINALFUNC = ffnp, INITCOND = '{}')");
+ util.execute("CREATE AGGREGATE myaggn08b"
+ "(BASETYPE = anyelement, SFUNC = tf2p, STYPE = int[], INITCOND = '{}')");
+ // -- N P N N
+ util.execute("CREATE AGGREGATE myaggn09a"
+ "(BASETYPE = int, SFUNC = tf1p, STYPE = int[], FINALFUNC = ffnp, INITCOND = '{}')");
+ // -- N P N P
+ util.execute("CREATE AGGREGATE myaggn10a"
+ "(BASETYPE = int, SFUNC = tfp, STYPE = int[], FINALFUNC = ffnp, INITCOND = '{}')");
+ // -- N P P N
+ util.executeExpectErrorMsgStartWith(
+ "CREATE AGGREGATE myaggn11a"
+ "(BASETYPE = anyelement, SFUNC = tf1p, STYPE = int[], FINALFUNC = ffnp, INITCOND = '{}')",
+ "ERROR: function tf1p(integer[], anyelement) does not exist");
+ // -- N P P P
+ util.executeExpectErrorMsgStartWith(
+ "CREATE AGGREGATE myaggn12a"
+ "(BASETYPE = anyelement, SFUNC = tfp, STYPE = int[], FINALFUNC = ffnp, INITCOND = '{}')",
+ "ERROR: function tfp(integer[], anyelement) does not exist");
+ // -- P N N N
+ util.executeExpectErrorMsgStartWith(
+ "CREATE AGGREGATE myaggn13a"
+ "(BASETYPE = int, SFUNC = tfnp, STYPE = anyarray, FINALFUNC = ffnp, INITCOND = '{}')",
+ "ERROR: cannot determine transition data type");
+ util.executeExpectErrorMsgStartWith(
+ "CREATE AGGREGATE myaggn13b"
+ "(BASETYPE = int, SFUNC = tfnp, STYPE = anyarray, INITCOND = '{}')",
+ "ERROR: cannot determine transition data type");
+ // -- P N N P
+ util.executeExpectErrorMsgStartWith(
+ "CREATE AGGREGATE myaggn14a"
+ "(BASETYPE = int, SFUNC = tf2p, STYPE = anyarray, FINALFUNC = ffnp, INITCOND = '{}')",
+ "ERROR: cannot determine transition data type");
+ util.executeExpectErrorMsgStartWith(
+ "CREATE AGGREGATE myaggn14b"
+ "(BASETYPE = int, SFUNC = tf2p, STYPE = anyarray, INITCOND = '{}')",
+ "ERROR: cannot determine transition data type");
+ // -- P N P N
+ util.executeExpectErrorMsgStartWith(
+ "CREATE AGGREGATE myaggn15a"
+ "(BASETYPE = anyelement, SFUNC = tfnp, STYPE = anyarray, FINALFUNC = ffnp, INITCOND = '{}')",
+ "ERROR: function tfnp(anyarray, anyelement) does not exist");
+ util.executeExpectErrorMsgStartWith(
+ "CREATE AGGREGATE myaggn15b"
+ "(BASETYPE = anyelement, SFUNC = tfnp, STYPE = anyarray, INITCOND = '{}')",
+ "ERROR: function tfnp(anyarray, anyelement) does not exist");
+ // -- P N P P
+ util.executeExpectErrorMsgStartWith(
+ "CREATE AGGREGATE myaggn16a"
+ "(BASETYPE = anyelement, SFUNC = tf2p, STYPE = anyarray, FINALFUNC = ffnp, INITCOND = '{}')",
+ "ERROR: function tf2p(anyarray, anyelement) does not exist");
+ util.executeExpectErrorMsgStartWith(
+ "CREATE AGGREGATE myaggn16b"
+ "(BASETYPE = anyelement, SFUNC = tf2p, STYPE = anyarray, INITCOND = '{}')",
+ "ERROR: function tf2p(anyarray, anyelement) does not exist");
+ // -- P P N N
+ util.executeExpectErrorMsgStartWith(
+ "CREATE AGGREGATE myaggn17a"
+ "(BASETYPE = int, SFUNC = tf1p, STYPE = anyarray, FINALFUNC = ffnp, INITCOND = '{}')",
+ "ERROR: cannot determine transition data type");
+ // -- P P N P
+ util.executeExpectErrorMsgStartWith(
+ "CREATE AGGREGATE myaggn18a"
+ "(BASETYPE = int, SFUNC = tfp, STYPE = anyarray, FINALFUNC = ffnp, INITCOND = '{}')",
+ "ERROR: cannot determine transition data type");
+ // -- P P P N
+ util.executeExpectErrorMsgStartWith(
+ "CREATE AGGREGATE myaggn19a"
+ "(BASETYPE = anyelement, SFUNC = tf1p, STYPE = anyarray, FINALFUNC = ffnp, INITCOND = '{}')",
+ "ERROR: function tf1p(anyarray, anyelement) does not exist");
+ // -- P P P P
+ util.executeExpectErrorMsgStartWith(
+ "CREATE AGGREGATE myaggn20a"
+ "(BASETYPE = anyelement, SFUNC = tfp, STYPE = anyarray, FINALFUNC = ffnp, INITCOND = '{}')",
+ "ERROR: function ffnp(anyarray) does not exist");
+
+ // multi-arg polymorphic
+ util.execute("CREATE AGGREGATE mysum2(anyelement,anyelement) "
+ "(SFUNC = sum3, STYPE = anyelement, INITCOND = '0')");
+
+ util.execute("CREATE TABLE t (f1 int, f2 int[], f3 text)");
+ util.execute("INSERT INTO t VALUES(1,array[1],'a')");
+ util.execute("INSERT INTO t VALUES(2,array[11],'b')");
+ util.execute("INSERT INTO t VALUES(3,array[111],'c')");
+ util.execute("INSERT INTO t VALUES(4,array[2],'a')");
+ util.execute("INSERT INTO t VALUES(5,array[22],'b')");
+ util.execute("INSERT INTO t VALUES(6,array[222],'c')");
+ util.execute("INSERT INTO t VALUES(7,array[3],'a')");
+ util.execute("INSERT INTO t VALUES(8,array[3],'b')");
+
+ util.execSQLFile("query/sql/polimorphism-test1-query.sql",
+ "query/ans/polimorphism-test1-query.ans");
+
+ // clean up
+ util.execute("DROP TABLE t");
+
+ util.execute("DROP AGGREGATE myaggp01a(*)");
+ util.execute("DROP AGGREGATE IF EXISTS myaggp02a(*)");
+ util.execute("DROP AGGREGATE myaggp03a(*)");
+ util.execute("DROP AGGREGATE myaggp03b(*)");
+ util.execute("DROP AGGREGATE IF EXISTS myaggp04a(*)");
+ util.execute("DROP AGGREGATE IF EXISTS myaggp04b(*)");
+ util.execute("DROP AGGREGATE myaggp05a(int)");
+ util.execute("DROP AGGREGATE myaggp06a(int)");
+ util.execute("DROP AGGREGATE IF EXISTS myaggp07a(anyelement)");
+ util.execute("DROP AGGREGATE myaggp08a(anyelement)");
+ util.execute("DROP AGGREGATE myaggp09a(int)");
+ util.execute("DROP AGGREGATE myaggp09b(int)");
+ util.execute("DROP AGGREGATE myaggp10a(int)");
+ util.execute("DROP AGGREGATE myaggp10b(int)");
+ util.execute("DROP AGGREGATE IF EXISTS myaggp11a(anyelement)");
+ util.execute("DROP AGGREGATE IF EXISTS myaggp11b(anyelement)");
+ util.execute("DROP AGGREGATE IF EXISTS myaggp12a(anyelement)");
+ util.execute("DROP AGGREGATE IF EXISTS myaggp12b(anyelement)");
+ util.execute("DROP AGGREGATE IF EXISTS myaggp13a(int)");
+ util.execute("DROP AGGREGATE IF EXISTS myaggp14a(int)");
+ util.execute("DROP AGGREGATE IF EXISTS myaggp15a(anyelement)");
+ util.execute("DROP AGGREGATE IF EXISTS myaggp16a(anyelement)");
+ util.execute("DROP AGGREGATE IF EXISTS myaggp17a(int)");
+ util.execute("DROP AGGREGATE IF EXISTS myaggp17b(int)");
+ util.execute("DROP AGGREGATE IF EXISTS myaggp18a(int)");
+ util.execute("DROP AGGREGATE IF EXISTS myaggp18b(int)");
+ util.execute("DROP AGGREGATE IF EXISTS myaggp19a(anyelement)");
+ util.execute("DROP AGGREGATE IF EXISTS myaggp19b(anyelement)");
+ util.execute("DROP AGGREGATE myaggp20a(anyelement)");
+ util.execute("DROP AGGREGATE myaggp20b(anyelement)");
+
+ util.execute("DROP AGGREGATE myaggn01a(*)");
+ util.execute("DROP AGGREGATE myaggn01b(*)");
+ util.execute("DROP AGGREGATE IF EXISTS myaggn02a(*)");
+ util.execute("DROP AGGREGATE IF EXISTS myaggn02b(*)");
+ util.execute("DROP AGGREGATE myaggn03a(*)");
+ util.execute("DROP AGGREGATE IF EXISTS myaggn04a(*)");
+ util.execute("DROP AGGREGATE myaggn05a(int)");
+ util.execute("DROP AGGREGATE myaggn05b(int)");
+ util.execute("DROP AGGREGATE myaggn06a(int)");
+ util.execute("DROP AGGREGATE myaggn06b(int)");
+ util.execute("DROP AGGREGATE IF EXISTS myaggn07a(*)");
+ util.execute("DROP AGGREGATE IF EXISTS myaggn07b(*)");
+ util.execute("DROP AGGREGATE myaggn08a(anyelement)");
+ util.execute("DROP AGGREGATE myaggn08b(anyelement)");
+ util.execute("DROP AGGREGATE myaggn09a(int)");
+ util.execute("DROP AGGREGATE myaggn10a(int)");
+ util.execute("DROP AGGREGATE IF EXISTS myaggn11a(*)");
+ util.execute("DROP AGGREGATE IF EXISTS myaggn12a(*)");
+ util.execute("DROP AGGREGATE IF EXISTS myaggn13a(int)");
+ util.execute("DROP AGGREGATE IF EXISTS myaggn13b(int)");
+ util.execute("DROP AGGREGATE IF EXISTS myaggn14a(int)");
+ util.execute("DROP AGGREGATE IF EXISTS myaggn14b(int)");
+ util.execute("DROP AGGREGATE IF EXISTS myaggn15a(*)");
+ util.execute("DROP AGGREGATE IF EXISTS myaggn15b(*)");
+ util.execute("DROP AGGREGATE IF EXISTS myaggn16a(*)");
+ util.execute("DROP AGGREGATE IF EXISTS myaggn16b(*)");
+ util.execute("DROP AGGREGATE IF EXISTS myaggn17a(int)");
+ util.execute("DROP AGGREGATE IF EXISTS myaggn18a(int)");
+ util.execute("DROP AGGREGATE IF EXISTS myaggn19a(*)");
+ util.execute("DROP AGGREGATE IF EXISTS myaggn20a(*)");
+
+ util.execute("DROP AGGREGATE mysum2(anyelement,anyelement)");
+
+ util.execute("DROP FUNCTION IF EXISTS stfp(anyarray)");
+ util.execute("DROP FUNCTION IF EXISTS stfnp(int[])");
+ util.execute("DROP FUNCTION IF EXISTS tfp(anyarray,anyelement)");
+ util.execute("DROP FUNCTION IF EXISTS tfnp(int[],int)");
+ util.execute("DROP FUNCTION IF EXISTS tf1p(anyarray,int)");
+ util.execute("DROP FUNCTION IF EXISTS tf2p(int[],anyelement)");
+ util.execute("DROP FUNCTION IF EXISTS sum3(anyelement,anyelement,anyelement)");
+ util.execute("DROP FUNCTION IF EXISTS ffp(anyarray)");
+ util.execute("DROP FUNCTION IF EXISTS ffnp(int[])");
+}
+
+TEST_F(TestQueryPolymorphism, Test2) {
+ hawq::test::SQLUtility util;
+}
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/0081706d/src/test/regress/expected/polymorphism.out
----------------------------------------------------------------------
diff --git a/src/test/regress/expected/polymorphism.out b/src/test/regress/expected/polymorphism.out
deleted file mode 100755
index 3a3f6a4..0000000
--- a/src/test/regress/expected/polymorphism.out
+++ /dev/null
@@ -1,544 +0,0 @@
--- Currently this tests polymorphic aggregates and indirectly does some
--- testing of polymorphic SQL functions. It ought to be extended.
--- Legend:
------------
--- A = type is ANY
--- P = type is polymorphic
--- N = type is non-polymorphic
--- B = aggregate base type
--- S = aggregate state type
--- R = aggregate return type
--- 1 = arg1 of a function
--- 2 = arg2 of a function
--- ag = aggregate
--- tf = trans (state) function
--- ff = final function
--- rt = return type of a function
--- -> = implies
--- => = allowed
--- !> = not allowed
--- E = exists
--- NE = not-exists
---
--- Possible states:
--- ----------------
--- B = (A || P || N)
--- when (B = A) -> (tf2 = NE)
--- S = (P || N)
--- ff = (E || NE)
--- tf1 = (P || N)
--- tf2 = (NE || P || N)
--- R = (P || N)
--- create functions for use as tf and ff with the needed combinations of
--- argument polymorphism, but within the constraints of valid aggregate
--- functions, i.e. tf arg1 and tf return type must match
--- polymorphic single arg transfn
-CREATE FUNCTION stfp(anyarray) RETURNS anyarray AS
-'select $1' LANGUAGE SQL;
--- non-polymorphic single arg transfn
-CREATE FUNCTION stfnp(int[]) RETURNS int[] AS
-'select $1' LANGUAGE SQL;
--- dual polymorphic transfn
-CREATE FUNCTION tfp(anyarray,anyelement) RETURNS anyarray AS
-'select $1 || $2' LANGUAGE SQL;
--- dual non-polymorphic transfn
-CREATE FUNCTION tfnp(int[],int) RETURNS int[] AS
-'select $1 || $2' LANGUAGE SQL;
--- arg1 only polymorphic transfn
-CREATE FUNCTION tf1p(anyarray,int) RETURNS anyarray AS
-'select $1' LANGUAGE SQL;
--- arg2 only polymorphic transfn
-CREATE FUNCTION tf2p(int[],anyelement) RETURNS int[] AS
-'select $1' LANGUAGE SQL;
--- multi-arg polymorphic
-CREATE FUNCTION sum3(anyelement,anyelement,anyelement) returns anyelement AS
-'select $1+$2+$3' language sql strict;
--- finalfn polymorphic
-CREATE FUNCTION ffp(anyarray) RETURNS anyarray AS
-'select $1' LANGUAGE SQL;
--- finalfn non-polymorphic
-CREATE FUNCTION ffnp(int[]) returns int[] as
-'select $1' LANGUAGE SQL;
--- Try to cover all the possible states:
---
--- Note: in Cases 1 & 2, we are trying to return P. Therefore, if the transfn
--- is stfnp, tfnp, or tf2p, we must use ffp as finalfn, because stfnp, tfnp,
--- and tf2p do not return P. Conversely, in Cases 3 & 4, we are trying to
--- return N. Therefore, if the transfn is stfp, tfp, or tf1p, we must use ffnp
--- as finalfn, because stfp, tfp, and tf1p do not return N.
---
--- Case1 (R = P) && (B = A)
--- ------------------------
--- S tf1
--- -------
--- N N
--- should CREATE
-CREATE AGGREGATE myaggp01a(*) (SFUNC = stfnp, STYPE = int4[],
- FINALFUNC = ffp, INITCOND = '{}');
--- P N
--- should ERROR: stfnp(anyarray) not matched by stfnp(int[])
-CREATE AGGREGATE myaggp02a(*) (SFUNC = stfnp, STYPE = anyarray,
- FINALFUNC = ffp, INITCOND = '{}');
-ERROR: cannot determine transition data type
-DETAIL: An aggregate using "anyarray" or "anyelement" as transition type must have at least one argument of either type.
--- N P
--- should CREATE
-CREATE AGGREGATE myaggp03a(*) (SFUNC = stfp, STYPE = int4[],
- FINALFUNC = ffp, INITCOND = '{}');
-CREATE AGGREGATE myaggp03b(*) (SFUNC = stfp, STYPE = int4[],
- INITCOND = '{}');
--- P P
--- should ERROR: we have no way to resolve S
-CREATE AGGREGATE myaggp04a(*) (SFUNC = stfp, STYPE = anyarray,
- FINALFUNC = ffp, INITCOND = '{}');
-ERROR: cannot determine transition data type
-DETAIL: An aggregate using "anyarray" or "anyelement" as transition type must have at least one argument of either type.
-CREATE AGGREGATE myaggp04b(*) (SFUNC = stfp, STYPE = anyarray,
- INITCOND = '{}');
-ERROR: cannot determine transition data type
-DETAIL: An aggregate using "anyarray" or "anyelement" as transition type must have at least one argument of either type.
--- Case2 (R = P) && ((B = P) || (B = N))
--- -------------------------------------
--- S tf1 B tf2
--- -----------------------
--- N N N N
--- should CREATE
-CREATE AGGREGATE myaggp05a(BASETYPE = int, SFUNC = tfnp, STYPE = int[],
- FINALFUNC = ffp, INITCOND = '{}');
--- N N N P
--- should CREATE
-CREATE AGGREGATE myaggp06a(BASETYPE = int, SFUNC = tf2p, STYPE = int[],
- FINALFUNC = ffp, INITCOND = '{}');
--- N N P N
--- should ERROR: tfnp(int[], anyelement) not matched by tfnp(int[], int)
-CREATE AGGREGATE myaggp07a(BASETYPE = anyelement, SFUNC = tfnp, STYPE = int[],
- FINALFUNC = ffp, INITCOND = '{}');
-ERROR: function tfnp(integer[], anyelement) does not exist
--- N N P P
--- should CREATE
-CREATE AGGREGATE myaggp08a(BASETYPE = anyelement, SFUNC = tf2p, STYPE = int[],
- FINALFUNC = ffp, INITCOND = '{}');
--- N P N N
--- should CREATE
-CREATE AGGREGATE myaggp09a(BASETYPE = int, SFUNC = tf1p, STYPE = int[],
- FINALFUNC = ffp, INITCOND = '{}');
-CREATE AGGREGATE myaggp09b(BASETYPE = int, SFUNC = tf1p, STYPE = int[],
- INITCOND = '{}');
--- N P N P
--- should CREATE
-CREATE AGGREGATE myaggp10a(BASETYPE = int, SFUNC = tfp, STYPE = int[],
- FINALFUNC = ffp, INITCOND = '{}');
-CREATE AGGREGATE myaggp10b(BASETYPE = int, SFUNC = tfp, STYPE = int[],
- INITCOND = '{}');
--- N P P N
--- should ERROR: tf1p(int[],anyelement) not matched by tf1p(anyarray,int)
-CREATE AGGREGATE myaggp11a(BASETYPE = anyelement, SFUNC = tf1p, STYPE = int[],
- FINALFUNC = ffp, INITCOND = '{}');
-ERROR: function tf1p(integer[], anyelement) does not exist
-CREATE AGGREGATE myaggp11b(BASETYPE = anyelement, SFUNC = tf1p, STYPE = int[],
- INITCOND = '{}');
-ERROR: function tf1p(integer[], anyelement) does not exist
--- N P P P
--- should ERROR: tfp(int[],anyelement) not matched by tfp(anyarray,anyelement)
-CREATE AGGREGATE myaggp12a(BASETYPE = anyelement, SFUNC = tfp, STYPE = int[],
- FINALFUNC = ffp, INITCOND = '{}');
-ERROR: function tfp(integer[], anyelement) does not exist
-CREATE AGGREGATE myaggp12b(BASETYPE = anyelement, SFUNC = tfp, STYPE = int[],
- INITCOND = '{}');
-ERROR: function tfp(integer[], anyelement) does not exist
--- P N N N
--- should ERROR: tfnp(anyarray, int) not matched by tfnp(int[],int)
-CREATE AGGREGATE myaggp13a(BASETYPE = int, SFUNC = tfnp, STYPE = anyarray,
- FINALFUNC = ffp, INITCOND = '{}');
-ERROR: cannot determine transition data type
-DETAIL: An aggregate using "anyarray" or "anyelement" as transition type must have at least one argument of either type.
--- P N N P
--- should ERROR: tf2p(anyarray, int) not matched by tf2p(int[],anyelement)
-CREATE AGGREGATE myaggp14a(BASETYPE = int, SFUNC = tf2p, STYPE = anyarray,
- FINALFUNC = ffp, INITCOND = '{}');
-ERROR: cannot determine transition data type
-DETAIL: An aggregate using "anyarray" or "anyelement" as transition type must have at least one argument of either type.
--- P N P N
--- should ERROR: tfnp(anyarray, anyelement) not matched by tfnp(int[],int)
-CREATE AGGREGATE myaggp15a(BASETYPE = anyelement, SFUNC = tfnp,
- STYPE = anyarray, FINALFUNC = ffp, INITCOND = '{}');
-ERROR: function tfnp(anyarray, anyelement) does not exist
--- P N P P
--- should ERROR: tf2p(anyarray, anyelement) not matched by tf2p(int[],anyelement)
-CREATE AGGREGATE myaggp16a(BASETYPE = anyelement, SFUNC = tf2p,
- STYPE = anyarray, FINALFUNC = ffp, INITCOND = '{}');
-ERROR: function tf2p(anyarray, anyelement) does not exist
--- P P N N
--- should ERROR: we have no way to resolve S
-CREATE AGGREGATE myaggp17a(BASETYPE = int, SFUNC = tf1p, STYPE = anyarray,
- FINALFUNC = ffp, INITCOND = '{}');
-ERROR: cannot determine transition data type
-DETAIL: An aggregate using "anyarray" or "anyelement" as transition type must have at least one argument of either type.
-CREATE AGGREGATE myaggp17b(BASETYPE = int, SFUNC = tf1p, STYPE = anyarray,
- INITCOND = '{}');
-ERROR: cannot determine transition data type
-DETAIL: An aggregate using "anyarray" or "anyelement" as transition type must have at least one argument of either type.
--- P P N P
--- should ERROR: tfp(anyarray, int) not matched by tfp(anyarray, anyelement)
-CREATE AGGREGATE myaggp18a(BASETYPE = int, SFUNC = tfp, STYPE = anyarray,
- FINALFUNC = ffp, INITCOND = '{}');
-ERROR: cannot determine transition data type
-DETAIL: An aggregate using "anyarray" or "anyelement" as transition type must have at least one argument of either type.
-CREATE AGGREGATE myaggp18b(BASETYPE = int, SFUNC = tfp, STYPE = anyarray,
- INITCOND = '{}');
-ERROR: cannot determine transition data type
-DETAIL: An aggregate using "anyarray" or "anyelement" as transition type must have at least one argument of either type.
--- P P P N
--- should ERROR: tf1p(anyarray, anyelement) not matched by tf1p(anyarray, int)
-CREATE AGGREGATE myaggp19a(BASETYPE = anyelement, SFUNC = tf1p,
- STYPE = anyarray, FINALFUNC = ffp, INITCOND = '{}');
-ERROR: function tf1p(anyarray, anyelement) does not exist
-CREATE AGGREGATE myaggp19b(BASETYPE = anyelement, SFUNC = tf1p,
- STYPE = anyarray, INITCOND = '{}');
-ERROR: function tf1p(anyarray, anyelement) does not exist
--- P P P P
--- should CREATE
-CREATE AGGREGATE myaggp20a(BASETYPE = anyelement, SFUNC = tfp,
- STYPE = anyarray, FINALFUNC = ffp, INITCOND = '{}');
-CREATE AGGREGATE myaggp20b(BASETYPE = anyelement, SFUNC = tfp,
- STYPE = anyarray, INITCOND = '{}');
--- Case3 (R = N) && (B = A)
--- ------------------------
--- S tf1
--- -------
--- N N
--- should CREATE
-CREATE AGGREGATE myaggn01a(*) (SFUNC = stfnp, STYPE = int4[],
- FINALFUNC = ffnp, INITCOND = '{}');
-CREATE AGGREGATE myaggn01b(*) (SFUNC = stfnp, STYPE = int4[],
- INITCOND = '{}');
--- P N
--- should ERROR: stfnp(anyarray) not matched by stfnp(int[])
-CREATE AGGREGATE myaggn02a(*) (SFUNC = stfnp, STYPE = anyarray,
- FINALFUNC = ffnp, INITCOND = '{}');
-ERROR: cannot determine transition data type
-DETAIL: An aggregate using "anyarray" or "anyelement" as transition type must have at least one argument of either type.
-CREATE AGGREGATE myaggn02b(*) (SFUNC = stfnp, STYPE = anyarray,
- INITCOND = '{}');
-ERROR: cannot determine transition data type
-DETAIL: An aggregate using "anyarray" or "anyelement" as transition type must have at least one argument of either type.
--- N P
--- should CREATE
-CREATE AGGREGATE myaggn03a(*) (SFUNC = stfp, STYPE = int4[],
- FINALFUNC = ffnp, INITCOND = '{}');
--- P P
--- should ERROR: ffnp(anyarray) not matched by ffnp(int[])
-CREATE AGGREGATE myaggn04a(*) (SFUNC = stfp, STYPE = anyarray,
- FINALFUNC = ffnp, INITCOND = '{}');
-ERROR: cannot determine transition data type
-DETAIL: An aggregate using "anyarray" or "anyelement" as transition type must have at least one argument of either type.
--- Case4 (R = N) && ((B = P) || (B = N))
--- -------------------------------------
--- S tf1 B tf2
--- -----------------------
--- N N N N
--- should CREATE
-CREATE AGGREGATE myaggn05a(BASETYPE = int, SFUNC = tfnp, STYPE = int[],
- FINALFUNC = ffnp, INITCOND = '{}');
-CREATE AGGREGATE myaggn05b(BASETYPE = int, SFUNC = tfnp, STYPE = int[],
- INITCOND = '{}');
--- N N N P
--- should CREATE
-CREATE AGGREGATE myaggn06a(BASETYPE = int, SFUNC = tf2p, STYPE = int[],
- FINALFUNC = ffnp, INITCOND = '{}');
-CREATE AGGREGATE myaggn06b(BASETYPE = int, SFUNC = tf2p, STYPE = int[],
- INITCOND = '{}');
--- N N P N
--- should ERROR: tfnp(int[], anyelement) not matched by tfnp(int[], int)
-CREATE AGGREGATE myaggn07a(BASETYPE = anyelement, SFUNC = tfnp, STYPE = int[],
- FINALFUNC = ffnp, INITCOND = '{}');
-ERROR: function tfnp(integer[], anyelement) does not exist
-CREATE AGGREGATE myaggn07b(BASETYPE = anyelement, SFUNC = tfnp, STYPE = int[],
- INITCOND = '{}');
-ERROR: function tfnp(integer[], anyelement) does not exist
--- N N P P
--- should CREATE
-CREATE AGGREGATE myaggn08a(BASETYPE = anyelement, SFUNC = tf2p, STYPE = int[],
- FINALFUNC = ffnp, INITCOND = '{}');
-CREATE AGGREGATE myaggn08b(BASETYPE = anyelement, SFUNC = tf2p, STYPE = int[],
- INITCOND = '{}');
--- N P N N
--- should CREATE
-CREATE AGGREGATE myaggn09a(BASETYPE = int, SFUNC = tf1p, STYPE = int[],
- FINALFUNC = ffnp, INITCOND = '{}');
--- N P N P
--- should CREATE
-CREATE AGGREGATE myaggn10a(BASETYPE = int, SFUNC = tfp, STYPE = int[],
- FINALFUNC = ffnp, INITCOND = '{}');
--- N P P N
--- should ERROR: tf1p(int[],anyelement) not matched by tf1p(anyarray,int)
-CREATE AGGREGATE myaggn11a(BASETYPE = anyelement, SFUNC = tf1p, STYPE = int[],
- FINALFUNC = ffnp, INITCOND = '{}');
-ERROR: function tf1p(integer[], anyelement) does not exist
--- N P P P
--- should ERROR: tfp(int[],anyelement) not matched by tfp(anyarray,anyelement)
-CREATE AGGREGATE myaggn12a(BASETYPE = anyelement, SFUNC = tfp, STYPE = int[],
- FINALFUNC = ffnp, INITCOND = '{}');
-ERROR: function tfp(integer[], anyelement) does not exist
--- P N N N
--- should ERROR: tfnp(anyarray, int) not matched by tfnp(int[],int)
-CREATE AGGREGATE myaggn13a(BASETYPE = int, SFUNC = tfnp, STYPE = anyarray,
- FINALFUNC = ffnp, INITCOND = '{}');
-ERROR: cannot determine transition data type
-DETAIL: An aggregate using "anyarray" or "anyelement" as transition type must have at least one argument of either type.
-CREATE AGGREGATE myaggn13b(BASETYPE = int, SFUNC = tfnp, STYPE = anyarray,
- INITCOND = '{}');
-ERROR: cannot determine transition data type
-DETAIL: An aggregate using "anyarray" or "anyelement" as transition type must have at least one argument of either type.
--- P N N P
--- should ERROR: tf2p(anyarray, int) not matched by tf2p(int[],anyelement)
-CREATE AGGREGATE myaggn14a(BASETYPE = int, SFUNC = tf2p, STYPE = anyarray,
- FINALFUNC = ffnp, INITCOND = '{}');
-ERROR: cannot determine transition data type
-DETAIL: An aggregate using "anyarray" or "anyelement" as transition type must have at least one argument of either type.
-CREATE AGGREGATE myaggn14b(BASETYPE = int, SFUNC = tf2p, STYPE = anyarray,
- INITCOND = '{}');
-ERROR: cannot determine transition data type
-DETAIL: An aggregate using "anyarray" or "anyelement" as transition type must have at least one argument of either type.
--- P N P N
--- should ERROR: tfnp(anyarray, anyelement) not matched by tfnp(int[],int)
-CREATE AGGREGATE myaggn15a(BASETYPE = anyelement, SFUNC = tfnp,
- STYPE = anyarray, FINALFUNC = ffnp, INITCOND = '{}');
-ERROR: function tfnp(anyarray, anyelement) does not exist
-CREATE AGGREGATE myaggn15b(BASETYPE = anyelement, SFUNC = tfnp,
- STYPE = anyarray, INITCOND = '{}');
-ERROR: function tfnp(anyarray, anyelement) does not exist
--- P N P P
--- should ERROR: tf2p(anyarray, anyelement) not matched by tf2p(int[],anyelement)
-CREATE AGGREGATE myaggn16a(BASETYPE = anyelement, SFUNC = tf2p,
- STYPE = anyarray, FINALFUNC = ffnp, INITCOND = '{}');
-ERROR: function tf2p(anyarray, anyelement) does not exist
-CREATE AGGREGATE myaggn16b(BASETYPE = anyelement, SFUNC = tf2p,
- STYPE = anyarray, INITCOND = '{}');
-ERROR: function tf2p(anyarray, anyelement) does not exist
--- P P N N
--- should ERROR: ffnp(anyarray) not matched by ffnp(int[])
-CREATE AGGREGATE myaggn17a(BASETYPE = int, SFUNC = tf1p, STYPE = anyarray,
- FINALFUNC = ffnp, INITCOND = '{}');
-ERROR: cannot determine transition data type
-DETAIL: An aggregate using "anyarray" or "anyelement" as transition type must have at least one argument of either type.
--- P P N P
--- should ERROR: tfp(anyarray, int) not matched by tfp(anyarray, anyelement)
-CREATE AGGREGATE myaggn18a(BASETYPE = int, SFUNC = tfp, STYPE = anyarray,
- FINALFUNC = ffnp, INITCOND = '{}');
-ERROR: cannot determine transition data type
-DETAIL: An aggregate using "anyarray" or "anyelement" as transition type must have at least one argument of either type.
--- P P P N
--- should ERROR: tf1p(anyarray, anyelement) not matched by tf1p(anyarray, int)
-CREATE AGGREGATE myaggn19a(BASETYPE = anyelement, SFUNC = tf1p,
- STYPE = anyarray, FINALFUNC = ffnp, INITCOND = '{}');
-ERROR: function tf1p(anyarray, anyelement) does not exist
--- P P P P
--- should ERROR: ffnp(anyarray) not matched by ffnp(int[])
-CREATE AGGREGATE myaggn20a(BASETYPE = anyelement, SFUNC = tfp,
- STYPE = anyarray, FINALFUNC = ffnp, INITCOND = '{}');
-ERROR: function ffnp(anyarray) does not exist
--- multi-arg polymorphic
-CREATE AGGREGATE mysum2(anyelement,anyelement) (SFUNC = sum3,
- STYPE = anyelement, INITCOND = '0');
--- create test data for polymorphic aggregates
-create temp table t(f1 int, f2 int[], f3 text);
-insert into t values(1,array[1],'a');
-insert into t values(2,array[11],'b');
-insert into t values(3,array[111],'c');
-insert into t values(4,array[2],'a');
-insert into t values(5,array[22],'b');
-insert into t values(6,array[222],'c');
-insert into t values(7,array[3],'a');
-insert into t values(8,array[3],'b');
--- test the successfully created polymorphic aggregates
-select f3, myaggp01a(*) from (select * from t order by f1 limit 10) as foo group by f3 order by f3;
- f3 | myaggp01a
-----+-----------
- a | {}
- b | {}
- c | {}
-(3 rows)
-
-select f3, myaggp03a(*) from (select * from t order by f1 limit 10) as foo group by f3 order by f3;
- f3 | myaggp03a
-----+-----------
- a | {}
- b | {}
- c | {}
-(3 rows)
-
-select f3, myaggp03b(*) from (select * from t order by f1 limit 10) as foo group by f3 order by f3;
- f3 | myaggp03b
-----+-----------
- a | {}
- b | {}
- c | {}
-(3 rows)
-
-select f3, myaggp05a(f1) from (select * from t order by f1 limit 10) as foo group by f3 order by f3;
- f3 | myaggp05a
-----+-----------
- a | {1,4,7}
- b | {5,2,8}
- c | {3,6}
-(3 rows)
-
-select f3, myaggp06a(f1) from (select * from t order by f1 limit 10) as foo group by f3 order by f3;
- f3 | myaggp06a
-----+-----------
- a | {}
- b | {}
- c | {}
-(3 rows)
-
-select f3, myaggp08a(f1) from (select * from t order by f1 limit 10) as foo group by f3 order by f3;
- f3 | myaggp08a
-----+-----------
- a | {}
- b | {}
- c | {}
-(3 rows)
-
-select f3, myaggp09a(f1) from (select * from t order by f1 limit 10) as foo group by f3 order by f3;
- f3 | myaggp09a
-----+-----------
- a | {}
- b | {}
- c | {}
-(3 rows)
-
-select f3, myaggp09b(f1) from (select * from t order by f1 limit 10) as foo group by f3 order by f3;
- f3 | myaggp09b
-----+-----------
- a | {}
- b | {}
- c | {}
-(3 rows)
-
-select f3, myaggp10a(f1) from (select * from t order by f1 limit 10) as foo group by f3 order by f3;
- f3 | myaggp10a
-----+-----------
- a | {1,4,7}
- b | {5,2,8}
- c | {3,6}
-(3 rows)
-
-select f3, myaggp10b(f1) from (select * from t order by f1 limit 10) as foo group by f3 order by f3;
- f3 | myaggp10b
-----+-----------
- a | {1,4,7}
- b | {5,2,8}
- c | {3,6}
-(3 rows)
-
-select f3, myaggp20a(f1) from (select * from t order by f1 limit 10) as foo group by f3 order by f3;
- f3 | myaggp20a
-----+-----------
- a | {1,4,7}
- b | {5,2,8}
- c | {3,6}
-(3 rows)
-
-select f3, myaggp20b(f1) from (select * from t order by f1 limit 10) as foo group by f3 order by f3;
- f3 | myaggp20b
-----+-----------
- a | {1,4,7}
- b | {5,2,8}
- c | {3,6}
-(3 rows)
-
-select f3, myaggn01a(*) from (select * from t order by f1 limit 10) as foo group by f3 order by f3;
- f3 | myaggn01a
-----+-----------
- a | {}
- b | {}
- c | {}
-(3 rows)
-
-select f3, myaggn01b(*) from (select * from t order by f1 limit 10) as foo group by f3 order by f3;
- f3 | myaggn01b
-----+-----------
- a | {}
- b | {}
- c | {}
-(3 rows)
-
-select f3, myaggn03a(*) from (select * from t order by f1 limit 10) as foo group by f3 order by f3;
- f3 | myaggn03a
-----+-----------
- a | {}
- b | {}
- c | {}
-(3 rows)
-
-select f3, myaggn05a(f1) from (select * from t order by f1 limit 10) as foo group by f3 order by f3;
- f3 | myaggn05a
-----+-----------
- a | {1,4,7}
- b | {5,2,8}
- c | {3,6}
-(3 rows)
-
-select f3, myaggn05b(f1) from (select * from t order by f1 limit 10) as foo group by f3 order by f3;
- f3 | myaggn05b
-----+-----------
- a | {1,4,7}
- b | {5,2,8}
- c | {3,6}
-(3 rows)
-
-select f3, myaggn06a(f1) from (select * from t order by f1 limit 10) as foo group by f3 order by f3;
- f3 | myaggn06a
-----+-----------
- a | {}
- b | {}
- c | {}
-(3 rows)
-
-select f3, myaggn06b(f1) from (select * from t order by f1 limit 10) as foo group by f3 order by f3;
- f3 | myaggn06b
-----+-----------
- a | {}
- b | {}
- c | {}
-(3 rows)
-
-select f3, myaggn08a(f1) from (select * from t order by f1 limit 10) as foo group by f3 order by f3;
- f3 | myaggn08a
-----+-----------
- a | {}
- b | {}
- c | {}
-(3 rows)
-
-select f3, myaggn08b(f1) from (select * from t order by f1 limit 10) as foo group by f3 order by f3;
- f3 | myaggn08b
-----+-----------
- a | {}
- b | {}
- c | {}
-(3 rows)
-
-select f3, myaggn09a(f1) from (select * from t order by f1 limit 10) as foo group by f3 order by f3;
- f3 | myaggn09a
-----+-----------
- a | {}
- b | {}
- c | {}
-(3 rows)
-
-select f3, myaggn10a(f1) from (select * from t order by f1 limit 10) as foo group by f3 order by f3;
- f3 | myaggn10a
-----+-----------
- a | {1,4,7}
- b | {5,2,8}
- c | {3,6}
-(3 rows)
-
-select mysum2(f1, f1 + 1) from t;
- mysum2
---------
- 80
-(1 row)
-
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/0081706d/src/test/regress/known_good_schedule
----------------------------------------------------------------------
diff --git a/src/test/regress/known_good_schedule b/src/test/regress/known_good_schedule
index 58608ce..71564b9 100755
--- a/src/test/regress/known_good_schedule
+++ b/src/test/regress/known_good_schedule
@@ -128,7 +128,6 @@ ignore: without_oid
ignore: conversion
ignore: truncate
ignore: alter_table
-test: polymorphism
test: rowtypes
ignore: returning
ignore: stats
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/0081706d/src/test/regress/sql/polymorphism.sql
----------------------------------------------------------------------
diff --git a/src/test/regress/sql/polymorphism.sql b/src/test/regress/sql/polymorphism.sql
deleted file mode 100644
index 5d07f9e..0000000
--- a/src/test/regress/sql/polymorphism.sql
+++ /dev/null
@@ -1,377 +0,0 @@
--- Currently this tests polymorphic aggregates and indirectly does some
--- testing of polymorphic SQL functions. It ought to be extended.
-
-
--- Legend:
------------
--- A = type is ANY
--- P = type is polymorphic
--- N = type is non-polymorphic
--- B = aggregate base type
--- S = aggregate state type
--- R = aggregate return type
--- 1 = arg1 of a function
--- 2 = arg2 of a function
--- ag = aggregate
--- tf = trans (state) function
--- ff = final function
--- rt = return type of a function
--- -> = implies
--- => = allowed
--- !> = not allowed
--- E = exists
--- NE = not-exists
---
--- Possible states:
--- ----------------
--- B = (A || P || N)
--- when (B = A) -> (tf2 = NE)
--- S = (P || N)
--- ff = (E || NE)
--- tf1 = (P || N)
--- tf2 = (NE || P || N)
--- R = (P || N)
-
--- create functions for use as tf and ff with the needed combinations of
--- argument polymorphism, but within the constraints of valid aggregate
--- functions, i.e. tf arg1 and tf return type must match
-
--- polymorphic single arg transfn
-CREATE FUNCTION stfp(anyarray) RETURNS anyarray AS
-'select $1' LANGUAGE SQL;
--- non-polymorphic single arg transfn
-CREATE FUNCTION stfnp(int[]) RETURNS int[] AS
-'select $1' LANGUAGE SQL;
-
--- dual polymorphic transfn
-CREATE FUNCTION tfp(anyarray,anyelement) RETURNS anyarray AS
-'select $1 || $2' LANGUAGE SQL;
--- dual non-polymorphic transfn
-CREATE FUNCTION tfnp(int[],int) RETURNS int[] AS
-'select $1 || $2' LANGUAGE SQL;
-
--- arg1 only polymorphic transfn
-CREATE FUNCTION tf1p(anyarray,int) RETURNS anyarray AS
-'select $1' LANGUAGE SQL;
--- arg2 only polymorphic transfn
-CREATE FUNCTION tf2p(int[],anyelement) RETURNS int[] AS
-'select $1' LANGUAGE SQL;
-
--- multi-arg polymorphic
-CREATE FUNCTION sum3(anyelement,anyelement,anyelement) returns anyelement AS
-'select $1+$2+$3' language sql strict;
-
--- finalfn polymorphic
-CREATE FUNCTION ffp(anyarray) RETURNS anyarray AS
-'select $1' LANGUAGE SQL;
--- finalfn non-polymorphic
-CREATE FUNCTION ffnp(int[]) returns int[] as
-'select $1' LANGUAGE SQL;
-
--- Try to cover all the possible states:
---
--- Note: in Cases 1 & 2, we are trying to return P. Therefore, if the transfn
--- is stfnp, tfnp, or tf2p, we must use ffp as finalfn, because stfnp, tfnp,
--- and tf2p do not return P. Conversely, in Cases 3 & 4, we are trying to
--- return N. Therefore, if the transfn is stfp, tfp, or tf1p, we must use ffnp
--- as finalfn, because stfp, tfp, and tf1p do not return N.
---
--- Case1 (R = P) && (B = A)
--- ------------------------
--- S tf1
--- -------
--- N N
--- should CREATE
-CREATE AGGREGATE myaggp01a(*) (SFUNC = stfnp, STYPE = int4[],
- FINALFUNC = ffp, INITCOND = '{}');
-
--- P N
--- should ERROR: stfnp(anyarray) not matched by stfnp(int[])
-CREATE AGGREGATE myaggp02a(*) (SFUNC = stfnp, STYPE = anyarray,
- FINALFUNC = ffp, INITCOND = '{}');
-
--- N P
--- should CREATE
-CREATE AGGREGATE myaggp03a(*) (SFUNC = stfp, STYPE = int4[],
- FINALFUNC = ffp, INITCOND = '{}');
-CREATE AGGREGATE myaggp03b(*) (SFUNC = stfp, STYPE = int4[],
- INITCOND = '{}');
-
--- P P
--- should ERROR: we have no way to resolve S
-CREATE AGGREGATE myaggp04a(*) (SFUNC = stfp, STYPE = anyarray,
- FINALFUNC = ffp, INITCOND = '{}');
-CREATE AGGREGATE myaggp04b(*) (SFUNC = stfp, STYPE = anyarray,
- INITCOND = '{}');
-
-
--- Case2 (R = P) && ((B = P) || (B = N))
--- -------------------------------------
--- S tf1 B tf2
--- -----------------------
--- N N N N
--- should CREATE
-CREATE AGGREGATE myaggp05a(BASETYPE = int, SFUNC = tfnp, STYPE = int[],
- FINALFUNC = ffp, INITCOND = '{}');
-
--- N N N P
--- should CREATE
-CREATE AGGREGATE myaggp06a(BASETYPE = int, SFUNC = tf2p, STYPE = int[],
- FINALFUNC = ffp, INITCOND = '{}');
-
--- N N P N
--- should ERROR: tfnp(int[], anyelement) not matched by tfnp(int[], int)
-CREATE AGGREGATE myaggp07a(BASETYPE = anyelement, SFUNC = tfnp, STYPE = int[],
- FINALFUNC = ffp, INITCOND = '{}');
-
--- N N P P
--- should CREATE
-CREATE AGGREGATE myaggp08a(BASETYPE = anyelement, SFUNC = tf2p, STYPE = int[],
- FINALFUNC = ffp, INITCOND = '{}');
-
--- N P N N
--- should CREATE
-CREATE AGGREGATE myaggp09a(BASETYPE = int, SFUNC = tf1p, STYPE = int[],
- FINALFUNC = ffp, INITCOND = '{}');
-CREATE AGGREGATE myaggp09b(BASETYPE = int, SFUNC = tf1p, STYPE = int[],
- INITCOND = '{}');
-
--- N P N P
--- should CREATE
-CREATE AGGREGATE myaggp10a(BASETYPE = int, SFUNC = tfp, STYPE = int[],
- FINALFUNC = ffp, INITCOND = '{}');
-CREATE AGGREGATE myaggp10b(BASETYPE = int, SFUNC = tfp, STYPE = int[],
- INITCOND = '{}');
-
--- N P P N
--- should ERROR: tf1p(int[],anyelement) not matched by tf1p(anyarray,int)
-CREATE AGGREGATE myaggp11a(BASETYPE = anyelement, SFUNC = tf1p, STYPE = int[],
- FINALFUNC = ffp, INITCOND = '{}');
-CREATE AGGREGATE myaggp11b(BASETYPE = anyelement, SFUNC = tf1p, STYPE = int[],
- INITCOND = '{}');
-
--- N P P P
--- should ERROR: tfp(int[],anyelement) not matched by tfp(anyarray,anyelement)
-CREATE AGGREGATE myaggp12a(BASETYPE = anyelement, SFUNC = tfp, STYPE = int[],
- FINALFUNC = ffp, INITCOND = '{}');
-CREATE AGGREGATE myaggp12b(BASETYPE = anyelement, SFUNC = tfp, STYPE = int[],
- INITCOND = '{}');
-
--- P N N N
--- should ERROR: tfnp(anyarray, int) not matched by tfnp(int[],int)
-CREATE AGGREGATE myaggp13a(BASETYPE = int, SFUNC = tfnp, STYPE = anyarray,
- FINALFUNC = ffp, INITCOND = '{}');
-
--- P N N P
--- should ERROR: tf2p(anyarray, int) not matched by tf2p(int[],anyelement)
-CREATE AGGREGATE myaggp14a(BASETYPE = int, SFUNC = tf2p, STYPE = anyarray,
- FINALFUNC = ffp, INITCOND = '{}');
-
--- P N P N
--- should ERROR: tfnp(anyarray, anyelement) not matched by tfnp(int[],int)
-CREATE AGGREGATE myaggp15a(BASETYPE = anyelement, SFUNC = tfnp,
- STYPE = anyarray, FINALFUNC = ffp, INITCOND = '{}');
-
--- P N P P
--- should ERROR: tf2p(anyarray, anyelement) not matched by tf2p(int[],anyelement)
-CREATE AGGREGATE myaggp16a(BASETYPE = anyelement, SFUNC = tf2p,
- STYPE = anyarray, FINALFUNC = ffp, INITCOND = '{}');
-
--- P P N N
--- should ERROR: we have no way to resolve S
-CREATE AGGREGATE myaggp17a(BASETYPE = int, SFUNC = tf1p, STYPE = anyarray,
- FINALFUNC = ffp, INITCOND = '{}');
-CREATE AGGREGATE myaggp17b(BASETYPE = int, SFUNC = tf1p, STYPE = anyarray,
- INITCOND = '{}');
-
--- P P N P
--- should ERROR: tfp(anyarray, int) not matched by tfp(anyarray, anyelement)
-CREATE AGGREGATE myaggp18a(BASETYPE = int, SFUNC = tfp, STYPE = anyarray,
- FINALFUNC = ffp, INITCOND = '{}');
-CREATE AGGREGATE myaggp18b(BASETYPE = int, SFUNC = tfp, STYPE = anyarray,
- INITCOND = '{}');
-
--- P P P N
--- should ERROR: tf1p(anyarray, anyelement) not matched by tf1p(anyarray, int)
-CREATE AGGREGATE myaggp19a(BASETYPE = anyelement, SFUNC = tf1p,
- STYPE = anyarray, FINALFUNC = ffp, INITCOND = '{}');
-CREATE AGGREGATE myaggp19b(BASETYPE = anyelement, SFUNC = tf1p,
- STYPE = anyarray, INITCOND = '{}');
-
--- P P P P
--- should CREATE
-CREATE AGGREGATE myaggp20a(BASETYPE = anyelement, SFUNC = tfp,
- STYPE = anyarray, FINALFUNC = ffp, INITCOND = '{}');
-CREATE AGGREGATE myaggp20b(BASETYPE = anyelement, SFUNC = tfp,
- STYPE = anyarray, INITCOND = '{}');
-
--- Case3 (R = N) && (B = A)
--- ------------------------
--- S tf1
--- -------
--- N N
--- should CREATE
-CREATE AGGREGATE myaggn01a(*) (SFUNC = stfnp, STYPE = int4[],
- FINALFUNC = ffnp, INITCOND = '{}');
-CREATE AGGREGATE myaggn01b(*) (SFUNC = stfnp, STYPE = int4[],
- INITCOND = '{}');
-
--- P N
--- should ERROR: stfnp(anyarray) not matched by stfnp(int[])
-CREATE AGGREGATE myaggn02a(*) (SFUNC = stfnp, STYPE = anyarray,
- FINALFUNC = ffnp, INITCOND = '{}');
-CREATE AGGREGATE myaggn02b(*) (SFUNC = stfnp, STYPE = anyarray,
- INITCOND = '{}');
-
--- N P
--- should CREATE
-CREATE AGGREGATE myaggn03a(*) (SFUNC = stfp, STYPE = int4[],
- FINALFUNC = ffnp, INITCOND = '{}');
-
--- P P
--- should ERROR: ffnp(anyarray) not matched by ffnp(int[])
-CREATE AGGREGATE myaggn04a(*) (SFUNC = stfp, STYPE = anyarray,
- FINALFUNC = ffnp, INITCOND = '{}');
-
-
--- Case4 (R = N) && ((B = P) || (B = N))
--- -------------------------------------
--- S tf1 B tf2
--- -----------------------
--- N N N N
--- should CREATE
-CREATE AGGREGATE myaggn05a(BASETYPE = int, SFUNC = tfnp, STYPE = int[],
- FINALFUNC = ffnp, INITCOND = '{}');
-CREATE AGGREGATE myaggn05b(BASETYPE = int, SFUNC = tfnp, STYPE = int[],
- INITCOND = '{}');
-
--- N N N P
--- should CREATE
-CREATE AGGREGATE myaggn06a(BASETYPE = int, SFUNC = tf2p, STYPE = int[],
- FINALFUNC = ffnp, INITCOND = '{}');
-CREATE AGGREGATE myaggn06b(BASETYPE = int, SFUNC = tf2p, STYPE = int[],
- INITCOND = '{}');
-
--- N N P N
--- should ERROR: tfnp(int[], anyelement) not matched by tfnp(int[], int)
-CREATE AGGREGATE myaggn07a(BASETYPE = anyelement, SFUNC = tfnp, STYPE = int[],
- FINALFUNC = ffnp, INITCOND = '{}');
-CREATE AGGREGATE myaggn07b(BASETYPE = anyelement, SFUNC = tfnp, STYPE = int[],
- INITCOND = '{}');
-
--- N N P P
--- should CREATE
-CREATE AGGREGATE myaggn08a(BASETYPE = anyelement, SFUNC = tf2p, STYPE = int[],
- FINALFUNC = ffnp, INITCOND = '{}');
-CREATE AGGREGATE myaggn08b(BASETYPE = anyelement, SFUNC = tf2p, STYPE = int[],
- INITCOND = '{}');
-
--- N P N N
--- should CREATE
-CREATE AGGREGATE myaggn09a(BASETYPE = int, SFUNC = tf1p, STYPE = int[],
- FINALFUNC = ffnp, INITCOND = '{}');
-
--- N P N P
--- should CREATE
-CREATE AGGREGATE myaggn10a(BASETYPE = int, SFUNC = tfp, STYPE = int[],
- FINALFUNC = ffnp, INITCOND = '{}');
-
--- N P P N
--- should ERROR: tf1p(int[],anyelement) not matched by tf1p(anyarray,int)
-CREATE AGGREGATE myaggn11a(BASETYPE = anyelement, SFUNC = tf1p, STYPE = int[],
- FINALFUNC = ffnp, INITCOND = '{}');
-
--- N P P P
--- should ERROR: tfp(int[],anyelement) not matched by tfp(anyarray,anyelement)
-CREATE AGGREGATE myaggn12a(BASETYPE = anyelement, SFUNC = tfp, STYPE = int[],
- FINALFUNC = ffnp, INITCOND = '{}');
-
--- P N N N
--- should ERROR: tfnp(anyarray, int) not matched by tfnp(int[],int)
-CREATE AGGREGATE myaggn13a(BASETYPE = int, SFUNC = tfnp, STYPE = anyarray,
- FINALFUNC = ffnp, INITCOND = '{}');
-CREATE AGGREGATE myaggn13b(BASETYPE = int, SFUNC = tfnp, STYPE = anyarray,
- INITCOND = '{}');
-
--- P N N P
--- should ERROR: tf2p(anyarray, int) not matched by tf2p(int[],anyelement)
-CREATE AGGREGATE myaggn14a(BASETYPE = int, SFUNC = tf2p, STYPE = anyarray,
- FINALFUNC = ffnp, INITCOND = '{}');
-CREATE AGGREGATE myaggn14b(BASETYPE = int, SFUNC = tf2p, STYPE = anyarray,
- INITCOND = '{}');
-
--- P N P N
--- should ERROR: tfnp(anyarray, anyelement) not matched by tfnp(int[],int)
-CREATE AGGREGATE myaggn15a(BASETYPE = anyelement, SFUNC = tfnp,
- STYPE = anyarray, FINALFUNC = ffnp, INITCOND = '{}');
-CREATE AGGREGATE myaggn15b(BASETYPE = anyelement, SFUNC = tfnp,
- STYPE = anyarray, INITCOND = '{}');
-
--- P N P P
--- should ERROR: tf2p(anyarray, anyelement) not matched by tf2p(int[],anyelement)
-CREATE AGGREGATE myaggn16a(BASETYPE = anyelement, SFUNC = tf2p,
- STYPE = anyarray, FINALFUNC = ffnp, INITCOND = '{}');
-CREATE AGGREGATE myaggn16b(BASETYPE = anyelement, SFUNC = tf2p,
- STYPE = anyarray, INITCOND = '{}');
-
--- P P N N
--- should ERROR: ffnp(anyarray) not matched by ffnp(int[])
-CREATE AGGREGATE myaggn17a(BASETYPE = int, SFUNC = tf1p, STYPE = anyarray,
- FINALFUNC = ffnp, INITCOND = '{}');
-
--- P P N P
--- should ERROR: tfp(anyarray, int) not matched by tfp(anyarray, anyelement)
-CREATE AGGREGATE myaggn18a(BASETYPE = int, SFUNC = tfp, STYPE = anyarray,
- FINALFUNC = ffnp, INITCOND = '{}');
-
--- P P P N
--- should ERROR: tf1p(anyarray, anyelement) not matched by tf1p(anyarray, int)
-CREATE AGGREGATE myaggn19a(BASETYPE = anyelement, SFUNC = tf1p,
- STYPE = anyarray, FINALFUNC = ffnp, INITCOND = '{}');
-
--- P P P P
--- should ERROR: ffnp(anyarray) not matched by ffnp(int[])
-CREATE AGGREGATE myaggn20a(BASETYPE = anyelement, SFUNC = tfp,
- STYPE = anyarray, FINALFUNC = ffnp, INITCOND = '{}');
-
--- multi-arg polymorphic
-CREATE AGGREGATE mysum2(anyelement,anyelement) (SFUNC = sum3,
- STYPE = anyelement, INITCOND = '0');
-
--- create test data for polymorphic aggregates
-create temp table t(f1 int, f2 int[], f3 text);
-insert into t values(1,array[1],'a');
-insert into t values(2,array[11],'b');
-insert into t values(3,array[111],'c');
-insert into t values(4,array[2],'a');
-insert into t values(5,array[22],'b');
-insert into t values(6,array[222],'c');
-insert into t values(7,array[3],'a');
-insert into t values(8,array[3],'b');
-
--- test the successfully created polymorphic aggregates
-select f3, myaggp01a(*) from (select * from t order by f1 limit 10) as foo group by f3 order by f3;
-select f3, myaggp03a(*) from (select * from t order by f1 limit 10) as foo group by f3 order by f3;
-select f3, myaggp03b(*) from (select * from t order by f1 limit 10) as foo group by f3 order by f3;
-select f3, myaggp05a(f1) from (select * from t order by f1 limit 10) as foo group by f3 order by f3;
-select f3, myaggp06a(f1) from (select * from t order by f1 limit 10) as foo group by f3 order by f3;
-select f3, myaggp08a(f1) from (select * from t order by f1 limit 10) as foo group by f3 order by f3;
-select f3, myaggp09a(f1) from (select * from t order by f1 limit 10) as foo group by f3 order by f3;
-select f3, myaggp09b(f1) from (select * from t order by f1 limit 10) as foo group by f3 order by f3;
-select f3, myaggp10a(f1) from (select * from t order by f1 limit 10) as foo group by f3 order by f3;
-select f3, myaggp10b(f1) from (select * from t order by f1 limit 10) as foo group by f3 order by f3;
-select f3, myaggp20a(f1) from (select * from t order by f1 limit 10) as foo group by f3 order by f3;
-select f3, myaggp20b(f1) from (select * from t order by f1 limit 10) as foo group by f3 order by f3;
-select f3, myaggn01a(*) from (select * from t order by f1 limit 10) as foo group by f3 order by f3;
-select f3, myaggn01b(*) from (select * from t order by f1 limit 10) as foo group by f3 order by f3;
-select f3, myaggn03a(*) from (select * from t order by f1 limit 10) as foo group by f3 order by f3;
-select f3, myaggn05a(f1) from (select * from t order by f1 limit 10) as foo group by f3 order by f3;
-select f3, myaggn05b(f1) from (select * from t order by f1 limit 10) as foo group by f3 order by f3;
-select f3, myaggn06a(f1) from (select * from t order by f1 limit 10) as foo group by f3 order by f3;
-select f3, myaggn06b(f1) from (select * from t order by f1 limit 10) as foo group by f3 order by f3;
-select f3, myaggn08a(f1) from (select * from t order by f1 limit 10) as foo group by f3 order by f3;
-select f3, myaggn08b(f1) from (select * from t order by f1 limit 10) as foo group by f3 order by f3;
-select f3, myaggn09a(f1) from (select * from t order by f1 limit 10) as foo group by f3 order by f3;
-select f3, myaggn10a(f1) from (select * from t order by f1 limit 10) as foo group by f3 order by f3;
-select mysum2(f1, f1 + 1) from t;
-
[05/14] incubator-hawq git commit: HAWQ-917. Refactor feature tests
for data type check with new googletest framework
Posted by rl...@apache.org.
HAWQ-917. Refactor feature tests for data type check with new googletest 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/f05c19ed
Tree: http://git-wip-us.apache.org/repos/asf/incubator-hawq/tree/f05c19ed
Diff: http://git-wip-us.apache.org/repos/asf/incubator-hawq/diff/f05c19ed
Branch: refs/heads/2.0.0.0-incubating
Commit: f05c19ed166850b5b7275cba2ce322ff380d3311
Parents: 2e1b093
Author: Paul Guo <pa...@gmail.com>
Authored: Tue Jul 12 14:12:19 2016 +0800
Committer: rlei <rl...@pivotal.io>
Committed: Tue Jul 19 10:49:42 2016 +0800
----------------------------------------------------------------------
src/test/feature/catalog/ans/boolean.ans | 297 ++++++
src/test/feature/catalog/ans/char.ans | 136 +++
src/test/feature/catalog/ans/date.ans | 1178 +++++++++++++++++++++
src/test/feature/catalog/ans/float4.ans | 247 +++++
src/test/feature/catalog/ans/float8.ans | 428 ++++++++
src/test/feature/catalog/ans/int2.ans | 236 +++++
src/test/feature/catalog/ans/int4.ans | 323 ++++++
src/test/feature/catalog/ans/int8.ans | 329 ++++++
src/test/feature/catalog/ans/money.ans | 168 +++
src/test/feature/catalog/ans/name.ans | 135 +++
src/test/feature/catalog/ans/oid.ans | 112 ++
src/test/feature/catalog/ans/text.ans | 28 +
src/test/feature/catalog/ans/time.ans | 97 ++
src/test/feature/catalog/ans/type_sanity.ans | 282 +++++
src/test/feature/catalog/ans/varchar.ans | 125 +++
src/test/feature/catalog/sql/boolean.sql | 149 +++
src/test/feature/catalog/sql/char.sql | 75 ++
src/test/feature/catalog/sql/date.sql | 271 +++++
src/test/feature/catalog/sql/float4.sql | 85 ++
src/test/feature/catalog/sql/float8.sql | 167 +++
src/test/feature/catalog/sql/int2.sql | 88 ++
src/test/feature/catalog/sql/int4.sql | 127 +++
src/test/feature/catalog/sql/int8.sql | 71 ++
src/test/feature/catalog/sql/money.sql | 68 ++
src/test/feature/catalog/sql/name.sql | 54 +
src/test/feature/catalog/sql/oid.sql | 43 +
src/test/feature/catalog/sql/text.sql | 15 +
src/test/feature/catalog/sql/time.sql | 41 +
src/test/feature/catalog/sql/type_sanity.sql | 223 ++++
src/test/feature/catalog/sql/varchar.sql | 66 ++
src/test/feature/catalog/test_type.cpp | 55 +
src/test/regress/expected/boolean.out | 289 -----
src/test/regress/expected/char.out | 122 ---
src/test/regress/expected/date.out | 1157 --------------------
src/test/regress/expected/float4.out | 241 -----
src/test/regress/expected/float8.out | 412 -------
src/test/regress/expected/int2.out | 230 ----
src/test/regress/expected/int4.out | 317 ------
src/test/regress/expected/int8.out | 325 ------
src/test/regress/expected/money.out | 158 ---
src/test/regress/expected/name.out | 126 ---
src/test/regress/expected/oid.out | 102 --
src/test/regress/expected/text.out | 25 -
src/test/regress/expected/time.out | 86 --
src/test/regress/expected/type_sanity.out | 282 -----
src/test/regress/expected/varchar.out | 111 --
src/test/regress/sql/boolean.sql | 149 ---
src/test/regress/sql/char.sql | 75 --
src/test/regress/sql/date.sql | 271 -----
src/test/regress/sql/float4.sql | 85 --
src/test/regress/sql/float8.sql | 167 ---
src/test/regress/sql/int2.sql | 88 --
src/test/regress/sql/int4.sql | 127 ---
src/test/regress/sql/int8.sql | 71 --
src/test/regress/sql/money.sql | 68 --
src/test/regress/sql/name.sql | 54 -
src/test/regress/sql/oid.sql | 43 -
src/test/regress/sql/text.sql | 15 -
src/test/regress/sql/time.sql | 41 -
src/test/regress/sql/type_sanity.sql | 223 ----
src/test/regress/sql/varchar.sql | 66 --
61 files changed, 5719 insertions(+), 5526 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/f05c19ed/src/test/feature/catalog/ans/boolean.ans
----------------------------------------------------------------------
diff --git a/src/test/feature/catalog/ans/boolean.ans b/src/test/feature/catalog/ans/boolean.ans
new file mode 100755
index 0000000..eab3cae
--- /dev/null
+++ b/src/test/feature/catalog/ans/boolean.ans
@@ -0,0 +1,297 @@
+--
+-- BOOLEAN
+--
+--
+-- sanity check - if this fails go insane!
+--
+SELECT 1 AS one;
+ one
+-----
+ 1
+(1 row)
+
+-- ******************testing built-in type bool********************
+-- check bool type-casting as well as and, or, not in qualifications--
+SELECT bool 't' AS true;
+ true
+------
+ t
+(1 row)
+
+SELECT bool 'f' AS false;
+ false
+-------
+ f
+(1 row)
+
+SELECT bool 't' or bool 'f' AS true;
+ true
+------
+ t
+(1 row)
+
+SELECT bool 't' and bool 'f' AS false;
+ false
+-------
+ f
+(1 row)
+
+SELECT not bool 'f' AS true;
+ true
+------
+ t
+(1 row)
+
+SELECT bool 't' = bool 'f' AS false;
+ false
+-------
+ f
+(1 row)
+
+SELECT bool 't' <> bool 'f' AS true;
+ true
+------
+ t
+(1 row)
+
+CREATE TABLE BOOLTBL1 (f1 bool);
+CREATE TABLE
+INSERT INTO BOOLTBL1 (f1) VALUES (bool 't');
+INSERT 0 1
+INSERT INTO BOOLTBL1 (f1) VALUES (bool 'True');
+INSERT 0 1
+INSERT INTO BOOLTBL1 (f1) VALUES (bool 'true');
+INSERT 0 1
+-- BOOLTBL1 should be full of true's at this point
+SELECT '' AS t_3, BOOLTBL1.* FROM BOOLTBL1;
+ t_3 | f1
+-----+----
+ | t
+ | t
+ | t
+(3 rows)
+
+SELECT '' AS t_3, BOOLTBL1.*
+ FROM BOOLTBL1
+ WHERE f1 = bool 'true';
+ t_3 | f1
+-----+----
+ | t
+ | t
+ | t
+(3 rows)
+
+SELECT '' AS t_3, BOOLTBL1.*
+ FROM BOOLTBL1
+ WHERE f1 <> bool 'false';
+ t_3 | f1
+-----+----
+ | t
+ | t
+ | t
+(3 rows)
+
+SELECT '' AS zero, BOOLTBL1.*
+ FROM BOOLTBL1
+ WHERE booleq(bool 'false', f1);
+ zero | f1
+------+----
+(0 rows)
+
+INSERT INTO BOOLTBL1 (f1) VALUES (bool 'f');
+INSERT 0 1
+SELECT '' AS f_1, BOOLTBL1.*
+ FROM BOOLTBL1
+ WHERE f1 = bool 'false';
+ f_1 | f1
+-----+----
+ | f
+(1 row)
+
+CREATE TABLE BOOLTBL2 (f1 bool);
+CREATE TABLE
+INSERT INTO BOOLTBL2 (f1) VALUES (bool 'f');
+INSERT 0 1
+INSERT INTO BOOLTBL2 (f1) VALUES (bool 'false');
+INSERT 0 1
+INSERT INTO BOOLTBL2 (f1) VALUES (bool 'False');
+INSERT 0 1
+INSERT INTO BOOLTBL2 (f1) VALUES (bool 'FALSE');
+INSERT 0 1
+-- This is now an invalid expression
+-- For pre-v6.3 this evaluated to false - thomas 1997-10-23
+INSERT INTO BOOLTBL2 (f1)
+ VALUES (bool 'XXX');
+psql:/tmp/TestType_boolean.sql:79: ERROR: invalid input syntax for type boolean: "XXX"
+LINE 2: VALUES (bool 'XXX');
+ ^
+-- BOOLTBL2 should be full of false's at this point
+SELECT '' AS f_4, BOOLTBL2.* FROM BOOLTBL2;
+ f_4 | f1
+-----+----
+ | f
+ | f
+ | f
+ | f
+(4 rows)
+
+SELECT '' AS tf_12, BOOLTBL1.*, BOOLTBL2.*
+ FROM BOOLTBL1, BOOLTBL2
+ WHERE BOOLTBL2.f1 <> BOOLTBL1.f1;
+ tf_12 | f1 | f1
+-------+----+----
+ | t | f
+ | t | f
+ | t | f
+ | t | f
+ | t | f
+ | t | f
+ | t | f
+ | t | f
+ | t | f
+ | t | f
+ | t | f
+ | t | f
+(12 rows)
+
+SELECT '' AS tf_12, BOOLTBL1.*, BOOLTBL2.*
+ FROM BOOLTBL1, BOOLTBL2
+ WHERE boolne(BOOLTBL2.f1,BOOLTBL1.f1);
+ tf_12 | f1 | f1
+-------+----+----
+ | t | f
+ | t | f
+ | t | f
+ | t | f
+ | t | f
+ | t | f
+ | t | f
+ | t | f
+ | t | f
+ | t | f
+ | t | f
+ | t | f
+(12 rows)
+
+SELECT '' AS ff_4, BOOLTBL1.*, BOOLTBL2.*
+ FROM BOOLTBL1, BOOLTBL2
+ WHERE BOOLTBL2.f1 = BOOLTBL1.f1 and BOOLTBL1.f1 = bool 'false' ;
+ ff_4 | f1 | f1
+------+----+----
+ | f | f
+ | f | f
+ | f | f
+ | f | f
+(4 rows)
+
+SELECT '' AS tf_12_ff_4, BOOLTBL1.*, BOOLTBL2.*
+ FROM BOOLTBL1, BOOLTBL2
+ WHERE BOOLTBL2.f1 = BOOLTBL1.f1 or BOOLTBL1.f1 = bool 'true'
+ ORDER BY BOOLTBL1.f1, BOOLTBL2.f1 ;
+ tf_12_ff_4 | f1 | f1
+------------+----+----
+ | f | f
+ | f | f
+ | f | f
+ | f | f
+ | t | f
+ | t | f
+ | t | f
+ | t | f
+ | t | f
+ | t | f
+ | t | f
+ | t | f
+ | t | f
+ | t | f
+ | t | f
+ | t | f
+(16 rows)
+
+--
+-- SQL92 syntax
+-- Try all combinations to ensure that we get nothing when we expect nothing
+-- - thomas 2000-01-04
+--
+SELECT '' AS "True", f1
+ FROM BOOLTBL1
+ WHERE f1 IS TRUE;
+ True | f1
+------+----
+ | t
+ | t
+ | t
+(3 rows)
+
+SELECT '' AS "Not False", f1
+ FROM BOOLTBL1
+ WHERE f1 IS NOT FALSE;
+ Not False | f1
+-----------+----
+ | t
+ | t
+ | t
+(3 rows)
+
+SELECT '' AS "False", f1
+ FROM BOOLTBL1
+ WHERE f1 IS FALSE;
+ False | f1
+-------+----
+ | f
+(1 row)
+
+SELECT '' AS "Not True", f1
+ FROM BOOLTBL1
+ WHERE f1 IS NOT TRUE;
+ Not True | f1
+----------+----
+ | f
+(1 row)
+
+SELECT '' AS "True", f1
+ FROM BOOLTBL2
+ WHERE f1 IS TRUE;
+ True | f1
+------+----
+(0 rows)
+
+SELECT '' AS "Not False", f1
+ FROM BOOLTBL2
+ WHERE f1 IS NOT FALSE;
+ Not False | f1
+-----------+----
+(0 rows)
+
+SELECT '' AS "False", f1
+ FROM BOOLTBL2
+ WHERE f1 IS FALSE;
+ False | f1
+-------+----
+ | f
+ | f
+ | f
+ | f
+(4 rows)
+
+SELECT '' AS "Not True", f1
+ FROM BOOLTBL2
+ WHERE f1 IS NOT TRUE;
+ Not True | f1
+----------+----
+ | f
+ | f
+ | f
+ | f
+(4 rows)
+
+--
+-- Clean up
+-- Many tables are retained by the regression test, but these do not seem
+-- particularly useful so just get rid of them for now.
+-- - thomas 1997-11-30
+--
+DROP TABLE BOOLTBL1;
+DROP TABLE
+DROP TABLE BOOLTBL2;
+DROP TABLE
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/f05c19ed/src/test/feature/catalog/ans/char.ans
----------------------------------------------------------------------
diff --git a/src/test/feature/catalog/ans/char.ans b/src/test/feature/catalog/ans/char.ans
new file mode 100755
index 0000000..39d6c98
--- /dev/null
+++ b/src/test/feature/catalog/ans/char.ans
@@ -0,0 +1,136 @@
+--
+-- CHAR
+--
+-- fixed-length by value
+-- internally passed by value if <= 4 bytes in storage
+SELECT char 'c' = char 'c' AS true;
+ true
+------
+ t
+(1 row)
+
+--
+-- Build a table for testing
+--
+CREATE TABLE CHAR_TBL(f1 char);
+CREATE TABLE
+INSERT INTO CHAR_TBL (f1) VALUES ('a');
+INSERT 0 1
+INSERT INTO CHAR_TBL (f1) VALUES ('A');
+INSERT 0 1
+-- any of the following three input formats are acceptable
+INSERT INTO CHAR_TBL (f1) VALUES ('1');
+INSERT 0 1
+INSERT INTO CHAR_TBL (f1) VALUES (2);
+INSERT 0 1
+INSERT INTO CHAR_TBL (f1) VALUES ('3');
+INSERT 0 1
+-- zero-length char
+INSERT INTO CHAR_TBL (f1) VALUES ('');
+INSERT 0 1
+-- try char's of greater than 1 length
+INSERT INTO CHAR_TBL (f1) VALUES ('cd');
+psql:/tmp/TestType_char.sql:34: ERROR: value too long for type character(1)
+INSERT INTO CHAR_TBL (f1) VALUES ('c ');
+INSERT 0 1
+SELECT '' AS seven, * FROM CHAR_TBL;
+ seven | f1
+-------+----
+ | a
+ | A
+ | 1
+ | 2
+ | 3
+ |
+ | c
+(7 rows)
+
+SELECT '' AS six, c.*
+ FROM CHAR_TBL c
+ WHERE c.f1 <> 'a';
+ six | f1
+-----+----
+ | A
+ | 1
+ | 2
+ | 3
+ |
+ | c
+(6 rows)
+
+SELECT '' AS one, c.*
+ FROM CHAR_TBL c
+ WHERE c.f1 = 'a';
+ one | f1
+-----+----
+ | a
+(1 row)
+
+SELECT '' AS five, c.*
+ FROM CHAR_TBL c
+ WHERE c.f1 < 'a';
+ five | f1
+------+----
+ | A
+ | 1
+ | 2
+ | 3
+ |
+(5 rows)
+
+SELECT '' AS six, c.*
+ FROM CHAR_TBL c
+ WHERE c.f1 <= 'a';
+ six | f1
+-----+----
+ | a
+ | A
+ | 1
+ | 2
+ | 3
+ |
+(6 rows)
+
+SELECT '' AS one, c.*
+ FROM CHAR_TBL c
+ WHERE c.f1 > 'a';
+ one | f1
+-----+----
+ | c
+(1 row)
+
+SELECT '' AS two, c.*
+ FROM CHAR_TBL c
+ WHERE c.f1 >= 'a';
+ two | f1
+-----+----
+ | a
+ | c
+(2 rows)
+
+DROP TABLE CHAR_TBL;
+DROP TABLE
+--
+-- Now test longer arrays of char
+--
+CREATE TABLE CHAR_TBL(f1 char(4));
+CREATE TABLE
+INSERT INTO CHAR_TBL (f1) VALUES ('a');
+INSERT 0 1
+INSERT INTO CHAR_TBL (f1) VALUES ('ab');
+INSERT 0 1
+INSERT INTO CHAR_TBL (f1) VALUES ('abcd');
+INSERT 0 1
+INSERT INTO CHAR_TBL (f1) VALUES ('abcde');
+psql:/tmp/TestType_char.sql:75: ERROR: value too long for type character(4)
+INSERT INTO CHAR_TBL (f1) VALUES ('abcd ');
+INSERT 0 1
+SELECT '' AS four, * FROM CHAR_TBL;
+ four | f1
+------+------
+ | a
+ | ab
+ | abcd
+ | abcd
+(4 rows)
+
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/f05c19ed/src/test/feature/catalog/ans/date.ans
----------------------------------------------------------------------
diff --git a/src/test/feature/catalog/ans/date.ans b/src/test/feature/catalog/ans/date.ans
new file mode 100755
index 0000000..1fe3ad4
--- /dev/null
+++ b/src/test/feature/catalog/ans/date.ans
@@ -0,0 +1,1178 @@
+--
+-- DATE
+--
+CREATE TABLE DATE_TBL (f1 date);
+CREATE TABLE
+INSERT INTO DATE_TBL VALUES ('1957-04-09');
+INSERT 0 1
+INSERT INTO DATE_TBL VALUES ('1957-06-13');
+INSERT 0 1
+INSERT INTO DATE_TBL VALUES ('1996-02-28');
+INSERT 0 1
+INSERT INTO DATE_TBL VALUES ('1996-02-29');
+INSERT 0 1
+INSERT INTO DATE_TBL VALUES ('1996-03-01');
+INSERT 0 1
+INSERT INTO DATE_TBL VALUES ('1996-03-02');
+INSERT 0 1
+INSERT INTO DATE_TBL VALUES ('1997-02-28');
+INSERT 0 1
+INSERT INTO DATE_TBL VALUES ('1997-02-29');
+psql:/tmp/TestType_date.sql:17: ERROR: date/time field value out of range: "1997-02-29"
+INSERT INTO DATE_TBL VALUES ('1997-03-01');
+INSERT 0 1
+INSERT INTO DATE_TBL VALUES ('1997-03-02');
+INSERT 0 1
+INSERT INTO DATE_TBL VALUES ('2000-04-01');
+INSERT 0 1
+INSERT INTO DATE_TBL VALUES ('2000-04-02');
+INSERT 0 1
+INSERT INTO DATE_TBL VALUES ('2000-04-03');
+INSERT 0 1
+INSERT INTO DATE_TBL VALUES ('2038-04-08');
+INSERT 0 1
+INSERT INTO DATE_TBL VALUES ('2039-04-09');
+INSERT 0 1
+INSERT INTO DATE_TBL VALUES ('2040-04-10');
+INSERT 0 1
+SELECT f1 AS "Fifteen" FROM DATE_TBL ORDER BY 1;
+ Fifteen
+------------
+ 04-09-1957
+ 06-13-1957
+ 02-28-1996
+ 02-29-1996
+ 03-01-1996
+ 03-02-1996
+ 02-28-1997
+ 03-01-1997
+ 03-02-1997
+ 04-01-2000
+ 04-02-2000
+ 04-03-2000
+ 04-08-2038
+ 04-09-2039
+ 04-10-2040
+(15 rows)
+
+SELECT f1 AS "Nine" FROM DATE_TBL WHERE f1 < '2000-01-01' ORDER BY 1;
+ Nine
+------------
+ 04-09-1957
+ 06-13-1957
+ 02-28-1996
+ 02-29-1996
+ 03-01-1996
+ 03-02-1996
+ 02-28-1997
+ 03-01-1997
+ 03-02-1997
+(9 rows)
+
+SELECT f1 AS "Three" FROM DATE_TBL
+ WHERE f1 BETWEEN '2000-01-01' AND '2001-01-01' ORDER BY 1;
+ Three
+------------
+ 04-01-2000
+ 04-02-2000
+ 04-03-2000
+(3 rows)
+
+--
+-- Check all the documented input formats
+--
+SET datestyle TO iso; -- display results in ISO
+SET
+SET datestyle TO ymd;
+SET
+SELECT date 'January 8, 1999';
+ date
+------------
+ 1999-01-08
+(1 row)
+
+SELECT date '1999-01-08';
+ date
+------------
+ 1999-01-08
+(1 row)
+
+SELECT date '1999-01-18';
+ date
+------------
+ 1999-01-18
+(1 row)
+
+SELECT date '1/8/1999';
+psql:/tmp/TestType_date.sql:44: ERROR: date/time field value out of range: "1/8/1999"
+LINE 1: SELECT date '1/8/1999';
+ ^
+HINT: Perhaps you need a different "datestyle" setting.
+SELECT date '1/18/1999';
+psql:/tmp/TestType_date.sql:45: ERROR: date/time field value out of range: "1/18/1999"
+LINE 1: SELECT date '1/18/1999';
+ ^
+HINT: Perhaps you need a different "datestyle" setting.
+SELECT date '18/1/1999';
+psql:/tmp/TestType_date.sql:46: ERROR: date/time field value out of range: "18/1/1999"
+LINE 1: SELECT date '18/1/1999';
+ ^
+HINT: Perhaps you need a different "datestyle" setting.
+SELECT date '01/02/03';
+ date
+------------
+ 2001-02-03
+(1 row)
+
+SELECT date '19990108';
+ date
+------------
+ 1999-01-08
+(1 row)
+
+SELECT date '990108';
+ date
+------------
+ 1999-01-08
+(1 row)
+
+SELECT date '1999.008';
+ date
+------------
+ 1999-01-08
+(1 row)
+
+SELECT date 'J2451187';
+ date
+------------
+ 1999-01-08
+(1 row)
+
+SELECT date 'January 8, 99 BC';
+psql:/tmp/TestType_date.sql:52: ERROR: date/time field value out of range: "January 8, 99 BC"
+LINE 1: SELECT date 'January 8, 99 BC';
+ ^
+HINT: Perhaps you need a different "datestyle" setting.
+SELECT date '99-Jan-08';
+ date
+------------
+ 1999-01-08
+(1 row)
+
+SELECT date '1999-Jan-08';
+ date
+------------
+ 1999-01-08
+(1 row)
+
+SELECT date '08-Jan-99';
+psql:/tmp/TestType_date.sql:56: ERROR: date/time field value out of range: "08-Jan-99"
+LINE 1: SELECT date '08-Jan-99';
+ ^
+HINT: Perhaps you need a different "datestyle" setting.
+SELECT date '08-Jan-1999';
+ date
+------------
+ 1999-01-08
+(1 row)
+
+SELECT date 'Jan-08-99';
+psql:/tmp/TestType_date.sql:58: ERROR: date/time field value out of range: "Jan-08-99"
+LINE 1: SELECT date 'Jan-08-99';
+ ^
+HINT: Perhaps you need a different "datestyle" setting.
+SELECT date 'Jan-08-1999';
+ date
+------------
+ 1999-01-08
+(1 row)
+
+SELECT date '99-08-Jan';
+psql:/tmp/TestType_date.sql:60: ERROR: invalid input syntax for type date: "99-08-Jan"
+LINE 1: SELECT date '99-08-Jan';
+ ^
+SELECT date '1999-08-Jan';
+psql:/tmp/TestType_date.sql:61: ERROR: invalid input syntax for type date: "1999-08-Jan"
+LINE 1: SELECT date '1999-08-Jan';
+ ^
+SELECT date '99 Jan 08';
+ date
+------------
+ 1999-01-08
+(1 row)
+
+SELECT date '1999 Jan 08';
+ date
+------------
+ 1999-01-08
+(1 row)
+
+SELECT date '08 Jan 99';
+psql:/tmp/TestType_date.sql:65: ERROR: date/time field value out of range: "08 Jan 99"
+LINE 1: SELECT date '08 Jan 99';
+ ^
+HINT: Perhaps you need a different "datestyle" setting.
+SELECT date '08 Jan 1999';
+ date
+------------
+ 1999-01-08
+(1 row)
+
+SELECT date 'Jan 08 99';
+psql:/tmp/TestType_date.sql:67: ERROR: date/time field value out of range: "Jan 08 99"
+LINE 1: SELECT date 'Jan 08 99';
+ ^
+HINT: Perhaps you need a different "datestyle" setting.
+SELECT date 'Jan 08 1999';
+ date
+------------
+ 1999-01-08
+(1 row)
+
+SELECT date '99 08 Jan';
+ date
+------------
+ 1999-01-08
+(1 row)
+
+SELECT date '1999 08 Jan';
+ date
+------------
+ 1999-01-08
+(1 row)
+
+SELECT date '99-01-08';
+ date
+------------
+ 1999-01-08
+(1 row)
+
+SELECT date '1999-01-08';
+ date
+------------
+ 1999-01-08
+(1 row)
+
+SELECT date '08-01-99';
+psql:/tmp/TestType_date.sql:74: ERROR: date/time field value out of range: "08-01-99"
+LINE 1: SELECT date '08-01-99';
+ ^
+HINT: Perhaps you need a different "datestyle" setting.
+SELECT date '08-01-1999';
+psql:/tmp/TestType_date.sql:75: ERROR: date/time field value out of range: "08-01-1999"
+LINE 1: SELECT date '08-01-1999';
+ ^
+HINT: Perhaps you need a different "datestyle" setting.
+SELECT date '01-08-99';
+psql:/tmp/TestType_date.sql:76: ERROR: date/time field value out of range: "01-08-99"
+LINE 1: SELECT date '01-08-99';
+ ^
+HINT: Perhaps you need a different "datestyle" setting.
+SELECT date '01-08-1999';
+psql:/tmp/TestType_date.sql:77: ERROR: date/time field value out of range: "01-08-1999"
+LINE 1: SELECT date '01-08-1999';
+ ^
+HINT: Perhaps you need a different "datestyle" setting.
+SELECT date '99-08-01';
+ date
+------------
+ 1999-08-01
+(1 row)
+
+SELECT date '1999-08-01';
+ date
+------------
+ 1999-08-01
+(1 row)
+
+SELECT date '99 01 08';
+ date
+------------
+ 1999-01-08
+(1 row)
+
+SELECT date '1999 01 08';
+ date
+------------
+ 1999-01-08
+(1 row)
+
+SELECT date '08 01 99';
+psql:/tmp/TestType_date.sql:83: ERROR: date/time field value out of range: "08 01 99"
+LINE 1: SELECT date '08 01 99';
+ ^
+HINT: Perhaps you need a different "datestyle" setting.
+SELECT date '08 01 1999';
+psql:/tmp/TestType_date.sql:84: ERROR: date/time field value out of range: "08 01 1999"
+LINE 1: SELECT date '08 01 1999';
+ ^
+HINT: Perhaps you need a different "datestyle" setting.
+SELECT date '01 08 99';
+psql:/tmp/TestType_date.sql:85: ERROR: date/time field value out of range: "01 08 99"
+LINE 1: SELECT date '01 08 99';
+ ^
+HINT: Perhaps you need a different "datestyle" setting.
+SELECT date '01 08 1999';
+psql:/tmp/TestType_date.sql:86: ERROR: date/time field value out of range: "01 08 1999"
+LINE 1: SELECT date '01 08 1999';
+ ^
+HINT: Perhaps you need a different "datestyle" setting.
+SELECT date '99 08 01';
+ date
+------------
+ 1999-08-01
+(1 row)
+
+SELECT date '1999 08 01';
+ date
+------------
+ 1999-08-01
+(1 row)
+
+SET datestyle TO dmy;
+SET
+SELECT date 'January 8, 1999';
+ date
+------------
+ 1999-01-08
+(1 row)
+
+SELECT date '1999-01-08';
+ date
+------------
+ 1999-01-08
+(1 row)
+
+SELECT date '1999-01-18';
+ date
+------------
+ 1999-01-18
+(1 row)
+
+SELECT date '1/8/1999';
+ date
+------------
+ 1999-08-01
+(1 row)
+
+SELECT date '1/18/1999';
+psql:/tmp/TestType_date.sql:96: ERROR: date/time field value out of range: "1/18/1999"
+LINE 1: SELECT date '1/18/1999';
+ ^
+HINT: Perhaps you need a different "datestyle" setting.
+SELECT date '18/1/1999';
+ date
+------------
+ 1999-01-18
+(1 row)
+
+SELECT date '01/02/03';
+ date
+------------
+ 2003-02-01
+(1 row)
+
+SELECT date '19990108';
+ date
+------------
+ 1999-01-08
+(1 row)
+
+SELECT date '990108';
+ date
+------------
+ 1999-01-08
+(1 row)
+
+SELECT date '1999.008';
+ date
+------------
+ 1999-01-08
+(1 row)
+
+SELECT date 'J2451187';
+ date
+------------
+ 1999-01-08
+(1 row)
+
+SELECT date 'January 8, 99 BC';
+ date
+---------------
+ 0099-01-08 BC
+(1 row)
+
+SELECT date '99-Jan-08';
+psql:/tmp/TestType_date.sql:105: ERROR: date/time field value out of range: "99-Jan-08"
+LINE 1: SELECT date '99-Jan-08';
+ ^
+HINT: Perhaps you need a different "datestyle" setting.
+SELECT date '1999-Jan-08';
+ date
+------------
+ 1999-01-08
+(1 row)
+
+SELECT date '08-Jan-99';
+ date
+------------
+ 1999-01-08
+(1 row)
+
+SELECT date '08-Jan-1999';
+ date
+------------
+ 1999-01-08
+(1 row)
+
+SELECT date 'Jan-08-99';
+ date
+------------
+ 1999-01-08
+(1 row)
+
+SELECT date 'Jan-08-1999';
+ date
+------------
+ 1999-01-08
+(1 row)
+
+SELECT date '99-08-Jan';
+psql:/tmp/TestType_date.sql:111: ERROR: invalid input syntax for type date: "99-08-Jan"
+LINE 1: SELECT date '99-08-Jan';
+ ^
+SELECT date '1999-08-Jan';
+psql:/tmp/TestType_date.sql:112: ERROR: invalid input syntax for type date: "1999-08-Jan"
+LINE 1: SELECT date '1999-08-Jan';
+ ^
+SELECT date '99 Jan 08';
+psql:/tmp/TestType_date.sql:114: ERROR: date/time field value out of range: "99 Jan 08"
+LINE 1: SELECT date '99 Jan 08';
+ ^
+HINT: Perhaps you need a different "datestyle" setting.
+SELECT date '1999 Jan 08';
+ date
+------------
+ 1999-01-08
+(1 row)
+
+SELECT date '08 Jan 99';
+ date
+------------
+ 1999-01-08
+(1 row)
+
+SELECT date '08 Jan 1999';
+ date
+------------
+ 1999-01-08
+(1 row)
+
+SELECT date 'Jan 08 99';
+ date
+------------
+ 1999-01-08
+(1 row)
+
+SELECT date 'Jan 08 1999';
+ date
+------------
+ 1999-01-08
+(1 row)
+
+SELECT date '99 08 Jan';
+psql:/tmp/TestType_date.sql:120: ERROR: invalid input syntax for type date: "99 08 Jan"
+LINE 1: SELECT date '99 08 Jan';
+ ^
+SELECT date '1999 08 Jan';
+ date
+------------
+ 1999-01-08
+(1 row)
+
+SELECT date '99-01-08';
+psql:/tmp/TestType_date.sql:123: ERROR: date/time field value out of range: "99-01-08"
+LINE 1: SELECT date '99-01-08';
+ ^
+HINT: Perhaps you need a different "datestyle" setting.
+SELECT date '1999-01-08';
+ date
+------------
+ 1999-01-08
+(1 row)
+
+SELECT date '08-01-99';
+ date
+------------
+ 1999-01-08
+(1 row)
+
+SELECT date '08-01-1999';
+ date
+------------
+ 1999-01-08
+(1 row)
+
+SELECT date '01-08-99';
+ date
+------------
+ 1999-08-01
+(1 row)
+
+SELECT date '01-08-1999';
+ date
+------------
+ 1999-08-01
+(1 row)
+
+SELECT date '99-08-01';
+psql:/tmp/TestType_date.sql:129: ERROR: date/time field value out of range: "99-08-01"
+LINE 1: SELECT date '99-08-01';
+ ^
+HINT: Perhaps you need a different "datestyle" setting.
+SELECT date '1999-08-01';
+ date
+------------
+ 1999-08-01
+(1 row)
+
+SELECT date '99 01 08';
+psql:/tmp/TestType_date.sql:132: ERROR: date/time field value out of range: "99 01 08"
+LINE 1: SELECT date '99 01 08';
+ ^
+HINT: Perhaps you need a different "datestyle" setting.
+SELECT date '1999 01 08';
+ date
+------------
+ 1999-01-08
+(1 row)
+
+SELECT date '08 01 99';
+ date
+------------
+ 1999-01-08
+(1 row)
+
+SELECT date '08 01 1999';
+ date
+------------
+ 1999-01-08
+(1 row)
+
+SELECT date '01 08 99';
+ date
+------------
+ 1999-08-01
+(1 row)
+
+SELECT date '01 08 1999';
+ date
+------------
+ 1999-08-01
+(1 row)
+
+SELECT date '99 08 01';
+psql:/tmp/TestType_date.sql:138: ERROR: date/time field value out of range: "99 08 01"
+LINE 1: SELECT date '99 08 01';
+ ^
+HINT: Perhaps you need a different "datestyle" setting.
+SELECT date '1999 08 01';
+ date
+------------
+ 1999-08-01
+(1 row)
+
+SET datestyle TO mdy;
+SET
+SELECT date 'January 8, 1999';
+ date
+------------
+ 1999-01-08
+(1 row)
+
+SELECT date '1999-01-08';
+ date
+------------
+ 1999-01-08
+(1 row)
+
+SELECT date '1999-01-18';
+ date
+------------
+ 1999-01-18
+(1 row)
+
+SELECT date '1/8/1999';
+ date
+------------
+ 1999-01-08
+(1 row)
+
+SELECT date '1/18/1999';
+ date
+------------
+ 1999-01-18
+(1 row)
+
+SELECT date '18/1/1999';
+psql:/tmp/TestType_date.sql:148: ERROR: date/time field value out of range: "18/1/1999"
+LINE 1: SELECT date '18/1/1999';
+ ^
+HINT: Perhaps you need a different "datestyle" setting.
+SELECT date '01/02/03';
+ date
+------------
+ 2003-01-02
+(1 row)
+
+SELECT date '19990108';
+ date
+------------
+ 1999-01-08
+(1 row)
+
+SELECT date '990108';
+ date
+------------
+ 1999-01-08
+(1 row)
+
+SELECT date '1999.008';
+ date
+------------
+ 1999-01-08
+(1 row)
+
+SELECT date 'J2451187';
+ date
+------------
+ 1999-01-08
+(1 row)
+
+SELECT date 'January 8, 99 BC';
+ date
+---------------
+ 0099-01-08 BC
+(1 row)
+
+SELECT date '99-Jan-08';
+psql:/tmp/TestType_date.sql:156: ERROR: date/time field value out of range: "99-Jan-08"
+LINE 1: SELECT date '99-Jan-08';
+ ^
+HINT: Perhaps you need a different "datestyle" setting.
+SELECT date '1999-Jan-08';
+ date
+------------
+ 1999-01-08
+(1 row)
+
+SELECT date '08-Jan-99';
+ date
+------------
+ 1999-01-08
+(1 row)
+
+SELECT date '08-Jan-1999';
+ date
+------------
+ 1999-01-08
+(1 row)
+
+SELECT date 'Jan-08-99';
+ date
+------------
+ 1999-01-08
+(1 row)
+
+SELECT date 'Jan-08-1999';
+ date
+------------
+ 1999-01-08
+(1 row)
+
+SELECT date '99-08-Jan';
+psql:/tmp/TestType_date.sql:162: ERROR: invalid input syntax for type date: "99-08-Jan"
+LINE 1: SELECT date '99-08-Jan';
+ ^
+SELECT date '1999-08-Jan';
+psql:/tmp/TestType_date.sql:163: ERROR: invalid input syntax for type date: "1999-08-Jan"
+LINE 1: SELECT date '1999-08-Jan';
+ ^
+SELECT date '99 Jan 08';
+psql:/tmp/TestType_date.sql:165: ERROR: invalid input syntax for type date: "99 Jan 08"
+LINE 1: SELECT date '99 Jan 08';
+ ^
+SELECT date '1999 Jan 08';
+ date
+------------
+ 1999-01-08
+(1 row)
+
+SELECT date '08 Jan 99';
+ date
+------------
+ 1999-01-08
+(1 row)
+
+SELECT date '08 Jan 1999';
+ date
+------------
+ 1999-01-08
+(1 row)
+
+SELECT date 'Jan 08 99';
+ date
+------------
+ 1999-01-08
+(1 row)
+
+SELECT date 'Jan 08 1999';
+ date
+------------
+ 1999-01-08
+(1 row)
+
+SELECT date '99 08 Jan';
+psql:/tmp/TestType_date.sql:171: ERROR: invalid input syntax for type date: "99 08 Jan"
+LINE 1: SELECT date '99 08 Jan';
+ ^
+SELECT date '1999 08 Jan';
+ date
+------------
+ 1999-01-08
+(1 row)
+
+SELECT date '99-01-08';
+psql:/tmp/TestType_date.sql:174: ERROR: date/time field value out of range: "99-01-08"
+LINE 1: SELECT date '99-01-08';
+ ^
+HINT: Perhaps you need a different "datestyle" setting.
+SELECT date '1999-01-08';
+ date
+------------
+ 1999-01-08
+(1 row)
+
+SELECT date '08-01-99';
+ date
+------------
+ 1999-08-01
+(1 row)
+
+SELECT date '08-01-1999';
+ date
+------------
+ 1999-08-01
+(1 row)
+
+SELECT date '01-08-99';
+ date
+------------
+ 1999-01-08
+(1 row)
+
+SELECT date '01-08-1999';
+ date
+------------
+ 1999-01-08
+(1 row)
+
+SELECT date '99-08-01';
+psql:/tmp/TestType_date.sql:180: ERROR: date/time field value out of range: "99-08-01"
+LINE 1: SELECT date '99-08-01';
+ ^
+HINT: Perhaps you need a different "datestyle" setting.
+SELECT date '1999-08-01';
+ date
+------------
+ 1999-08-01
+(1 row)
+
+SELECT date '99 01 08';
+psql:/tmp/TestType_date.sql:183: ERROR: date/time field value out of range: "99 01 08"
+LINE 1: SELECT date '99 01 08';
+ ^
+HINT: Perhaps you need a different "datestyle" setting.
+SELECT date '1999 01 08';
+ date
+------------
+ 1999-01-08
+(1 row)
+
+SELECT date '08 01 99';
+ date
+------------
+ 1999-08-01
+(1 row)
+
+SELECT date '08 01 1999';
+ date
+------------
+ 1999-08-01
+(1 row)
+
+SELECT date '01 08 99';
+ date
+------------
+ 1999-01-08
+(1 row)
+
+SELECT date '01 08 1999';
+ date
+------------
+ 1999-01-08
+(1 row)
+
+SELECT date '99 08 01';
+psql:/tmp/TestType_date.sql:189: ERROR: date/time field value out of range: "99 08 01"
+LINE 1: SELECT date '99 08 01';
+ ^
+HINT: Perhaps you need a different "datestyle" setting.
+SELECT date '1999 08 01';
+ date
+------------
+ 1999-08-01
+(1 row)
+
+RESET datestyle;
+RESET
+--
+-- Simple math
+-- Leave most of it for the horology tests
+--
+SELECT f1 - date '2000-01-01' AS "Days From 2K" FROM DATE_TBL ORDER BY 1;
+ Days From 2K
+--------------
+ -15607
+ -15542
+ -1403
+ -1402
+ -1401
+ -1400
+ -1037
+ -1036
+ -1035
+ 91
+ 92
+ 93
+ 13977
+ 14343
+ 14710
+(15 rows)
+
+SELECT f1 - date 'epoch' AS "Days From Epoch" FROM DATE_TBL ORDER BY 1;
+ Days From Epoch
+-----------------
+ -4650
+ -4585
+ 9554
+ 9555
+ 9556
+ 9557
+ 9920
+ 9921
+ 9922
+ 11048
+ 11049
+ 11050
+ 24934
+ 25300
+ 25667
+(15 rows)
+
+SELECT date 'yesterday' - date 'today' AS "One day";
+ One day
+---------
+ -1
+(1 row)
+
+SELECT date 'today' - date 'tomorrow' AS "One day";
+ One day
+---------
+ -1
+(1 row)
+
+SELECT date 'yesterday' - date 'tomorrow' AS "Two days";
+ Two days
+----------
+ -2
+(1 row)
+
+SELECT date 'tomorrow' - date 'today' AS "One day";
+ One day
+---------
+ 1
+(1 row)
+
+SELECT date 'today' - date 'yesterday' AS "One day";
+ One day
+---------
+ 1
+(1 row)
+
+SELECT date 'tomorrow' - date 'yesterday' AS "Two days";
+ Two days
+----------
+ 2
+(1 row)
+
+--
+-- test extract!
+--
+-- century
+--
+SELECT EXTRACT(CENTURY FROM DATE '0101-12-31 BC'); -- -2
+ date_part
+-----------
+ -2
+(1 row)
+
+SELECT EXTRACT(CENTURY FROM DATE '0100-12-31 BC'); -- -1
+ date_part
+-----------
+ -1
+(1 row)
+
+SELECT EXTRACT(CENTURY FROM DATE '0001-12-31 BC'); -- -1
+ date_part
+-----------
+ -1
+(1 row)
+
+SELECT EXTRACT(CENTURY FROM DATE '0001-01-01'); -- 1
+ date_part
+-----------
+ 1
+(1 row)
+
+SELECT EXTRACT(CENTURY FROM DATE '0001-01-01 AD'); -- 1
+ date_part
+-----------
+ 1
+(1 row)
+
+SELECT EXTRACT(CENTURY FROM DATE '1900-12-31'); -- 19
+ date_part
+-----------
+ 19
+(1 row)
+
+SELECT EXTRACT(CENTURY FROM DATE '1901-01-01'); -- 20
+ date_part
+-----------
+ 20
+(1 row)
+
+SELECT EXTRACT(CENTURY FROM DATE '2000-12-31'); -- 20
+ date_part
+-----------
+ 20
+(1 row)
+
+SELECT EXTRACT(CENTURY FROM DATE '2001-01-01'); -- 21
+ date_part
+-----------
+ 21
+(1 row)
+
+SELECT EXTRACT(CENTURY FROM CURRENT_DATE)>=21 AS True; -- true
+ true
+------
+ t
+(1 row)
+
+--
+-- millennium
+--
+SELECT EXTRACT(MILLENNIUM FROM DATE '0001-12-31 BC'); -- -1
+ date_part
+-----------
+ -1
+(1 row)
+
+SELECT EXTRACT(MILLENNIUM FROM DATE '0001-01-01 AD'); -- 1
+ date_part
+-----------
+ 1
+(1 row)
+
+SELECT EXTRACT(MILLENNIUM FROM DATE '1000-12-31'); -- 1
+ date_part
+-----------
+ 1
+(1 row)
+
+SELECT EXTRACT(MILLENNIUM FROM DATE '1001-01-01'); -- 2
+ date_part
+-----------
+ 2
+(1 row)
+
+SELECT EXTRACT(MILLENNIUM FROM DATE '2000-12-31'); -- 2
+ date_part
+-----------
+ 2
+(1 row)
+
+SELECT EXTRACT(MILLENNIUM FROM DATE '2001-01-01'); -- 3
+ date_part
+-----------
+ 3
+(1 row)
+
+-- next test to be fixed on the turn of the next millennium;-)
+SELECT EXTRACT(MILLENNIUM FROM CURRENT_DATE); -- 3
+ date_part
+-----------
+ 3
+(1 row)
+
+--
+-- decade
+--
+SELECT EXTRACT(DECADE FROM DATE '1994-12-25'); -- 199
+ date_part
+-----------
+ 199
+(1 row)
+
+SELECT EXTRACT(DECADE FROM DATE '0010-01-01'); -- 1
+ date_part
+-----------
+ 1
+(1 row)
+
+SELECT EXTRACT(DECADE FROM DATE '0009-12-31'); -- 0
+ date_part
+-----------
+ 0
+(1 row)
+
+SELECT EXTRACT(DECADE FROM DATE '0001-01-01 BC'); -- 0
+ date_part
+-----------
+ 0
+(1 row)
+
+SELECT EXTRACT(DECADE FROM DATE '0002-12-31 BC'); -- -1
+ date_part
+-----------
+ -1
+(1 row)
+
+SELECT EXTRACT(DECADE FROM DATE '0011-01-01 BC'); -- -1
+ date_part
+-----------
+ -1
+(1 row)
+
+SELECT EXTRACT(DECADE FROM DATE '0012-12-31 BC'); -- -2
+ date_part
+-----------
+ -2
+(1 row)
+
+--
+-- some other types:
+--
+-- on a timestamp.
+SELECT EXTRACT(CENTURY FROM NOW())>=21 AS True; -- true
+ true
+------
+ t
+(1 row)
+
+SELECT EXTRACT(CENTURY FROM TIMESTAMP '1970-03-20 04:30:00.00000'); -- 20
+ date_part
+-----------
+ 20
+(1 row)
+
+-- on an interval
+SELECT EXTRACT(CENTURY FROM INTERVAL '100 y'); -- 1
+ date_part
+-----------
+ 1
+(1 row)
+
+SELECT EXTRACT(CENTURY FROM INTERVAL '99 y'); -- 0
+ date_part
+-----------
+ 0
+(1 row)
+
+SELECT EXTRACT(CENTURY FROM INTERVAL '-99 y'); -- 0
+ date_part
+-----------
+ 0
+(1 row)
+
+SELECT EXTRACT(CENTURY FROM INTERVAL '-100 y'); -- -1
+ date_part
+-----------
+ -1
+(1 row)
+
+--
+-- test trunc function!
+--
+SELECT DATE_TRUNC('MILLENNIUM', TIMESTAMP '1970-03-20 04:30:00.00000'); -- 1001
+ date_trunc
+--------------------------
+ Thu Jan 01 00:00:00 1001
+(1 row)
+
+SELECT DATE_TRUNC('MILLENNIUM', DATE '1970-03-20'); -- 1001-01-01
+ date_trunc
+------------------------------
+ Thu Jan 01 00:00:00 1001 PST
+(1 row)
+
+SELECT DATE_TRUNC('CENTURY', TIMESTAMP '1970-03-20 04:30:00.00000'); -- 1901
+ date_trunc
+--------------------------
+ Tue Jan 01 00:00:00 1901
+(1 row)
+
+SELECT DATE_TRUNC('CENTURY', DATE '1970-03-20'); -- 1901
+ date_trunc
+------------------------------
+ Tue Jan 01 00:00:00 1901 PST
+(1 row)
+
+SELECT DATE_TRUNC('CENTURY', DATE '2004-08-10'); -- 2001-01-01
+ date_trunc
+------------------------------
+ Mon Jan 01 00:00:00 2001 PST
+(1 row)
+
+SELECT DATE_TRUNC('CENTURY', DATE '0002-02-04'); -- 0001-01-01
+ date_trunc
+------------------------------
+ Mon Jan 01 00:00:00 0001 PST
+(1 row)
+
+SELECT DATE_TRUNC('CENTURY', DATE '0055-08-10 BC'); -- 0100-01-01 BC
+ date_trunc
+---------------------------------
+ Tue Jan 01 00:00:00 0100 PST BC
+(1 row)
+
+SELECT DATE_TRUNC('DECADE', DATE '1993-12-25'); -- 1990-01-01
+ date_trunc
+------------------------------
+ Mon Jan 01 00:00:00 1990 PST
+(1 row)
+
+SELECT DATE_TRUNC('DECADE', DATE '0004-12-25'); -- 0001-01-01 BC
+ date_trunc
+---------------------------------
+ Sat Jan 01 00:00:00 0001 PST BC
+(1 row)
+
+SELECT DATE_TRUNC('DECADE', DATE '0002-12-31 BC'); -- 0011-01-01 BC
+ date_trunc
+---------------------------------
+ Mon Jan 01 00:00:00 0011 PST BC
+(1 row)
+
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/f05c19ed/src/test/feature/catalog/ans/float4.ans
----------------------------------------------------------------------
diff --git a/src/test/feature/catalog/ans/float4.ans b/src/test/feature/catalog/ans/float4.ans
new file mode 100755
index 0000000..c53059c
--- /dev/null
+++ b/src/test/feature/catalog/ans/float4.ans
@@ -0,0 +1,247 @@
+--
+-- FLOAT4
+--
+CREATE TABLE FLOAT4_TBL (f1 float4);
+CREATE TABLE
+INSERT INTO FLOAT4_TBL(f1) VALUES (' 0.0');
+INSERT 0 1
+INSERT INTO FLOAT4_TBL(f1) VALUES ('1004.30 ');
+INSERT 0 1
+INSERT INTO FLOAT4_TBL(f1) VALUES (' -34.84 ');
+INSERT 0 1
+INSERT INTO FLOAT4_TBL(f1) VALUES ('1.2345678901234e+20');
+INSERT 0 1
+INSERT INTO FLOAT4_TBL(f1) VALUES ('1.2345678901234e-20');
+INSERT 0 1
+-- test for over and under flow
+INSERT INTO FLOAT4_TBL(f1) VALUES ('10e40');
+psql:/tmp/TestType_float4.sql:17: ERROR: value out of range: overflow
+INSERT INTO FLOAT4_TBL(f1) VALUES ('-10e40');
+psql:/tmp/TestType_float4.sql:18: ERROR: value out of range: overflow
+INSERT INTO FLOAT4_TBL(f1) VALUES ('10e-40');
+INSERT 0 1
+INSERT INTO FLOAT4_TBL(f1) VALUES ('-10e-40');
+INSERT 0 1
+-- bad input
+INSERT INTO FLOAT4_TBL(f1) VALUES ('');
+psql:/tmp/TestType_float4.sql:23: ERROR: invalid input syntax for type real: ""
+INSERT INTO FLOAT4_TBL(f1) VALUES (' ');
+psql:/tmp/TestType_float4.sql:24: ERROR: invalid input syntax for type real: " "
+INSERT INTO FLOAT4_TBL(f1) VALUES ('xyz');
+psql:/tmp/TestType_float4.sql:25: ERROR: invalid input syntax for type real: "xyz"
+INSERT INTO FLOAT4_TBL(f1) VALUES ('5.0.0');
+psql:/tmp/TestType_float4.sql:26: ERROR: invalid input syntax for type real: "5.0.0"
+INSERT INTO FLOAT4_TBL(f1) VALUES ('5 . 0');
+psql:/tmp/TestType_float4.sql:27: ERROR: invalid input syntax for type real: "5 . 0"
+INSERT INTO FLOAT4_TBL(f1) VALUES ('5. 0');
+psql:/tmp/TestType_float4.sql:28: ERROR: invalid input syntax for type real: "5. 0"
+INSERT INTO FLOAT4_TBL(f1) VALUES (' - 3.0');
+psql:/tmp/TestType_float4.sql:29: ERROR: invalid input syntax for type real: " - 3.0"
+INSERT INTO FLOAT4_TBL(f1) VALUES ('123 5');
+psql:/tmp/TestType_float4.sql:30: ERROR: invalid input syntax for type real: "123 5"
+-- special inputs
+SELECT 'NaN'::float4;
+ float4
+--------
+ NaN
+(1 row)
+
+SELECT 'nan'::float4;
+ float4
+--------
+ NaN
+(1 row)
+
+SELECT ' NAN '::float4;
+ float4
+--------
+ NaN
+(1 row)
+
+SELECT 'infinity'::float4;
+ float4
+----------
+ Infinity
+(1 row)
+
+SELECT ' -INFINiTY '::float4;
+ float4
+-----------
+ -Infinity
+(1 row)
+
+-- bad special inputs
+SELECT 'N A N'::float4;
+psql:/tmp/TestType_float4.sql:39: ERROR: invalid input syntax for type real: "N A N"
+LINE 1: SELECT 'N A N'::float4;
+ ^
+SELECT 'NaN x'::float4;
+psql:/tmp/TestType_float4.sql:40: ERROR: invalid input syntax for type real: "NaN x"
+LINE 1: SELECT 'NaN x'::float4;
+ ^
+SELECT ' INFINITY x'::float4;
+psql:/tmp/TestType_float4.sql:41: ERROR: invalid input syntax for type real: " INFINITY x"
+LINE 1: SELECT ' INFINITY x'::float4;
+ ^
+SELECT 'Infinity'::float4 + 100.0;
+ ?column?
+----------
+ Infinity
+(1 row)
+
+SELECT 'Infinity'::float4 / 'Infinity'::float4;
+ ?column?
+----------
+ NaN
+(1 row)
+
+SELECT 'nan'::float4 / 'nan'::float4;
+ ?column?
+----------
+ NaN
+(1 row)
+
+SELECT '' AS five, * FROM FLOAT4_TBL ORDER BY 2;
+ five | f1
+------+-------------
+ | -34.84
+ | -1e-39
+ | 0
+ | 1e-39
+ | 1.23457e-20
+ | 1004.3
+ | 1.23457e+20
+(7 rows)
+
+SELECT '' AS four, f.* FROM FLOAT4_TBL f WHERE f.f1 <> '1004.3' ORDER BY 2;
+ four | f1
+------+-------------
+ | -34.84
+ | -1e-39
+ | 0
+ | 1e-39
+ | 1.23457e-20
+ | 1.23457e+20
+(6 rows)
+
+SELECT '' AS one, f.* FROM FLOAT4_TBL f WHERE f.f1 = '1004.3' ORDER BY 2;
+ one | f1
+-----+--------
+ | 1004.3
+(1 row)
+
+SELECT '' AS three, f.* FROM FLOAT4_TBL f WHERE '1004.3' > f.f1 ORDER BY 2;
+ three | f1
+-------+-------------
+ | -34.84
+ | -1e-39
+ | 0
+ | 1e-39
+ | 1.23457e-20
+(5 rows)
+
+SELECT '' AS three, f.* FROM FLOAT4_TBL f WHERE f.f1 < '1004.3' ORDER BY 2;
+ three | f1
+-------+-------------
+ | -34.84
+ | -1e-39
+ | 0
+ | 1e-39
+ | 1.23457e-20
+(5 rows)
+
+SELECT '' AS four, f.* FROM FLOAT4_TBL f WHERE '1004.3' >= f.f1 ORDER BY 2;
+ four | f1
+------+-------------
+ | -34.84
+ | -1e-39
+ | 0
+ | 1e-39
+ | 1.23457e-20
+ | 1004.3
+(6 rows)
+
+SELECT '' AS four, f.* FROM FLOAT4_TBL f WHERE f.f1 <= '1004.3' ORDER BY 2;
+ four | f1
+------+-------------
+ | -34.84
+ | -1e-39
+ | 0
+ | 1e-39
+ | 1.23457e-20
+ | 1004.3
+(6 rows)
+
+SELECT '' AS three, f.f1, f.f1 * '-10' AS x FROM FLOAT4_TBL f
+ WHERE f.f1 > '0.0' ORDER BY 2;
+ three | f1 | x
+-------+-------------+--------------
+ | 1e-39 | -1e-38
+ | 1.23457e-20 | -1.23457e-19
+ | 1004.3 | -10043
+ | 1.23457e+20 | -1.23457e+21
+(4 rows)
+
+SELECT '' AS three, f.f1, f.f1 + '-10' AS x FROM FLOAT4_TBL f
+ WHERE f.f1 > '0.0' ORDER BY 2;
+ three | f1 | x
+-------+-------------+-------------
+ | 1e-39 | -10
+ | 1.23457e-20 | -10
+ | 1004.3 | 994.3
+ | 1.23457e+20 | 1.23457e+20
+(4 rows)
+
+SELECT '' AS three, f.f1, f.f1 / '-10' AS x FROM FLOAT4_TBL f
+ WHERE f.f1 > '0.0' ORDER BY 2;
+ three | f1 | x
+-------+-------------+--------------
+ | 1e-39 | -9.99995e-41
+ | 1.23457e-20 | -1.23457e-21
+ | 1004.3 | -100.43
+ | 1.23457e+20 | -1.23457e+19
+(4 rows)
+
+SELECT '' AS three, f.f1, f.f1 - '-10' AS x FROM FLOAT4_TBL f
+ WHERE f.f1 > '0.0' ORDER BY 2;
+ three | f1 | x
+-------+-------------+-------------
+ | 1e-39 | 10
+ | 1.23457e-20 | 10
+ | 1004.3 | 1014.3
+ | 1.23457e+20 | 1.23457e+20
+(4 rows)
+
+-- test divide by zero
+SELECT '' AS bad, f.f1 / '0.0' from FLOAT4_TBL f;
+psql:/tmp/TestType_float4.sql:75: ERROR: division by zero
+SELECT '' AS five, * FROM FLOAT4_TBL ORDER BY 2;
+ five | f1
+------+-------------
+ | -34.84
+ | -1e-39
+ | 0
+ | 1e-39
+ | 1.23457e-20
+ | 1004.3
+ | 1.23457e+20
+(7 rows)
+
+-- test the unary float4abs operator
+SELECT '' AS five, f.f1, @f.f1 AS abs_f1 FROM FLOAT4_TBL f ORDER BY 2;
+ five | f1 | abs_f1
+------+-------------+-------------
+ | -34.84 | 34.84
+ | -1e-39 | 1e-39
+ | 0 | 0
+ | 1e-39 | 1e-39
+ | 1.23457e-20 | 1.23457e-20
+ | 1004.3 | 1004.3
+ | 1.23457e+20 | 1.23457e+20
+(7 rows)
+
+-- MPP doesn't support this yet.
+--UPDATE FLOAT4_TBL
+-- SET f1 = FLOAT4_TBL.f1 * '-1'
+-- WHERE FLOAT4_TBL.f1 > '0.0';
+--SELECT '' AS five, * FROM FLOAT4_TBL ORDER BY 2;
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/f05c19ed/src/test/feature/catalog/ans/float8.ans
----------------------------------------------------------------------
diff --git a/src/test/feature/catalog/ans/float8.ans b/src/test/feature/catalog/ans/float8.ans
new file mode 100755
index 0000000..a1c6dab
--- /dev/null
+++ b/src/test/feature/catalog/ans/float8.ans
@@ -0,0 +1,428 @@
+--
+-- FLOAT8
+--
+CREATE TABLE FLOAT8_TBL(i INT DEFAULT 1, f1 float8);
+CREATE TABLE
+INSERT INTO FLOAT8_TBL(f1) VALUES (' 0.0 ');
+INSERT 0 1
+INSERT INTO FLOAT8_TBL(f1) VALUES ('1004.30 ');
+INSERT 0 1
+INSERT INTO FLOAT8_TBL(f1) VALUES (' -34.84');
+INSERT 0 1
+INSERT INTO FLOAT8_TBL(f1) VALUES ('1.2345678901234e+200');
+INSERT 0 1
+INSERT INTO FLOAT8_TBL(f1) VALUES ('1.2345678901234e-200');
+INSERT 0 1
+-- test for underflow and overflow handling
+SELECT '10e400'::float8;
+psql:/tmp/TestType_float8.sql:17: ERROR: "10e400" is out of range for type double precision
+LINE 1: SELECT '10e400'::float8;
+ ^
+SELECT '-10e400'::float8;
+psql:/tmp/TestType_float8.sql:18: ERROR: "-10e400" is out of range for type double precision
+LINE 1: SELECT '-10e400'::float8;
+ ^
+SELECT '10e-400'::float8;
+psql:/tmp/TestType_float8.sql:19: ERROR: "10e-400" is out of range for type double precision
+LINE 1: SELECT '10e-400'::float8;
+ ^
+SELECT '-10e-400'::float8;
+psql:/tmp/TestType_float8.sql:20: ERROR: "-10e-400" is out of range for type double precision
+LINE 1: SELECT '-10e-400'::float8;
+ ^
+-- bad input
+INSERT INTO FLOAT8_TBL(f1) VALUES ('');
+psql:/tmp/TestType_float8.sql:23: ERROR: invalid input syntax for type double precision: ""
+INSERT INTO FLOAT8_TBL(f1) VALUES (' ');
+psql:/tmp/TestType_float8.sql:24: ERROR: invalid input syntax for type double precision: " "
+INSERT INTO FLOAT8_TBL(f1) VALUES ('xyz');
+psql:/tmp/TestType_float8.sql:25: ERROR: invalid input syntax for type double precision: "xyz"
+INSERT INTO FLOAT8_TBL(f1) VALUES ('5.0.0');
+psql:/tmp/TestType_float8.sql:26: ERROR: invalid input syntax for type double precision: "5.0.0"
+INSERT INTO FLOAT8_TBL(f1) VALUES ('5 . 0');
+psql:/tmp/TestType_float8.sql:27: ERROR: invalid input syntax for type double precision: "5 . 0"
+INSERT INTO FLOAT8_TBL(f1) VALUES ('5. 0');
+psql:/tmp/TestType_float8.sql:28: ERROR: invalid input syntax for type double precision: "5. 0"
+INSERT INTO FLOAT8_TBL(f1) VALUES (' - 3');
+psql:/tmp/TestType_float8.sql:29: ERROR: invalid input syntax for type double precision: " - 3"
+INSERT INTO FLOAT8_TBL(f1) VALUES ('123 5');
+psql:/tmp/TestType_float8.sql:30: ERROR: invalid input syntax for type double precision: "123 5"
+-- special inputs
+SELECT 'NaN'::float8;
+ float8
+--------
+ NaN
+(1 row)
+
+SELECT 'nan'::float8;
+ float8
+--------
+ NaN
+(1 row)
+
+SELECT ' NAN '::float8;
+ float8
+--------
+ NaN
+(1 row)
+
+SELECT 'infinity'::float8;
+ float8
+----------
+ Infinity
+(1 row)
+
+SELECT ' -INFINiTY '::float8;
+ float8
+-----------
+ -Infinity
+(1 row)
+
+-- bad special inputs
+SELECT 'N A N'::float8;
+psql:/tmp/TestType_float8.sql:39: ERROR: invalid input syntax for type double precision: "N A N"
+LINE 1: SELECT 'N A N'::float8;
+ ^
+SELECT 'NaN x'::float8;
+psql:/tmp/TestType_float8.sql:40: ERROR: invalid input syntax for type double precision: "NaN x"
+LINE 1: SELECT 'NaN x'::float8;
+ ^
+SELECT ' INFINITY x'::float8;
+psql:/tmp/TestType_float8.sql:41: ERROR: invalid input syntax for type double precision: " INFINITY x"
+LINE 1: SELECT ' INFINITY x'::float8;
+ ^
+SELECT 'Infinity'::float8 + 100.0;
+ ?column?
+----------
+ Infinity
+(1 row)
+
+SELECT 'Infinity'::float8 / 'Infinity'::float8;
+ ?column?
+----------
+ NaN
+(1 row)
+
+SELECT 'nan'::float8 / 'nan'::float8;
+ ?column?
+----------
+ NaN
+(1 row)
+
+SELECT '' AS five, f1 FROM FLOAT8_TBL ORDER BY 2;
+ five | f1
+------+----------------------
+ | -34.84
+ | 0
+ | 1.2345678901234e-200
+ | 1004.3
+ | 1.2345678901234e+200
+(5 rows)
+
+SELECT '' AS four, f.f1 FROM FLOAT8_TBL f WHERE f.f1 <> '1004.3' ORDER BY 2;
+ four | f1
+------+----------------------
+ | -34.84
+ | 0
+ | 1.2345678901234e-200
+ | 1.2345678901234e+200
+(4 rows)
+
+SELECT '' AS one, f.f1 FROM FLOAT8_TBL f WHERE f.f1 = '1004.3' ORDER BY 2;
+ one | f1
+-----+--------
+ | 1004.3
+(1 row)
+
+SELECT '' AS three, f.f1 FROM FLOAT8_TBL f WHERE '1004.3' > f.f1 ORDER BY 2;
+ three | f1
+-------+----------------------
+ | -34.84
+ | 0
+ | 1.2345678901234e-200
+(3 rows)
+
+SELECT '' AS three, f.f1 FROM FLOAT8_TBL f WHERE f.f1 < '1004.3' ORDER BY 2;
+ three | f1
+-------+----------------------
+ | -34.84
+ | 0
+ | 1.2345678901234e-200
+(3 rows)
+
+SELECT '' AS four, f.f1 FROM FLOAT8_TBL f WHERE '1004.3' >= f.f1 ORDER BY 2;
+ four | f1
+------+----------------------
+ | -34.84
+ | 0
+ | 1.2345678901234e-200
+ | 1004.3
+(4 rows)
+
+SELECT '' AS four, f.f1 FROM FLOAT8_TBL f WHERE f.f1 <= '1004.3' ORDER BY 2;
+ four | f1
+------+----------------------
+ | -34.84
+ | 0
+ | 1.2345678901234e-200
+ | 1004.3
+(4 rows)
+
+SELECT '' AS three, f.f1, f.f1 * '-10' AS x
+ FROM FLOAT8_TBL f
+ WHERE f.f1 > '0.0' ORDER BY 2;
+ three | f1 | x
+-------+----------------------+-----------------------
+ | 1.2345678901234e-200 | -1.2345678901234e-199
+ | 1004.3 | -10043
+ | 1.2345678901234e+200 | -1.2345678901234e+201
+(3 rows)
+
+SELECT '' AS three, f.f1, f.f1 + '-10' AS x
+ FROM FLOAT8_TBL f
+ WHERE f.f1 > '0.0' ORDER BY 2;
+ three | f1 | x
+-------+----------------------+----------------------
+ | 1.2345678901234e-200 | -10
+ | 1004.3 | 994.3
+ | 1.2345678901234e+200 | 1.2345678901234e+200
+(3 rows)
+
+SELECT '' AS three, f.f1, f.f1 / '-10' AS x
+ FROM FLOAT8_TBL f
+ WHERE f.f1 > '0.0' ORDER BY 2;
+ three | f1 | x
+-------+----------------------+-----------------------
+ | 1.2345678901234e-200 | -1.2345678901234e-201
+ | 1004.3 | -100.43
+ | 1.2345678901234e+200 | -1.2345678901234e+199
+(3 rows)
+
+SELECT '' AS three, f.f1, f.f1 - '-10' AS x
+ FROM FLOAT8_TBL f
+ WHERE f.f1 > '0.0' ORDER BY 2;
+ three | f1 | x
+-------+----------------------+----------------------
+ | 1.2345678901234e-200 | 10
+ | 1004.3 | 1014.3
+ | 1.2345678901234e+200 | 1.2345678901234e+200
+(3 rows)
+
+SELECT '' AS one, f.f1 ^ '2.0' AS square_f1
+ FROM FLOAT8_TBL f where f.f1 = '1004.3';
+ one | square_f1
+-----+------------
+ | 1008618.49
+(1 row)
+
+-- absolute value
+SELECT '' AS five, f.f1, @f.f1 AS abs_f1
+ FROM FLOAT8_TBL f ORDER BY 2;
+ five | f1 | abs_f1
+------+----------------------+----------------------
+ | -34.84 | 34.84
+ | 0 | 0
+ | 1.2345678901234e-200 | 1.2345678901234e-200
+ | 1004.3 | 1004.3
+ | 1.2345678901234e+200 | 1.2345678901234e+200
+(5 rows)
+
+-- truncate
+SELECT '' AS five, f.f1, trunc(f.f1) AS trunc_f1
+ FROM FLOAT8_TBL f ORDER BY 2;
+ five | f1 | trunc_f1
+------+----------------------+----------------------
+ | -34.84 | -34
+ | 0 | 0
+ | 1.2345678901234e-200 | 0
+ | 1004.3 | 1004
+ | 1.2345678901234e+200 | 1.2345678901234e+200
+(5 rows)
+
+-- round
+SELECT '' AS five, f.f1, round(f.f1) AS round_f1
+ FROM FLOAT8_TBL f ORDER BY 2;
+ five | f1 | round_f1
+------+----------------------+----------------------
+ | -34.84 | -35
+ | 0 | 0
+ | 1.2345678901234e-200 | 0
+ | 1004.3 | 1004
+ | 1.2345678901234e+200 | 1.2345678901234e+200
+(5 rows)
+
+-- ceil / ceiling
+select ceil(f1) as ceil_f1 from float8_tbl f ORDER BY 1;
+ ceil_f1
+----------------------
+ -34
+ 0
+ 1
+ 1005
+ 1.2345678901234e+200
+(5 rows)
+
+select ceiling(f1) as ceiling_f1 from float8_tbl f ORDER BY 1;
+ ceiling_f1
+----------------------
+ -34
+ 0
+ 1
+ 1005
+ 1.2345678901234e+200
+(5 rows)
+
+-- floor
+select floor(f1) as floor_f1 from float8_tbl f ORDER BY 1;
+ floor_f1
+----------------------
+ -35
+ 0
+ 0
+ 1004
+ 1.2345678901234e+200
+(5 rows)
+
+-- sign
+select sign(f1) as sign_f1 from float8_tbl f ORDER BY 1;
+ sign_f1
+---------
+ -1
+ 0
+ 1
+ 1
+ 1
+(5 rows)
+
+-- square root
+SELECT sqrt(float8 '64') AS eight;
+ eight
+-------
+ 8
+(1 row)
+
+SELECT |/ float8 '64' AS eight;
+ eight
+-------
+ 8
+(1 row)
+
+SELECT '' AS three, f.f1, |/f.f1 AS sqrt_f1
+ FROM FLOAT8_TBL f
+ WHERE f.f1 > '0.0' ORDER BY 2;
+ three | f1 | sqrt_f1
+-------+----------------------+-----------------------
+ | 1.2345678901234e-200 | 1.11111110611109e-100
+ | 1004.3 | 31.6906926399535
+ | 1.2345678901234e+200 | 1.11111110611109e+100
+(3 rows)
+
+-- power
+SELECT power(float8 '144', float8 '0.5');
+ power
+-------
+ 12
+(1 row)
+
+-- take exp of ln(f.f1)
+SELECT '' AS three, f.f1, exp(ln(f.f1)) AS exp_ln_f1
+ FROM FLOAT8_TBL f
+ WHERE f.f1 > '0.0' ORDER BY 2;
+ three | f1 | exp_ln_f1
+-------+----------------------+-----------------------
+ | 1.2345678901234e-200 | 1.23456789012339e-200
+ | 1004.3 | 1004.3
+ | 1.2345678901234e+200 | 1.23456789012338e+200
+(3 rows)
+
+-- cube root
+SELECT ||/ float8 '27' AS three;
+ three
+-------
+ 3
+(1 row)
+
+SELECT '' AS five, f.f1, ||/f.f1 AS cbrt_f1 FROM FLOAT8_TBL f ORDER BY 2;
+ five | f1 | cbrt_f1
+------+----------------------+----------------------
+ | -34.84 | -3.26607421344208
+ | 0 | 0
+ | 1.2345678901234e-200 | 2.3112042409018e-67
+ | 1004.3 | 10.014312837827
+ | 1.2345678901234e+200 | 4.97933859234765e+66
+(5 rows)
+
+SELECT '' AS five, f1 FROM FLOAT8_TBL ORDER BY 2;
+ five | f1
+------+----------------------
+ | -34.84
+ | 0
+ | 1.2345678901234e-200
+ | 1004.3
+ | 1.2345678901234e+200
+(5 rows)
+
+UPDATE FLOAT8_TBL
+ SET f1 = FLOAT8_TBL.f1 * '-1'
+ WHERE FLOAT8_TBL.f1 > '0.0';
+psql:/tmp/TestType_float8.sql:129: ERROR: Update append-only table statement not supported yet
+SELECT '' AS bad, f.f1 * '1e200' from FLOAT8_TBL f;
+psql:/tmp/TestType_float8.sql:131: ERROR: value out of range: overflow
+SELECT '' AS bad, f.f1 ^ '1e200' from FLOAT8_TBL f;
+psql:/tmp/TestType_float8.sql:133: ERROR: value out of range: overflow
+SELECT '' AS bad, ln(f.f1) from FLOAT8_TBL f where f.f1 = '0.0' ;
+psql:/tmp/TestType_float8.sql:135: ERROR: cannot take logarithm of zero
+SELECT '' AS bad, ln(f.f1) from FLOAT8_TBL f where f.f1 < '0.0' ;
+psql:/tmp/TestType_float8.sql:137: ERROR: cannot take logarithm of a negative number
+SELECT '' AS bad, exp(f.f1) from FLOAT8_TBL f;
+psql:/tmp/TestType_float8.sql:139: ERROR: value out of range: overflow
+SELECT '' AS bad, f.f1 / '0.0' from FLOAT8_TBL f;
+psql:/tmp/TestType_float8.sql:141: ERROR: division by zero
+SELECT '' AS five, f1 FROM FLOAT8_TBL ORDER BY 2;
+ five | f1
+------+----------------------
+ | -34.84
+ | 0
+ | 1.2345678901234e-200
+ | 1004.3
+ | 1.2345678901234e+200
+(5 rows)
+
+-- test for over- and underflow
+INSERT INTO FLOAT8_TBL(f1) VALUES ('10e400');
+psql:/tmp/TestType_float8.sql:146: ERROR: "10e400" is out of range for type double precision
+INSERT INTO FLOAT8_TBL(f1) VALUES ('-10e400');
+psql:/tmp/TestType_float8.sql:148: ERROR: "-10e400" is out of range for type double precision
+INSERT INTO FLOAT8_TBL(f1) VALUES ('10e-400');
+psql:/tmp/TestType_float8.sql:150: ERROR: "10e-400" is out of range for type double precision
+INSERT INTO FLOAT8_TBL(f1) VALUES ('-10e-400');
+psql:/tmp/TestType_float8.sql:152: ERROR: "-10e-400" is out of range for type double precision
+-- maintain external table consistency across platforms
+-- delete all values and reinsert well-behaved ones
+DELETE FROM FLOAT8_TBL;
+psql:/tmp/TestType_float8.sql:157: ERROR: Delete append-only table statement not supported yet
+INSERT INTO FLOAT8_TBL(f1) VALUES ('0.0');
+INSERT 0 1
+INSERT INTO FLOAT8_TBL(f1) VALUES ('-34.84');
+INSERT 0 1
+INSERT INTO FLOAT8_TBL(f1) VALUES ('-1004.30');
+INSERT 0 1
+INSERT INTO FLOAT8_TBL(f1) VALUES ('-1.2345678901234e+200');
+INSERT 0 1
+INSERT INTO FLOAT8_TBL(f1) VALUES ('-1.2345678901234e-200');
+INSERT 0 1
+SELECT '' AS five, f1 FROM FLOAT8_TBL ORDER BY 2;
+ five | f1
+------+-----------------------
+ | -1.2345678901234e+200
+ | -1004.3
+ | -34.84
+ | -34.84
+ | -1.2345678901234e-200
+ | 0
+ | 0
+ | 1.2345678901234e-200
+ | 1004.3
+ | 1.2345678901234e+200
+(10 rows)
+
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/f05c19ed/src/test/feature/catalog/ans/int2.ans
----------------------------------------------------------------------
diff --git a/src/test/feature/catalog/ans/int2.ans b/src/test/feature/catalog/ans/int2.ans
new file mode 100755
index 0000000..cf9dc07
--- /dev/null
+++ b/src/test/feature/catalog/ans/int2.ans
@@ -0,0 +1,236 @@
+--
+-- INT2
+-- NOTE: int2 operators never check for over/underflow!
+-- Some of these answers are consequently numerically incorrect.
+--
+CREATE TABLE INT2_TBL(f1 int2);
+CREATE TABLE
+INSERT INTO INT2_TBL(f1) VALUES ('0 ');
+INSERT 0 1
+INSERT INTO INT2_TBL(f1) VALUES (' 1234 ');
+INSERT 0 1
+INSERT INTO INT2_TBL(f1) VALUES (' -1234');
+INSERT 0 1
+INSERT INTO INT2_TBL(f1) VALUES ('34.5');
+psql:/tmp/TestType_int2.sql:18: ERROR: invalid input syntax for integer: "34.5"
+-- largest and smallest values
+INSERT INTO INT2_TBL(f1) VALUES ('32767');
+INSERT 0 1
+INSERT INTO INT2_TBL(f1) VALUES ('-32767');
+INSERT 0 1
+-- bad input values -- should give errors
+INSERT INTO INT2_TBL(f1) VALUES ('100000');
+psql:/tmp/TestType_int2.sql:26: ERROR: value "100000" is out of range for type smallint
+INSERT INTO INT2_TBL(f1) VALUES ('asdf');
+psql:/tmp/TestType_int2.sql:27: ERROR: invalid input syntax for integer: "asdf"
+INSERT INTO INT2_TBL(f1) VALUES (' ');
+psql:/tmp/TestType_int2.sql:28: ERROR: invalid input syntax for integer: " "
+INSERT INTO INT2_TBL(f1) VALUES ('- 1234');
+psql:/tmp/TestType_int2.sql:29: ERROR: invalid input syntax for integer: "- 1234"
+INSERT INTO INT2_TBL(f1) VALUES ('4 444');
+psql:/tmp/TestType_int2.sql:30: ERROR: invalid input syntax for integer: "4 444"
+INSERT INTO INT2_TBL(f1) VALUES ('123 dt');
+psql:/tmp/TestType_int2.sql:31: ERROR: invalid input syntax for integer: "123 dt"
+INSERT INTO INT2_TBL(f1) VALUES ('');
+psql:/tmp/TestType_int2.sql:32: ERROR: invalid input syntax for integer: ""
+SELECT '' AS five, * FROM INT2_TBL order by f1;
+ five | f1
+------+--------
+ | -32767
+ | -1234
+ | 0
+ | 1234
+ | 32767
+(5 rows)
+
+SELECT '' AS four, i.* FROM INT2_TBL i WHERE i.f1 <> int2 '0' order by f1;
+ four | f1
+------+--------
+ | -32767
+ | -1234
+ | 1234
+ | 32767
+(4 rows)
+
+SELECT '' AS four, i.* FROM INT2_TBL i WHERE i.f1 <> int4 '0' order by f1;
+ four | f1
+------+--------
+ | -32767
+ | -1234
+ | 1234
+ | 32767
+(4 rows)
+
+SELECT '' AS one, i.* FROM INT2_TBL i WHERE i.f1 = int2 '0' order by f1;
+ one | f1
+-----+----
+ | 0
+(1 row)
+
+SELECT '' AS one, i.* FROM INT2_TBL i WHERE i.f1 = int4 '0' order by f1;
+ one | f1
+-----+----
+ | 0
+(1 row)
+
+SELECT '' AS two, i.* FROM INT2_TBL i WHERE i.f1 < int2 '0' order by f1;
+ two | f1
+-----+--------
+ | -32767
+ | -1234
+(2 rows)
+
+SELECT '' AS two, i.* FROM INT2_TBL i WHERE i.f1 < int4 '0' order by f1;
+ two | f1
+-----+--------
+ | -32767
+ | -1234
+(2 rows)
+
+SELECT '' AS three, i.* FROM INT2_TBL i WHERE i.f1 <= int2 '0' order by f1;
+ three | f1
+-------+--------
+ | -32767
+ | -1234
+ | 0
+(3 rows)
+
+SELECT '' AS three, i.* FROM INT2_TBL i WHERE i.f1 <= int4 '0' order by f1;
+ three | f1
+-------+--------
+ | -32767
+ | -1234
+ | 0
+(3 rows)
+
+SELECT '' AS two, i.* FROM INT2_TBL i WHERE i.f1 > int2 '0' order by f1;
+ two | f1
+-----+-------
+ | 1234
+ | 32767
+(2 rows)
+
+SELECT '' AS two, i.* FROM INT2_TBL i WHERE i.f1 > int4 '0' order by f1;
+ two | f1
+-----+-------
+ | 1234
+ | 32767
+(2 rows)
+
+SELECT '' AS three, i.* FROM INT2_TBL i WHERE i.f1 >= int2 '0' order by f1;
+ three | f1
+-------+-------
+ | 0
+ | 1234
+ | 32767
+(3 rows)
+
+SELECT '' AS three, i.* FROM INT2_TBL i WHERE i.f1 >= int4 '0' order by f1;
+ three | f1
+-------+-------
+ | 0
+ | 1234
+ | 32767
+(3 rows)
+
+-- positive odds
+SELECT '' AS one, i.* FROM INT2_TBL i WHERE (i.f1 % int2 '2') = int2 '1' order by f1;
+ one | f1
+-----+-------
+ | 32767
+(1 row)
+
+-- any evens
+SELECT '' AS three, i.* FROM INT2_TBL i WHERE (i.f1 % int4 '2') = int2 '0' order by f1;
+ three | f1
+-------+-------
+ | -1234
+ | 0
+ | 1234
+(3 rows)
+
+SELECT '' AS five, i.f1, i.f1 * int2 '2' AS x FROM INT2_TBL i order by f1;
+psql:/tmp/TestType_int2.sql:67: ERROR: smallint out of range
+SELECT '' AS five, i.f1, i.f1 * int2 '2' AS x FROM INT2_TBL i
+WHERE abs(f1) < 16384 order by f1;
+ five | f1 | x
+------+-------+-------
+ | -1234 | -2468
+ | 0 | 0
+ | 1234 | 2468
+(3 rows)
+
+SELECT '' AS five, i.f1, i.f1 * int4 '2' AS x FROM INT2_TBL i order by f1;
+ five | f1 | x
+------+--------+--------
+ | -32767 | -65534
+ | -1234 | -2468
+ | 0 | 0
+ | 1234 | 2468
+ | 32767 | 65534
+(5 rows)
+
+SELECT '' AS five, i.f1, i.f1 + int2 '2' AS x FROM INT2_TBL i order by f1;
+psql:/tmp/TestType_int2.sql:74: ERROR: smallint out of range
+SELECT '' AS five, i.f1, i.f1 + int2 '2' AS x FROM INT2_TBL i
+WHERE f1 < 32766 order by f1;
+ five | f1 | x
+------+--------+--------
+ | -32767 | -32765
+ | -1234 | -1232
+ | 0 | 2
+ | 1234 | 1236
+(4 rows)
+
+SELECT '' AS five, i.f1, i.f1 + int4 '2' AS x FROM INT2_TBL i order by f1;
+ five | f1 | x
+------+--------+--------
+ | -32767 | -32765
+ | -1234 | -1232
+ | 0 | 2
+ | 1234 | 1236
+ | 32767 | 32769
+(5 rows)
+
+SELECT '' AS five, i.f1, i.f1 - int2 '2' AS x FROM INT2_TBL i order by f1;
+psql:/tmp/TestType_int2.sql:81: ERROR: smallint out of range
+SELECT '' AS five, i.f1, i.f1 - int2 '2' AS x FROM INT2_TBL i
+WHERE f1 > -32767 order by f1;
+ five | f1 | x
+------+-------+-------
+ | -1234 | -1236
+ | 0 | -2
+ | 1234 | 1232
+ | 32767 | 32765
+(4 rows)
+
+SELECT '' AS five, i.f1, i.f1 - int4 '2' AS x FROM INT2_TBL i order by f1;
+ five | f1 | x
+------+--------+--------
+ | -32767 | -32769
+ | -1234 | -1236
+ | 0 | -2
+ | 1234 | 1232
+ | 32767 | 32765
+(5 rows)
+
+SELECT '' AS five, i.f1, i.f1 / int2 '2' AS x FROM INT2_TBL i order by f1;
+ five | f1 | x
+------+--------+--------
+ | -32767 | -16383
+ | -1234 | -617
+ | 0 | 0
+ | 1234 | 617
+ | 32767 | 16383
+(5 rows)
+
+SELECT '' AS five, i.f1, i.f1 / int4 '2' AS x FROM INT2_TBL i order by f1;
+ five | f1 | x
+------+--------+--------
+ | -32767 | -16383
+ | -1234 | -617
+ | 0 | 0
+ | 1234 | 617
+ | 32767 | 16383
+(5 rows)
+
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/f05c19ed/src/test/feature/catalog/ans/int4.ans
----------------------------------------------------------------------
diff --git a/src/test/feature/catalog/ans/int4.ans b/src/test/feature/catalog/ans/int4.ans
new file mode 100755
index 0000000..fde23db
--- /dev/null
+++ b/src/test/feature/catalog/ans/int4.ans
@@ -0,0 +1,323 @@
+--
+-- INT4
+-- WARNING: int4 operators never check for over/underflow!
+-- Some of these answers are consequently numerically incorrect.
+--
+CREATE TABLE INT4_TBL(f1 int4);
+CREATE TABLE
+INSERT INTO INT4_TBL(f1) VALUES (' 0 ');
+INSERT 0 1
+INSERT INTO INT4_TBL(f1) VALUES ('123456 ');
+INSERT 0 1
+INSERT INTO INT4_TBL(f1) VALUES (' -123456');
+INSERT 0 1
+INSERT INTO INT4_TBL(f1) VALUES ('34.5');
+psql:/tmp/TestType_int4.sql:18: ERROR: invalid input syntax for integer: "34.5"
+-- largest and smallest values
+INSERT INTO INT4_TBL(f1) VALUES ('2147483647');
+INSERT 0 1
+INSERT INTO INT4_TBL(f1) VALUES ('-2147483647');
+INSERT 0 1
+-- bad input values -- should give errors
+INSERT INTO INT4_TBL(f1) VALUES ('1000000000000');
+psql:/tmp/TestType_int4.sql:26: ERROR: value "1000000000000" is out of range for type integer
+INSERT INTO INT4_TBL(f1) VALUES ('asdf');
+psql:/tmp/TestType_int4.sql:27: ERROR: invalid input syntax for integer: "asdf"
+INSERT INTO INT4_TBL(f1) VALUES (' ');
+psql:/tmp/TestType_int4.sql:28: ERROR: invalid input syntax for integer: " "
+INSERT INTO INT4_TBL(f1) VALUES (' asdf ');
+psql:/tmp/TestType_int4.sql:29: ERROR: invalid input syntax for integer: " asdf "
+INSERT INTO INT4_TBL(f1) VALUES ('- 1234');
+psql:/tmp/TestType_int4.sql:30: ERROR: invalid input syntax for integer: "- 1234"
+INSERT INTO INT4_TBL(f1) VALUES ('123 5');
+psql:/tmp/TestType_int4.sql:31: ERROR: invalid input syntax for integer: "123 5"
+INSERT INTO INT4_TBL(f1) VALUES ('');
+psql:/tmp/TestType_int4.sql:32: ERROR: invalid input syntax for integer: ""
+SELECT '' AS five, * FROM INT4_TBL order by f1;
+ five | f1
+------+-------------
+ | -2147483647
+ | -123456
+ | 0
+ | 123456
+ | 2147483647
+(5 rows)
+
+SELECT '' AS four, i.* FROM INT4_TBL i WHERE i.f1 <> int2 '0' order by f1;
+ four | f1
+------+-------------
+ | -2147483647
+ | -123456
+ | 123456
+ | 2147483647
+(4 rows)
+
+SELECT '' AS four, i.* FROM INT4_TBL i WHERE i.f1 <> int4 '0' order by f1;
+ four | f1
+------+-------------
+ | -2147483647
+ | -123456
+ | 123456
+ | 2147483647
+(4 rows)
+
+SELECT '' AS one, i.* FROM INT4_TBL i WHERE i.f1 = int2 '0' order by f1;
+ one | f1
+-----+----
+ | 0
+(1 row)
+
+SELECT '' AS one, i.* FROM INT4_TBL i WHERE i.f1 = int4 '0' order by f1;
+ one | f1
+-----+----
+ | 0
+(1 row)
+
+SELECT '' AS two, i.* FROM INT4_TBL i WHERE i.f1 < int2 '0' order by f1;
+ two | f1
+-----+-------------
+ | -2147483647
+ | -123456
+(2 rows)
+
+SELECT '' AS two, i.* FROM INT4_TBL i WHERE i.f1 < int4 '0' order by f1;
+ two | f1
+-----+-------------
+ | -2147483647
+ | -123456
+(2 rows)
+
+SELECT '' AS three, i.* FROM INT4_TBL i WHERE i.f1 <= int2 '0' order by f1;
+ three | f1
+-------+-------------
+ | -2147483647
+ | -123456
+ | 0
+(3 rows)
+
+SELECT '' AS three, i.* FROM INT4_TBL i WHERE i.f1 <= int4 '0' order by f1;
+ three | f1
+-------+-------------
+ | -2147483647
+ | -123456
+ | 0
+(3 rows)
+
+SELECT '' AS two, i.* FROM INT4_TBL i WHERE i.f1 > int2 '0' order by f1;
+ two | f1
+-----+------------
+ | 123456
+ | 2147483647
+(2 rows)
+
+SELECT '' AS two, i.* FROM INT4_TBL i WHERE i.f1 > int4 '0' order by f1;
+ two | f1
+-----+------------
+ | 123456
+ | 2147483647
+(2 rows)
+
+SELECT '' AS three, i.* FROM INT4_TBL i WHERE i.f1 >= int2 '0' order by f1;
+ three | f1
+-------+------------
+ | 0
+ | 123456
+ | 2147483647
+(3 rows)
+
+SELECT '' AS three, i.* FROM INT4_TBL i WHERE i.f1 >= int4 '0' order by f1;
+ three | f1
+-------+------------
+ | 0
+ | 123456
+ | 2147483647
+(3 rows)
+
+-- positive odds
+SELECT '' AS one, i.* FROM INT4_TBL i WHERE (i.f1 % int2 '2') = int2 '1' order by f1;
+ one | f1
+-----+------------
+ | 2147483647
+(1 row)
+
+-- any evens
+SELECT '' AS three, i.* FROM INT4_TBL i WHERE (i.f1 % int4 '2') = int2 '0' order by f1;
+ three | f1
+-------+---------
+ | -123456
+ | 0
+ | 123456
+(3 rows)
+
+SELECT '' AS five, i.f1, i.f1 * int2 '2' AS x FROM INT4_TBL i order by f1;
+psql:/tmp/TestType_int4.sql:67: ERROR: integer out of range
+SELECT '' AS five, i.f1, i.f1 * int2 '2' AS x FROM INT4_TBL i
+WHERE abs(f1) < 1073741824 order by f1;
+ five | f1 | x
+------+---------+---------
+ | -123456 | -246912
+ | 0 | 0
+ | 123456 | 246912
+(3 rows)
+
+SELECT '' AS five, i.f1, i.f1 * int4 '2' AS x FROM INT4_TBL i order by f1;
+psql:/tmp/TestType_int4.sql:72: ERROR: integer out of range
+SELECT '' AS five, i.f1, i.f1 * int4 '2' AS x FROM INT4_TBL i
+WHERE abs(f1) < 1073741824 order by f1;
+ five | f1 | x
+------+---------+---------
+ | -123456 | -246912
+ | 0 | 0
+ | 123456 | 246912
+(3 rows)
+
+SELECT '' AS five, i.f1, i.f1 + int2 '2' AS x FROM INT4_TBL i order by f1;
+psql:/tmp/TestType_int4.sql:77: ERROR: integer out of range
+SELECT '' AS five, i.f1, i.f1 + int2 '2' AS x FROM INT4_TBL i
+WHERE f1 < 2147483646 order by f1;
+ five | f1 | x
+------+-------------+-------------
+ | -2147483647 | -2147483645
+ | -123456 | -123454
+ | 0 | 2
+ | 123456 | 123458
+(4 rows)
+
+SELECT '' AS five, i.f1, i.f1 + int4 '2' AS x FROM INT4_TBL i order by f1;
+psql:/tmp/TestType_int4.sql:82: ERROR: integer out of range
+SELECT '' AS five, i.f1, i.f1 + int4 '2' AS x FROM INT4_TBL i
+WHERE f1 < 2147483646 order by f1;
+ five | f1 | x
+------+-------------+-------------
+ | -2147483647 | -2147483645
+ | -123456 | -123454
+ | 0 | 2
+ | 123456 | 123458
+(4 rows)
+
+SELECT '' AS five, i.f1, i.f1 - int2 '2' AS x FROM INT4_TBL i order by f1;
+psql:/tmp/TestType_int4.sql:87: ERROR: integer out of range
+SELECT '' AS five, i.f1, i.f1 - int2 '2' AS x FROM INT4_TBL i
+WHERE f1 > -2147483647 order by f1;
+ five | f1 | x
+------+------------+------------
+ | -123456 | -123458
+ | 0 | -2
+ | 123456 | 123454
+ | 2147483647 | 2147483645
+(4 rows)
+
+SELECT '' AS five, i.f1, i.f1 - int4 '2' AS x FROM INT4_TBL i order by f1;
+psql:/tmp/TestType_int4.sql:92: ERROR: integer out of range
+SELECT '' AS five, i.f1, i.f1 - int4 '2' AS x FROM INT4_TBL i
+WHERE f1 > -2147483647 order by f1;
+ five | f1 | x
+------+------------+------------
+ | -123456 | -123458
+ | 0 | -2
+ | 123456 | 123454
+ | 2147483647 | 2147483645
+(4 rows)
+
+SELECT '' AS five, i.f1, i.f1 / int2 '2' AS x FROM INT4_TBL i order by f1;
+ five | f1 | x
+------+-------------+-------------
+ | -2147483647 | -1073741823
+ | -123456 | -61728
+ | 0 | 0
+ | 123456 | 61728
+ | 2147483647 | 1073741823
+(5 rows)
+
+SELECT '' AS five, i.f1, i.f1 / int4 '2' AS x FROM INT4_TBL i order by f1;
+ five | f1 | x
+------+-------------+-------------
+ | -2147483647 | -1073741823
+ | -123456 | -61728
+ | 0 | 0
+ | 123456 | 61728
+ | 2147483647 | 1073741823
+(5 rows)
+
+--
+-- more complex expressions
+--
+-- variations on unary minus parsing
+SELECT -2+3 AS one;
+ one
+-----
+ 1
+(1 row)
+
+SELECT 4-2 AS two;
+ two
+-----
+ 2
+(1 row)
+
+SELECT 2- -1 AS three;
+ three
+-------
+ 3
+(1 row)
+
+SELECT 2 - -2 AS four;
+ four
+------
+ 4
+(1 row)
+
+SELECT int2 '2' * int2 '2' = int2 '16' / int2 '4' AS true;
+ true
+------
+ t
+(1 row)
+
+SELECT int4 '2' * int2 '2' = int2 '16' / int4 '4' AS true;
+ true
+------
+ t
+(1 row)
+
+SELECT int2 '2' * int4 '2' = int4 '16' / int2 '4' AS true;
+ true
+------
+ t
+(1 row)
+
+SELECT int4 '1000' < int4 '999' AS false;
+ false
+-------
+ f
+(1 row)
+
+SELECT 4! AS twenty_four;
+ twenty_four
+-------------
+ 24
+(1 row)
+
+SELECT !!3 AS six;
+ six
+-----
+ 6
+(1 row)
+
+SELECT 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 AS ten;
+ ten
+-----
+ 10
+(1 row)
+
+SELECT 2 + 2 / 2 AS three;
+ three
+-------
+ 3
+(1 row)
+
+SELECT (2 + 2) / 2 AS two;
+ two
+-----
+ 2
+(1 row)
+
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/f05c19ed/src/test/feature/catalog/ans/int8.ans
----------------------------------------------------------------------
diff --git a/src/test/feature/catalog/ans/int8.ans b/src/test/feature/catalog/ans/int8.ans
new file mode 100755
index 0000000..5f1e2f5
--- /dev/null
+++ b/src/test/feature/catalog/ans/int8.ans
@@ -0,0 +1,329 @@
+--
+-- INT8
+-- Test int8 64-bit integers.
+--
+CREATE TABLE INT8_TBL(q1 int8, q2 int8);
+CREATE TABLE
+INSERT INTO INT8_TBL VALUES(' 123 ',' 456');
+INSERT 0 1
+INSERT INTO INT8_TBL VALUES('123 ','4567890123456789');
+INSERT 0 1
+INSERT INTO INT8_TBL VALUES('4567890123456789','123');
+INSERT 0 1
+INSERT INTO INT8_TBL VALUES('4567890123456789','4567890123456789');
+INSERT 0 1
+INSERT INTO INT8_TBL VALUES('4567890123456789','-4567890123456789');
+INSERT 0 1
+-- bad inputs
+INSERT INTO INT8_TBL(q1) VALUES (' ');
+psql:/tmp/TestType_int8.sql:17: ERROR: invalid input syntax for integer: " "
+INSERT INTO INT8_TBL(q1) VALUES ('xxx');
+psql:/tmp/TestType_int8.sql:18: ERROR: invalid input syntax for integer: "xxx"
+INSERT INTO INT8_TBL(q1) VALUES ('3908203590239580293850293850329485');
+psql:/tmp/TestType_int8.sql:19: ERROR: value "3908203590239580293850293850329485" is out of range for type bigint
+INSERT INTO INT8_TBL(q1) VALUES ('-1204982019841029840928340329840934');
+psql:/tmp/TestType_int8.sql:20: ERROR: value "-1204982019841029840928340329840934" is out of range for type bigint
+INSERT INTO INT8_TBL(q1) VALUES ('- 123');
+psql:/tmp/TestType_int8.sql:21: ERROR: invalid input syntax for integer: "- 123"
+INSERT INTO INT8_TBL(q1) VALUES (' 345 5');
+psql:/tmp/TestType_int8.sql:22: ERROR: invalid input syntax for integer: " 345 5"
+INSERT INTO INT8_TBL(q1) VALUES ('');
+psql:/tmp/TestType_int8.sql:23: ERROR: invalid input syntax for integer: ""
+SELECT * FROM INT8_TBL ;
+ q1 | q2
+------------------+-------------------
+ 123 | 456
+ 123 | 4567890123456789
+ 4567890123456789 | 123
+ 4567890123456789 | 4567890123456789
+ 4567890123456789 | -4567890123456789
+(5 rows)
+
+SELECT '' AS five, q1 AS plus, -q1 AS minus FROM INT8_TBL ;
+ five | plus | minus
+------+------------------+-------------------
+ | 123 | -123
+ | 123 | -123
+ | 4567890123456789 | -4567890123456789
+ | 4567890123456789 | -4567890123456789
+ | 4567890123456789 | -4567890123456789
+(5 rows)
+
+SELECT '' AS five, q1, q2, q1 + q2 AS plus FROM INT8_TBL ;
+ five | q1 | q2 | plus
+------+------------------+-------------------+------------------
+ | 123 | 456 | 579
+ | 123 | 4567890123456789 | 4567890123456912
+ | 4567890123456789 | 123 | 4567890123456912
+ | 4567890123456789 | 4567890123456789 | 9135780246913578
+ | 4567890123456789 | -4567890123456789 | 0
+(5 rows)
+
+SELECT '' AS five, q1, q2, q1 - q2 AS minus FROM INT8_TBL ;
+ five | q1 | q2 | minus
+------+------------------+-------------------+-------------------
+ | 123 | 456 | -333
+ | 123 | 4567890123456789 | -4567890123456666
+ | 4567890123456789 | 123 | 4567890123456666
+ | 4567890123456789 | 4567890123456789 | 0
+ | 4567890123456789 | -4567890123456789 | 9135780246913578
+(5 rows)
+
+SELECT '' AS three, q1, q2, q1 * q2 AS multiply FROM INT8_TBL ;
+psql:/tmp/TestType_int8.sql:31: ERROR: bigint out of range
+SELECT '' AS three, q1, q2, q1 * q2 AS multiply FROM INT8_TBL
+ WHERE q1 < 1000 or (q2 > 0 and q2 < 1000) ;
+ three | q1 | q2 | multiply
+-------+------------------+------------------+--------------------
+ | 123 | 456 | 56088
+ | 123 | 4567890123456789 | 561850485185185047
+ | 4567890123456789 | 123 | 561850485185185047
+(3 rows)
+
+SELECT '' AS five, q1, q2, q1 / q2 AS divide FROM INT8_TBL ;
+ five | q1 | q2 | divide
+------+------------------+-------------------+----------------
+ | 123 | 456 | 0
+ | 123 | 4567890123456789 | 0
+ | 4567890123456789 | 123 | 37137318076884
+ | 4567890123456789 | 4567890123456789 | 1
+ | 4567890123456789 | -4567890123456789 | -1
+(5 rows)
+
+SELECT '' AS five, q1, float8(q1) FROM INT8_TBL ;
+ five | q1 | float8
+------+------------------+----------------------
+ | 123 | 123
+ | 123 | 123
+ | 4567890123456789 | 4.56789012345679e+15
+ | 4567890123456789 | 4.56789012345679e+15
+ | 4567890123456789 | 4.56789012345679e+15
+(5 rows)
+
+SELECT '' AS five, q2, float8(q2) FROM INT8_TBL ;
+ five | q2 | float8
+------+-------------------+-----------------------
+ | 456 | 456
+ | 4567890123456789 | 4.56789012345679e+15
+ | 123 | 123
+ | 4567890123456789 | 4.56789012345679e+15
+ | -4567890123456789 | -4.56789012345679e+15
+(5 rows)
+
+SELECT '' AS five, 2 * q1 AS "twice int4" FROM INT8_TBL ;
+ five | twice int4
+------+------------------
+ | 246
+ | 246
+ | 9135780246913578
+ | 9135780246913578
+ | 9135780246913578
+(5 rows)
+
+SELECT '' AS five, q1 * 2 AS "twice int4" FROM INT8_TBL ;
+ five | twice int4
+------+------------------
+ | 246
+ | 246
+ | 9135780246913578
+ | 9135780246913578
+ | 9135780246913578
+(5 rows)
+
+-- TO_CHAR()
+--
+SELECT '' AS to_char_1, to_char(q1, '9G999G999G999G999G999'), to_char(q2, '9,999,999,999,999,999')
+ FROM INT8_TBL ;
+ to_char_1 | to_char | to_char
+-----------+------------------------+------------------------
+ | 123 | 456
+ | 123 | 4,567,890,123,456,789
+ | 4,567,890,123,456,789 | 123
+ | 4,567,890,123,456,789 | 4,567,890,123,456,789
+ | 4,567,890,123,456,789 | -4,567,890,123,456,789
+(5 rows)
+
+SELECT '' AS to_char_2, to_char(q1, '9G999G999G999G999G999D999G999'), to_char(q2, '9,999,999,999,999,999.999,999')
+ FROM INT8_TBL ;
+ to_char_2 | to_char | to_char
+-----------+--------------------------------+--------------------------------
+ | 123.000,000 | 456.000,000
+ | 123.000,000 | 4,567,890,123,456,789.000,000
+ | 4,567,890,123,456,789.000,000 | 123.000,000
+ | 4,567,890,123,456,789.000,000 | 4,567,890,123,456,789.000,000
+ | 4,567,890,123,456,789.000,000 | -4,567,890,123,456,789.000,000
+(5 rows)
+
+SELECT '' AS to_char_3, to_char( (q1 * -1), '9999999999999999PR'), to_char( (q2 * -1), '9999999999999999.999PR')
+ FROM INT8_TBL ;
+ to_char_3 | to_char | to_char
+-----------+--------------------+------------------------
+ | <123> | <456.000>
+ | <123> | <4567890123456789.000>
+ | <4567890123456789> | <123.000>
+ | <4567890123456789> | <4567890123456789.000>
+ | <4567890123456789> | 4567890123456789.000
+(5 rows)
+
+SELECT '' AS to_char_4, to_char( (q1 * -1), '9999999999999999S'), to_char( (q2 * -1), 'S9999999999999999')
+ FROM INT8_TBL ;
+ to_char_4 | to_char | to_char
+-----------+-------------------+-------------------
+ | 123- | -456
+ | 123- | -4567890123456789
+ | 4567890123456789- | -123
+ | 4567890123456789- | -4567890123456789
+ | 4567890123456789- | +4567890123456789
+(5 rows)
+
+SELECT '' AS to_char_5, to_char(q2, 'MI9999999999999999') FROM INT8_TBL ;
+ to_char_5 | to_char
+-----------+-------------------
+ | 456
+ | 4567890123456789
+ | 123
+ | 4567890123456789
+ | -4567890123456789
+(5 rows)
+
+SELECT '' AS to_char_6, to_char(q2, 'FMS9999999999999999') FROM INT8_TBL ;
+ to_char_6 | to_char
+-----------+-------------------
+ | +456
+ | +4567890123456789
+ | +123
+ | +4567890123456789
+ | -4567890123456789
+(5 rows)
+
+SELECT '' AS to_char_7, to_char(q2, 'FM9999999999999999THPR') FROM INT8_TBL ;
+ to_char_7 | to_char
+-----------+--------------------
+ | 456TH
+ | 4567890123456789TH
+ | 123RD
+ | 4567890123456789TH
+ | <4567890123456789>
+(5 rows)
+
+SELECT '' AS to_char_8, to_char(q2, 'SG9999999999999999th') FROM INT8_TBL ;
+ to_char_8 | to_char
+-----------+---------------------
+ | + 456th
+ | +4567890123456789th
+ | + 123rd
+ | +4567890123456789th
+ | -4567890123456789
+(5 rows)
+
+SELECT '' AS to_char_9, to_char(q2, '0999999999999999') FROM INT8_TBL ;
+ to_char_9 | to_char
+-----------+-------------------
+ | 0000000000000456
+ | 4567890123456789
+ | 0000000000000123
+ | 4567890123456789
+ | -4567890123456789
+(5 rows)
+
+SELECT '' AS to_char_10, to_char(q2, 'S0999999999999999') FROM INT8_TBL ;
+ to_char_10 | to_char
+------------+-------------------
+ | +0000000000000456
+ | +4567890123456789
+ | +0000000000000123
+ | +4567890123456789
+ | -4567890123456789
+(5 rows)
+
+SELECT '' AS to_char_11, to_char(q2, 'FM0999999999999999') FROM INT8_TBL ;
+ to_char_11 | to_char
+------------+-------------------
+ | 0000000000000456
+ | 4567890123456789
+ | 0000000000000123
+ | 4567890123456789
+ | -4567890123456789
+(5 rows)
+
+SELECT '' AS to_char_12, to_char(q2, 'FM9999999999999999.000') FROM INT8_TBL ;
+ to_char_12 | to_char
+------------+-----------------------
+ | 456.000
+ | 4567890123456789.000
+ | 123.000
+ | 4567890123456789.000
+ | -4567890123456789.000
+(5 rows)
+
+SELECT '' AS to_char_13, to_char(q2, 'L9999999999999999.000') FROM INT8_TBL ;
+ to_char_13 | to_char
+------------+------------------------
+ | 456.000
+ | 4567890123456789.000
+ | 123.000
+ | 4567890123456789.000
+ | -4567890123456789.000
+(5 rows)
+
+SELECT '' AS to_char_14, to_char(q2, 'FM9999999999999999.999') FROM INT8_TBL ;
+ to_char_14 | to_char
+------------+--------------------
+ | 456.
+ | 4567890123456789.
+ | 123.
+ | 4567890123456789.
+ | -4567890123456789.
+(5 rows)
+
+SELECT '' AS to_char_15, to_char(q2, 'S 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 . 9 9 9') FROM INT8_TBL ;
+ to_char_15 | to_char
+------------+-------------------------------------------
+ | +4 5 6 . 0 0 0
+ | +4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 . 0 0 0
+ | +1 2 3 . 0 0 0
+ | +4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 . 0 0 0
+ | -4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 . 0 0 0
+(5 rows)
+
+SELECT '' AS to_char_16, to_char(q2, E'99999 "text" 9999 "9999" 999 "\\"text between quote marks\\"" 9999') FROM INT8_TBL ;
+ to_char_16 | to_char
+------------+-----------------------------------------------------------
+ | text 9999 "text between quote marks" 456
+ | 45678 text 9012 9999 345 "text between quote marks" 6789
+ | text 9999 "text between quote marks" 123
+ | 45678 text 9012 9999 345 "text between quote marks" 6789
+ | -45678 text 9012 9999 345 "text between quote marks" 6789
+(5 rows)
+
+SELECT '' AS to_char_17, to_char(q2, '999999SG9999999999') FROM INT8_TBL ;
+ to_char_17 | to_char
+------------+-------------------
+ | + 456
+ | 456789+0123456789
+ | + 123
+ | 456789+0123456789
+ | 456789-0123456789
+(5 rows)
+
+-- check min/max values
+select '-9223372036854775808'::int8;
+ int8
+----------------------
+ -9223372036854775808
+(1 row)
+
+select '-9223372036854775809'::int8;
+psql:/tmp/TestType_int8.sql:72: ERROR: value "-9223372036854775809" is out of range for type bigint
+LINE 1: select '-9223372036854775809'::int8;
+ ^
+select '9223372036854775807'::int8;
+ int8
+---------------------
+ 9223372036854775807
+(1 row)
+
+select '9223372036854775808'::int8;
+psql:/tmp/TestType_int8.sql:74: ERROR: value "9223372036854775808" is out of range for type bigint
+LINE 1: select '9223372036854775808'::int8;
+ ^
[08/14] incubator-hawq git commit: HAWQ-918. Fix memtuple forming bug
when null-saved size is larger than 32763 bytes
Posted by rl...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/a2a79c6d/src/test/regress/expected/aggregates_null.out
----------------------------------------------------------------------
diff --git a/src/test/regress/expected/aggregates_null.out b/src/test/regress/expected/aggregates_null.out
new file mode 100644
index 0000000..e231630
--- /dev/null
+++ b/src/test/regress/expected/aggregates_null.out
@@ -0,0 +1,27 @@
+create temporary table mtup1(
+c0 text,
+c1 text,
+c3 int,
+c4 int
+)
+with (appendonly = true, compresstype=zlib)
+distributed by (c0, c3);
+insert into mtup1 values ('foo', '2015-09-1', 1);
+insert into mtup1 values ('foo', '2015-09-1', 2);
+insert into mtup1 values ('foo', '2015-09-1', 3);
+insert into mtup1 values ('foo', '2015-09-1', 4);
+insert into mtup1 values ('foo', '2015-09-1', 5);
+insert into mtup1 values ('foo', '2015-09-1', 6);
+insert into mtup1 values ('foo', '2015-09-1', 7);
+insert into mtup1 values ('foo', '2015-09-1', 8);
+insert into mtup1 values ('foo', '2015-09-1', 9);
+select c0, c1::timestamp, ARRAY[
+SUM(CASE WHEN c4 = 2 THEN 1 ELSE 0 END),
+SUM(CASE WHEN c4 = 3 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 4 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 5 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 6 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 7 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 8 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 9 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 10 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 11 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 12 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 13 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 14 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 15 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 16 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 17 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 18 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 19 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 20 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 21 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 22 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 23 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 24 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 25 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 26 THEN 1 ELSE 0 EN
D), SUM(CASE WHEN c4 = 27 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 28 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 29 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 30 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 31 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 32 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 33 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 34 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 35 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 36 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 37 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 38 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 39 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 40 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 41 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 42 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 43 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 44 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 45 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 46 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 47 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 48 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 49 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 50 THEN
1 ELSE 0 END), SUM(CASE WHEN c4 = 51 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 52 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 53 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 54 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 55 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 56 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 57 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 58 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 59 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 60 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 61 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 62 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 63 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 64 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 65 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 66 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 67 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 68 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 69 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 70 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 71 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 72 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 73 THEN 1 ELSE 0 END), SUM(CASE WHEN c4
= 74 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 75 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 76 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 77 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 78 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 79 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 80 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 81 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 82 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 83 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 84 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 85 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 86 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 87 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 88 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 89 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 90 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 91 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 92 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 93 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 94 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 95 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 96 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 97 THEN 1 ELSE 0 END), SUM(C
ASE WHEN c4 = 98 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 99 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 100 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 101 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 102 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 103 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 104 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 105 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 106 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 107 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 108 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 109 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 110 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 111 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 112 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 113 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 114 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 115 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 116 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 117 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 118 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 119 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 120 THEN 1 ELSE 0 END), SUM(CASE WHEN c
4 = 121 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 122 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 123 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 124 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 125 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 126 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 127 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 128 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 129 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 130 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 131 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 132 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 133 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 134 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 135 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 136 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 137 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 138 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 139 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 140 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 141 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 142 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 143 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 144
THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 145 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 146 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 147 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 148 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 149 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 150 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 151 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 152 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 153 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 154 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 155 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 156 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 157 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 158 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 159 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 160 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 161 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 162 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 163 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 164 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 165 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 166 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 167 THEN 1 E
LSE 0 END), SUM(CASE WHEN c4 = 168 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 169 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 170 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 171 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 172 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 173 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 174 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 175 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 176 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 177 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 178 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 179 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 180 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 181 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 182 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 183 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 184 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 185 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 186 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 187 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 188 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 189 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 190 THEN 1 ELSE 0 EN
D), SUM(CASE WHEN c4 = 191 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 192 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 193 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 194 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 195 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 196 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 197 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 198 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 199 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 200 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 201 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 202 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 203 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 204 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 205 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 206 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 207 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 208 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 209 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 210 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 211 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 212 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 213 THEN 1 ELSE 0 END), SUM(
CASE WHEN c4 = 214 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 215 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 216 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 217 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 218 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 219 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 220 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 221 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 222 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 223 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 224 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 225 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 226 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 227 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 228 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 229 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 230 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 231 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 232 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 233 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 234 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 235 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 236 THEN 1 ELSE 0 END), SUM(CASE WHE
N c4 = 237 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 238 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 239 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 240 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 241 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 242 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 243 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 244 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 245 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 246 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 247 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 248 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 249 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 250 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 251 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 252 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 253 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 254 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 255 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 256 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 257 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 258 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 259 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 2
60 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 261 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 262 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 263 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 264 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 265 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 266 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 267 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 268 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 269 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 270 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 271 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 272 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 273 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 274 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 275 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 276 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 277 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 278 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 279 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 280 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 281 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 282 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 283 THEN
1 ELSE 0 END), SUM(CASE WHEN c4 = 284 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 285 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 286 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 287 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 288 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 289 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 290 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 291 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 292 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 293 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 294 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 295 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 296 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 297 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 298 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 299 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 300 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 301 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 302 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 303 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 304 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 305 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 306 THEN 1 ELSE 0
END), SUM(CASE WHEN c4 = 307 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 308 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 309 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 310 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 311 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 312 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 313 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 314 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 315 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 316 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 317 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 318 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 319 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 320 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 321 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 322 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 323 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 324 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 325 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 326 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 327 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 328 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 329 THEN 1 ELSE 0 END), S
UM(CASE WHEN c4 = 330 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 331 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 332 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 333 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 334 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 335 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 336 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 337 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 338 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 339 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 340 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 341 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 342 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 343 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 344 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 345 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 346 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 347 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 348 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 349 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 350 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 351 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 352 THEN 1 ELSE 0 END), SUM(CASE
WHEN c4 = 353 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 354 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 355 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 356 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 357 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 358 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 359 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 360 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 361 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 362 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 363 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 364 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 365 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 366 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 367 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 368 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 369 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 370 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 371 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 372 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 373 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 374 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 375 THEN 1 ELSE 0 END), SUM(CASE WHEN c4
= 376 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 377 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 378 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 379 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 380 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 381 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 382 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 383 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 384 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 385 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 386 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 387 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 388 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 389 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 390 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 391 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 392 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 393 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 394 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 395 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 396 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 397 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 398 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 399 TH
EN 1 ELSE 0 END), SUM(CASE WHEN c4 = 400 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 401 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 402 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 403 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 404 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 405 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 406 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 407 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 408 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 409 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 410 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 411 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 412 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 413 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 414 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 415 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 416 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 417 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 418 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 419 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 420 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 421 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 422 THEN 1 ELS
E 0 END), SUM(CASE WHEN c4 = 423 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 424 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 425 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 426 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 427 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 428 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 429 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 430 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 431 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 432 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 433 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 434 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 435 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 436 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 437 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 438 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 439 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 440 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 441 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 442 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 443 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 444 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 445 THEN 1 ELSE 0 END)
, SUM(CASE WHEN c4 = 446 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 447 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 448 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 449 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 450 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 451 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 452 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 453 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 454 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 455 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 456 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 457 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 458 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 459 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 460 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 461 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 462 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 463 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 464 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 465 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 466 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 467 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 468 THEN 1 ELSE 0 END), SUM(CA
SE WHEN c4 = 469 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 470 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 471 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 472 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 473 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 474 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 475 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 476 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 477 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 478 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 479 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 480 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 481 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 482 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 483 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 484 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 485 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 486 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 487 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 488 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 489 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 490 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 491 THEN 1 ELSE 0 END), SUM(CASE WHEN
c4 = 492 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 493 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 494 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 495 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 496 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 497 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 498 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 499 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 500 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 501 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 502 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 503 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 504 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 505 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 506 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 507 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 508 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 509 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 510 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 511 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 512 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 513 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 514 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 515
THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 516 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 517 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 518 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 519 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 520 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 521 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 522 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 523 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 524 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 525 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 526 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 527 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 528 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 529 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 530 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 531 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 532 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 533 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 534 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 535 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 536 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 537 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 538 THEN 1
ELSE 0 END), SUM(CASE WHEN c4 = 539 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 540 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 541 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 542 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 543 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 544 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 545 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 546 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 547 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 548 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 549 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 550 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 551 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 552 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 553 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 554 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 555 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 556 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 557 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 558 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 559 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 560 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 561 THEN 1 ELSE 0 E
ND), SUM(CASE WHEN c4 = 562 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 563 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 564 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 565 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 566 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 567 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 568 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 569 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 570 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 571 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 572 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 573 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 574 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 575 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 576 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 577 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 578 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 579 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 580 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 581 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 582 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 583 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 584 THEN 1 ELSE 0 END), SUM
(CASE WHEN c4 = 585 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 586 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 587 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 588 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 589 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 590 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 591 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 592 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 593 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 594 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 595 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 596 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 597 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 598 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 599 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 600 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 601 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 602 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 603 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 604 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 605 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 606 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 607 THEN 1 ELSE 0 END), SUM(CASE WH
EN c4 = 608 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 609 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 610 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 611 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 612 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 613 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 614 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 615 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 616 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 617 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 618 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 619 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 620 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 621 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 622 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 623 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 624 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 625 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 626 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 627 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 628 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 629 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 630 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 =
631 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 632 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 633 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 634 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 635 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 636 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 637 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 638 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 639 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 640 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 641 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 642 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 643 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 644 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 645 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 646 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 647 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 648 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 649 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 650 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 651 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 652 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 653 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 654 THEN
1 ELSE 0 END), SUM(CASE WHEN c4 = 655 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 656 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 657 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 658 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 659 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 660 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 661 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 662 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 663 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 664 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 665 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 666 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 667 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 668 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 669 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 670 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 671 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 672 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 673 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 674 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 675 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 676 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 677 THEN 1 ELSE
0 END), SUM(CASE WHEN c4 = 678 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 679 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 680 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 681 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 682 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 683 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 684 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 685 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 686 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 687 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 688 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 689 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 690 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 691 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 692 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 693 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 694 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 695 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 696 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 697 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 698 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 699 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 700 THEN 1 ELSE 0 END),
SUM(CASE WHEN c4 = 701 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 702 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 703 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 704 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 705 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 706 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 707 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 708 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 709 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 710 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 711 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 712 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 713 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 714 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 715 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 716 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 717 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 718 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 719 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 720 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 721 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 722 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 723 THEN 1 ELSE 0 END), SUM(CASE
WHEN c4 = 724 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 725 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 726 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 727 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 728 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 729 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 730 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 731 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 732 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 733 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 734 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 735 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 736 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 737 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 738 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 739 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 740 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 741 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 742 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 743 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 744 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 745 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 746 THEN 1 ELSE 0 END), SUM(CASE WHEN c4
= 747 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 748 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 749 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 750 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 751 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 752 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 753 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 754 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 755 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 756 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 757 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 758 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 759 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 760 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 761 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 762 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 763 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 764 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 765 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 766 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 767 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 768 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 769 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 770 T
HEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 771 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 772 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 773 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 774 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 775 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 776 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 777 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 778 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 779 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 780 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 781 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 782 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 783 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 784 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 785 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 786 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 787 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 788 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 789 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 790 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 791 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 792 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 793 THEN 1 EL
SE 0 END), SUM(CASE WHEN c4 = 794 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 795 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 796 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 797 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 798 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 799 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 800 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 801 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 802 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 803 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 804 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 805 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 806 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 807 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 808 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 809 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 810 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 811 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 812 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 813 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 814 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 815 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 816 THEN 1 ELSE 0 END
), SUM(CASE WHEN c4 = 817 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 818 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 819 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 820 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 821 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 822 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 823 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 824 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 825 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 826 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 827 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 828 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 829 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 830 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 831 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 832 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 833 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 834 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 835 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 836 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 837 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 838 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 839 THEN 1 ELSE 0 END), SUM(C
ASE WHEN c4 = 840 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 841 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 842 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 843 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 844 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 845 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 846 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 847 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 848 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 849 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 850 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 851 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 852 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 853 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 854 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 855 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 856 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 857 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 858 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 859 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 860 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 861 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 862 THEN 1 ELSE 0 END), SUM(CASE WHEN
c4 = 863 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 864 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 865 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 866 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 867 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 868 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 869 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 870 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 871 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 872 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 873 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 874 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 875 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 876 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 877 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 878 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 879 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 880 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 881 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 882 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 883 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 884 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 885 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 88
6 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 887 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 888 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 889 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 890 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 891 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 892 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 893 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 894 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 895 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 896 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 897 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 898 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 899 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 900 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 901 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 902 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 903 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 904 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 905 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 906 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 907 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 908 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 909 THEN 1
ELSE 0 END), SUM(CASE WHEN c4 = 910 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 911 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 912 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 913 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 914 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 915 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 916 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 917 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 918 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 919 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 920 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 921 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 922 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 923 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 924 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 925 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 926 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 927 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 928 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 929 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 930 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 931 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 932 THEN 1 ELSE 0
END), SUM(CASE WHEN c4 = 933 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 934 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 935 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 936 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 937 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 938 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 939 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 940 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 941 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 942 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 943 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 944 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 945 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 946 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 947 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 948 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 949 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 950 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 951 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 952 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 953 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 954 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 955 THEN 1 ELSE 0 END), SU
M(CASE WHEN c4 = 956 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 957 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 958 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 959 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 960 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 961 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 962 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 963 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 964 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 965 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 966 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 967 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 968 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 969 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 970 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 971 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 972 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 973 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 974 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 975 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 976 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 977 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 978 THEN 1 ELSE 0 END), SUM(CASE W
HEN c4 = 979 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 980 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 981 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 982 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 983 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 984 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 985 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 986 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 987 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 988 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 989 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 990 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 991 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 992 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 993 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 994 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 995 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 996 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 997 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 998 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 999 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1000 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1001 THEN 1 ELSE 0 END), SUM(CASE WHEN c4
= 1002 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1003 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1004 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1005 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1006 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1007 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1008 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1009 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1010 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1011 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1012 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1013 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1014 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1015 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1016 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1017 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1018 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1019 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1020 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1021 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1022 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1023 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1024 THEN 1 ELSE 0 END), S
UM(CASE WHEN c4 = 1025 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1026 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1027 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1028 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1029 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1030 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1031 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1032 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1033 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1034 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1035 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1036 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1037 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1038 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1039 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1040 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1041 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1042 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1043 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1044 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1045 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1046 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1047 THEN 1
ELSE 0 END), SUM(CASE WHEN c4 = 1048 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1049 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1050 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1051 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1052 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1053 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1054 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1055 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1056 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1057 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1058 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1059 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1060 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1061 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1062 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1063 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1064 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1065 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1066 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1067 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1068 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1069 THEN 1 ELSE 0 END), SUM(CASE WHEN c
4 = 1070 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1071 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1072 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1073 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1074 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1075 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1076 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1077 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1078 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1079 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1080 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1081 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1082 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1083 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1084 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1085 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1086 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1087 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1088 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1089 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1090 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1091 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1092 THEN 1 ELSE 0 END),
SUM(CASE WHEN c4 = 1093 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1094 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1095 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1096 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1097 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1098 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1099 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1100 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1101 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1102 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1103 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1104 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1105 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1106 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1107 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1108 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1109 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1110 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1111 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1112 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1113 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1114 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1115 THEN
1 ELSE 0 END), SUM(CASE WHEN c4 = 1116 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1117 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1118 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1119 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1120 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1121 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1122 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1123 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1124 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1125 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1126 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1127 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1128 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1129 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1130 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1131 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1132 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1133 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1134 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1135 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1136 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1137 THEN 1 ELSE 0 END), SUM(CASE WHEN
c4 = 1138 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1139 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1140 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1141 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1142 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1143 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1144 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1145 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1146 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1147 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1148 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1149 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1150 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1151 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1152 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1153 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1154 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1155 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1156 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1157 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1158 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1159 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1160 THEN 1 ELSE 0 END),
SUM(CASE WHEN c4 = 1161 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1162 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1163 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1164 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1165 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1166 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1167 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1168 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1169 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1170 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1171 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1172 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1173 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1174 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1175 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1176 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1177 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1178 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1179 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1180 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1181 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1182 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1183 THEN
1 ELSE 0 END), SUM(CASE WHEN c4 = 1184 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1185 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1186 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1187 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1188 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1189 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1190 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1191 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1192 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1193 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1194 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1195 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1196 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1197 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1198 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1199 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1200 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1201 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1202 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1203 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1204 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1205 THEN 1 ELSE 0 END), SUM(CASE WHEN
c4 = 1206 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1207 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1208 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1209 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1210 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1211 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1212 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1213 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1214 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1215 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1216 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1217 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1218 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1219 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1220 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1221 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1222 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1223 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1224 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1225 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1226 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1227 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1228 THEN 1 ELSE 0 END)
, SUM(CASE WHEN c4 = 1229 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1230 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1231 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1232 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1233 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1234 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1235 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1236 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1237 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1238 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1239 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1240 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1241 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1242 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1243 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1244 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1245 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1246 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1247 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1248 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1249 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1250 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1251 THE
N 1 ELSE 0 END), SUM(CASE WHEN c4 = 1252 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1253 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1254 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1255 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1256 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1257 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1258 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1259 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1260 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1261 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1262 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1263 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1264 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1265 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1266 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1267 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1268 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1269 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1270 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1271 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1272 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1273 THEN 1 ELSE 0 END), SUM(CASE WHE
N c4 = 1274 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1275 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1276 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1277 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1278 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1279 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1280 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1281 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1282 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1283 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1284 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1285 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1286 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1287 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1288 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1289 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1290 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1291 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1292 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1293 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1294 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1295 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1296 THEN 1 ELSE 0 END
), SUM(CASE WHEN c4 = 1297 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1298 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1299 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1300 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1301 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1302 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1303 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1304 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1305 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1306 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1307 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1308 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1309 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1310 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1311 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1312 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1313 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1314 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1315 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1316 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1317 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1318 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1319 TH
EN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1320 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1321 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1322 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1323 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1324 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1325 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1326 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1327 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1328 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1329 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1330 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1331 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1332 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1333 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1334 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1335 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1336 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1337 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1338 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1339 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1340 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1341 THEN 1 ELSE 0 END), SUM(CASE WH
EN c4 = 1342 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1343 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1344 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1345 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1346 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1347 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1348 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1349 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1350 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1351 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1352 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1353 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1354 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1355 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1356 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1357 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1358 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1359 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1360 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1361 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1362 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1363 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1364 THEN 1 ELSE 0 EN
D), SUM(CASE WHEN c4 = 1365 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1366 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1367 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1368 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1369 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1370 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1371 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1372 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1373 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1374 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1375 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1376 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1377 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1378 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1379 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1380 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1381 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1382 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1383 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1384 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1385 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1386 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1387 T
HEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1388 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1389 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1390 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1391 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1392 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1393 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1394 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1395 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1396 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1397 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1398 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1399 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1400 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1401 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1402 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1403 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1404 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1405 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1406 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1407 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1408 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1409 THEN 1 ELSE 0 END), SUM(CASE W
HEN c4 = 1410 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1411 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1412 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1413 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1414 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1415 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1416 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1417 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1418 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1419 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1420 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1421 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1422 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1423 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1424 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1425 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1426 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1427 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1428 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1429 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1430 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1431 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1432 THEN 1 ELSE 0 E
ND), SUM(CASE WHEN c4 = 1433 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1434 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1435 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1436 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1437 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1438 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1439 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1440 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1441 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1442 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1443 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1444 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1445 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1446 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1447 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1448 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1449 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1450 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1451 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1452 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1453 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1454 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1455
THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1456 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1457 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1458 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1459 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1460 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1461 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1462 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1463 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1464 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1465 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1466 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1467 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1468 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1469 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1470 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1471 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1472 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1473 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1474 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1475 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1476 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1477 THEN 1 ELSE 0 END), SUM(CASE
WHEN c4 = 1478 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1479 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1480 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1481 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1482 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1483 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1484 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1485 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1486 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1487 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1488 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1489 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1490 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1491 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1492 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1493 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1494 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1495 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1496 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1497 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1498 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1499 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1500 THEN 1 ELSE 0
END), SUM(CASE WHEN c4 = 1501 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1502 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1503 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1504 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1505 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1506 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1507 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1508 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1509 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1510 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1511 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1512 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1513 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1514 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1515 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1516 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1517 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1518 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1519 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1520 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1521 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1522 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1523
THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1524 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1525 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1526 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1527 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1528 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1529 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1530 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1531 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1532 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1533 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1534 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1535 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1536 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1537 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1538 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1539 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1540 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1541 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1542 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1543 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1544 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1545 THEN 1 ELSE 0 END), SUM(CASE
WHEN c4 = 1546 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1547 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1548 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1549 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1550 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1551 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1552 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1553 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1554 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1555 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1556 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1557 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1558 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1559 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1560 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1561 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1562 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1563 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1564 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1565 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1566 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1567 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1568 THEN 1 ELSE 0
END), SUM(CASE WHEN c4 = 1569 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1570 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1571 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1572 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1573 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1574 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1575 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1576 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1577 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1578 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1579 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1580 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1581 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1582 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1583 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1584 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1585 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1586 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1587 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1588 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1589 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1590 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 159
1 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1592 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1593 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1594 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1595 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1596 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1597 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1598 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1599 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1600 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1601 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1602 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1603 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1604 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1605 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1606 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1607 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1608 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1609 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1610 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1611 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1612 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1613 THEN 1 ELSE 0 END), SUM(CAS
E WHEN c4 = 1614 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1615 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1616 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1617 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1618 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1619 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1620 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1621 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1622 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1623 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1624 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1625 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1626 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1627 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1628 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1629 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1630 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1631 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1632 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1633 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1634 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1635 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1636 THEN 1 ELSE
0 END), SUM(CASE WHEN c4 = 1637 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1638 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1639 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1640 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1641 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1642 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1643 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1644 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1645 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1646 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1647 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1648 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1649 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1650 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1651 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1652 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1653 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1654 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1655 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1656 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1657 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1658 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 16
59 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1660 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1661 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1662 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1663 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1664 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1665 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1666 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1667 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1668 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1669 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1670 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1671 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1672 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1673 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1674 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1675 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1676 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1677 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1678 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1679 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1680 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1681 THEN 1 ELSE 0 END), SUM(CA
SE WHEN c4 = 1682 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1683 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1684 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1685 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1686 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1687 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1688 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1689 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1690 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1691 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1692 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1693 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1694 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1695 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1696 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1697 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1698 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1699 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1700 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1701 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1702 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1703 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1704 THEN 1 ELSE
0 END), SUM(CASE WHEN c4 = 1705 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1706 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1707 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1708 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1709 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1710 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1711 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1712 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1713 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1714 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1715 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1716 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1717 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1718 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1719 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1720 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1721 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1722 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1723 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1724 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1725 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1726 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1
727 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1728 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1729 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1730 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1731 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1732 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1733 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1734 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1735 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1736 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1737 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1738 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1739 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1740 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1741 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1742 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1743 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1744 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1745 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1746 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1747 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1748 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1749 THEN 1 ELSE 0 END), SUM(C
ASE WHEN c4 = 1750 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1751 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1752 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1753 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1754 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1755 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1756 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1757 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1758 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1759 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1760 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1761 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1762 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1763 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1764 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1765 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1766 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1767 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1768 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1769 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1770 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1771 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1772 THEN 1 ELS
E 0 END), SUM(CASE WHEN c4 = 1773 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1774 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1775 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1776 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1777 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1778 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1779 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1780 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1781 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1782 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1783 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1784 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1785 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1786 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1787 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1788 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1789 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1790 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1791 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1792 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1793 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1794 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 =
1795 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1796 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1797 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1798 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1799 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1800 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1801 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1802 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1803 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1804 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1805 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1806 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1807 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1808 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1809 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1810 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1811 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1812 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1813 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1814 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1815 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1816 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1817 THEN 1 ELSE 0 END), SUM(
CASE WHEN c4 = 1818 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1819 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1820 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1821 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1822 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1823 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1824 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1825 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1826 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1827 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1828 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1829 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1830 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1831 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1832 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1833 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1834 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1835 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1836 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1837 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1838 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1839 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1840 THEN 1 EL
SE 0 END), SUM(CASE WHEN c4 = 1841 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1842 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1843 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1844 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1845 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1846 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1847 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1848 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1849 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1850 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1851 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1852 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1853 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1854 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1855 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1856 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1857 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1858 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1859 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1860 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1861 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1862 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 =
1863 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1864 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1865 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1866 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1867 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1868 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1869 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1870 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1871 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1872 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1873 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1874 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1875 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1876 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1877 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1878 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1879 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1880 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1881 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1882 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1883 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1884 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1885 THEN 1 ELSE 0 END), SUM
(CASE WHEN c4 = 1886 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1887 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1888 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1889 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1890 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1891 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1892 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1893 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1894 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1895 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1896 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1897 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1898 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1899 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1900 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1901 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1902 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1903 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1904 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1905 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1906 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1907 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1908 THEN 1 E
LSE 0 END), SUM(CASE WHEN c4 = 1909 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1910 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1911 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1912 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1913 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1914 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1915 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1916 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1917 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1918 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1919 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1920 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1921 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1922 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1923 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1924 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1925 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1926 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1927 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1928 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1929 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1930 THEN 1 ELSE 0 END), SUM(CASE WHEN c4
= 1931 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1932 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1933 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1934 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1935 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1936 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1937 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1938 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1939 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1940 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1941 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1942 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1943 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1944 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1945 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1946 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1947 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1948 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1949 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1950 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1951 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1952 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1953 THEN 1 ELSE 0 END), SU
M(CASE WHEN c4 = 1954 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1955 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1956 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1957 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1958 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1959 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1960 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1961 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1962 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1963 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1964 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1965 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1966 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1967 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1968 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1969 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1970 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1971 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1972 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1973 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1974 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1975 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1976 THEN 1
ELSE 0 END), SUM(CASE WHEN c4 = 1977 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1978 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1979 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1980 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1981 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1982 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1983 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1984 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1985 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1986 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1987 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1988 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1989 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1990 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1991 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1992 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1993 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1994 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1995 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1996 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1997 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 1998 THEN 1 ELSE 0 END), SUM(CASE WHEN c4
= 1999 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 2000 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 2001 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 2002 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 2003 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 2004 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 2005 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 2006 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 2007 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 2008 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 2009 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 2010 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 2011 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 2012 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 2013 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 2014 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 2015 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 2016 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 2017 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 2018 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 2019 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 2020 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 2021 THEN 1 ELSE 0 END), S
UM(CASE WHEN c4 = 2022 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 2023 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 2024 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 2025 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 2026 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 2027 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 2028 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 2029 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 2030 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 2031 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 2032 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 2033 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 2034 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 2035 THEN 1 ELSE 0 END), SUM(CASE WHEN c4 = 2036 THEN 1 ELSE 0 E
<TRUNCATED>
[09/14] incubator-hawq git commit: HAWQ-918. Fix memtuple forming bug
when null-saved size is larger than 32763 bytes
Posted by rl...@apache.org.
HAWQ-918. Fix memtuple forming bug when null-saved size is larger than 32763 bytes
Project: http://git-wip-us.apache.org/repos/asf/incubator-hawq/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-hawq/commit/a2a79c6d
Tree: http://git-wip-us.apache.org/repos/asf/incubator-hawq/tree/a2a79c6d
Diff: http://git-wip-us.apache.org/repos/asf/incubator-hawq/diff/a2a79c6d
Branch: refs/heads/2.0.0.0-incubating
Commit: a2a79c6da01972bf66f0ef51e0acd69a3196b58d
Parents: 0e6fe7a
Author: Wen Lin <wl...@pivotal.io>
Authored: Wed Jul 13 09:39:49 2016 +0800
Committer: rlei <rl...@pivotal.io>
Committed: Tue Jul 19 10:49:42 2016 +0800
----------------------------------------------------------------------
src/backend/access/common/memtuple.c | 6 ++---
src/test/regress/expected/aggregates_null.out | 27 ++++++++++++++++++++++
src/test/regress/known_good_schedule | 1 +
src/test/regress/sql/aggregates_null.sql | 24 +++++++++++++++++++
4 files changed, 55 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/a2a79c6d/src/backend/access/common/memtuple.c
----------------------------------------------------------------------
diff --git a/src/backend/access/common/memtuple.c b/src/backend/access/common/memtuple.c
index 6d63f5b..be9de54 100644
--- a/src/backend/access/common/memtuple.c
+++ b/src/backend/access/common/memtuple.c
@@ -159,9 +159,9 @@ static inline short compute_null_save_b(short *null_saves, unsigned char b)
/* compute the null saved bytes by the whole null bit map, by the attribute
* physically precedes the one.
*/
-static inline short compute_null_save(short *null_saves, unsigned char *nullbitmaps, int nbyte, unsigned char nbit)
+static inline int compute_null_save(short *null_saves, unsigned char *nullbitmaps, int nbyte, unsigned char nbit)
{
- short ret = 0;
+ int ret = 0;
int curr_byte = 0;
while(curr_byte < nbyte)
{
@@ -535,7 +535,7 @@ uint32 compute_memtuple_size(MemTupleBinding *pbind, Datum *values, bool *isnull
static inline char* memtuple_get_attr_ptr(char *start, MemTupleAttrBinding *bind, short *null_saves, unsigned char *nullp)
{
- short ns = 0;
+ int ns = 0;
if(nullp)
ns = compute_null_save(null_saves, nullp, bind->null_byte, bind->null_mask);