// -------------------------------------------------------------------------
  public MarketDataSnapshotSearchResult search(final MarketDataSnapshotSearchRequest request) {
    ArgumentChecker.notNull(request, "request");
    ArgumentChecker.notNull(request.getPagingRequest(), "request.pagingRequest");
    ArgumentChecker.notNull(request.getVersionCorrection(), "request.versionCorrection");
    s_logger.debug("search {}", request);

    final MarketDataSnapshotSearchResult result = new MarketDataSnapshotSearchResult();

    final VersionCorrection vc = request.getVersionCorrection().withLatestFixed(now());
    final DbMapSqlParameterSource args = new DbMapSqlParameterSource();
    args.addTimestamp("version_as_of_instant", vc.getVersionAsOf());
    args.addTimestamp("corrected_to_instant", vc.getCorrectedTo());
    args.addValueNullIgnored("name", getDialect().sqlWildcardAdjustValue(request.getName()));
    args.addValue("details", request.isIncludeData());
    args.addValue("paging_offset", request.getPagingRequest().getFirstItem());
    args.addValue("paging_fetch", request.getPagingRequest().getPagingSize());

    String[] sql = {
      getElSqlBundle().getSql("Search", args), getElSqlBundle().getSql("SearchCount", args)
    };
    searchWithPaging(
        request.getPagingRequest(),
        sql,
        args,
        new MarketDataSnapshotDocumentExtractor(request.isIncludeData()),
        result);
    return result;
  }
 /**
  * Adds an instant to this source unless the object is null.
  *
  * @param name the name, not null
  * @param instantProvider the instant, not null
  * @return this, for chaining, not null
  */
 public DbMapSqlParameterSource addTimestampNullIgnored(
     final String name, final InstantProvider instantProvider) {
   if (instantProvider != null) {
     addTimestamp(name, instantProvider);
   } else {
     addValue(name, null, Types.TIMESTAMP);
   }
   return this;
 }