Should a character array be created with String of single element or Character[].  Using Character[] creates an issue here 
          @Override
          public int estimateByteSize(Object o) {
            String value = (String) o;
            return value.length();
          }
So we need to use the String[].  Also passing expression.getByteSize() also gives null only.  Should we explicity read only one byte. This was the reason why i added a || saying isCoercible(VARCHAR).