public static SQLStatementParserEngine getSQLStatementParserEngine(final DatabaseType databaseType,
                                                                       final CacheOption sqlStatementCacheOption, final CacheOption parseTreeCacheOption) {
        SQLStatementParserEngine result = ENGINES.get(databaseType);
        if (null == result) {
            result = ENGINES.computeIfAbsent(databaseType, key -> new SQLStatementParserEngine(key, sqlStatementCacheOption, parseTreeCacheOption));
        } else if (!result.getSqlStatementCacheOption().equals(sqlStatementCacheOption) || !result.getParseTreeCacheOption().equals(parseTreeCacheOption)) {
            result = new SQLStatementParserEngine(databaseType, sqlStatementCacheOption, parseTreeCacheOption);
            ENGINES.put(databaseType, result);
        }
        return result;
    }
@Test
    void assertGetSQLStatementParserEngineNotSame() {
        SQLStatementParserEngine before = SQLStatementParserEngineFactory.getSQLStatementParserEngine(databaseType, new CacheOption(2000, 65535L), new CacheOption(64, 1024L));
        SQLStatementParserEngine after = SQLStatementParserEngineFactory.getSQLStatementParserEngine(databaseType, new CacheOption(2000, 65535L), new CacheOption(128, 1024L));
        assertNotSame(before, after);
    }