Search in sources :

Example 6 with Converter

use of org.sql2o.converters.Converter in project sql2o by aaberg.

the class DefaultResultSetHandlerFactory method getSetter.

@SuppressWarnings("unchecked")
private static Setter getSetter(final Quirks quirks, final String propertyPath, final PojoMetadata metadata) {
    int index = propertyPath.indexOf('.');
    if (index <= 0) {
        // Simple path - fast way
        final Setter setter = metadata.getPropertySetterIfExists(propertyPath);
        // behavior change: do not throw if POJO contains less properties
        if (setter == null)
            return null;
        final Converter converter = quirks.converterOf(setter.getType());
        // setter without converter
        if (converter == null)
            return setter;
        return new Setter() {

            public void setProperty(Object obj, Object value) {
                try {
                    setter.setProperty(obj, converter.convert(value));
                } catch (ConverterException e) {
                    throw new Sql2oException("Error trying to convert column " + propertyPath + " to type " + setter.getType(), e);
                }
            }

            public Class getType() {
                return setter.getType();
            }
        };
    }
    // TODO: rewrite, get rid of POJO class
    return new Setter() {

        public void setProperty(Object obj, Object value) {
            Pojo pojo = new Pojo(metadata, metadata.isCaseSensitive(), obj);
            pojo.setProperty(propertyPath, value, quirks);
        }

        public Class getType() {
            // doesn't used anyway
            return Object.class;
        }
    };
}
Also used : ConverterException(org.sql2o.converters.ConverterException) Pojo(org.sql2o.reflection.Pojo) Setter(org.sql2o.reflection.Setter) Converter(org.sql2o.converters.Converter)

Example 7 with Converter

use of org.sql2o.converters.Converter in project sql2o by aaberg.

the class DefaultResultSetHandlerFactory method newResultSetHandler0.

@SuppressWarnings("unchecked")
private ResultSetHandler<T> newResultSetHandler0(final ResultSetMetaData meta) throws SQLException {
    final Getter[] getters;
    final Setter[] setters;
    final Converter converter;
    final boolean useExecuteScalar;
    // TODO: it's possible to cache converter/setters/getters
    // cache key is ResultSetMetadata + Bean type
    converter = quirks.converterOf(metadata.getType());
    final int columnCount = meta.getColumnCount();
    // getters[0] is always null
    getters = new Getter[columnCount + 1];
    for (int i = 1; i <= columnCount; i++) {
        String colName = quirks.getColumnName(meta, i);
        // behavior change: do not throw if POJO contains less properties
        getters[i] = getGetter(quirks, colName, metadata);
        // and the getter doesn't exist, throw exception.
        if (this.metadata.throwOnMappingFailure && getters[i] == null && columnCount > 1) {
            throw new Sql2oException("Could not map " + colName + " to any property.");
        }
    }
    // setters[0] is always null
    setters = new Setter[columnCount + 1];
    for (int i = 1; i <= columnCount; i++) {
        String colName = quirks.getColumnName(meta, i);
        setters[i] = getSetter(quirks, colName, metadata);
        // and the setter doesn't exist, throw exception.
        if (this.metadata.throwOnMappingFailure && setters[i] == null && columnCount > 1) {
            throw new Sql2oException("Could not map " + colName + " to any property.");
        }
    }
    /**
     * Fallback to executeScalar if converter exists,
     * we're selecting 1 column, and no property setter exists for the column.
     */
    useExecuteScalar = converter != null && columnCount == 1 && setters[1] == null;
    return new ResultSetHandler<T>() {

        @SuppressWarnings("unchecked")
        public T handle(ResultSet resultSet) throws SQLException {
            if (useExecuteScalar) {
                try {
                    return (T) converter.convert(quirks.getRSVal(resultSet, 1));
                } catch (ConverterException e) {
                    throw new Sql2oException("Error occurred while converting value from database to type " + metadata.getType(), e);
                }
            }
            // otherwise we want executeAndFetch with object mapping
            Object pojo = metadata.getObjectConstructor().newInstance();
            for (int colIdx = 1; colIdx <= columnCount; colIdx++) {
                Setter setter = setters[colIdx];
                if (setter == null)
                    continue;
                setter.setProperty(pojo, quirks.getRSVal(resultSet, colIdx));
            }
            return (T) pojo;
        }
    };
}
Also used : ConverterException(org.sql2o.converters.ConverterException) Getter(org.sql2o.reflection.Getter) Setter(org.sql2o.reflection.Setter) ResultSet(java.sql.ResultSet) Converter(org.sql2o.converters.Converter)

Example 8 with Converter

use of org.sql2o.converters.Converter in project runelite by runelite.

the class SpringBootWebApplicationTest method cacheSql2o.

@Bean("Runelite Cache SQL2O")
Sql2o cacheSql2o() throws NamingException {
    Map<Class, Converter> converters = new HashMap<>();
    converters.put(Instant.class, new InstantConverter());
    return new Sql2o("jdbc:mysql://192.168.1.2/cache", "runelite", "runelite", new NoQuirks(converters));
}
Also used : HashMap(java.util.HashMap) InstantConverter(net.runelite.http.service.util.InstantConverter) Converter(org.sql2o.converters.Converter) InstantConverter(net.runelite.http.service.util.InstantConverter) NoQuirks(org.sql2o.quirks.NoQuirks) Sql2o(org.sql2o.Sql2o) Bean(org.springframework.context.annotation.Bean)

Example 9 with Converter

use of org.sql2o.converters.Converter in project runelite by runelite.

the class SpringBootWebApplicationTest method xpSql2o.

@Bean("Runelite XP Tracker SQL2O")
Sql2o xpSql2o() throws NamingException {
    Map<Class, Converter> converters = new HashMap<>();
    converters.put(Instant.class, new InstantConverter());
    return new Sql2o("jdbc:mysql://192.168.1.2/xptracker", "runelite", "runelite", new NoQuirks(converters));
}
Also used : HashMap(java.util.HashMap) InstantConverter(net.runelite.http.service.util.InstantConverter) Converter(org.sql2o.converters.Converter) InstantConverter(net.runelite.http.service.util.InstantConverter) NoQuirks(org.sql2o.quirks.NoQuirks) Sql2o(org.sql2o.Sql2o) Bean(org.springframework.context.annotation.Bean)

Example 10 with Converter

use of org.sql2o.converters.Converter in project runelite by runelite.

the class SpringBootWebApplicationTest method sql2o.

@Bean("Runelite SQL2O")
Sql2o sql2o() {
    Map<Class, Converter> converters = new HashMap<>();
    converters.put(Instant.class, new InstantConverter());
    return new Sql2o("jdbc:mysql://192.168.1.2/runelite", "runelite", "runelite", new NoQuirks(converters));
}
Also used : HashMap(java.util.HashMap) InstantConverter(net.runelite.http.service.util.InstantConverter) Converter(org.sql2o.converters.Converter) InstantConverter(net.runelite.http.service.util.InstantConverter) NoQuirks(org.sql2o.quirks.NoQuirks) Sql2o(org.sql2o.Sql2o) Bean(org.springframework.context.annotation.Bean)

Aggregations

Converter (org.sql2o.converters.Converter)12 HashMap (java.util.HashMap)7 Bean (org.springframework.context.annotation.Bean)7 Sql2o (org.sql2o.Sql2o)7 NoQuirks (org.sql2o.quirks.NoQuirks)7 InstantConverter (net.runelite.http.service.util.InstantConverter)6 ConverterException (org.sql2o.converters.ConverterException)5 DataSource (javax.sql.DataSource)3 Sql2oException (org.sql2o.Sql2oException)2 Getter (org.sql2o.reflection.Getter)2 Pojo (org.sql2o.reflection.Pojo)2 Setter (org.sql2o.reflection.Setter)2 ResultSet (java.sql.ResultSet)1 Qualifier (org.springframework.beans.factory.annotation.Qualifier)1