<commit_before># ChangeLog

## 1.4.3

- QueryLoggingListeners(Commons, SLF4J, JUL) added `loggingCondition` that simply decides whether to skip entire
  logging logic based on the current log level set on its logger.  
    e.g.: when `SLF4JQueryLoggingListener` writes SQL in DEBUG level, but the logger is set to INFO(more serious
          than DEBUG), then it will NOT perform logging logic including constructing log statement, etc.

- Proxying `ResultSet` is refactored to align how other proxies are managed.  
  Also, existing result set proxy is renamed to `RepeatableReadResultSetProxyLogic`.  
  As part of refactoring, `ResultSetProxyJdbcProxyFactory` is removed.  
  To enable proxying `ResultSet`, use `ProxyDataSourceBuilder` now has `#proxyResultSet()` and `#repeatableReadResultSet()`.
  ```java
    // before
    builder.jdbcProxyFactory(new ResultSetProxyJdbcProxyFactory()).build();
    // new
    builder.repeatableReadResultSet().build();  // or
    builder.proxyResultSet(new RepeatableReadResultSetProxyFactory()).build();
  ```  

- `ProxyConfig` is added to represent all proxy related configurations _(datasource name, listeners, proxy factory, 
  connection id manager)_. All values on `InterceptorHolder` are moved to `ProxyConfig` and `InterceptorHolder` is
  removed.
  
- `MethodExecutionListener` is added.  
  `MethodExecutionListener` is a new type of listener that intercepts JDBC API calls: 
  - `Connection`, `Statement`, `PreparedStatement`, `CallableStatement`: All methods
  - `ResultSet`: All methods when result set proxy is enabled. (`ProxyDataSourceBuilder#[proxyResultSet|repeatableReadResultSet]`)
  - `ProxyDataSource`: `getConnection` method
  
  listeners can be registered via `ProxyDataSourceBuilder#methodListener()`.
  ```java
    builder.methodListener(myMethodListener).build();
  ```

- `ProxyDataSourceBuilder` has added `beforeMethod`, `afterMethod`, `beforeQuery`, and `afterQuery` methods.  
  These methods help inlining listener definitions especially with Java8 Lambda expression.
  
  ```java
    ProxyDataSourceBuilder
      .create(actualDataSource)<commit_msg>Polishing<commit_after># ChangeLog

## 1.4.3

- QueryLoggingListeners(Commons, SLF4J, JUL) added overridable `loggingCondition` callback(boolean supplier) that
  simply decides whether to skip entire logging logic based on the current log level set on its logger.    
    e.g.: when `SLF4JQueryLoggingListener` writes SQL in DEBUG level, but the logger is set to INFO(more serious
          than DEBUG), then it will NOT perform logging logic including constructing log statement, etc.

- Proxying `ResultSet` is refactored to align how other proxies are managed.  
  Also, existing resultset-proxy is renamed to `RepeatableReadResultSetProxyLogic`.  
  As part of refactoring, `ResultSetProxyJdbcProxyFactory` is removed.  
  To enable proxying `ResultSet`, `ProxyDataSourceBuilder` now has `#proxyResultSet()` and `#repeatableReadResultSet()`
  methods.
  ```java
    // before
    builder.jdbcProxyFactory(new ResultSetProxyJdbcProxyFactory()).build();
    // new
    builder.repeatableReadResultSet().build();  // or
    builder.proxyResultSet(new RepeatableReadResultSetProxyFactory()).build();
  ```  

- `ProxyConfig` is added to represent all proxy related configurations _(datasource name, listeners, proxy factory, 
  connection id manager)_. All values on `InterceptorHolder` are moved to `ProxyConfig` and `InterceptorHolder` class
  is removed.
  
- `MethodExecutionListener` is added.  
  `MethodExecutionListener` is a new type of listener that intercepts JDBC API calls: 
  - `Connection`, `Statement`, `PreparedStatement`, `CallableStatement`: All methods
  - `ResultSet`: All methods when result set proxy is enabled. (`ProxyDataSourceBuilder#[proxyResultSet()|repeatableReadResultSet()]`)
  - `ProxyDataSource`: `getConnection()` method
  
  listeners can be registered via `ProxyDataSourceBuilder#methodListener()`.
  ```java
    builder.methodListener(myMethodListener).build();
  ```

- `ProxyDataSourceBuilder` has added `beforeMethod()`, `afterMethod()`, `beforeQuery()`, and `afterQuery()` methods.  
  These methods help inlining listener definitions especially with Java8 Lambda expression.
  
  ```java
    ProxyDataSourceBuilder
      .create(actualDataSource)
{'fraction_non_alphanumeric': 0.09105653382761816, 'fraction_numerical': 0.0027803521779425394, 'mean_word_length': 4.865489130434782, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '2789877', 'n_tokens_mistral': 1159, 'n_tokens_neox': 1127, 'n_words': 397}