/** * Executes a raw query and calls instance of <code>RowListener</code> with every row found. * Use this method for very large result sets. * * @param sql raw SQL query. * @param listener client listener implementation for processing individual rows. */ public void find(String sql, RowListener listener) { Statement s = null; ResultSet rs = null; try { s = createStreamingStatement(); rs = s.executeQuery(sql); RowProcessor p = new RowProcessor(rs, s); p.with(listener); } catch (SQLException e) { throw new DBException(sql, null, e); } finally { closeQuietly(rs); closeQuietly(s); } }
public void with(RowListener listener){ try { processRS(listener); } catch(SQLException e) { throw new DBException(e); } finally { //TODO: shouldn't these be closed in the same scope they were created? closeQuietly(rs); closeQuietly(s); } }
/** * This method returns entire resultset as one list. Do not use it for large result sets. * * @param query raw SQL query. This query is not parametrized. * @return entire result set corresponding to the query. */ public List<Map> findAll(String query) { final ArrayList<Map> results = new ArrayList<>(); long start = System.currentTimeMillis(); find(query).with(new RowListenerAdapter() { @Override public void onNext(Map<String, Object> row) { results.add(row); } }); LogFilter.logQuery(LOGGER, query, null, start); return results; }
/** * Executes a raw query and returns an instance of {@link RowProcessor}. Use it in the following pattern: * <pre> * Base.find("select first_name, last_name from really_large_table").with(new RowListenerAdapter() { public void onNext(Map row) { ///write your code here Object o1 = row.get("first_name"); Object o2 = row.get("last_name"); } }); </pre> * * @param query raw SQL. * @param params list of parameters if query is parametrized. * @return instance of <code>RowProcessor</code> which has with() method for convenience. */ public RowProcessor find(String query, Object ... params) { //TODO: count ? signs and number of params, throw exception if do not match if(query.indexOf('?') == -1 && params.length != 0) throw new IllegalArgumentException("you passed arguments, but the query does not have placeholders: (?)"); //TODO: cache prepared statements here too PreparedStatement ps; ResultSet rs; try { ps = createStreamingPreparedStatement(query); setParameters(ps, params); rs = ps.executeQuery(); return new RowProcessor(rs, ps); } catch (SQLException e) { throw new DBException(query, params, e); } }
/** * This method returns entire resultset as one list. Do not use it for large result sets. * Example: * <pre> * <code>List<Map<String, Object>> people = Base.findAll("select * from people where first_name = ?", "John"); * for(Map person: people) * System.out.println(person.get("first_name")); * </code> * </pre> * * @param query raw SQL query. This query is parametrized. * @param params list of parameters for a parametrized query. * @return entire result set corresponding to the query. */ public List<Map> findAll(String query, Object ... params) { final List<Map> results = new ArrayList<>(); long start = System.currentTimeMillis(); find(query, params).with(new RowListenerAdapter() { @Override public void onNext(Map<String, Object> row) { results.add(row); } }); LogFilter.logQuery(LOGGER, query, params, start); return results; }
/** * Executes a raw query and returns an instance of {@link RowProcessor}. Use it in the following pattern: * <pre> * Base.find("select first_name, last_name from really_large_table").with(new RowListenerAdapter() { public void onNext(Map row) { ///write your code here Object o1 = row.get("first_name"); Object o2 = row.get("last_name"); } }); </pre> * * @param query raw SQL. * @param params list of parameters if query is parametrized. * @return instance of <code>RowProcessor</code> which has with() method for convenience. */ public RowProcessor find(String query, Object ... params) { //TODO: count ? signs and number of params, throw exception if do not match if(query.indexOf('?') == -1 && params.length != 0) throw new IllegalArgumentException("you passed arguments, but the query does not have placeholders: (?)"); if(!SELECT_PATTERN.matcher(query).find()) { throw new IllegalArgumentException("query must be 'select' query"); } //TODO: cache prepared statements here too PreparedStatement ps; ResultSet rs; try { ps = createStreamingPreparedStatement(query); setParameters(ps, params); rs = ps.executeQuery(); return new RowProcessor(rs, ps); } catch (SQLException e) { throw new DBException(query, params, e); } }
/** * Executes a raw query and calls instance of <code>RowListener</code> with every row found. * Use this method for very large result sets. * * @param sql raw SQL query. * @param listener client listener implementation for processing individual rows. */ public void find(String sql, RowListener listener) { Statement s = null; ResultSet rs = null; try { s = createStreamingStatement(); rs = s.executeQuery(sql); RowProcessor p = new RowProcessor(rs, s); p.with(listener); } catch (SQLException e) { throw new DBException(sql, null, e); } finally { closeQuietly(rs); closeQuietly(s); } }
public static <T extends Model, M extends T> void findWith(final Class<M> clazz, final ModelListener<T> listener, String query, Object... params) { long start = System.currentTimeMillis(); final MetaModel metaModel = metaModelOf(clazz); String sql = metaModel.getDialect().selectStar(metaModel.getTableName(), query); new DB(metaModel.getDbName()).find(sql, params).with(new RowListenerAdapter() { @Override public void onNext(Map<String, Object> row) { listener.onModel(instance(row, metaModel, clazz)); } }); LogFilter.logQuery(LOGGER, sql, null, start); }
/** * Executes a raw query and returns an instance of {@link RowProcessor}. Use it in the following pattern: * <pre> * Base.find("select first_name, last_name from really_large_table").with(new RowListenerAdapter() { public void onNext(Map row) { ///write your code here Object o1 = row.get("first_name"); Object o2 = row.get("last_name"); } }); </pre> * * @param query raw SQL. * @param params list of parameters if query is parametrized. * @return instance of <code>RowProcessor</code> which has with() method for convenience. */ public RowProcessor find(String query, Object ... params) { //TODO: count ? signs and number of params, throw exception if do not match if(query.indexOf('?') == -1 && params.length != 0) throw new IllegalArgumentException("you passed arguments, but the query does not have placeholders: (?)"); //TODO: cache prepared statements here too PreparedStatement ps; ResultSet rs; try { ps = createStreamingPreparedStatement(query); setParameters(ps, params); rs = ps.executeQuery(); return new RowProcessor(rs, ps); } catch (SQLException e) { throw new DBException(query, params, e); } }
public void with(RowListener listener){ try { processRS(listener); } catch(SQLException e) { throw new DBException(e); } finally { //TODO: shouldn't these be closed in the same scope they were created? closeQuietly(rs); closeQuietly(s); } }
/** * Executes a raw query and calls instance of <code>RowListener</code> with every row found. * Use this method for very large result sets. * * @param sql raw SQL query. * @param listener client listener implementation for processing individual rows. */ public void find(String sql, RowListener listener) { Statement s = null; ResultSet rs = null; try { s = createStreamingStatement(); rs = s.executeQuery(sql); RowProcessor p = new RowProcessor(rs, s); p.with(listener); } catch (SQLException e) { throw new DBException(sql, null, e); } finally { closeQuietly(rs); closeQuietly(s); } }
@Override protected void hydrate() { if (hydrated()) { return; } String sql= toSql(false); if(metaModel.cached()){ List<T> cached = (List<T>) QueryCache.instance().getItem(metaModel.getTableName(), sql, params); if(cached != null){ delegate = cached; LogFilter.logQuery(LOGGER, sql, params, System.currentTimeMillis(), true); return; } } delegate = new ArrayList<>(); long start = System.currentTimeMillis(); new DB(metaModel.getDbName()).find(sql, params).with(new RowListenerAdapter() { @Override public void onNext(Map<String, Object> map) { delegate.add(ModelDelegate.<T>instance(map, metaModel)); } }); LogFilter.logQuery(LOGGER, sql, params, start, false); if(metaModel.cached()){ delegate = Collections.unmodifiableList(delegate); QueryCache.instance().addItem(metaModel.getTableName(), sql, params, delegate); } processIncludes(); }
settings.setProcessor(new RowProcessor() {
public void with(RowListener listener){ try { processRS(listener); } catch(SQLException e) { throw new DBException(e); } finally { //TODO: shouldn't these be closed in the same scope they were created? closeQuietly(rs); closeQuietly(s); } }
/** * This method returns entire resultset as one list. Do not use it for large result sets. * * @param query raw SQL query. This query is not parametrized. * @return entire result set corresponding to the query. */ public List<Map> findAll(String query) { final ArrayList<Map> results = new ArrayList<>(); long start = System.currentTimeMillis(); find(query).with(new RowListenerAdapter() { @Override public void onNext(Map<String, Object> row) { results.add(row); } }); LogFilter.logQuery(LOGGER, query, null, start); return results; }
/** * This method returns entire resultset as one list. Do not use it for large result sets. * * @param query raw SQL query. This query is not parametrized. * @return entire result set corresponding to the query. */ public List<Map> findAll(String query) { final ArrayList<Map> results = new ArrayList<Map>(); long start = System.currentTimeMillis(); find(query).with(new RowListenerAdapter() { @Override public void onNext(Map<String, Object> row) { results.add(row); } }); LogFilter.logQuery(logger, query, null, start); return results; }
/** * This method returns entire resultset as one list. Do not use it for large result sets. * Example: * <pre> * <code>List<Map<String, Object>> people = Base.findAll("select * from people where first_name = ?", "John"); * for(Map person: people) * System.out.println(person.get("first_name")); * </code> * </pre> * * @param query raw SQL query. This query is parametrized. * @param params list of parameters for a parametrized query. * @return entire result set corresponding to the query. */ public List<Map> findAll(String query, Object ... params) { final List<Map> results = new ArrayList<>(); long start = System.currentTimeMillis(); find(query, params).with(new RowListenerAdapter() { @Override public void onNext(Map<String, Object> row) { results.add(row); } }); LogFilter.logQuery(LOGGER, query, params, start); return results; }
/** * This method returns entire resultset as one list. Do not use it for large result sets. * Example: * <pre> * <code>List<Map<String, Object>> people = Base.findAll("select * from people where first_name = ?", "John"); * for(Map person: people) * System.out.println(person.get("first_name")); * </code> * </pre> * * @param query raw SQL query. This query is parametrized. * @param params list of parameters for a parametrized query. * @return entire result set corresponding to the query. */ public List<Map> findAll(String query, Object ... params) { final List<Map> results = new ArrayList<Map>(); long start = System.currentTimeMillis(); find(query, params).with(new RowListenerAdapter() { @Override public void onNext(Map<String, Object> row) { results.add(row); } }); LogFilter.logQuery(logger, query, params, start); return results; }
public static <T extends Model, M extends T> void findWith(final Class<M> clazz, final ModelListener<T> listener, String query, Object... params) { long start = System.currentTimeMillis(); final MetaModel metaModel = metaModelOf(clazz); String sql = metaModel.getDialect().selectStar(metaModel.getTableName(), query); new DB(metaModel.getDbName()).find(sql, params).with(new RowListenerAdapter() { @Override public void onNext(Map<String, Object> row) { listener.onModel(instance(row, metaModel, clazz)); } }); LogFilter.logQuery(logger, sql, null, start); }
public static <T extends Model, M extends T> void findWith(final Class<M> clazz, final ModelListener<T> listener, String query, Object... params) { long start = System.currentTimeMillis(); final MetaModel metaModel = metaModelOf(clazz); String sql = metaModel.getDialect().selectStar(metaModel.getTableName(), query); new DB(metaModel.getDbName()).find(sql, params).with(new RowListenerAdapter() { @Override public void onNext(Map<String, Object> row) { listener.onModel(instance(row, metaModel, clazz)); } }); LogFilter.logQuery(LOGGER, sql, null, start); }