private String createColumnId(final Map<String, AtomicInteger> map, final String name) {
            final String cleanName = name
                    .trim()
                    .toLowerCase(Locale.ROOT)
                    .replaceAll("[^a-z0-9]", "_")
                    .replaceAll("_+", "_");
            final int id = map.computeIfAbsent(cleanName, k -> new AtomicInteger()).incrementAndGet();
            return cleanName + "-" + id;
        }
@param isLenient Ignores any additional child tokens found. This is to support getting just
                 the data source from a partially written query, which is likely to not be
                 a valid query. For example, you may type
                 <pre>{@code from View sel}</pre> and at this point do code completion on 'sel'
                 so if this method is called it will treat 'sel as an extra child.
stroom-query/stroom-query-common/src/main/java/stroom/query/language/SearchRequestFactory.java