docs: public synchronized ServerPrepareResult put(String key, ServerPrepareResult result) {
      ServerPrepareResult cachedServerPrepareResult = super.get(key);
      //if there is already some cached data (and not been deallocate), return existing cached data
      if (cachedServerPrepareResult != null && cachedServerPrepareResult.incrementShareCounter()) {
        return cachedServerPrepareResult;
      }
      //if no cache data, or been deallocate, put new result in cache
      result.setAddToCache();
      super.put(key, result);
      return null;
    }