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

org.usf.jquery.core.AsciiResultMapper Maven / Gradle / Ivy

package org.usf.jquery.core;

import static java.lang.Math.max;
import static java.lang.Math.min;
import static java.lang.String.format;
import static java.lang.System.currentTimeMillis;
import static java.sql.Types.BIGINT;
import static java.sql.Types.BIT;
import static java.sql.Types.BOOLEAN;
import static java.sql.Types.DECIMAL;
import static java.sql.Types.DOUBLE;
import static java.sql.Types.FLOAT;
import static java.sql.Types.INTEGER;
import static java.sql.Types.NUMERIC;
import static java.sql.Types.REAL;
import static java.sql.Types.SMALLINT;
import static java.sql.Types.TINYINT;
import static java.util.Collections.emptyMap;
import static java.util.Objects.nonNull;
import static java.util.stream.IntStream.range;

import java.io.IOException;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Map;

import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;

/**
 * 
 * @author u$f
 *
 */
@Slf4j
@RequiredArgsConstructor
public final class AsciiResultMapper implements ResultSetMapper {
	
	private static final int MAX_LENGTH = 50;

    private final DataWriter writer;
    private final Map columns;
    
	public AsciiResultMapper(DataWriter writer) {
		this(writer, emptyMap());
	}

	@Override
	public Void map(ResultSet rs) throws SQLException {
		log.debug("mapping results...");
		var bg = currentTimeMillis();
        var rw = 0;
		var names = new String[rs.getMetaData().getColumnCount()];
		var sb = new StringBuilder(MAX_LENGTH * names.length).append("|");
		for(var i=0; i MAX_LENGTH) {
							data[i] = s.substring(0, MAX_LENGTH-2) + "..";
						}
					}
				}
				writer.writeLine(format(pattern, data));
                rw++;
			}
			writer.writeLine(div);
		} catch (IOException e) {
            throw new MappingException("error writing results", e);
		}
		log.info("{} rows mapped in {} ms", rw, currentTimeMillis() - bg);
		return null;
	}
	
	private static boolean isNumer(int type) {
		return switch (type) {
		case BOOLEAN, BIT, TINYINT, SMALLINT, INTEGER, BIGINT, REAL, FLOAT, DOUBLE, NUMERIC, DECIMAL: yield true;
		default: yield false;
		};
	}
	
	private static Object[] array(int size, String v) {
		return range(0, size)
				.mapToObj(i-> v)
				.toArray(String[]::new);
	}	
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy