code: public Statement withUpdatedParameters( Value updates )
      {
          if ( updates == null || updates.isEmpty() )
          {
              return this;
          }
          else
          {
              Map<String,Value> newParameters = newHashMapWithSize( Math.max( parameters.size(), updates.size() ) );
              newParameters.putAll( parameters.asMap( ofValue() ) );
              for ( Map.Entry<String, Value> entry : updates.asMap( ofValue() ).entrySet() )
              {
                  Value value = entry.getValue();
                  if ( value.isNull() )
                  {
                      newParameters.remove( entry.getKey() );
                  }
                  else
                  {
                      newParameters.put( entry.getKey(), value );
                  }
              }
              return withParameters( value(newParameters) );
          }
      }
docs: Create a new statement with new parameters derived by updating this'
  statement's parameters using the given updates.
  
  Every update key that points to a null value will be removed from
  the new statement's parameters. All other entries will just replace
  any existing parameter in the new statement.
  
  @param updates describing how to update the parameters
  @return a new statement with updated parameters