// Path: rulette-core/src/main/java/com/github/kislayverma/rulette/core/exception/DataAccessException.java
// public class DataAccessException extends RuntimeException {
//     public DataAccessException() {
//         super();
//     }
// 
//     public DataAccessException(String message) {
//         super(message);
//     }
// 
//     public DataAccessException(String message, Throwable cause) {
//         super(message, cause);
//     }
// }


import com.github.kislayverma.rulette.core.exception.DataAccessException;
import com.zaxxer.hikari.HikariConfig;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Properties;
    }

    /**
     * This method build a {@link HikariConfig} object from the given properties file.
     * @param props An {@link Properties} object encapsulating Hikari properties
     */
    public static HikariConfig getHikariConfig(Properties props) {
        HikariConfig hikariConfig = new HikariConfig();
        hikariConfig.setDriverClassName(props.getProperty(PROPERTY_MYSQL_DRIVER_CLASS));
        hikariConfig.setJdbcUrl(props.getProperty(PROPERTY_JDBC_URL));
        hikariConfig.setUsername(props.getProperty(PROPERTY_USER_NAME));
        hikariConfig.setPassword(props.getProperty(PROPERTY_PASSWORD));
        hikariConfig.setMaximumPoolSize(Integer.parseInt(props.getProperty(PROPERTY_MAX_POOL_SIZE)));
        hikariConfig.setConnectionTimeout(Long.parseLong(props.getProperty(PROPERTY_CONN_TIMEOUT)));

        return hikariConfig;
    }

    public static void closeSqlArtifacts(ResultSet resultSet, Statement statement, Connection connection) {
        try {
            if (resultSet != null) {
                resultSet.close();
            }
            if (statement != null) {
                statement.close();
            }
            if (connection != null) {
                connection.close();
            }
        } catch (Exception e) {
// Path: rulette-core/src/main/java/com/github/kislayverma/rulette/core/exception/DataAccessException.java
// public class DataAccessException extends RuntimeException {
//     public DataAccessException() {
//         super();
//     }
// 
//     public DataAccessException(String message) {
//         super(message);
//     }
// 
//     public DataAccessException(String message, Throwable cause) {
//         super(message, cause);
//     }
// }


// Path: rulette-mysql-provider/src/main/java/com/github/kislayverma/rulette/mysql/util/Utils.java
import com.github.kislayverma.rulette.core.exception.DataAccessException;
import com.zaxxer.hikari.HikariConfig;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Properties;

    }

    /**
     * This method build a {@link HikariConfig} object from the given properties file.
     * @param props An {@link Properties} object encapsulating Hikari properties
     */
    public static HikariConfig getHikariConfig(Properties props) {
        HikariConfig hikariConfig = new HikariConfig();
        hikariConfig.setDriverClassName(props.getProperty(PROPERTY_MYSQL_DRIVER_CLASS));
        hikariConfig.setJdbcUrl(props.getProperty(PROPERTY_JDBC_URL));
        hikariConfig.setUsername(props.getProperty(PROPERTY_USER_NAME));
        hikariConfig.setPassword(props.getProperty(PROPERTY_PASSWORD));
        hikariConfig.setMaximumPoolSize(Integer.parseInt(props.getProperty(PROPERTY_MAX_POOL_SIZE)));
        hikariConfig.setConnectionTimeout(Long.parseLong(props.getProperty(PROPERTY_CONN_TIMEOUT)));

        return hikariConfig;
    }

    public static void closeSqlArtifacts(ResultSet resultSet, Statement statement, Connection connection) {
        try {
            if (resultSet != null) {
                resultSet.close();
            }
            if (statement != null) {
                statement.close();
            }
            if (connection != null) {
                connection.close();
            }
        } catch (Exception e) {
            throw new DataAccessException("Failed to close database connection", e);