docs: public long position(final Blob pattern, long start) throws SQLException {
  
          final byte[] ldata = data;
  
          checkValid(ldata);
  
          final int dlen = ldata.length;
  
          if (start < MIN_POS) {
              throw Util.outOfRangeArgument("start: " + start);
          } else if (start > dlen || pattern == null) {
              return -1L;
          } else {
              start--;
          }
  
          final long plen = pattern.length();
  
          if (plen == 0 || start > ((long) dlen) - plen) {
              return -1L;
          }
  
          // by now, we know plen <= Integer.MAX_VALUE
          final int iplen = (int) plen;
          byte[]    bap;
  
          if (pattern instanceof JDBCBlob) {
              bap = ((JDBCBlob) pattern).data();
          } else {
              bap = pattern.getBytes(1L, iplen);
          }
  
          final int  stop = dlen - iplen;
          final byte b0   = bap[0];
  
          outer_loop:
          for (int i = (int) start; i <= stop; i++) {
              if (ldata[i] != b0) {
                  continue;
              }
  
              int len     = iplen;
              int doffset = i;
              int poffset = 0;
  
              while (len-- > 0) {
                  if (ldata[doffset++] != bap[poffset++]) {
                      continue outer_loop;
                  }
              }
  
              return i + 1;
          }
  
          return -1L;
      }