All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.simpleflatmapper.jdbc.impl.SelectQueryWhereFactory Maven / Gradle / Ivy

package org.simpleflatmapper.jdbc.impl;

import org.simpleflatmapper.jdbc.JdbcMapper;
import org.simpleflatmapper.jdbc.JdbcMapperFactory;
import org.simpleflatmapper.jdbc.QueryPreparer;
import org.simpleflatmapper.jdbc.named.NamedSqlQuery;
import org.simpleflatmapper.util.TypeHelper;

import java.lang.reflect.Type;
import java.util.List;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;

public class SelectQueryWhereFactory {

    private final CrudMeta meta;
    private final JdbcMapperFactory jdbcMapperFactory;
    private final JdbcMapper jdbcMapper;

    private final ConcurrentMap> cache = new ConcurrentHashMap>();

    public SelectQueryWhereFactory(CrudMeta meta, JdbcMapper jdbcMapper, JdbcMapperFactory jdbcMapperFactory) {
        this.meta = meta;
        this.jdbcMapper = jdbcMapper;
        this.jdbcMapperFactory = jdbcMapperFactory;
    }

    @SuppressWarnings("unchecked")
    public 

SelectQueryImpl where(String whereClause, Type paramClass) { SelectQueryKey key = new SelectQueryKey(whereClause, paramClass); SelectQueryImpl selectQuery = cache.get(key); if (selectQuery == null) { SelectQueryImpl newSelectQuery = newSelectQuery(whereClause, paramClass); selectQuery = cache.putIfAbsent(key, newSelectQuery); if (selectQuery == null) { selectQuery = newSelectQuery; } } return (SelectQueryImpl) selectQuery; } private

SelectQueryImpl newSelectQuery(String whereClause, Type paramClass) { String query = sqlQuery(whereClause); JdbcMapperFactory jdbcMapperFactory = this.jdbcMapperFactory; if (TypeHelper.isArray(paramClass) || TypeHelper.isAssignable(List.class, paramClass)) { jdbcMapperFactory = JdbcMapperFactory.newInstance(jdbcMapperFactory); jdbcMapperFactory.enableSpeculativeArrayIndexResolution(); } QueryPreparer

queryPreparer = jdbcMapperFactory.

from(paramClass).to(NamedSqlQuery.parse(query)); return new SelectQueryImpl(queryPreparer, jdbcMapper); } private String sqlQuery(String whereClause) { StringBuilder sb = new StringBuilder("SELECT * FROM "); meta.appendTableName(sb); sb.append(" WHERE "); sb.append(whereClause); return sb.toString(); } private static class SelectQueryKey { private final String query; private final Type type; private SelectQueryKey(String query, Type type) { this.query = query; this.type = type; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; SelectQueryKey that = (SelectQueryKey) o; if (!query.equals(that.query)) return false; return type.equals(that.type); } @Override public int hashCode() { int result = query.hashCode(); result = 31 * result + type.hashCode(); return result; } } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy