// Path: src/main/java/io/vertx/jdbcclient/JDBCPool.java
// @VertxGen
// public interface JDBCPool extends Pool {
// 
//   /**
//    * The property to be used to retrieve the generated keys
//    */
//   PropertyKind<Row> GENERATED_KEYS = PropertyKind.create("generated-keys", Row.class);
// 
//   /**
//    * The property to be used to retrieve the output of the callable statement
//    */
//   PropertyKind<Boolean> OUTPUT = PropertyKind.create("callable-statement-output", Boolean.class);
// 
//   /**
//    * Create a JDBC pool which maintains its own data source.
//    *
//    * @param vertx  the Vert.x instance
//    * @param connectOptions the options to configure the connection
//    * @param poolOptions the connection pool options
//    * @return the client
//    */
//   static JDBCPool pool(Vertx vertx, JDBCConnectOptions connectOptions, PoolOptions poolOptions) {
//     final ContextInternal context = (ContextInternal) vertx.getOrCreateContext();
// 
//     return new JDBCPoolImpl(
//       vertx,
//       new JDBCClientImpl(vertx, new AgroalCPDataSourceProvider(connectOptions, poolOptions)),
//       connectOptions,
//       context.tracer() == null ?
//         null :
//         new QueryTracer(context.tracer(), connectOptions.getTracingPolicy(), connectOptions.getJdbcUrl(), connectOptions.getUser(), connectOptions.getDatabase()));
//   }
// 
//   /**
//    * Create a JDBC pool which maintains its own data source.
//    *
//    * @param vertx  the Vert.x instance
//    * @param config the options to configure the client using the same format as {@link io.vertx.ext.jdbc.JDBCClient}
//    * @return the client
//    */
//   static JDBCPool pool(Vertx vertx, JsonObject config) {
//     final ContextInternal context = (ContextInternal) vertx.getOrCreateContext();
//     String jdbcUrl = config.getString("jdbcUrl", config.getString("url"));
//     String user = config.getString("username", config.getString("user"));
//     return new JDBCPoolImpl(
//       vertx,
//       new JDBCClientImpl(vertx, config, UUID.randomUUID().toString()),
//       new SQLOptions(config),
//       context.tracer() == null ?
//         null :
//         new QueryTracer(context.tracer(), TracingPolicy.PROPAGATE, jdbcUrl, user, config.getString("database")));
//   }
// 
//   /**
//    * Create a JDBC pool which maintains its own data source.
//    *
//    * @param vertx  the Vert.x instance
//    * @param dataSourceProvider the options to configure the client using the same format as {@link io.vertx.ext.jdbc.JDBCClient}
//    * @return the client
//    * @since 4.2.0
//    */
//   @GenIgnore(GenIgnore.PERMITTED_TYPE)
//   static JDBCPool pool(Vertx vertx, DataSourceProvider dataSourceProvider) {
//     final ContextInternal context = (ContextInternal) vertx.getOrCreateContext();
//     final JsonObject config = dataSourceProvider.getInitialConfig();
//     String jdbcUrl = config.getString("jdbcUrl", config.getString("url"));
//     String user = config.getString("username", config.getString("user"));
//     String database = config.getString("database");
//     if (context.tracer() != null) {
//       Objects.requireNonNull(jdbcUrl, "data source url config cannot be null");
//       Objects.requireNonNull(user, "data source user config cannot be null");
//       Objects.requireNonNull(database, "data source database config cannot be null");
//     }
//     return new JDBCPoolImpl(
//       vertx,
//       new JDBCClientImpl(vertx, dataSourceProvider),
//       new SQLOptions(config),
//       context.tracer() == null ?
//         null :
//         new QueryTracer(context.tracer(), TracingPolicy.PROPAGATE, jdbcUrl, user, database));
//   }
// 
//   /**
//    * Create a JDBC pool using a pre-initialized data source.
//    *
//    * @param vertx  the Vert.x instance
//    * @param dataSource a pre-initialized data source
//    * @return the client
//    * @since 4.2.0
//    */
//   @GenIgnore(GenIgnore.PERMITTED_TYPE)
//   static JDBCPool pool(Vertx vertx, DataSource dataSource) {
//     return pool(vertx, DataSourceProvider.create(dataSource, new JsonObject()));
//   }
// 
//   /**
//    * Create a JDBC pool using a pre-initialized data source. The config expects that at least the following properties
//    * are set:
//    *
//    * <ul>
//    *   <li>{@code url} - the connection string</li>
//    *   <li>{@code user} - the connection user name</li>
//    *   <li>{@code database} - the database name</li>
//    *   <li>{@code maxPoolSize} - the max allowed number of connections in the pool</li>
//    * </ul>
//    *
//    * @param vertx  the Vert.x instance
//    * @param dataSource a pre-initialized data source
//    * @param config the pool configuration
//    * @return the client
//    * @since 4.2.0
//    */
//   @GenIgnore(GenIgnore.PERMITTED_TYPE)
//   static JDBCPool pool(Vertx vertx, DataSource dataSource, JsonObject config) {
//     return pool(vertx, DataSourceProvider.create(dataSource, config));
//   }
// }


import io.vertx.jdbcclient.JDBCPool;
import io.vertx.sqlclient.Row;
import io.vertx.sqlclient.impl.QueryResultHandler;
import io.vertx.sqlclient.impl.RowDesc;
import java.util.ArrayList;
import java.util.List;
    rs.add(new RS<>(decodeResultSet, desc, size));
  }

  public void returnedKeys(Row keys) {
    this.ids = keys;
  }

  public void empty(R apply) {
    this.empty = apply;
  }

  public void outputs(R decodeResultSet, RowDesc desc, int size) {
    if (output == null) {
      output = new ArrayList<>();
    }
    output.add(new RS<>(decodeResultSet, desc, size));
  }

  public void handle(QueryResultHandler<R> handler) {
    if (rs != null) {
      for (RS<R> rs : this.rs) {
        handler.handleResult(update, rs.size, rs.desc, rs.holder, null);
        if (ids != null) {
          handler.addProperty(JDBCPool.GENERATED_KEYS, ids);
        }
      }
    }
    if (output != null) {
      for (RS<R> rs : this.output) {
        handler.handleResult(update, rs.size, null, rs.holder, null);
// Path: src/main/java/io/vertx/jdbcclient/JDBCPool.java
// @VertxGen
// public interface JDBCPool extends Pool {
// 
//   /**
//    * The property to be used to retrieve the generated keys
//    */
//   PropertyKind<Row> GENERATED_KEYS = PropertyKind.create("generated-keys", Row.class);
// 
//   /**
//    * The property to be used to retrieve the output of the callable statement
//    */
//   PropertyKind<Boolean> OUTPUT = PropertyKind.create("callable-statement-output", Boolean.class);
// 
//   /**
//    * Create a JDBC pool which maintains its own data source.
//    *
//    * @param vertx  the Vert.x instance
//    * @param connectOptions the options to configure the connection
//    * @param poolOptions the connection pool options
//    * @return the client
//    */
//   static JDBCPool pool(Vertx vertx, JDBCConnectOptions connectOptions, PoolOptions poolOptions) {
//     final ContextInternal context = (ContextInternal) vertx.getOrCreateContext();
// 
//     return new JDBCPoolImpl(
//       vertx,
//       new JDBCClientImpl(vertx, new AgroalCPDataSourceProvider(connectOptions, poolOptions)),
//       connectOptions,
//       context.tracer() == null ?
//         null :
//         new QueryTracer(context.tracer(), connectOptions.getTracingPolicy(), connectOptions.getJdbcUrl(), connectOptions.getUser(), connectOptions.getDatabase()));
//   }
// 
//   /**
//    * Create a JDBC pool which maintains its own data source.
//    *
//    * @param vertx  the Vert.x instance
//    * @param config the options to configure the client using the same format as {@link io.vertx.ext.jdbc.JDBCClient}
//    * @return the client
//    */
//   static JDBCPool pool(Vertx vertx, JsonObject config) {
//     final ContextInternal context = (ContextInternal) vertx.getOrCreateContext();
//     String jdbcUrl = config.getString("jdbcUrl", config.getString("url"));
//     String user = config.getString("username", config.getString("user"));
//     return new JDBCPoolImpl(
//       vertx,
//       new JDBCClientImpl(vertx, config, UUID.randomUUID().toString()),
//       new SQLOptions(config),
//       context.tracer() == null ?
//         null :
//         new QueryTracer(context.tracer(), TracingPolicy.PROPAGATE, jdbcUrl, user, config.getString("database")));
//   }
// 
//   /**
//    * Create a JDBC pool which maintains its own data source.
//    *
//    * @param vertx  the Vert.x instance
//    * @param dataSourceProvider the options to configure the client using the same format as {@link io.vertx.ext.jdbc.JDBCClient}
//    * @return the client
//    * @since 4.2.0
//    */
//   @GenIgnore(GenIgnore.PERMITTED_TYPE)
//   static JDBCPool pool(Vertx vertx, DataSourceProvider dataSourceProvider) {
//     final ContextInternal context = (ContextInternal) vertx.getOrCreateContext();
//     final JsonObject config = dataSourceProvider.getInitialConfig();
//     String jdbcUrl = config.getString("jdbcUrl", config.getString("url"));
//     String user = config.getString("username", config.getString("user"));
//     String database = config.getString("database");
//     if (context.tracer() != null) {
//       Objects.requireNonNull(jdbcUrl, "data source url config cannot be null");
//       Objects.requireNonNull(user, "data source user config cannot be null");
//       Objects.requireNonNull(database, "data source database config cannot be null");
//     }
//     return new JDBCPoolImpl(
//       vertx,
//       new JDBCClientImpl(vertx, dataSourceProvider),
//       new SQLOptions(config),
//       context.tracer() == null ?
//         null :
//         new QueryTracer(context.tracer(), TracingPolicy.PROPAGATE, jdbcUrl, user, database));
//   }
// 
//   /**
//    * Create a JDBC pool using a pre-initialized data source.
//    *
//    * @param vertx  the Vert.x instance
//    * @param dataSource a pre-initialized data source
//    * @return the client
//    * @since 4.2.0
//    */
//   @GenIgnore(GenIgnore.PERMITTED_TYPE)
//   static JDBCPool pool(Vertx vertx, DataSource dataSource) {
//     return pool(vertx, DataSourceProvider.create(dataSource, new JsonObject()));
//   }
// 
//   /**
//    * Create a JDBC pool using a pre-initialized data source. The config expects that at least the following properties
//    * are set:
//    *
//    * <ul>
//    *   <li>{@code url} - the connection string</li>
//    *   <li>{@code user} - the connection user name</li>
//    *   <li>{@code database} - the database name</li>
//    *   <li>{@code maxPoolSize} - the max allowed number of connections in the pool</li>
//    * </ul>
//    *
//    * @param vertx  the Vert.x instance
//    * @param dataSource a pre-initialized data source
//    * @param config the pool configuration
//    * @return the client
//    * @since 4.2.0
//    */
//   @GenIgnore(GenIgnore.PERMITTED_TYPE)
//   static JDBCPool pool(Vertx vertx, DataSource dataSource, JsonObject config) {
//     return pool(vertx, DataSourceProvider.create(dataSource, config));
//   }
// }


// Path: src/main/java/io/vertx/jdbcclient/impl/actions/JDBCResponse.java
import io.vertx.jdbcclient.JDBCPool;
import io.vertx.sqlclient.Row;
import io.vertx.sqlclient.impl.QueryResultHandler;
import io.vertx.sqlclient.impl.RowDesc;
import java.util.ArrayList;
import java.util.List;

    rs.add(new RS<>(decodeResultSet, desc, size));
  }

  public void returnedKeys(Row keys) {
    this.ids = keys;
  }

  public void empty(R apply) {
    this.empty = apply;
  }

  public void outputs(R decodeResultSet, RowDesc desc, int size) {
    if (output == null) {
      output = new ArrayList<>();
    }
    output.add(new RS<>(decodeResultSet, desc, size));
  }

  public void handle(QueryResultHandler<R> handler) {
    if (rs != null) {
      for (RS<R> rs : this.rs) {
        handler.handleResult(update, rs.size, rs.desc, rs.holder, null);
        if (ids != null) {
          handler.addProperty(JDBCPool.GENERATED_KEYS, ids);
        }
      }
    }
    if (output != null) {
      for (RS<R> rs : this.output) {
        handler.handleResult(update, rs.size, null, rs.holder, null);
        handler.addProperty(JDBCPool.OUTPUT, true);