[CALCITE-4215] Avoid NPE when monotonicity is null
diff --git a/core/src/main/java/org/apache/calcite/sql/SqlBinaryOperator.java b/core/src/main/java/org/apache/calcite/sql/SqlBinaryOperator.java
index d28d3e9..287c317 100644
--- a/core/src/main/java/org/apache/calcite/sql/SqlBinaryOperator.java
+++ b/core/src/main/java/org/apache/calcite/sql/SqlBinaryOperator.java
@@ -153,6 +153,9 @@
     if (getName().equals("/")) {
       final SqlMonotonicity mono0 = call.getOperandMonotonicity(0);
       final SqlMonotonicity mono1 = call.getOperandMonotonicity(1);
+      if (mono0 == null || mono1 == null) {
+        return null;
+      }
       if (mono1 == SqlMonotonicity.CONSTANT) {
         if (call.isOperandLiteral(1, false)) {
           switch (call.getOperandLiteralValue(1, BigDecimal.class).signum()) {
diff --git a/core/src/main/java/org/apache/calcite/sql/fun/SqlSubstringFunction.java b/core/src/main/java/org/apache/calcite/sql/fun/SqlSubstringFunction.java
index 3366d70..952c3e9 100644
--- a/core/src/main/java/org/apache/calcite/sql/fun/SqlSubstringFunction.java
+++ b/core/src/main/java/org/apache/calcite/sql/fun/SqlSubstringFunction.java
@@ -160,7 +160,8 @@
     // SUBSTRING(x FROM 0 FOR constant) has same monotonicity as x
     if (call.getOperandCount() == 3) {
       final SqlMonotonicity mono0 = call.getOperandMonotonicity(0);
-      if ((mono0 != SqlMonotonicity.NOT_MONOTONIC)
+      if (mono0 != null
+          && mono0 != SqlMonotonicity.NOT_MONOTONIC
           && call.getOperandMonotonicity(1) == SqlMonotonicity.CONSTANT
           && call.getOperandLiteralValue(1, BigDecimal.class)
               .equals(BigDecimal.ZERO)