// Path: src/main/java/io/vertx/ext/jdbc/impl/actions/JDBCStatementHelper.java
// public final class JDBCStatementHelper {
// 
//   public static final Pattern UUID = Pattern.compile("^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$");
// 
//   private final JDBCEncoder encoder;
//   private final JDBCDecoder decoder;
// 
//   public JDBCStatementHelper() {
//     this(new JsonObject());
//   }
// 
//   public JDBCStatementHelper(JsonObject config) {
//     this.encoder = initEncoder(config);
//     this.decoder = initDecoder(config);
//   }
// 
//   private JDBCEncoder initEncoder(JsonObject config) {
//     JDBCEncoder encoder = initObject(config.getString("encoderCls"));
//     if (encoder == null) {
//       encoder = Optional.ofNullable(ServiceHelper.loadFactoryOrNull(JDBCEncoder.class)).orElseGet(JDBCEncoderImpl::new);
//     }
//     return encoder;
//   }
// 
//   private JDBCDecoder initDecoder(JsonObject config) {
//     JDBCDecoder decoder = initObject(config.getString("decoderCls"));
//     if (decoder == null) {
//       return Optional.ofNullable(ServiceHelper.loadFactoryOrNull(JDBCDecoder.class)).orElseGet(JDBCDecoderImpl::new);
//     }
//     return decoder;
//   }
// 
//   public JDBCEncoder getEncoder() {
//     return encoder;
//   }
// 
//   public JDBCDecoder getDecoder() {
//     return decoder;
//   }
// 
//   private static <T> T initObject(String clsName) {
//     Class<T> cls = findClass(clsName);
//     return cls == null ? null : ReflectionUtils.newInstance(cls);
//   }
// 
//   private static <T> Class<T> findClass(String cls) {
//     if (Objects.isNull(cls)) {
//       return null;
//     }
//     for (ClassLoader classLoader : Arrays.asList(Thread.currentThread().getContextClassLoader(), JDBCStatementHelper.class.getClassLoader())) {
//       try {
//         return (Class<T>) Class.forName(cls, true, classLoader);
//       } catch (ClassNotFoundException e) {
//         //ignore
//       } catch (ClassCastException e) {
//         return null;
//       }
//     }
//     return null;
//   }
// 
// }
// 
// Path: src/main/java/io/vertx/jdbcclient/impl/actions/JDBCColumnDescriptor.java
// public class JDBCColumnDescriptor implements ColumnDescriptor {
// 
//   private final String columnLabel;
//   private final JDBCTypeWrapper jdbcTypeWrapper;
// 
//   private JDBCColumnDescriptor(String columnLabel, JDBCTypeWrapper jdbcTypeWrapper) {
//     this.columnLabel = columnLabel;
//     this.jdbcTypeWrapper = jdbcTypeWrapper;
//   }
// 
//   @Override
//   public String name() {
//     return columnLabel;
//   }
// 
//   @Override
//   public boolean isArray() {
//     return jdbcType() == JDBCType.ARRAY;
//   }
// 
//   @Override
//   public String typeName() {
//     return jdbcTypeWrapper.vendorTypeName();
//   }
// 
//   /**
//    * Use {@link #jdbcTypeWrapper()} when converting an advanced data type depending on the specific database
//    *
//    * @return the most appropriate {@code JDBCType} or {@code null} if it is advanced type of specific database
//    */
//   @Override
//   public JDBCType jdbcType() {
//     return jdbcTypeWrapper.jdbcType();
//   }
// 
//   /**
//    * @return the jdbc type wrapper
//    * @see JDBCTypeWrapper
//    */
//   public JDBCTypeWrapper jdbcTypeWrapper() {
//     return this.jdbcTypeWrapper;
//   }
// 
//   @Override
//   public String toString() {
//     return "JDBCColumnDescriptor[columnName=(" + columnLabel + "), jdbcTypeWrapper=(" + jdbcTypeWrapper + ")]";
//   }
// 
//   public static JDBCColumnDescriptor create(JDBCPropertyAccessor<String> columnLabel,
//                                             JDBCPropertyAccessor<Integer> vendorTypeNumber,
//                                             JDBCPropertyAccessor<String> vendorTypeName,
//                                             JDBCPropertyAccessor<String> vendorTypeClassName) throws SQLException {
//     return new JDBCColumnDescriptor(columnLabel.get(), JDBCTypeWrapper.of(vendorTypeNumber.get(), vendorTypeName.get(),
//       vendorTypeClassName.get()));
//   }
// 
//   public static JDBCColumnDescriptor wrap(JDBCType jdbcType) {
//     return new JDBCColumnDescriptor(null, JDBCTypeWrapper.of(jdbcType));
//   }
// 
// }


import io.vertx.ext.jdbc.impl.actions.JDBCStatementHelper;
import io.vertx.jdbcclient.impl.actions.JDBCColumnDescriptor;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import java.sql.JDBCType;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.OffsetDateTime;
import java.time.OffsetTime;
import java.time.ZoneOffset;
import java.util.Arrays;
import java.util.Collection;
import java.util.Objects;
import java.util.TimeZone;
import java.util.UUID;
import static org.junit.Assert.*;
package io.vertx.ext.jdbc.spi.impl;




@RunWith(Parameterized.class)
public class JDBCEncoderTest {

  static TimeZone aDefault;

  @BeforeClass
// Path: src/main/java/io/vertx/ext/jdbc/impl/actions/JDBCStatementHelper.java
// public final class JDBCStatementHelper {
// 
//   public static final Pattern UUID = Pattern.compile("^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$");
// 
//   private final JDBCEncoder encoder;
//   private final JDBCDecoder decoder;
// 
//   public JDBCStatementHelper() {
//     this(new JsonObject());
//   }
// 
//   public JDBCStatementHelper(JsonObject config) {
//     this.encoder = initEncoder(config);
//     this.decoder = initDecoder(config);
//   }
// 
//   private JDBCEncoder initEncoder(JsonObject config) {
//     JDBCEncoder encoder = initObject(config.getString("encoderCls"));
//     if (encoder == null) {
//       encoder = Optional.ofNullable(ServiceHelper.loadFactoryOrNull(JDBCEncoder.class)).orElseGet(JDBCEncoderImpl::new);
//     }
//     return encoder;
//   }
// 
//   private JDBCDecoder initDecoder(JsonObject config) {
//     JDBCDecoder decoder = initObject(config.getString("decoderCls"));
//     if (decoder == null) {
//       return Optional.ofNullable(ServiceHelper.loadFactoryOrNull(JDBCDecoder.class)).orElseGet(JDBCDecoderImpl::new);
//     }
//     return decoder;
//   }
// 
//   public JDBCEncoder getEncoder() {
//     return encoder;
//   }
// 
//   public JDBCDecoder getDecoder() {
//     return decoder;
//   }
// 
//   private static <T> T initObject(String clsName) {
//     Class<T> cls = findClass(clsName);
//     return cls == null ? null : ReflectionUtils.newInstance(cls);
//   }
// 
//   private static <T> Class<T> findClass(String cls) {
//     if (Objects.isNull(cls)) {
//       return null;
//     }
//     for (ClassLoader classLoader : Arrays.asList(Thread.currentThread().getContextClassLoader(), JDBCStatementHelper.class.getClassLoader())) {
//       try {
//         return (Class<T>) Class.forName(cls, true, classLoader);
//       } catch (ClassNotFoundException e) {
//         //ignore
//       } catch (ClassCastException e) {
//         return null;
//       }
//     }
//     return null;
//   }
// 
// }
// 
// Path: src/main/java/io/vertx/jdbcclient/impl/actions/JDBCColumnDescriptor.java
// public class JDBCColumnDescriptor implements ColumnDescriptor {
// 
//   private final String columnLabel;
//   private final JDBCTypeWrapper jdbcTypeWrapper;
// 
//   private JDBCColumnDescriptor(String columnLabel, JDBCTypeWrapper jdbcTypeWrapper) {
//     this.columnLabel = columnLabel;
//     this.jdbcTypeWrapper = jdbcTypeWrapper;
//   }
// 
//   @Override
//   public String name() {
//     return columnLabel;
//   }
// 
//   @Override
//   public boolean isArray() {
//     return jdbcType() == JDBCType.ARRAY;
//   }
// 
//   @Override
//   public String typeName() {
//     return jdbcTypeWrapper.vendorTypeName();
//   }
// 
//   /**
//    * Use {@link #jdbcTypeWrapper()} when converting an advanced data type depending on the specific database
//    *
//    * @return the most appropriate {@code JDBCType} or {@code null} if it is advanced type of specific database
//    */
//   @Override
//   public JDBCType jdbcType() {
//     return jdbcTypeWrapper.jdbcType();
//   }
// 
//   /**
//    * @return the jdbc type wrapper
//    * @see JDBCTypeWrapper
//    */
//   public JDBCTypeWrapper jdbcTypeWrapper() {
//     return this.jdbcTypeWrapper;
//   }
// 
//   @Override
//   public String toString() {
//     return "JDBCColumnDescriptor[columnName=(" + columnLabel + "), jdbcTypeWrapper=(" + jdbcTypeWrapper + ")]";
//   }
// 
//   public static JDBCColumnDescriptor create(JDBCPropertyAccessor<String> columnLabel,
//                                             JDBCPropertyAccessor<Integer> vendorTypeNumber,
//                                             JDBCPropertyAccessor<String> vendorTypeName,
//                                             JDBCPropertyAccessor<String> vendorTypeClassName) throws SQLException {
//     return new JDBCColumnDescriptor(columnLabel.get(), JDBCTypeWrapper.of(vendorTypeNumber.get(), vendorTypeName.get(),
//       vendorTypeClassName.get()));
//   }
// 
//   public static JDBCColumnDescriptor wrap(JDBCType jdbcType) {
//     return new JDBCColumnDescriptor(null, JDBCTypeWrapper.of(jdbcType));
//   }
// 
// }


// Path: src/test/java/io/vertx/ext/jdbc/spi/impl/JDBCEncoderTest.java
import io.vertx.ext.jdbc.impl.actions.JDBCStatementHelper;
import io.vertx.jdbcclient.impl.actions.JDBCColumnDescriptor;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import java.sql.JDBCType;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.OffsetDateTime;
import java.time.OffsetTime;
import java.time.ZoneOffset;
import java.util.Arrays;
import java.util.Collection;
import java.util.Objects;
import java.util.TimeZone;
import java.util.UUID;
import static org.junit.Assert.*;

package io.vertx.ext.jdbc.spi.impl;




@RunWith(Parameterized.class)
public class JDBCEncoderTest {

  static TimeZone aDefault;

  @BeforeClass
  public static void setup() {