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);