code: @Override
  	public void complete(final LineReader reader, final ParsedLine line, final List<Candidate> candidates) {
  		String buffer = line.line().substring(0, line.cursor());
  		String[] parts = getLineParts(buffer);
  		int len = parts.length;
  
  		// コード補完する引数の番号を特定。
  		int startArgNo = getStartArgNo(line);
  
  		// 対象引数が-1、または開始引数にlenが満たない場合は該当なしなのでコード補完しない
  		if (!accept(startArgNo, buffer, len)) {
  			return;
  		}
  
  		boolean isBlank = buffer.endsWith(" ");
  		String tableNamePattern = "%";
  		if (len == startArgNo && isBlank) {
  			tableNamePattern = "%";
  		} else if (len == startArgNo + 1 && !isBlank) {
  			tableNamePattern = parts[len - 1] + "%";
  		} else {
  			return;
  		}
  
  		try {
  			Connection conn = connectionSupplier.getConnection();
  			DatabaseMetaData md = conn.getMetaData();
  			try (ResultSet rs = md.getTables(conn.getCatalog(), conn.getSchema(),
  					tableNamePattern.toUpperCase(), null)) {
  				while (rs.next()) {
  					candidates.add(new Candidate(rs.getString("TABLE_NAME")));
  				}
  			}
  			if (candidates.isEmpty()) {
  				try (ResultSet rs = md.getTables(conn.getCatalog(), conn.getSchema(),
  						tableNamePattern.toLowerCase(), null)) {
  					while (rs.next()) {
  						candidates.add(new Candidate(rs.getString("TABLE_NAME")));
  					}
  				}
  			}
  		} catch (SQLException ex) {
  			ex.printStackTrace();
  			return;
  		}
  	}
docs: DatabaseMetadateからテーブル名を取得して補完候補とする。
  
  {@inheritDoc}
  
  @see org.jline.reader.Completer#complete(org.jline.reader.LineReader, org.jline.reader.ParsedLine, java.util.List)