code: public void resetAnalysisState() {
          m_countOfIndependentlyPartitionedTables = -1;
          m_countOfPartitionedTables = -1;
          m_fullColumnName = null;
          m_inferredExpression.clear();
          m_inferredParameterIndex = -1;
          m_inferredValue = null;
          m_isDML = false;
          setJoinValid(true);
          setJoinInvalidReason(null);
          m_partitionColForDML = null;
      }
docs: Sometimes when we fail to plan a statement, we try again with different inputs
  using the same StatementPartitioning object.  In this case, it's incumbent on
  callers to reset the cached analysis state set by calling this method.
  
  TODO: one could imagine separating this class into two classes:
  - One for partitioning context (such as AdHoc, stored proc, row limit delete
  trigger), which is immutable
  - One to capture the results of partitioning analysis, which can be GC'd when no
  longer needed
  This might avoid some of the pitfalls of reused stateful objects.