This is an automated email from the ASF dual-hosted git repository.

alsuliman pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/asterixdb.git


The following commit(s) were added to refs/heads/master by this push:
     new 952507c  [ASTERIXDB-2687][RT] Issue a warning when incomparable types 
are compared
952507c is described below

commit 952507ca0a4ec488e95078b5464d8dd22d765caa
Author: Ali Alsuliman <[email protected]>
AuthorDate: Tue Dec 17 11:00:16 2019 -0800

    [ASTERIXDB-2687][RT] Issue a warning when incomparable types are compared
    
    - user model changes: no
    - storage format changes: no
    - interface changes: no
    
    Details:
    Issue a warning when NULL was returned as the result of a comparison
    of 2 incomparable types.
    
    - added error/warning code 49
    - refactored dot format plans generator
    - removed some AQL tests that are already covered in SQL++ tests
    
    Change-Id: Iad3127e4db775315817a7819feea6aa12e4de2ea
    Reviewed-on: https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/4464
    Integration-Tests: Jenkins <[email protected]>
    Tested-by: Jenkins <[email protected]>
    Reviewed-by: Till Westmann <[email protected]>
---
 .../queries/comparison/ComparisonQueries.xml       |  35 -----
 .../issue363_inequality_circle.1.ddl.aql           |  24 ---
 .../issue363_inequality_circle.3.query.aql         |  29 ----
 .../issue363_inequality_duration.1.ddl.aql         |  24 ---
 .../issue363_inequality_duration.2.update.aql      |  24 ---
 .../issue363_inequality_duration.3.query.aql       |  29 ----
 .../issue363_inequality_interval.1.ddl.aql         |  24 ---
 .../issue363_inequality_interval.2.update.aql      |  24 ---
 .../issue363_inequality_interval.3.query.aql       |  29 ----
 .../issue363_inequality_line.3.query.aql           |  29 ----
 .../issue363_inequality_point.3.query.aql          |  29 ----
 .../issue363_inequality_polygon.1.ddl.aql          |  24 ---
 .../issue363_inequality_polygon.2.update.aql       |  24 ---
 .../issue363_inequality_polygon.3.query.aql        |  29 ----
 .../issue363_inequality_rectangle.1.ddl.aql        |  24 ---
 .../issue363_inequality_rectangle.2.update.aql     |  24 ---
 .../issue363_inequality_rectangle.3.query.aql      |  29 ----
 .../incomparable_types.001.ddl.sqlpp}              |  15 +-
 .../incomparable_types.002.update.sqlpp}           |  12 +-
 .../incomparable_types.003.query.sqlpp}            |  14 +-
 .../incomparable_types.004.query.sqlpp}            |  14 +-
 .../incomparable_types.005.ddl.sqlpp}              |   8 +-
 .../incomparable_types/incomparable_types.1.adm    |   0
 .../incomparable_types/incomparable_types.2.adm    |   2 +
 .../test/resources/runtimets/testsuite_sqlpp.xml   |   8 +
 .../asterix/common/exceptions/ErrorCode.java       |   1 +
 .../src/main/resources/asx_errormsg/en.properties  |   3 +-
 .../asterix/om/exceptions/ExceptionUtil.java       |   8 +
 .../comparisons/AbstractComparisonEvaluator.java   |  38 ++---
 .../comparisons/AbstractIfEqualsEvaluator.java     |   1 +
 .../AbstractValueComparisonEvaluator.java          |   9 +-
 .../algebricks/core/utils/DotFormatGenerator.java  | 172 +--------------------
 .../apache/hyracks/api/util}/DotFormatBuilder.java |  20 ++-
 .../hyracks/api/util}/DotFormatGenerator.java      | 113 ++------------
 34 files changed, 106 insertions(+), 786 deletions(-)

diff --git 
a/asterixdb/asterix-app/src/test/resources/runtimets/queries/comparison/ComparisonQueries.xml
 
b/asterixdb/asterix-app/src/test/resources/runtimets/queries/comparison/ComparisonQueries.xml
index 56df4ad..09845d8 100644
--- 
a/asterixdb/asterix-app/src/test/resources/runtimets/queries/comparison/ComparisonQueries.xml
+++ 
b/asterixdb/asterix-app/src/test/resources/runtimets/queries/comparison/ComparisonQueries.xml
@@ -175,41 +175,6 @@
     </compilation-unit>
   </test-case>
   <test-case FilePath="comparison">
-    <compilation-unit name="issue363_inequality_duration">
-      <output-dir compare="Text">issue363_inequality_duration</output-dir>
-    </compilation-unit>
-  </test-case>
-  <test-case FilePath="comparison">
-    <compilation-unit name="issue363_inequality_interval">
-      <output-dir compare="Text">issue363_inequality_interval</output-dir>
-    </compilation-unit>
-  </test-case>
-  <test-case FilePath="comparison">
-    <compilation-unit name="issue363_inequality_point">
-      <output-dir compare="Text">issue363_inequality_point</output-dir>
-    </compilation-unit>
-  </test-case>
-  <test-case FilePath="comparison">
-    <compilation-unit name="issue363_inequality_line">
-      <output-dir compare="Text">issue363_inequality_line</output-dir>
-    </compilation-unit>
-  </test-case>
-  <test-case FilePath="comparison">
-    <compilation-unit name="issue363_inequality_polygon">
-      <output-dir compare="Text">issue363_inequality_polygon</output-dir>
-    </compilation-unit>
-  </test-case>
-  <test-case FilePath="comparison">
-    <compilation-unit name="issue363_inequality_rectangle">
-      <output-dir compare="Text">issue363_inequality_rectangle</output-dir>
-    </compilation-unit>
-  </test-case>
-  <test-case FilePath="comparison">
-    <compilation-unit name="issue363_inequality_circle">
-      <output-dir compare="Text">issue363_inequality_circle</output-dir>
-    </compilation-unit>
-  </test-case>
-  <test-case FilePath="comparison">
     <compilation-unit name="binary">
       <output-dir compare="Text">binary</output-dir>
     </compilation-unit>
diff --git 
a/asterixdb/asterix-app/src/test/resources/runtimets/queries/comparison/issue363_inequality_circle/issue363_inequality_circle.1.ddl.aql
 
b/asterixdb/asterix-app/src/test/resources/runtimets/queries/comparison/issue363_inequality_circle/issue363_inequality_circle.1.ddl.aql
deleted file mode 100644
index 2ffaa10..0000000
--- 
a/asterixdb/asterix-app/src/test/resources/runtimets/queries/comparison/issue363_inequality_circle/issue363_inequality_circle.1.ddl.aql
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-/*
- * Description  : a test case for inequality comparisons of circle
- * Expected Res : Failure
- * Date         : 9 May 2013
- * Issue        : 363
- */
diff --git 
a/asterixdb/asterix-app/src/test/resources/runtimets/queries/comparison/issue363_inequality_circle/issue363_inequality_circle.3.query.aql
 
b/asterixdb/asterix-app/src/test/resources/runtimets/queries/comparison/issue363_inequality_circle/issue363_inequality_circle.3.query.aql
deleted file mode 100644
index 9dbc490..0000000
--- 
a/asterixdb/asterix-app/src/test/resources/runtimets/queries/comparison/issue363_inequality_circle/issue363_inequality_circle.3.query.aql
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-/*
- * Description  : a test case for inequality comparisons of circle
- * Expected Res : Failure
- * Date         : 9 May 2013
- * Issue        : 363
- */
- 
-let $v1 := circle("0.1234,-1.00e-10 +10.5E-2")
-let $dv1 := circle("0.5678,-1.00e-10 +10.5E-2")
-
-return { "circle0":  $v1 > $dv1, "circle1": $dv1 < $v1, "circle2":  $v1 >= 
$dv1, "circle3": $dv1 <= $v1 }
diff --git 
a/asterixdb/asterix-app/src/test/resources/runtimets/queries/comparison/issue363_inequality_duration/issue363_inequality_duration.1.ddl.aql
 
b/asterixdb/asterix-app/src/test/resources/runtimets/queries/comparison/issue363_inequality_duration/issue363_inequality_duration.1.ddl.aql
deleted file mode 100644
index b0a772c..0000000
--- 
a/asterixdb/asterix-app/src/test/resources/runtimets/queries/comparison/issue363_inequality_duration/issue363_inequality_duration.1.ddl.aql
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-/*
- * Description  : a test case for inequality comparisons of duration
- * Expected Res : Failure
- * Date         : 9 May 2013
- * Issue        : 363
- */
diff --git 
a/asterixdb/asterix-app/src/test/resources/runtimets/queries/comparison/issue363_inequality_duration/issue363_inequality_duration.2.update.aql
 
b/asterixdb/asterix-app/src/test/resources/runtimets/queries/comparison/issue363_inequality_duration/issue363_inequality_duration.2.update.aql
deleted file mode 100644
index b0a772c..0000000
--- 
a/asterixdb/asterix-app/src/test/resources/runtimets/queries/comparison/issue363_inequality_duration/issue363_inequality_duration.2.update.aql
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-/*
- * Description  : a test case for inequality comparisons of duration
- * Expected Res : Failure
- * Date         : 9 May 2013
- * Issue        : 363
- */
diff --git 
a/asterixdb/asterix-app/src/test/resources/runtimets/queries/comparison/issue363_inequality_duration/issue363_inequality_duration.3.query.aql
 
b/asterixdb/asterix-app/src/test/resources/runtimets/queries/comparison/issue363_inequality_duration/issue363_inequality_duration.3.query.aql
deleted file mode 100644
index 1c47674..0000000
--- 
a/asterixdb/asterix-app/src/test/resources/runtimets/queries/comparison/issue363_inequality_duration/issue363_inequality_duration.3.query.aql
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-/*
- * Description  : a test case for inequality comparisons of duration
- * Expected Res : Failure
- * Date         : 9 May 2013
- * Issue        : 363
- */
- 
-let $v1 := duration("P300Y6M3DT9H5M2.348S")
-let $dv1 := duration("P3Y6M3DT9H5M2.348S")
-
-return { "duration0":  $v1 > $dv1, "duration1": $dv1 < $v1, "duration2":  $v1 
>= $dv1, "duration3": $dv1 <= $v1 }
diff --git 
a/asterixdb/asterix-app/src/test/resources/runtimets/queries/comparison/issue363_inequality_interval/issue363_inequality_interval.1.ddl.aql
 
b/asterixdb/asterix-app/src/test/resources/runtimets/queries/comparison/issue363_inequality_interval/issue363_inequality_interval.1.ddl.aql
deleted file mode 100644
index 4cc0a14..0000000
--- 
a/asterixdb/asterix-app/src/test/resources/runtimets/queries/comparison/issue363_inequality_interval/issue363_inequality_interval.1.ddl.aql
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-/*
- * Description  : a test case for inequality comparisons of interval
- * Expected Res : Failure
- * Date         : 9 May 2013
- * Issue        : 363
- */
diff --git 
a/asterixdb/asterix-app/src/test/resources/runtimets/queries/comparison/issue363_inequality_interval/issue363_inequality_interval.2.update.aql
 
b/asterixdb/asterix-app/src/test/resources/runtimets/queries/comparison/issue363_inequality_interval/issue363_inequality_interval.2.update.aql
deleted file mode 100644
index 4cc0a14..0000000
--- 
a/asterixdb/asterix-app/src/test/resources/runtimets/queries/comparison/issue363_inequality_interval/issue363_inequality_interval.2.update.aql
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-/*
- * Description  : a test case for inequality comparisons of interval
- * Expected Res : Failure
- * Date         : 9 May 2013
- * Issue        : 363
- */
diff --git 
a/asterixdb/asterix-app/src/test/resources/runtimets/queries/comparison/issue363_inequality_interval/issue363_inequality_interval.3.query.aql
 
b/asterixdb/asterix-app/src/test/resources/runtimets/queries/comparison/issue363_inequality_interval/issue363_inequality_interval.3.query.aql
deleted file mode 100644
index 9d1a868..0000000
--- 
a/asterixdb/asterix-app/src/test/resources/runtimets/queries/comparison/issue363_inequality_interval/issue363_inequality_interval.3.query.aql
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-/*
- * Description  : a test case for inequality comparisons of interval
- * Expected Res : Failure
- * Date         : 9 May 2013
- * Issue        : 363
- */
-
-let $v1 := interval(datetime("-1987-11-19T02:43:57.938+08:00"), 
datetime("19991112T124935948-0700"))
-let $dv1 := interval(datetime("-1983-11-19T02:43:57.938+08:00"), 
datetime("19991112T124935948-0700"))
-
-return { "interval0":  $v1 > $dv1, "interval1": $dv1 < $v1, "interval2":  $v1 
>= $dv1, "interval3": $dv1 <= $v1 }
diff --git 
a/asterixdb/asterix-app/src/test/resources/runtimets/queries/comparison/issue363_inequality_line/issue363_inequality_line.3.query.aql
 
b/asterixdb/asterix-app/src/test/resources/runtimets/queries/comparison/issue363_inequality_line/issue363_inequality_line.3.query.aql
deleted file mode 100644
index 2dbca92..0000000
--- 
a/asterixdb/asterix-app/src/test/resources/runtimets/queries/comparison/issue363_inequality_line/issue363_inequality_line.3.query.aql
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-/*
- * Description  : a test case for inequality comparisons of line
- * Expected Res : Failure
- * Date         : 9 May 2013
- * Issue        : 363
- */
- 
-let $v1 := line("10.1234,11.1e-1 +10.2E-2,-11.22")
-let $dv1 := line("10.1234,11.1e-1 +10.2E-2,-11.22")
-
-return { "line0":  $v1 > $dv1, "line1": $dv1 < $v1, "line2":  $v1 >= $dv1, 
"line3": $dv1 <= $v1 }
diff --git 
a/asterixdb/asterix-app/src/test/resources/runtimets/queries/comparison/issue363_inequality_point/issue363_inequality_point.3.query.aql
 
b/asterixdb/asterix-app/src/test/resources/runtimets/queries/comparison/issue363_inequality_point/issue363_inequality_point.3.query.aql
deleted file mode 100644
index 04105cc..0000000
--- 
a/asterixdb/asterix-app/src/test/resources/runtimets/queries/comparison/issue363_inequality_point/issue363_inequality_point.3.query.aql
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-/*
- * Description  : a test case for inequality comparisons of point
- * Expected Res : Failure
- * Date         : 9 May 2013
- * Issue        : 363
- */
- 
-let $v1 := point("47.44,80.65")
-let $dv1 := point("47.4444,80.65")
-
-return { "point0":  $v1 > $dv1, "point1": $dv1 < $v1, "point2":  $v1 >= $dv1, 
"point3": $dv1 <= $v1 }
diff --git 
a/asterixdb/asterix-app/src/test/resources/runtimets/queries/comparison/issue363_inequality_polygon/issue363_inequality_polygon.1.ddl.aql
 
b/asterixdb/asterix-app/src/test/resources/runtimets/queries/comparison/issue363_inequality_polygon/issue363_inequality_polygon.1.ddl.aql
deleted file mode 100644
index b9de498..0000000
--- 
a/asterixdb/asterix-app/src/test/resources/runtimets/queries/comparison/issue363_inequality_polygon/issue363_inequality_polygon.1.ddl.aql
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-/*
- * Description  : a test case for inequality comparisons of polygon
- * Expected Res : Failure
- * Date         : 9 May 2013
- * Issue        : 363
- */
diff --git 
a/asterixdb/asterix-app/src/test/resources/runtimets/queries/comparison/issue363_inequality_polygon/issue363_inequality_polygon.2.update.aql
 
b/asterixdb/asterix-app/src/test/resources/runtimets/queries/comparison/issue363_inequality_polygon/issue363_inequality_polygon.2.update.aql
deleted file mode 100644
index b9de498..0000000
--- 
a/asterixdb/asterix-app/src/test/resources/runtimets/queries/comparison/issue363_inequality_polygon/issue363_inequality_polygon.2.update.aql
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-/*
- * Description  : a test case for inequality comparisons of polygon
- * Expected Res : Failure
- * Date         : 9 May 2013
- * Issue        : 363
- */
diff --git 
a/asterixdb/asterix-app/src/test/resources/runtimets/queries/comparison/issue363_inequality_polygon/issue363_inequality_polygon.3.query.aql
 
b/asterixdb/asterix-app/src/test/resources/runtimets/queries/comparison/issue363_inequality_polygon/issue363_inequality_polygon.3.query.aql
deleted file mode 100644
index 1fb676a..0000000
--- 
a/asterixdb/asterix-app/src/test/resources/runtimets/queries/comparison/issue363_inequality_polygon/issue363_inequality_polygon.3.query.aql
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-/*
- * Description  : a test case for inequality comparisons of polygon
- * Expected Res : Failure
- * Date         : 9 May 2013
- * Issue        : 363
- */
- 
-let $v1 := polygon("-1.0,+10.5e2 -02.15E+50,2.5 -1.0,+3.3e3 -2.50E+05,20.15 
+3.5e+2,03.6 -4.60E-3,+4.75 -2,+1.0e2 -2.00E+5,20.10 30.5,03.25 -4.33E-3,+4.75")
-let $dv1 := polygon("-1.0,+10.5e2 -02.19E+50,2.5 -1.0,+3.3e3 -2.50E+05,20.15 
+3.5e+2,03.6 -4.60E-3,+4.75 -2,+1.0e2 -2.00E+5,20.10 30.5,03.25 -4.33E-3,+4.75")
-
-return { "polygon0":  $v1 > $dv1, "polygon1": $dv1 < $v1, "polygon2":  $v1 >= 
$dv1, "polygon3": $dv1 <= $v1 }
diff --git 
a/asterixdb/asterix-app/src/test/resources/runtimets/queries/comparison/issue363_inequality_rectangle/issue363_inequality_rectangle.1.ddl.aql
 
b/asterixdb/asterix-app/src/test/resources/runtimets/queries/comparison/issue363_inequality_rectangle/issue363_inequality_rectangle.1.ddl.aql
deleted file mode 100644
index 98b797d..0000000
--- 
a/asterixdb/asterix-app/src/test/resources/runtimets/queries/comparison/issue363_inequality_rectangle/issue363_inequality_rectangle.1.ddl.aql
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-/*
- * Description  : a test case for inequality comparisons of rectangle
- * Expected Res : Failure
- * Date         : 9 May 2013
- * Issue        : 363
- */
diff --git 
a/asterixdb/asterix-app/src/test/resources/runtimets/queries/comparison/issue363_inequality_rectangle/issue363_inequality_rectangle.2.update.aql
 
b/asterixdb/asterix-app/src/test/resources/runtimets/queries/comparison/issue363_inequality_rectangle/issue363_inequality_rectangle.2.update.aql
deleted file mode 100644
index 98b797d..0000000
--- 
a/asterixdb/asterix-app/src/test/resources/runtimets/queries/comparison/issue363_inequality_rectangle/issue363_inequality_rectangle.2.update.aql
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-/*
- * Description  : a test case for inequality comparisons of rectangle
- * Expected Res : Failure
- * Date         : 9 May 2013
- * Issue        : 363
- */
diff --git 
a/asterixdb/asterix-app/src/test/resources/runtimets/queries/comparison/issue363_inequality_rectangle/issue363_inequality_rectangle.3.query.aql
 
b/asterixdb/asterix-app/src/test/resources/runtimets/queries/comparison/issue363_inequality_rectangle/issue363_inequality_rectangle.3.query.aql
deleted file mode 100644
index 378aaae..0000000
--- 
a/asterixdb/asterix-app/src/test/resources/runtimets/queries/comparison/issue363_inequality_rectangle/issue363_inequality_rectangle.3.query.aql
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-/*
- * Description  : a test case for inequality comparisons of rectangle
- * Expected Res : Failure
- * Date         : 9 May 2013
- * Issue        : 363
- */
- 
-let $v1 := rectangle("0.1234,-1.00e-10 5.5487,0.48765")
-let $dv1 := rectangle("0.5678,-1.00e-10 5.5487,0.48765")
-
-return { "rectangle0":  $v1 > $dv1, "rectangle1": $dv1 < $v1, "rectangle2":  
$v1 >= $dv1, "rectangle3": $dv1 <= $v1 }
diff --git 
a/asterixdb/asterix-app/src/test/resources/runtimets/queries/comparison/issue363_inequality_circle/issue363_inequality_circle.2.update.aql
 
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/comparison/incomparable_types/incomparable_types.001.ddl.sqlpp
similarity index 80%
rename from 
asterixdb/asterix-app/src/test/resources/runtimets/queries/comparison/issue363_inequality_circle/issue363_inequality_circle.2.update.aql
rename to 
asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/comparison/incomparable_types/incomparable_types.001.ddl.sqlpp
index 2ffaa10..6c25dfd 100644
--- 
a/asterixdb/asterix-app/src/test/resources/runtimets/queries/comparison/issue363_inequality_circle/issue363_inequality_circle.2.update.aql
+++ 
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/comparison/incomparable_types/incomparable_types.001.ddl.sqlpp
@@ -16,9 +16,12 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-/*
- * Description  : a test case for inequality comparisons of circle
- * Expected Res : Failure
- * Date         : 9 May 2013
- * Issue        : 363
- */
+
+drop dataverse test if exists;
+create dataverse test;
+use test;
+
+create type openType as {id:int};
+
+create dataset ds1(openType) primary key id;
+create dataset ds2(openType) primary key id;
\ No newline at end of file
diff --git 
a/asterixdb/asterix-app/src/test/resources/runtimets/queries/comparison/issue363_inequality_line/issue363_inequality_line.1.ddl.aql
 
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/comparison/incomparable_types/incomparable_types.002.update.sqlpp
similarity index 84%
rename from 
asterixdb/asterix-app/src/test/resources/runtimets/queries/comparison/issue363_inequality_line/issue363_inequality_line.1.ddl.aql
rename to 
asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/comparison/incomparable_types/incomparable_types.002.update.sqlpp
index 104f28d..ee7136f 100644
--- 
a/asterixdb/asterix-app/src/test/resources/runtimets/queries/comparison/issue363_inequality_line/issue363_inequality_line.1.ddl.aql
+++ 
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/comparison/incomparable_types/incomparable_types.002.update.sqlpp
@@ -16,9 +16,9 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-/*
- * Description  : a test case for inequality comparisons of line
- * Expected Res : Failure
- * Date         : 9 May 2013
- * Issue        : 363
- */
+
+use test;
+
+insert into ds1 {"id": 1, "f": 5};
+insert into ds1 {"id": 2, "f": "str"};
+insert into ds2 {"id": 1, "f": "str"};
\ No newline at end of file
diff --git 
a/asterixdb/asterix-app/src/test/resources/runtimets/queries/comparison/issue363_inequality_line/issue363_inequality_line.2.update.aql
 
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/comparison/incomparable_types/incomparable_types.003.query.sqlpp
similarity index 84%
rename from 
asterixdb/asterix-app/src/test/resources/runtimets/queries/comparison/issue363_inequality_line/issue363_inequality_line.2.update.aql
rename to 
asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/comparison/incomparable_types/incomparable_types.003.query.sqlpp
index 104f28d..66e6595 100644
--- 
a/asterixdb/asterix-app/src/test/resources/runtimets/queries/comparison/issue363_inequality_line/issue363_inequality_line.2.update.aql
+++ 
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/comparison/incomparable_types/incomparable_types.003.query.sqlpp
@@ -16,9 +16,11 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-/*
- * Description  : a test case for inequality comparisons of line
- * Expected Res : Failure
- * Date         : 9 May 2013
- * Issue        : 363
- */
+
+-- param max-warnings:string=10
+
+use test;
+
+from ds1 join ds2 on ds1.f /*+ hash-bcast */ = ds2.f
+where ds1.f > 1
+select ds1.f;
\ No newline at end of file
diff --git 
a/asterixdb/asterix-app/src/test/resources/runtimets/queries/comparison/issue363_inequality_point/issue363_inequality_point.1.ddl.aql
 
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/comparison/incomparable_types/incomparable_types.004.query.sqlpp
similarity index 84%
rename from 
asterixdb/asterix-app/src/test/resources/runtimets/queries/comparison/issue363_inequality_point/issue363_inequality_point.1.ddl.aql
rename to 
asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/comparison/incomparable_types/incomparable_types.004.query.sqlpp
index 2d94d3c..a61ae14 100644
--- 
a/asterixdb/asterix-app/src/test/resources/runtimets/queries/comparison/issue363_inequality_point/issue363_inequality_point.1.ddl.aql
+++ 
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/comparison/incomparable_types/incomparable_types.004.query.sqlpp
@@ -16,9 +16,11 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-/*
- * Description  : a test case for inequality comparisons of point
- * Expected Res : Failure
- * Date         : 9 May 2013
- * Issue        : 363
- */
+
+-- param max-warnings:string=10
+
+from [
+[1,2] < 4,
+point('0.0,0.0') < point('0.0,1.0')
+] as data
+select data;
\ No newline at end of file
diff --git 
a/asterixdb/asterix-app/src/test/resources/runtimets/queries/comparison/issue363_inequality_point/issue363_inequality_point.2.update.aql
 
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/comparison/incomparable_types/incomparable_types.005.ddl.sqlpp
similarity index 84%
rename from 
asterixdb/asterix-app/src/test/resources/runtimets/queries/comparison/issue363_inequality_point/issue363_inequality_point.2.update.aql
rename to 
asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/comparison/incomparable_types/incomparable_types.005.ddl.sqlpp
index 2d94d3c..548e632 100644
--- 
a/asterixdb/asterix-app/src/test/resources/runtimets/queries/comparison/issue363_inequality_point/issue363_inequality_point.2.update.aql
+++ 
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/comparison/incomparable_types/incomparable_types.005.ddl.sqlpp
@@ -16,9 +16,5 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-/*
- * Description  : a test case for inequality comparisons of point
- * Expected Res : Failure
- * Date         : 9 May 2013
- * Issue        : 363
- */
+
+drop dataverse test if exists;
\ No newline at end of file
diff --git 
a/asterixdb/asterix-app/src/test/resources/runtimets/results/comparison/incomparable_types/incomparable_types.1.adm
 
b/asterixdb/asterix-app/src/test/resources/runtimets/results/comparison/incomparable_types/incomparable_types.1.adm
new file mode 100644
index 0000000..e69de29
diff --git 
a/asterixdb/asterix-app/src/test/resources/runtimets/results/comparison/incomparable_types/incomparable_types.2.adm
 
b/asterixdb/asterix-app/src/test/resources/runtimets/results/comparison/incomparable_types/incomparable_types.2.adm
new file mode 100644
index 0000000..b036da7
--- /dev/null
+++ 
b/asterixdb/asterix-app/src/test/resources/runtimets/results/comparison/incomparable_types/incomparable_types.2.adm
@@ -0,0 +1,2 @@
+{ "data": null }
+{ "data": null }
\ No newline at end of file
diff --git 
a/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml 
b/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml
index bf16d65..2b3cb77 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml
@@ -3367,6 +3367,14 @@
         <output-dir compare="Text">circle-point</output-dir>
       </compilation-unit>
     </test-case>
+    <test-case FilePath="comparison" check-warnings="true">
+      <compilation-unit name="incomparable_types">
+        <output-dir compare="Text">incomparable_types</output-dir>
+          <expected-warn>Incomparable input types: string and bigint (in line 
25, at column 13)</expected-warn>
+          <expected-warn>Incomparable input types: array and bigint (in line 
23, at column 7)</expected-warn>
+          <expected-warn>Incomparable input types: point and point (in line 
24, at column 18)</expected-warn>
+      </compilation-unit>
+    </test-case>
   </test-group>
   <test-group name="constructor">
     <test-case FilePath="constructor">
diff --git 
a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/exceptions/ErrorCode.java
 
b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/exceptions/ErrorCode.java
index da1c4e7..95cd4a8 100644
--- 
a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/exceptions/ErrorCode.java
+++ 
b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/exceptions/ErrorCode.java
@@ -81,6 +81,7 @@ public class ErrorCode {
     public static final int INVALID_LIKE_PATTERN = 46;
     public static final int INVALID_REQ_PARAM_VAL = 47;
     public static final int INVALID_REQ_JSON_VAL = 48;
+    public static final int INCOMPARABLE_TYPES = 49;
 
     public static final int UNSUPPORTED_JRE = 100;
 
diff --git 
a/asterixdb/asterix-common/src/main/resources/asx_errormsg/en.properties 
b/asterixdb/asterix-common/src/main/resources/asx_errormsg/en.properties
index 457206d..12d7284 100644
--- a/asterixdb/asterix-common/src/main/resources/asx_errormsg/en.properties
+++ b/asterixdb/asterix-common/src/main/resources/asx_errormsg/en.properties
@@ -40,7 +40,7 @@
 13,1006 = Duplicate field name \"%1$s\"
 1009 = A returning expression cannot contain dataset access
 37,1091 = Type mismatch: expected value of type %1$s, but got the value of 
type %2$s
-
+49 = Incomparable input types: %1$s and %2$s
 
 # Data errors
 6 = Invalid format for %1$s in %2$s
@@ -83,6 +83,7 @@
 46 = Invalid pattern \"%1$s\" for LIKE
 47 = Invalid value for parameter \"%1$s\": %2$s
 48 = Unable to process JSON content in request
+#49 is used
 
 100 = Unsupported JRE: %1$s
 
diff --git 
a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/exceptions/ExceptionUtil.java
 
b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/exceptions/ExceptionUtil.java
index b5d599b..ec844ce 100644
--- 
a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/exceptions/ExceptionUtil.java
+++ 
b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/exceptions/ExceptionUtil.java
@@ -124,6 +124,14 @@ public final class ExceptionUtil {
         }
     }
 
+    public static void warnIncomparableTypes(IEvaluatorContext ctx, 
SourceLocation srcLoc, ATypeTag type1,
+            ATypeTag type2) {
+        IWarningCollector warningCollector = ctx.getWarningCollector();
+        if (warningCollector.shouldWarn()) {
+            warningCollector.warn(WarningUtil.forAsterix(srcLoc, 
ErrorCode.INCOMPARABLE_TYPES, type1, type2));
+        }
+    }
+
     /** For functions that accept an integer value (no fractions) of any 
numeric type including double & float */
     public static void warnNonInteger(IEvaluatorContext ctx, SourceLocation 
srcLoc, FunctionIdentifier fid, int argIdx,
             double argValue) {
diff --git 
a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/comparisons/AbstractComparisonEvaluator.java
 
b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/comparisons/AbstractComparisonEvaluator.java
index 244ffc3..668548d 100644
--- 
a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/comparisons/AbstractComparisonEvaluator.java
+++ 
b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/comparisons/AbstractComparisonEvaluator.java
@@ -70,19 +70,21 @@ public abstract class AbstractComparisonEvaluator 
implements IScalarEvaluator {
     protected final ArrayBackedValueStorage resultStorage = new 
ArrayBackedValueStorage();
     protected final DataOutput out = resultStorage.getDataOutput();
     protected final TaggedValuePointable argLeft = 
TaggedValuePointable.FACTORY.createPointable();
-    private final TaggedValuePointable argRight = 
TaggedValuePointable.FACTORY.createPointable();
+    protected final TaggedValuePointable argRight = 
TaggedValuePointable.FACTORY.createPointable();
+    protected final SourceLocation sourceLoc;
+    protected final IEvaluatorContext ctx;
     private final TaggedValueReference leftVal = new TaggedValueReference();
     private final TaggedValueReference rightVal = new TaggedValueReference();
     private final IScalarEvaluator evalLeft;
     private final IScalarEvaluator evalRight;
-    protected final SourceLocation sourceLoc;
     private final ILogicalBinaryComparator logicalComparator;
-    private IAObject leftConstant;
-    private IAObject rightConstant;
+    private final IAObject leftConstant;
+    private final IAObject rightConstant;
 
-    public AbstractComparisonEvaluator(IScalarEvaluatorFactory 
evalLeftFactory, IAType leftType,
+    AbstractComparisonEvaluator(IScalarEvaluatorFactory evalLeftFactory, 
IAType leftType,
             IScalarEvaluatorFactory evalRightFactory, IAType rightType, 
IEvaluatorContext ctx, SourceLocation sourceLoc,
             boolean isEquality) throws HyracksDataException {
+        this.ctx = ctx;
         this.evalLeft = evalLeftFactory.createScalarEvaluator(ctx);
         this.evalRight = evalRightFactory.createScalarEvaluator(ctx);
         this.sourceLoc = sourceLoc;
@@ -91,11 +93,8 @@ public abstract class AbstractComparisonEvaluator implements 
IScalarEvaluator {
         rightConstant = getValueOfConstantEval(evalRightFactory);
     }
 
-    private IAObject getValueOfConstantEval(IScalarEvaluatorFactory factory) {
-        if (factory instanceof ConstantEvalFactory) {
-            return getConstantValue(((ConstantEvalFactory) 
factory).getValue());
-        }
-        return null;
+    private static IAObject getValueOfConstantEval(IScalarEvaluatorFactory 
factory) {
+        return factory instanceof ConstantEvalFactory ? 
getConstant(((ConstantEvalFactory) factory).getValue()) : null;
     }
 
     @Override
@@ -118,20 +117,11 @@ public abstract class AbstractComparisonEvaluator 
implements IScalarEvaluator {
 
     final Result compare() throws HyracksDataException {
         if (leftConstant != null) {
-            if (rightConstant != null) {
-                // both are constants
-                return logicalComparator.compare(leftConstant, rightConstant);
-            } else {
-                // left is constant, right isn't
-                return logicalComparator.compare(leftConstant, rightVal);
-            }
+            return rightConstant != null ? 
logicalComparator.compare(leftConstant, rightConstant)
+                    : logicalComparator.compare(leftConstant, rightVal);
         } else {
-            if (rightConstant != null) {
-                // right is constant, left isn't
-                return logicalComparator.compare(leftVal, rightConstant);
-            } else {
-                return logicalComparator.compare(leftVal, rightVal);
-            }
+            return rightConstant != null ? logicalComparator.compare(leftVal, 
rightConstant)
+                    : logicalComparator.compare(leftVal, rightVal);
         }
     }
 
@@ -147,7 +137,7 @@ public abstract class AbstractComparisonEvaluator 
implements IScalarEvaluator {
         result.set(resultStorage);
     }
 
-    private IAObject getConstantValue(byte[] bytes) {
+    private static IAObject getConstant(byte[] bytes) {
         int start = 0;
         ATypeTag typeTag = 
EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(bytes[start]);
         if (typeTag == null) {
diff --git 
a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/comparisons/AbstractIfEqualsEvaluator.java
 
b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/comparisons/AbstractIfEqualsEvaluator.java
index 37b5bb8..1d6a7dc 100644
--- 
a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/comparisons/AbstractIfEqualsEvaluator.java
+++ 
b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/comparisons/AbstractIfEqualsEvaluator.java
@@ -36,6 +36,7 @@ public abstract class AbstractIfEqualsEvaluator extends 
AbstractComparisonEvalua
 
     @Override
     protected void evaluateImpl(IPointable result) throws HyracksDataException 
{
+        // TODO(ali): revisit this for the cases of MISSING/NULL/INCOMPARABLE
         switch (compare()) {
             case MISSING:
                 writeMissing(result);
diff --git 
a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/comparisons/AbstractValueComparisonEvaluator.java
 
b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/comparisons/AbstractValueComparisonEvaluator.java
index 24b655d8..54af8f7 100644
--- 
a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/comparisons/AbstractValueComparisonEvaluator.java
+++ 
b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/comparisons/AbstractValueComparisonEvaluator.java
@@ -19,9 +19,12 @@
 
 package org.apache.asterix.runtime.evaluators.comparisons;
 
+import static org.apache.asterix.om.types.ATypeTag.VALUE_TYPE_MAPPING;
+
 import org.apache.asterix.dataflow.data.common.ILogicalBinaryComparator.Result;
 import org.apache.asterix.formats.nontagged.SerializerDeserializerProvider;
 import org.apache.asterix.om.base.ABoolean;
+import org.apache.asterix.om.exceptions.ExceptionUtil;
 import org.apache.asterix.om.types.BuiltinType;
 import org.apache.asterix.om.types.IAType;
 import org.apache.hyracks.algebricks.runtime.base.IEvaluatorContext;
@@ -50,12 +53,16 @@ public abstract class AbstractValueComparisonEvaluator 
extends AbstractCompariso
                 writeMissing(result);
                 break;
             case NULL:
+                writeNull(result);
+                break;
             case INCOMPARABLE:
+                ExceptionUtil.warnIncomparableTypes(ctx, sourceLoc, 
VALUE_TYPE_MAPPING[argLeft.getTag()],
+                        VALUE_TYPE_MAPPING[argRight.getTag()]);
                 writeNull(result);
                 break;
             default:
                 resultStorage.reset();
-                ABoolean b = getComparisonResult(comparisonResult) ? 
ABoolean.TRUE : ABoolean.FALSE;
+                ABoolean b = 
ABoolean.valueOf(getComparisonResult(comparisonResult));
                 serde.serialize(b, out);
                 result.set(resultStorage);
         }
diff --git 
a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/utils/DotFormatGenerator.java
 
b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/utils/DotFormatGenerator.java
index d6895e3..5402751 100644
--- 
a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/utils/DotFormatGenerator.java
+++ 
b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/utils/DotFormatGenerator.java
@@ -19,13 +19,9 @@
 package org.apache.hyracks.algebricks.core.utils;
 
 import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
 import java.util.Set;
 
 import org.apache.commons.lang3.mutable.Mutable;
-import org.apache.commons.lang3.tuple.ImmutablePair;
-import org.apache.commons.lang3.tuple.Pair;
 import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
 import org.apache.hyracks.algebricks.core.algebra.base.ILogicalOperator;
 import org.apache.hyracks.algebricks.core.algebra.base.ILogicalPlan;
@@ -34,136 +30,13 @@ import 
org.apache.hyracks.algebricks.core.algebra.operators.logical.AbstractLogi
 import 
org.apache.hyracks.algebricks.core.algebra.operators.logical.AbstractOperatorWithNestedPlans;
 import 
org.apache.hyracks.algebricks.core.algebra.operators.logical.AbstractReplicateOperator;
 import 
org.apache.hyracks.algebricks.core.algebra.operators.logical.ExchangeOperator;
-import org.apache.hyracks.api.constraints.Constraint;
-import org.apache.hyracks.api.constraints.expressions.ConstraintExpression;
-import 
org.apache.hyracks.api.constraints.expressions.LValueConstraintExpression;
-import org.apache.hyracks.api.constraints.expressions.PartitionCountExpression;
-import 
org.apache.hyracks.api.constraints.expressions.PartitionLocationExpression;
-import org.apache.hyracks.api.dataflow.ActivityId;
-import org.apache.hyracks.api.dataflow.ConnectorDescriptorId;
-import org.apache.hyracks.api.dataflow.IActivity;
-import org.apache.hyracks.api.dataflow.IConnectorDescriptor;
-import org.apache.hyracks.api.dataflow.IOperatorDescriptor;
-import org.apache.hyracks.api.job.JobActivityGraph;
-import org.apache.hyracks.api.job.JobSpecification;
+import org.apache.hyracks.api.util.DotFormatBuilder;
 
 public class DotFormatGenerator {
 
     private final LogicalOperatorDotVisitor dotVisitor = new 
LogicalOperatorDotVisitor();
 
     /**
-     * Generates DOT format plan for {@link JobActivityGraph} that can be 
visualized using any DOT format visualizer.
-     *
-     * @param jobActivityGraph The job activity graph
-     * @return DOT format plan
-     */
-    public static String generate(final JobActivityGraph jobActivityGraph) {
-        final DotFormatBuilder graphBuilder = new 
DotFormatBuilder(DotFormatBuilder.StringValue.of("JobActivityGraph"));
-        List<IConnectorDescriptor> connectors;
-        IActivity activity;
-        ActivityId fromActivityId;
-        ActivityId toActivityId;
-        String fromFullClassName;
-        String toFullClassName;
-        String fromClassName;
-        String toClassName;
-        DotFormatBuilder.Node fromNode;
-        DotFormatBuilder.Node toNode;
-        final Set<Pair<ActivityId, ActivityId>> activitiesPairedSet = new 
HashSet<>();
-        final Map<ActivityId, IActivity> activityMap = 
jobActivityGraph.getActivityMap();
-        final Map<ActivityId, List<IConnectorDescriptor>> activityInputMap = 
jobActivityGraph.getActivityInputMap();
-        final Map<ActivityId, List<IConnectorDescriptor>> activityOutputMap = 
jobActivityGraph.getActivityOutputMap();
-
-        // go through each activity. First, map its input -> activity, then 
activity -> its output
-        for (Map.Entry<ActivityId, IActivity> entry : activityMap.entrySet()) {
-            toFullClassName = entry.getValue().getClass().getName();
-            toClassName = 
toFullClassName.substring(toFullClassName.lastIndexOf('.') + 1);
-            toActivityId = entry.getValue().getActivityId();
-            toNode = 
graphBuilder.createNode(DotFormatBuilder.StringValue.of(toActivityId.toString()),
-                    DotFormatBuilder.StringValue.of(toActivityId.toString() + 
"-" + toClassName));
-            // process input -> to activity
-            connectors = activityInputMap.get(entry.getKey());
-            if (connectors != null) {
-                for (IConnectorDescriptor connector : connectors) {
-                    fromActivityId = 
jobActivityGraph.getProducerActivity(connector.getConnectorId());
-                    activity = activityMap.get(fromActivityId);
-                    fromFullClassName = activity.getClass().getName();
-                    fromClassName = 
fromFullClassName.substring(fromFullClassName.lastIndexOf('.') + 1);
-                    fromNode = 
graphBuilder.createNode(DotFormatBuilder.StringValue.of(fromActivityId.toString()),
-                            
DotFormatBuilder.StringValue.of(fromActivityId.toString() + "-" + 
fromClassName));
-                    Pair<ActivityId, ActivityId> newPair = new 
ImmutablePair<>(fromActivityId, toActivityId);
-                    if (!activitiesPairedSet.contains(newPair)) {
-                        activitiesPairedSet.add(newPair);
-                        graphBuilder.createEdge(fromNode, toNode);
-                    }
-                }
-            }
-
-            // process from activity -> output
-            fromActivityId = toActivityId;
-            fromNode = toNode;
-            connectors = activityOutputMap.get(entry.getKey());
-            if (connectors != null) {
-                for (IConnectorDescriptor connector : connectors) {
-                    toActivityId = 
jobActivityGraph.getConsumerActivity(connector.getConnectorId());
-                    activity = activityMap.get(toActivityId);
-                    toFullClassName = activity.getClass().getName();
-                    toClassName = 
toFullClassName.substring(toFullClassName.lastIndexOf('.') + 1);
-                    toNode = 
graphBuilder.createNode(DotFormatBuilder.StringValue.of(toActivityId.toString()),
-                            
DotFormatBuilder.StringValue.of(toActivityId.toString() + "-" + toClassName));
-                    Pair<ActivityId, ActivityId> newPair = new 
ImmutablePair<>(fromActivityId, toActivityId);
-                    if (!activitiesPairedSet.contains(newPair)) {
-                        activitiesPairedSet.add(newPair);
-                        graphBuilder.createEdge(fromNode, toNode);
-                    }
-                }
-            }
-        }
-
-        final Map<ActivityId, Set<ActivityId>> blocked2BlockerMap = 
jobActivityGraph.getBlocked2BlockerMap();
-        IActivity blockedActivity;
-        for (Map.Entry<ActivityId, Set<ActivityId>> entry : 
blocked2BlockerMap.entrySet()) {
-            blockedActivity = activityMap.get(entry.getKey());
-            toFullClassName = blockedActivity.getClass().getName();
-            toClassName = 
toFullClassName.substring(toFullClassName.lastIndexOf('.') + 1);
-            toActivityId = entry.getKey();
-            toNode = 
graphBuilder.createNode(DotFormatBuilder.StringValue.of(toActivityId.toString()),
-                    DotFormatBuilder.StringValue.of(toActivityId.toString() + 
"-" + toClassName));
-            for (ActivityId blockingActivityId : entry.getValue()) {
-                fromActivityId = blockingActivityId;
-                activity = activityMap.get(fromActivityId);
-                fromFullClassName = activity.getClass().getName();
-                fromClassName = 
fromFullClassName.substring(fromFullClassName.lastIndexOf('.') + 1);
-                fromNode = 
graphBuilder.createNode(DotFormatBuilder.StringValue.of(fromActivityId.toString()),
-                        
DotFormatBuilder.StringValue.of(fromActivityId.toString() + "-" + 
fromClassName));
-                Pair<ActivityId, ActivityId> newPair = new 
ImmutablePair<>(fromActivityId, toActivityId);
-                if (!activitiesPairedSet.contains(newPair)) {
-                    activitiesPairedSet.add(newPair);
-                    graphBuilder.createEdge(fromNode, 
toNode).setColor(DotFormatBuilder.Color.RED);
-                }
-            }
-        }
-
-        return graphBuilder.getDotDocument();
-    }
-
-    /**
-     * Generates DOT format plan for {@link JobSpecification} that can be 
visualized using any DOT format visualizer.
-     *
-     * @param jobSpecification The job specification
-     * @return DOT format plan
-     */
-    public static String generate(final JobSpecification jobSpecification) {
-        final DotFormatBuilder graphBuilder = new 
DotFormatBuilder(DotFormatBuilder.StringValue.of("JobSpecification"));
-        final Map<ConnectorDescriptorId, IConnectorDescriptor> connectorMap = 
jobSpecification.getConnectorMap();
-        final Set<Constraint> constraints = 
jobSpecification.getUserConstraints();
-        Map<ConnectorDescriptorId, Pair<Pair<IOperatorDescriptor, Integer>, 
Pair<IOperatorDescriptor, Integer>>> cOp =
-                jobSpecification.getConnectorOperatorMap();
-        cOp.forEach((connId, srcAndDest) -> addToGraph(graphBuilder, 
constraints, connectorMap, connId, srcAndDest));
-        return graphBuilder.getDotDocument();
-    }
-
-    /**
      * Generates DOT format plan for {@link ILogicalPlan} that can be 
visualized using any DOT format visualizer.
      *
      * @param plan  The logical plan
@@ -250,47 +123,4 @@ public class DotFormatGenerator {
         String formattedString = operator.accept(dotVisitor, 
showDetails).trim();
         return DotFormatBuilder.StringValue.of(formattedString);
     }
-
-    private static void addToGraph(DotFormatBuilder graph, Set<Constraint> 
constraints,
-            Map<ConnectorDescriptorId, IConnectorDescriptor> connMap, 
ConnectorDescriptorId connId,
-            Pair<Pair<IOperatorDescriptor, Integer>, Pair<IOperatorDescriptor, 
Integer>> srcAndDest) {
-        IConnectorDescriptor connector = connMap.get(connId);
-        String edgeLabel;
-        edgeLabel = 
connector.getClass().getName().substring(connector.getClass().getName().lastIndexOf(".")
 + 1);
-        edgeLabel += "-" + connId;
-        IOperatorDescriptor sourceOp = srcAndDest.getLeft().getLeft();
-        IOperatorDescriptor destOp = srcAndDest.getRight().getLeft();
-        StringBuilder source = new StringBuilder(
-                
sourceOp.getClass().getName().substring(sourceOp.getClass().getName().lastIndexOf(".")
 + 1));
-        StringBuilder destination = new StringBuilder(
-                
destOp.getClass().getName().substring(destOp.getClass().getName().lastIndexOf(".")
 + 1));
-        // constraints
-        for (Constraint constraint : constraints) {
-            LValueConstraintExpression lvalue = constraint.getLValue();
-            if (lvalue.getTag() == 
ConstraintExpression.ExpressionTag.PARTITION_COUNT) {
-                PartitionCountExpression count = (PartitionCountExpression) 
lvalue;
-                if 
(count.getOperatorDescriptorId().equals(sourceOp.getOperatorId())) {
-                    source.append("\n").append(constraint);
-                }
-                if 
(count.getOperatorDescriptorId().equals(destOp.getOperatorId())) {
-                    destination.append("\n").append(constraint);
-                }
-            } else if (lvalue.getTag() == 
ConstraintExpression.ExpressionTag.PARTITION_LOCATION) {
-                PartitionLocationExpression location = 
(PartitionLocationExpression) lvalue;
-                if 
(location.getOperatorDescriptorId().equals(sourceOp.getOperatorId())) {
-                    source.append("\n").append(constraint);
-                }
-                if 
(location.getOperatorDescriptorId().equals(destOp.getOperatorId())) {
-                    destination.append("\n").append(constraint);
-                }
-            }
-        }
-        DotFormatBuilder.Node sourceNode =
-                
graph.createNode(DotFormatBuilder.StringValue.of(sourceOp.getOperatorId().toString()),
-                        DotFormatBuilder.StringValue.of(sourceOp.toString() + 
"-" + source));
-        DotFormatBuilder.Node destinationNode =
-                
graph.createNode(DotFormatBuilder.StringValue.of(destOp.getOperatorId().toString()),
-                        DotFormatBuilder.StringValue.of(destOp.toString() + 
"-" + destination));
-        graph.createEdge(sourceNode, 
destinationNode).setLabel(DotFormatBuilder.StringValue.of(edgeLabel));
-    }
 }
diff --git 
a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/utils/DotFormatBuilder.java
 
b/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/util/DotFormatBuilder.java
similarity index 93%
rename from 
hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/utils/DotFormatBuilder.java
rename to 
hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/util/DotFormatBuilder.java
index e782e4f..9f9b4fa 100644
--- 
a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/utils/DotFormatBuilder.java
+++ 
b/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/util/DotFormatBuilder.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.hyracks.algebricks.core.utils;
+package org.apache.hyracks.api.util;
 
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -164,6 +164,11 @@ public class DotFormatBuilder {
             return this;
         }
 
+        public Edge setDashed() {
+            attributes.put(Attribute.STYLE, Style.DASHED);
+            return this;
+        }
+
         @Override
         public boolean equals(Object other) {
             if (!(other instanceof Edge)) {
@@ -231,6 +236,7 @@ public class DotFormatBuilder {
     public static final class Color extends AttributeValue {
         public static final Color RED = new Color("red");
         public static final Color SKYBLUE = new Color("skyblue");
+        public static final Color BLUE = new Color("blue");
 
         // no instantiation
         private Color(String color) {
@@ -238,9 +244,19 @@ public class DotFormatBuilder {
         }
     }
 
-    private class Attribute {
+    public static final class Style extends AttributeValue {
+        public static final Style DASHED = new Style("dashed");
+
+        // no instantiation
+        private Style(String style) {
+            super(style);
+        }
+    }
+
+    private static final class Attribute {
         private static final String COLOR = "color";
         private static final String LABEL = "label";
+        private static final String STYLE = "style";
 
         // no instantiation
         private Attribute() {
diff --git 
a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/utils/DotFormatGenerator.java
 
b/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/util/DotFormatGenerator.java
similarity index 65%
copy from 
hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/utils/DotFormatGenerator.java
copy to 
hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/util/DotFormatGenerator.java
index d6895e3..10ae66e 100644
--- 
a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/utils/DotFormatGenerator.java
+++ 
b/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/util/DotFormatGenerator.java
@@ -16,24 +16,15 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.hyracks.algebricks.core.utils;
+package org.apache.hyracks.api.util;
 
 import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
-import org.apache.commons.lang3.mutable.Mutable;
 import org.apache.commons.lang3.tuple.ImmutablePair;
 import org.apache.commons.lang3.tuple.Pair;
-import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
-import org.apache.hyracks.algebricks.core.algebra.base.ILogicalOperator;
-import org.apache.hyracks.algebricks.core.algebra.base.ILogicalPlan;
-import org.apache.hyracks.algebricks.core.algebra.base.LogicalOperatorTag;
-import 
org.apache.hyracks.algebricks.core.algebra.operators.logical.AbstractLogicalOperator;
-import 
org.apache.hyracks.algebricks.core.algebra.operators.logical.AbstractOperatorWithNestedPlans;
-import 
org.apache.hyracks.algebricks.core.algebra.operators.logical.AbstractReplicateOperator;
-import 
org.apache.hyracks.algebricks.core.algebra.operators.logical.ExchangeOperator;
 import org.apache.hyracks.api.constraints.Constraint;
 import org.apache.hyracks.api.constraints.expressions.ConstraintExpression;
 import 
org.apache.hyracks.api.constraints.expressions.LValueConstraintExpression;
@@ -47,9 +38,7 @@ import org.apache.hyracks.api.dataflow.IOperatorDescriptor;
 import org.apache.hyracks.api.job.JobActivityGraph;
 import org.apache.hyracks.api.job.JobSpecification;
 
-public class DotFormatGenerator {
-
-    private final LogicalOperatorDotVisitor dotVisitor = new 
LogicalOperatorDotVisitor();
+public final class DotFormatGenerator {
 
     /**
      * Generates DOT format plan for {@link JobActivityGraph} that can be 
visualized using any DOT format visualizer.
@@ -94,7 +83,10 @@ public class DotFormatGenerator {
                     Pair<ActivityId, ActivityId> newPair = new 
ImmutablePair<>(fromActivityId, toActivityId);
                     if (!activitiesPairedSet.contains(newPair)) {
                         activitiesPairedSet.add(newPair);
-                        graphBuilder.createEdge(fromNode, toNode);
+                        DotFormatBuilder.Edge edge = 
graphBuilder.createEdge(fromNode, toNode);
+                        if (connector.allProducersToAllConsumers()) {
+                            
edge.setDashed().setColor(DotFormatBuilder.Color.BLUE);
+                        }
                     }
                 }
             }
@@ -114,7 +106,10 @@ public class DotFormatGenerator {
                     Pair<ActivityId, ActivityId> newPair = new 
ImmutablePair<>(fromActivityId, toActivityId);
                     if (!activitiesPairedSet.contains(newPair)) {
                         activitiesPairedSet.add(newPair);
-                        graphBuilder.createEdge(fromNode, toNode);
+                        DotFormatBuilder.Edge edge = 
graphBuilder.createEdge(fromNode, toNode);
+                        if (connector.allProducersToAllConsumers()) {
+                            
edge.setDashed().setColor(DotFormatBuilder.Color.BLUE);
+                        }
                     }
                 }
             }
@@ -163,94 +158,6 @@ public class DotFormatGenerator {
         return graphBuilder.getDotDocument();
     }
 
-    /**
-     * Generates DOT format plan for {@link ILogicalPlan} that can be 
visualized using any DOT format visualizer.
-     *
-     * @param plan  The logical plan
-     * @param showDetails whether to show the details of the operator like 
physical properties
-     * @return DOT format plan
-     * @throws AlgebricksException When one operator throws an exception while 
visiting it.
-     */
-    public String generate(ILogicalPlan plan, boolean showDetails) throws 
AlgebricksException {
-        ILogicalOperator root = plan.getRoots().get(0).getValue();
-        return generate(root, showDetails);
-    }
-
-    /**
-     * Generates DOT format plan considering "startingOp" as the root operator.
-     *
-     * @param startingOp the starting operator
-     * @param showDetails whether to show the details of the operator like 
physical properties
-     * @return DOT format plan
-     * @throws AlgebricksException When one operator throws an exception while 
visiting it.
-     */
-    public String generate(ILogicalOperator startingOp, boolean showDetails) 
throws AlgebricksException {
-        final DotFormatBuilder graphBuilder = new 
DotFormatBuilder(DotFormatBuilder.StringValue.of("Plan"));
-        generateNode(graphBuilder, startingOp, showDetails, new HashSet<>());
-        return graphBuilder.getDotDocument();
-    }
-
-    private void generateNode(DotFormatBuilder dotBuilder, ILogicalOperator 
op, boolean showDetails,
-            Set<ILogicalOperator> operatorsVisited) throws AlgebricksException 
{
-        DotFormatBuilder.StringValue destinationNodeLabel = formatStringOf(op, 
showDetails);
-        DotFormatBuilder.Node destinationNode = dotBuilder
-                
.createNode(DotFormatBuilder.StringValue.of(Integer.toString(op.hashCode())), 
destinationNodeLabel);
-        DotFormatBuilder.StringValue sourceNodeLabel;
-        DotFormatBuilder.Node sourceNode;
-        for (Mutable<ILogicalOperator> child : op.getInputs()) {
-            sourceNodeLabel = formatStringOf(child.getValue(), showDetails);
-            sourceNode = dotBuilder.createNode(
-                    
DotFormatBuilder.StringValue.of(Integer.toString(child.getValue().hashCode())), 
sourceNodeLabel);
-            dotBuilder.createEdge(sourceNode, destinationNode);
-            if (!operatorsVisited.contains(child.getValue())) {
-                generateNode(dotBuilder, child.getValue(), showDetails, 
operatorsVisited);
-            }
-        }
-        if (((AbstractLogicalOperator) op).hasNestedPlans()) {
-            ILogicalOperator nestedOperator;
-            for (ILogicalPlan nestedPlan : ((AbstractOperatorWithNestedPlans) 
op).getNestedPlans()) {
-                nestedOperator = nestedPlan.getRoots().get(0).getValue();
-                sourceNodeLabel = formatStringOf(nestedOperator, showDetails);
-                sourceNode = dotBuilder.createNode(
-                        
DotFormatBuilder.StringValue.of(Integer.toString(nestedOperator.hashCode())), 
sourceNodeLabel);
-                dotBuilder.createEdge(sourceNode, 
destinationNode).setLabel(DotFormatBuilder.StringValue.of("subplan"));
-                if (!operatorsVisited.contains(nestedOperator)) {
-                    generateNode(dotBuilder, nestedOperator, showDetails, 
operatorsVisited);
-                }
-            }
-        }
-        if (!(op instanceof ExchangeOperator)) {
-            destinationNode.setFillColor(DotFormatBuilder.Color.SKYBLUE);
-        }
-
-        // replicate/split operator
-        if (op.getOperatorTag() == LogicalOperatorTag.REPLICATE || 
op.getOperatorTag() == LogicalOperatorTag.SPLIT) {
-            AbstractReplicateOperator replicateOperator = 
(AbstractReplicateOperator) op;
-            ILogicalOperator replicateOutput;
-            sourceNode = destinationNode;
-            for (int i = 0; i < replicateOperator.getOutputs().size(); i++) {
-                replicateOutput = 
replicateOperator.getOutputs().get(i).getValue();
-                destinationNodeLabel = formatStringOf(replicateOutput, 
showDetails);
-                destinationNode = dotBuilder.createNode(
-                        
DotFormatBuilder.StringValue.of(Integer.toString(replicateOutput.hashCode())),
-                        destinationNodeLabel);
-                if (replicateOperator.getOutputMaterializationFlags()[i]) {
-                    dotBuilder.createEdge(sourceNode, 
destinationNode).setColor(DotFormatBuilder.Color.RED);
-                } else {
-                    dotBuilder.createEdge(sourceNode, destinationNode);
-                }
-            }
-        }
-
-        operatorsVisited.add(op);
-    }
-
-    private DotFormatBuilder.StringValue formatStringOf(ILogicalOperator 
operator, boolean showDetails)
-            throws AlgebricksException {
-        String formattedString = operator.accept(dotVisitor, 
showDetails).trim();
-        return DotFormatBuilder.StringValue.of(formattedString);
-    }
-
     private static void addToGraph(DotFormatBuilder graph, Set<Constraint> 
constraints,
             Map<ConnectorDescriptorId, IConnectorDescriptor> connMap, 
ConnectorDescriptorId connId,
             Pair<Pair<IOperatorDescriptor, Integer>, Pair<IOperatorDescriptor, 
Integer>> srcAndDest) {

Reply via email to