private boolean equals(ASTNode astNode1, ASTNode astNode2) {
      if (!(astNode1.getType() == astNode2.getType() &&
              astNode1.getText().equals(astNode2.getText()) &&
              astNode1.getChildCount() == astNode2.getChildCount())) {
        return false;
      }

      for (int i = 0; i < astNode1.getChildCount(); ++i) {
        if (!equals((ASTNode) astNode1.getChild(i), (ASTNode) astNode2.getChild(i))) {
          return false;
        }
      }

      return true;
    }
Collection for storing {@link HiveRelOptMaterialization}s.
Materialization can be lookup by
- the Materialized View fully qualified name
- query text.
This implementation contains two {@link ConcurrentHashMap} one for name based and one for query text based lookup.
The map contents are synchronized during each dml operation: Dml operations are performed initially on the map
which provides name based lookup. The map which provides query text based lookup is updated by lambda expressions
passed to {@link ConcurrentHashMap#compute(Object, BiFunction)}.
ql/src/java/org/apache/hadoop/hive/ql/metadata/MaterializedViewsCache.java