presto-jdbc/src/main/java/io/prestosql/jdbc/PrestoConnection.java/PrestoConnection/startQuery
class PrestoConnection:    StatementClient startQuery(String sql, Map<String, String> sessionPropertiesOverride)
    {
        String source = "presto-jdbc";
        String applicationName = clientInfo.get("ApplicationName");
        if (applicationNamePrefix.isPresent()) {
            source = applicationNamePrefix.get();
            if (applicationName != null) {
                source += applicationName;
            }
        }
        else if (applicationName != null) {
            source = applicationName;
        }

        Optional<String> traceToken = Optional.ofNullable(clientInfo.get("TraceToken"));
        Iterable<String> clientTags = Splitter.on(',').trimResults().omitEmptyStrings()
                .split(nullToEmpty(clientInfo.get("ClientTags")));

        Map<String, String> allProperties = new HashMap<>(sessionProperties);
        allProperties.putAll(sessionPropertiesOverride);

        // zero means no timeout, so use a huge value that is effectively unlimited
        int millis = networkTimeoutMillis.get();
        Duration timeout = (millis > 0) ? new Duration(millis, MILLISECONDS) : new Duration(999, DAYS);

        ClientSession session = new ClientSession(
                httpUri,
                user,
                source,
                traceToken,
                ImmutableSet.copyOf(clientTags),
                clientInfo.get("ClientInfo"),
                catalog.get(),
                schema.get(),
                path.get(),
                timeZoneId.get(),
                locale.get(),
                ImmutableMap.of(),
                ImmutableMap.copyOf(allProperties),
                ImmutableMap.copyOf(preparedStatements),
                ImmutableMap.copyOf(roles),
                extraCredentials,
                transactionId.get(),
                timeout);

        return queryExecutor.startQuery(session, sql);
    }