org.skife.jdbi.v2.Query.fold()方法的使用及代码示例

x33g5p2x  于2022-01-28 转载在 其他  
字(11.1k)|赞(0)|评价(0)|浏览(196)

本文整理了Java中org.skife.jdbi.v2.Query.fold方法的一些代码示例,展示了Query.fold的具体用法。这些代码示例主要来源于Github/Stackoverflow/Maven等平台,是从一些精选项目中提取出来的代码,具有较强的参考意义,能在一定程度帮忙到你。Query.fold方法的具体详情如下:
包路径:org.skife.jdbi.v2.Query
类名称:Query
方法名:fold

Query.fold介绍

[英]Used to execute the query and traverse the result set with a accumulator. Folding over the result involves invoking a callback for each row, passing into the callback the return value from the previous function invocation.
[中]用于执行查询并使用累加器遍历结果集。结果上的{$0$}涉及为每一行调用回调,将上一次函数调用的返回值传递到回调中。

代码示例

代码示例来源:origin: apache/hive

  1. /**
  2. * @param connector SQL metadata connector to the metadata storage
  3. * @param metadataStorageTablesConfig Table config
  4. *
  5. * @return all the active data sources in the metadata storage
  6. */
  7. static Collection<String> getAllDataSourceNames(SQLMetadataConnector connector,
  8. final MetadataStorageTablesConfig metadataStorageTablesConfig) {
  9. return connector.getDBI()
  10. .withHandle((HandleCallback<List<String>>) handle -> handle.createQuery(String.format(
  11. "SELECT DISTINCT(datasource) FROM %s WHERE used = true",
  12. metadataStorageTablesConfig.getSegmentsTable()))
  13. .fold(Lists.<String>newArrayList(),
  14. (druidDataSources, stringObjectMap, foldController, statementContext) -> {
  15. druidDataSources.add(MapUtils.getString(stringObjectMap, "datasource"));
  16. return druidDataSources;
  17. }));
  18. }

代码示例来源:origin: apache/incubator-druid

  1. .fold(
  2. new HashMap<>(),
  3. new Folder3<Map<String, List<Rule>>, Pair<String, List<Rule>>>()

代码示例来源:origin: apache/incubator-druid

  1. ).fold(
  2. new HashMap<>(),
  3. new Folder3<Map<String, SupervisorSpec>, Pair<String, SupervisorSpec>>()

代码示例来源:origin: apache/incubator-druid

  1. ).fold(
  2. new HashMap<>(),
  3. new Folder3<Map<String, List<VersionedSupervisorSpec>>, Pair<String, VersionedSupervisorSpec>>()

代码示例来源:origin: apache/hive

  1. /**
  2. * @param connector SQL connector to metadata
  3. * @param metadataStorageTablesConfig Tables configuration
  4. * @param dataSource Name of data source
  5. *
  6. * @return List of all data segments part of the given data source
  7. */
  8. static List<DataSegment> getDataSegmentList(final SQLMetadataConnector connector,
  9. final MetadataStorageTablesConfig metadataStorageTablesConfig,
  10. final String dataSource) {
  11. return connector.retryTransaction((handle, status) -> handle.createQuery(String.format(
  12. "SELECT payload FROM %s WHERE dataSource = :dataSource",
  13. metadataStorageTablesConfig.getSegmentsTable()))
  14. .setFetchSize(getStreamingFetchSize(connector))
  15. .bind("dataSource", dataSource)
  16. .map(ByteArrayMapper.FIRST)
  17. .fold(new ArrayList<>(), (Folder3<List<DataSegment>, byte[]>) (accumulator, payload, control, ctx) -> {
  18. try {
  19. final DataSegment segment = DATA_SEGMENT_INTERNER.intern(JSON_MAPPER.readValue(payload, DataSegment.class));
  20. accumulator.add(segment);
  21. return accumulator;
  22. } catch (Exception e) {
  23. throw new SQLException(e.toString());
  24. }
  25. }), 3, DEFAULT_MAX_TRIES);
  26. }

代码示例来源:origin: apache/incubator-druid

  1. @Override
  2. public Collection<String> getAllDataSourceNames()
  3. {
  4. return connector.getDBI().withHandle(
  5. handle -> handle.createQuery(
  6. StringUtils.format("SELECT DISTINCT(datasource) FROM %s", getSegmentsTable())
  7. )
  8. .fold(
  9. new ArrayList<>(),
  10. new Folder3<List<String>, Map<String, Object>>()
  11. {
  12. @Override
  13. public List<String> fold(
  14. List<String> druidDataSources,
  15. Map<String, Object> stringObjectMap,
  16. FoldController foldController,
  17. StatementContext statementContext
  18. )
  19. {
  20. druidDataSources.add(
  21. MapUtils.getString(stringObjectMap, "datasource")
  22. );
  23. return druidDataSources;
  24. }
  25. }
  26. )
  27. );
  28. }

代码示例来源:origin: apache/incubator-druid

  1. @Override
  2. public List<LogType> withHandle(Handle handle)
  3. {
  4. return handle
  5. .createQuery(
  6. StringUtils.format(
  7. "SELECT log_payload FROM %1$s WHERE %2$s_id = :entryId",
  8. logTable, entryTypeName
  9. )
  10. )
  11. .bind("entryId", entryId)
  12. .map(ByteArrayMapper.FIRST)
  13. .fold(
  14. new ArrayList<>(),
  15. (List<LogType> list, byte[] bytes, FoldController control, StatementContext ctx) -> {
  16. try {
  17. list.add(jsonMapper.readValue(bytes, logType));
  18. return list;
  19. }
  20. catch (IOException e) {
  21. log.makeAlert(e, "Failed to deserialize log")
  22. .addData("entryId", entryId)
  23. .addData("payload", StringUtils.fromUtf8(bytes))
  24. .emit();
  25. throw new SQLException(e);
  26. }
  27. }
  28. );
  29. }
  30. }

代码示例来源:origin: apache/incubator-druid

  1. .fold(
  2. Maps.newLinkedHashMap(),
  3. new Folder3<Map<Long, LockType>, Pair<Long, LockType>>()

代码示例来源:origin: apache/incubator-druid

  1. .bind("end", interval.getEnd().toString())
  2. .map(ByteArrayMapper.FIRST)
  3. .fold(
  4. new ArrayList<>(),
  5. new Folder3<List<DataSegment>, byte[]>()

代码示例来源:origin: com.ning.billing/killbill-osgi-bundles-analytics

  1. public <ContainerType> ContainerType list(Class<ContainerType> containerType)
  2. {
  3. ContainerBuilder<ContainerType> builder = getContainerMapperRegistry().createBuilderFor(containerType);
  4. return fold(builder, new Folder3<ContainerBuilder<ContainerType>, ResultType>()
  5. {
  6. public ContainerBuilder<ContainerType> fold(ContainerBuilder<ContainerType> accumulator,
  7. ResultType rs,
  8. FoldController ctl,
  9. StatementContext ctx) throws SQLException
  10. {
  11. accumulator.add(rs);
  12. return accumulator;
  13. }
  14. }).build();
  15. }

代码示例来源:origin: org.kill-bill.commons/killbill-jdbi

  1. @Override
  2. public <ContainerType> ContainerType list(Class<ContainerType> containerType)
  3. {
  4. ContainerBuilder<ContainerType> builder = getContainerMapperRegistry().createBuilderFor(containerType);
  5. return fold(builder, new Folder3<ContainerBuilder<ContainerType>, ResultType>()
  6. {
  7. @Override
  8. public ContainerBuilder<ContainerType> fold(ContainerBuilder<ContainerType> accumulator,
  9. ResultType rs,
  10. FoldController ctl,
  11. StatementContext ctx) throws SQLException
  12. {
  13. accumulator.add(rs);
  14. return accumulator;
  15. }
  16. }).build();
  17. }

代码示例来源:origin: com.ning.billing/killbill-osgi-bundles-analytics

  1. public <T> T first(Class<T> containerType)
  2. {
  3. addStatementCustomizer(StatementCustomizers.MAX_ROW_ONE);
  4. ContainerBuilder builder = getContainerMapperRegistry().createBuilderFor(containerType);
  5. return (T) this.fold(builder, new Folder3<ContainerBuilder, ResultType>()
  6. {
  7. public ContainerBuilder fold(ContainerBuilder accumulator, ResultType rs, FoldController control, StatementContext ctx) throws SQLException
  8. {
  9. accumulator.add(rs);
  10. control.abort();
  11. return accumulator;
  12. }
  13. }).build();
  14. }

代码示例来源:origin: org.kill-bill.commons/killbill-jdbi

  1. @Override
  2. public <T> T first(Class<T> containerType)
  3. {
  4. // Kill Bill specific: assume our queries will always either use LIMIT 1 or will return exactly one row (see ResultReturnThing)
  5. // This saves a roundtrip (set @@SQL_SELECT_LIMIT=1)
  6. //addStatementCustomizer(StatementCustomizers.MAX_ROW_ONE);
  7. ContainerBuilder builder = getContainerMapperRegistry().createBuilderFor(containerType);
  8. return (T) this.fold(builder, new Folder3<ContainerBuilder, ResultType>()
  9. {
  10. @Override
  11. public ContainerBuilder fold(ContainerBuilder accumulator, ResultType rs, FoldController control, StatementContext ctx) throws SQLException
  12. {
  13. accumulator.add(rs);
  14. control.abort();
  15. return accumulator;
  16. }
  17. }).build();
  18. }

代码示例来源:origin: org.jdbi/jdbi

  1. @Test
  2. public void testFluentApi() throws Exception
  3. {
  4. Map<String, Team> teams = handle.createQuery("select t.name as teamName, " +
  5. " t.mascot as mascot, " +
  6. " p.name as personName, " +
  7. " p.role as role " +
  8. "from team t inner join person p on (t.name = p.team)")
  9. .map(TeamPersonJoinRow.class)
  10. .fold(Maps.<String, Team>newHashMap(), new TeamFolder());
  11. assertThat(teams, equalTo(expected));
  12. }

代码示例来源:origin: org.kill-bill.commons/killbill-jdbi

  1. @Test
  2. public void testFluentApi() throws Exception
  3. {
  4. Map<String, Team> teams = handle.createQuery("select t.name as teamName, " +
  5. " t.mascot as mascot, " +
  6. " p.name as personName, " +
  7. " p.role as role " +
  8. "from team t inner join person p on (t.name = p.team)")
  9. .map(TeamPersonJoinRow.class)
  10. .fold(Maps.<String, Team>newHashMap(), new TeamFolder());
  11. assertThat(teams, equalTo(expected));
  12. }

代码示例来源:origin: org.jdbi/jdbi

  1. @Test
  2. public void testFold() throws Exception
  3. {
  4. h.prepareBatch("insert into something (id, name) values (:id, :name)")
  5. .add(1, "Brian")
  6. .add(2, "Keith")
  7. .execute();
  8. Map<String, Integer> rs = h.createQuery("select id, name from something")
  9. .fold(new HashMap<String, Integer>(), new Folder2<Map<String, Integer>>()
  10. {
  11. @Override
  12. public Map<String, Integer> fold(Map<String, Integer> a, ResultSet rs, StatementContext context) throws SQLException
  13. {
  14. a.put(rs.getString("name"), rs.getInt("id"));
  15. return a;
  16. }
  17. });
  18. assertEquals(2, rs.size());
  19. assertEquals(Integer.valueOf(1), rs.get("Brian"));
  20. assertEquals(Integer.valueOf(2), rs.get("Keith"));
  21. }

代码示例来源:origin: org.kill-bill.commons/killbill-jdbi

  1. @Test
  2. public void testFold() throws Exception
  3. {
  4. h.prepareBatch("insert into something (id, name) values (:id, :name)")
  5. .add(1, "Brian")
  6. .add(2, "Keith")
  7. .execute();
  8. Map<String, Integer> rs = h.createQuery("select id, name from something")
  9. .fold(new HashMap<String, Integer>(), new Folder2<Map<String, Integer>>()
  10. {
  11. @Override
  12. public Map<String, Integer> fold(Map<String, Integer> a, ResultSet rs, StatementContext context) throws SQLException
  13. {
  14. a.put(rs.getString("name"), rs.getInt("id"));
  15. return a;
  16. }
  17. });
  18. assertEquals(2, rs.size());
  19. assertEquals(Integer.valueOf(1), rs.get("Brian"));
  20. assertEquals(Integer.valueOf(2), rs.get("Keith"));
  21. }

代码示例来源:origin: org.jdbi/jdbi

  1. @Test
  2. public void testFold() throws Exception
  3. {
  4. DBI dbi = new DBI("jdbc:h2:mem:" + UUID.randomUUID());
  5. Handle h = dbi.open();
  6. h.execute("create table something (id int primary key, name varchar(100))");
  7. h.execute("insert into something (id, name) values (7, 'Mark')");
  8. h.execute("insert into something (id, name) values (8, 'Tatu')");
  9. StringBuilder rs = h.createQuery("select name from something order by id")
  10. .mapTo(String.class)
  11. .fold(new StringBuilder(), new Folder2<StringBuilder>()
  12. {
  13. @Override
  14. public StringBuilder fold(StringBuilder acc, ResultSet rs, StatementContext ctx) throws SQLException
  15. {
  16. acc.append(rs.getString(1)).append(", ");
  17. return acc;
  18. }
  19. });
  20. rs.delete(rs.length() - 2, rs.length()); // trim the extra ", "
  21. assertThat(rs.toString(), equalTo("Mark, Tatu"));
  22. h.close();
  23. }

代码示例来源:origin: org.kill-bill.commons/killbill-jdbi

  1. @Test
  2. public void testFold3() throws Exception
  3. {
  4. h.prepareBatch("insert into something (id, name) values (:id, :name)")
  5. .add(1, "Brian")
  6. .add(2, "Keith")
  7. .execute();
  8. List<String> rs = h.createQuery("select name from something order by id")
  9. .map(StringMapper.FIRST)
  10. .fold(new ArrayList<String>(), new Folder3<List<String>, String>()
  11. {
  12. @Override
  13. public List<String> fold(List<String> a, String rs, FoldController ctl, StatementContext ctx) throws SQLException
  14. {
  15. a.add(rs);
  16. return a;
  17. }
  18. });
  19. assertEquals(2, rs.size());
  20. assertEquals(Arrays.asList("Brian", "Keith"), rs);
  21. }

代码示例来源:origin: org.jdbi/jdbi

  1. @Test
  2. public void testFold3() throws Exception
  3. {
  4. h.prepareBatch("insert into something (id, name) values (:id, :name)")
  5. .add(1, "Brian")
  6. .add(2, "Keith")
  7. .execute();
  8. List<String> rs = h.createQuery("select name from something order by id")
  9. .mapTo(String.class)
  10. .fold(new ArrayList<String>(), new Folder3<List<String>, String>()
  11. {
  12. @Override
  13. public List<String> fold(List<String> a, String rs, FoldController ctl, StatementContext ctx) throws SQLException
  14. {
  15. a.add(rs);
  16. return a;
  17. }
  18. });
  19. assertEquals(2, rs.size());
  20. assertEquals(Arrays.asList("Brian", "Keith"), rs);
  21. }

相关文章