public class io.ebeaninternal.server.core.DatabasePlatformFactory
  minor version: 0
  major version: 59
  flags: flags: (0x0021) ACC_PUBLIC, ACC_SUPER
  this_class: io.ebeaninternal.server.core.DatabasePlatformFactory
  super_class: java.lang.Object
{
  private static final org.slf4j.Logger logger;
    descriptor: Lorg/slf4j/Logger;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL

  static void <clinit>();
    descriptor: ()V
    flags: (0x0008) ACC_STATIC
    Code:
      stack=1, locals=0, args_size=0
         0: .line 45
            ldc Lio/ebeaninternal/server/core/DatabasePlatformFactory;
            invokestatic org.slf4j.LoggerFactory.getLogger:(Ljava/lang/Class;)Lorg/slf4j/Logger;
            putstatic io.ebeaninternal.server.core.DatabasePlatformFactory.logger:Lorg/slf4j/Logger;
            return
      LocalVariableTable:
        Start  End  Slot  Name  Signature

  public void <init>();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // io.ebeaninternal.server.core.DatabasePlatformFactory this
         0: .line 43
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
            return
        end local 0 // io.ebeaninternal.server.core.DatabasePlatformFactory this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lio/ebeaninternal/server/core/DatabasePlatformFactory;

  public io.ebean.config.dbplatform.DatabasePlatform create(io.ebean.config.DatabaseConfig);
    descriptor: (Lio/ebean/config/DatabaseConfig;)Lio/ebean/config/dbplatform/DatabasePlatform;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=3, args_size=2
        start local 0 // io.ebeaninternal.server.core.DatabasePlatformFactory this
        start local 1 // io.ebean.config.DatabaseConfig config
         0: .line 52
            invokestatic io.ebeaninternal.api.DbOffline.getPlatform:()Ljava/lang/String;
            astore 2 /* offlinePlatform */
        start local 2 // java.lang.String offlinePlatform
         1: .line 53
            aload 2 /* offlinePlatform */
            ifnull 5
         2: .line 54
            getstatic io.ebeaninternal.server.core.DatabasePlatformFactory.logger:Lorg/slf4j/Logger;
            ldc "offline platform [{}]"
            aload 2 /* offlinePlatform */
            invokeinterface org.slf4j.Logger.info:(Ljava/lang/String;Ljava/lang/Object;)V
         3: .line 55
            aload 0 /* this */
            aload 2 /* offlinePlatform */
            invokevirtual io.ebeaninternal.server.core.DatabasePlatformFactory.byDatabaseName:(Ljava/lang/String;)Lio/ebean/config/dbplatform/DatabasePlatform;
         4: areturn
         5: .line 58
      StackMap locals: java.lang.String
      StackMap stack:
            aload 1 /* config */
            invokevirtual io.ebean.config.DatabaseConfig.getDatabasePlatformName:()Ljava/lang/String;
            ifnull 8
         6: .line 60
            aload 0 /* this */
            aload 1 /* config */
            invokevirtual io.ebean.config.DatabaseConfig.getDatabasePlatformName:()Ljava/lang/String;
            invokevirtual io.ebeaninternal.server.core.DatabasePlatformFactory.byDatabaseName:(Ljava/lang/String;)Lio/ebean/config/dbplatform/DatabasePlatform;
         7: areturn
         8: .line 63
      StackMap locals:
      StackMap stack:
            aload 1 /* config */
            invokevirtual io.ebean.config.DatabaseConfig.getDataSourceConfig:()Lio/ebean/datasource/DataSourceConfig;
            invokevirtual io.ebean.datasource.DataSourceConfig.isOffline:()Z
            ifeq 10
         9: .line 64
            new javax.persistence.PersistenceException
            dup
            ldc "You must specify a DatabasePlatformName when you are offline"
            invokespecial javax.persistence.PersistenceException.<init>:(Ljava/lang/String;)V
            athrow
        10: .line 67
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 1 /* config */
            invokevirtual io.ebean.config.DatabaseConfig.getDataSource:()Ljavax/sql/DataSource;
            invokevirtual io.ebeaninternal.server.core.DatabasePlatformFactory.byDataSource:(Ljavax/sql/DataSource;)Lio/ebean/config/dbplatform/DatabasePlatform;
        11: areturn
        end local 2 // java.lang.String offlinePlatform
        12: .line 69
      StackMap locals: io.ebeaninternal.server.core.DatabasePlatformFactory io.ebean.config.DatabaseConfig
      StackMap stack: java.lang.Exception
            astore 2 /* ex */
        start local 2 // java.lang.Exception ex
        13: .line 70
            new javax.persistence.PersistenceException
            dup
            aload 2 /* ex */
            invokespecial javax.persistence.PersistenceException.<init>:(Ljava/lang/Throwable;)V
            athrow
        end local 2 // java.lang.Exception ex
        end local 1 // io.ebean.config.DatabaseConfig config
        end local 0 // io.ebeaninternal.server.core.DatabasePlatformFactory this
      LocalVariableTable:
        Start  End  Slot             Name  Signature
            0   14     0             this  Lio/ebeaninternal/server/core/DatabasePlatformFactory;
            0   14     1           config  Lio/ebean/config/DatabaseConfig;
            1   12     2  offlinePlatform  Ljava/lang/String;
           13   14     2               ex  Ljava/lang/Exception;
      Exception table:
        from    to  target  type
           0     4      12  Class java.lang.Exception
           5     7      12  Class java.lang.Exception
           8    11      12  Class java.lang.Exception
    MethodParameters:
        Name  Flags
      config  

  private io.ebean.config.dbplatform.DatabasePlatform byDatabaseName(java.lang.String);
    descriptor: (Ljava/lang/String;)Lio/ebean/config/dbplatform/DatabasePlatform;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=5, locals=2, args_size=2
        start local 0 // io.ebeaninternal.server.core.DatabasePlatformFactory this
        start local 1 // java.lang.String dbName
         0: .line 78
            aload 1 /* dbName */
            invokevirtual java.lang.String.toLowerCase:()Ljava/lang/String;
            astore 1 /* dbName */
         1: .line 79
            aload 1 /* dbName */
            ldc "h2"
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifeq 3
         2: .line 80
            new io.ebean.config.dbplatform.h2.H2Platform
            dup
            invokespecial io.ebean.config.dbplatform.h2.H2Platform.<init>:()V
            areturn
         3: .line 82
      StackMap locals:
      StackMap stack:
            aload 1 /* dbName */
            ldc "mariadb"
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifeq 5
         4: .line 83
            new io.ebean.config.dbplatform.mariadb.MariaDbPlatform
            dup
            invokespecial io.ebean.config.dbplatform.mariadb.MariaDbPlatform.<init>:()V
            areturn
         5: .line 85
      StackMap locals:
      StackMap stack:
            aload 1 /* dbName */
            ldc "mysql"
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifeq 7
         6: .line 86
            new io.ebean.config.dbplatform.mysql.MySqlPlatform
            dup
            invokespecial io.ebean.config.dbplatform.mysql.MySqlPlatform.<init>:()V
            areturn
         7: .line 88
      StackMap locals:
      StackMap stack:
            aload 1 /* dbName */
            ldc "mysql55"
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifeq 9
         8: .line 89
            new io.ebean.config.dbplatform.mysql.MySql55Platform
            dup
            invokespecial io.ebean.config.dbplatform.mysql.MySql55Platform.<init>:()V
            areturn
         9: .line 91
      StackMap locals:
      StackMap stack:
            aload 1 /* dbName */
            ldc "postgres"
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifne 10
            aload 1 /* dbName */
            ldc "postgres9"
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifeq 11
        10: .line 92
      StackMap locals:
      StackMap stack:
            new io.ebean.config.dbplatform.postgres.PostgresPlatform
            dup
            invokespecial io.ebean.config.dbplatform.postgres.PostgresPlatform.<init>:()V
            areturn
        11: .line 94
      StackMap locals:
      StackMap stack:
            aload 1 /* dbName */
            ldc "oracle11"
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifne 12
            aload 1 /* dbName */
            ldc "oracle10"
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifne 12
            aload 1 /* dbName */
            ldc "oracle9"
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifeq 13
        12: .line 95
      StackMap locals:
      StackMap stack:
            new io.ebean.config.dbplatform.oracle.Oracle11Platform
            dup
            invokespecial io.ebean.config.dbplatform.oracle.Oracle11Platform.<init>:()V
            areturn
        13: .line 97
      StackMap locals:
      StackMap stack:
            aload 1 /* dbName */
            ldc "oracle"
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifeq 15
        14: .line 98
            new io.ebean.config.dbplatform.oracle.OraclePlatform
            dup
            invokespecial io.ebean.config.dbplatform.oracle.OraclePlatform.<init>:()V
            areturn
        15: .line 100
      StackMap locals:
      StackMap stack:
            aload 1 /* dbName */
            ldc "sqlserver16"
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifeq 17
        16: .line 101
            new io.ebean.config.dbplatform.sqlserver.SqlServer16Platform
            dup
            invokespecial io.ebean.config.dbplatform.sqlserver.SqlServer16Platform.<init>:()V
            areturn
        17: .line 103
      StackMap locals:
      StackMap stack:
            aload 1 /* dbName */
            ldc "sqlserver17"
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifeq 19
        18: .line 104
            new io.ebean.config.dbplatform.sqlserver.SqlServer17Platform
            dup
            invokespecial io.ebean.config.dbplatform.sqlserver.SqlServer17Platform.<init>:()V
            areturn
        19: .line 106
      StackMap locals:
      StackMap stack:
            aload 1 /* dbName */
            ldc "sqlserver"
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifeq 21
        20: .line 107
            new java.lang.IllegalArgumentException
            dup
            ldc "Please choose the more specific sqlserver16 or sqlserver17 platform. Refer to issue #1340 for details"
            invokespecial java.lang.IllegalArgumentException.<init>:(Ljava/lang/String;)V
            athrow
        21: .line 109
      StackMap locals:
      StackMap stack:
            aload 1 /* dbName */
            ldc "sqlanywhere"
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifeq 23
        22: .line 110
            new io.ebean.config.dbplatform.sqlanywhere.SqlAnywherePlatform
            dup
            invokespecial io.ebean.config.dbplatform.sqlanywhere.SqlAnywherePlatform.<init>:()V
            areturn
        23: .line 112
      StackMap locals:
      StackMap stack:
            aload 1 /* dbName */
            ldc "db2"
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifeq 25
        24: .line 113
            new io.ebean.config.dbplatform.db2.DB2Platform
            dup
            invokespecial io.ebean.config.dbplatform.db2.DB2Platform.<init>:()V
            areturn
        25: .line 115
      StackMap locals:
      StackMap stack:
            aload 1 /* dbName */
            ldc "clickhouse"
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifeq 27
        26: .line 116
            new io.ebean.config.dbplatform.clickhouse.ClickHousePlatform
            dup
            invokespecial io.ebean.config.dbplatform.clickhouse.ClickHousePlatform.<init>:()V
            areturn
        27: .line 118
      StackMap locals:
      StackMap stack:
            aload 1 /* dbName */
            ldc "nuodb"
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifeq 29
        28: .line 119
            new io.ebean.config.dbplatform.nuodb.NuoDbPlatform
            dup
            invokespecial io.ebean.config.dbplatform.nuodb.NuoDbPlatform.<init>:()V
            areturn
        29: .line 121
      StackMap locals:
      StackMap stack:
            aload 1 /* dbName */
            ldc "sqlite"
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifeq 31
        30: .line 122
            new io.ebean.config.dbplatform.sqlite.SQLitePlatform
            dup
            invokespecial io.ebean.config.dbplatform.sqlite.SQLitePlatform.<init>:()V
            areturn
        31: .line 124
      StackMap locals:
      StackMap stack:
            aload 1 /* dbName */
            ldc "hana"
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifeq 33
        32: .line 125
            new io.ebean.config.dbplatform.hana.HanaPlatform
            dup
            invokespecial io.ebean.config.dbplatform.hana.HanaPlatform.<init>:()V
            areturn
        33: .line 127
      StackMap locals:
      StackMap stack:
            new java.lang.RuntimeException
            dup
            new java.lang.StringBuilder
            dup
            ldc "database platform "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 1 /* dbName */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            ldc " is not known?"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokespecial java.lang.RuntimeException.<init>:(Ljava/lang/String;)V
            athrow
        end local 1 // java.lang.String dbName
        end local 0 // io.ebeaninternal.server.core.DatabasePlatformFactory this
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0   34     0    this  Lio/ebeaninternal/server/core/DatabasePlatformFactory;
            0   34     1  dbName  Ljava/lang/String;
    MethodParameters:
        Name  Flags
      dbName  

  private io.ebean.config.dbplatform.DatabasePlatform byDataSource(javax.sql.DataSource);
    descriptor: (Ljavax/sql/DataSource;)Lio/ebean/config/dbplatform/DatabasePlatform;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=3, locals=6, args_size=2
        start local 0 // io.ebeaninternal.server.core.DatabasePlatformFactory this
        start local 1 // javax.sql.DataSource dataSource
         0: .line 135
            aconst_null
            astore 2 /* connection */
        start local 2 // java.sql.Connection connection
         1: .line 137
            aload 1 /* dataSource */
            invokeinterface javax.sql.DataSource.getConnection:()Ljava/sql/Connection;
            astore 2 /* connection */
         2: .line 138
            aload 2 /* connection */
            invokeinterface java.sql.Connection.getMetaData:()Ljava/sql/DatabaseMetaData;
            astore 3 /* metaData */
        start local 3 // java.sql.DatabaseMetaData metaData
         3: .line 140
            aload 0 /* this */
            aload 3 /* metaData */
            aload 2 /* connection */
            invokevirtual io.ebeaninternal.server.core.DatabasePlatformFactory.byDatabaseMeta:(Ljava/sql/DatabaseMetaData;Ljava/sql/Connection;)Lio/ebean/config/dbplatform/DatabasePlatform;
            astore 5
         4: .line 146
            aload 2 /* connection */
            invokestatic io.ebean.util.JdbcClose.close:(Ljava/sql/Connection;)V
         5: .line 140
            aload 5
            areturn
        end local 3 // java.sql.DatabaseMetaData metaData
         6: .line 142
      StackMap locals: io.ebeaninternal.server.core.DatabasePlatformFactory javax.sql.DataSource java.sql.Connection
      StackMap stack: java.sql.SQLException
            astore 3 /* ex */
        start local 3 // java.sql.SQLException ex
         7: .line 143
            new javax.persistence.PersistenceException
            dup
            aload 3 /* ex */
            invokespecial javax.persistence.PersistenceException.<init>:(Ljava/lang/Throwable;)V
            athrow
        end local 3 // java.sql.SQLException ex
         8: .line 145
      StackMap locals:
      StackMap stack: java.lang.Throwable
            astore 4
         9: .line 146
            aload 2 /* connection */
            invokestatic io.ebean.util.JdbcClose.close:(Ljava/sql/Connection;)V
        10: .line 147
            aload 4
            athrow
        end local 2 // java.sql.Connection connection
        end local 1 // javax.sql.DataSource dataSource
        end local 0 // io.ebeaninternal.server.core.DatabasePlatformFactory this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0   11     0        this  Lio/ebeaninternal/server/core/DatabasePlatformFactory;
            0   11     1  dataSource  Ljavax/sql/DataSource;
            1   11     2  connection  Ljava/sql/Connection;
            3    6     3    metaData  Ljava/sql/DatabaseMetaData;
            7    8     3          ex  Ljava/sql/SQLException;
      Exception table:
        from    to  target  type
           1     4       6  Class java.sql.SQLException
           1     4       8  any
           6     8       8  any
    MethodParameters:
            Name  Flags
      dataSource  

  private io.ebean.config.dbplatform.DatabasePlatform byDatabaseMeta(java.sql.DatabaseMetaData, java.sql.Connection);
    descriptor: (Ljava/sql/DatabaseMetaData;Ljava/sql/Connection;)Lio/ebean/config/dbplatform/DatabasePlatform;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=3, locals=6, args_size=3
        start local 0 // io.ebeaninternal.server.core.DatabasePlatformFactory this
        start local 1 // java.sql.DatabaseMetaData metaData
        start local 2 // java.sql.Connection connection
         0: .line 155
            aload 1 /* metaData */
            invokeinterface java.sql.DatabaseMetaData.getDatabaseProductName:()Ljava/lang/String;
            invokevirtual java.lang.String.toLowerCase:()Ljava/lang/String;
            astore 3 /* dbProductName */
        start local 3 // java.lang.String dbProductName
         1: .line 156
            aload 1 /* metaData */
            invokeinterface java.sql.DatabaseMetaData.getDatabaseMajorVersion:()I
            istore 4 /* majorVersion */
        start local 4 // int majorVersion
         2: .line 157
            aload 1 /* metaData */
            invokeinterface java.sql.DatabaseMetaData.getDatabaseMinorVersion:()I
            istore 5 /* minorVersion */
        start local 5 // int minorVersion
         3: .line 159
            aload 3 /* dbProductName */
            ldc "oracle"
            invokevirtual java.lang.String.contains:(Ljava/lang/CharSequence;)Z
            ifeq 5
         4: .line 160
            new io.ebean.config.dbplatform.oracle.OraclePlatform
            dup
            invokespecial io.ebean.config.dbplatform.oracle.OraclePlatform.<init>:()V
            areturn
         5: .line 161
      StackMap locals: java.lang.String int int
      StackMap stack:
            aload 3 /* dbProductName */
            ldc "microsoft"
            invokevirtual java.lang.String.contains:(Ljava/lang/CharSequence;)Z
            ifeq 7
         6: .line 162
            new java.lang.IllegalArgumentException
            dup
            ldc "For SqlServer please explicitly choose either sqlserver16 or sqlserver17 as the platform via DatabaseConfig.setDatabasePlatformName. Refer to issue #1340 for more details"
            invokespecial java.lang.IllegalArgumentException.<init>:(Ljava/lang/String;)V
            athrow
         7: .line 163
      StackMap locals:
      StackMap stack:
            aload 3 /* dbProductName */
            ldc "h2"
            invokevirtual java.lang.String.contains:(Ljava/lang/CharSequence;)Z
            ifeq 9
         8: .line 164
            new io.ebean.config.dbplatform.h2.H2Platform
            dup
            invokespecial io.ebean.config.dbplatform.h2.H2Platform.<init>:()V
            areturn
         9: .line 165
      StackMap locals:
      StackMap stack:
            aload 3 /* dbProductName */
            ldc "hsql database engine"
            invokevirtual java.lang.String.contains:(Ljava/lang/CharSequence;)Z
            ifeq 11
        10: .line 166
            new io.ebean.config.dbplatform.hsqldb.HsqldbPlatform
            dup
            invokespecial io.ebean.config.dbplatform.hsqldb.HsqldbPlatform.<init>:()V
            areturn
        11: .line 167
      StackMap locals:
      StackMap stack:
            aload 3 /* dbProductName */
            ldc "postgres"
            invokevirtual java.lang.String.contains:(Ljava/lang/CharSequence;)Z
            ifeq 13
        12: .line 168
            aload 2 /* connection */
            iload 4 /* majorVersion */
            invokestatic io.ebeaninternal.server.core.DatabasePlatformFactory.readPostgres:(Ljava/sql/Connection;I)Lio/ebean/config/dbplatform/DatabasePlatform;
            areturn
        13: .line 169
      StackMap locals:
      StackMap stack:
            aload 3 /* dbProductName */
            ldc "mariadb"
            invokevirtual java.lang.String.contains:(Ljava/lang/CharSequence;)Z
            ifeq 15
        14: .line 170
            new io.ebean.config.dbplatform.mariadb.MariaDbPlatform
            dup
            invokespecial io.ebean.config.dbplatform.mariadb.MariaDbPlatform.<init>:()V
            areturn
        15: .line 171
      StackMap locals:
      StackMap stack:
            aload 3 /* dbProductName */
            ldc "mysql"
            invokevirtual java.lang.String.contains:(Ljava/lang/CharSequence;)Z
            ifeq 17
        16: .line 172
            aload 0 /* this */
            iload 4 /* majorVersion */
            iload 5 /* minorVersion */
            invokevirtual io.ebeaninternal.server.core.DatabasePlatformFactory.mysqlVersion:(II)Lio/ebean/config/dbplatform/DatabasePlatform;
            areturn
        17: .line 173
      StackMap locals:
      StackMap stack:
            aload 3 /* dbProductName */
            ldc "nuo"
            invokevirtual java.lang.String.contains:(Ljava/lang/CharSequence;)Z
            ifeq 19
        18: .line 174
            new io.ebean.config.dbplatform.nuodb.NuoDbPlatform
            dup
            invokespecial io.ebean.config.dbplatform.nuodb.NuoDbPlatform.<init>:()V
            areturn
        19: .line 175
      StackMap locals:
      StackMap stack:
            aload 3 /* dbProductName */
            ldc "sqlite"
            invokevirtual java.lang.String.contains:(Ljava/lang/CharSequence;)Z
            ifeq 21
        20: .line 176
            new io.ebean.config.dbplatform.sqlite.SQLitePlatform
            dup
            invokespecial io.ebean.config.dbplatform.sqlite.SQLitePlatform.<init>:()V
            areturn
        21: .line 177
      StackMap locals:
      StackMap stack:
            aload 3 /* dbProductName */
            ldc "db2"
            invokevirtual java.lang.String.contains:(Ljava/lang/CharSequence;)Z
            ifeq 23
        22: .line 178
            new io.ebean.config.dbplatform.db2.DB2Platform
            dup
            invokespecial io.ebean.config.dbplatform.db2.DB2Platform.<init>:()V
            areturn
        23: .line 179
      StackMap locals:
      StackMap stack:
            aload 3 /* dbProductName */
            ldc "sql anywhere"
            invokevirtual java.lang.String.contains:(Ljava/lang/CharSequence;)Z
            ifeq 25
        24: .line 180
            new io.ebean.config.dbplatform.sqlanywhere.SqlAnywherePlatform
            dup
            invokespecial io.ebean.config.dbplatform.sqlanywhere.SqlAnywherePlatform.<init>:()V
            areturn
        25: .line 181
      StackMap locals:
      StackMap stack:
            aload 3 /* dbProductName */
            ldc "hdb"
            invokevirtual java.lang.String.contains:(Ljava/lang/CharSequence;)Z
            ifeq 27
        26: .line 182
            new io.ebean.config.dbplatform.hana.HanaPlatform
            dup
            invokespecial io.ebean.config.dbplatform.hana.HanaPlatform.<init>:()V
            areturn
        27: .line 183
      StackMap locals:
      StackMap stack:
            aload 3 /* dbProductName */
            ldc "clickhouse"
            invokevirtual java.lang.String.contains:(Ljava/lang/CharSequence;)Z
            ifeq 29
        28: .line 184
            new io.ebean.config.dbplatform.clickhouse.ClickHousePlatform
            dup
            invokespecial io.ebean.config.dbplatform.clickhouse.ClickHousePlatform.<init>:()V
            areturn
        29: .line 188
      StackMap locals:
      StackMap stack:
            new io.ebean.config.dbplatform.DatabasePlatform
            dup
            invokespecial io.ebean.config.dbplatform.DatabasePlatform.<init>:()V
            areturn
        end local 5 // int minorVersion
        end local 4 // int majorVersion
        end local 3 // java.lang.String dbProductName
        end local 2 // java.sql.Connection connection
        end local 1 // java.sql.DatabaseMetaData metaData
        end local 0 // io.ebeaninternal.server.core.DatabasePlatformFactory this
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0   30     0           this  Lio/ebeaninternal/server/core/DatabasePlatformFactory;
            0   30     1       metaData  Ljava/sql/DatabaseMetaData;
            0   30     2     connection  Ljava/sql/Connection;
            1   30     3  dbProductName  Ljava/lang/String;
            2   30     4   majorVersion  I
            3   30     5   minorVersion  I
    Exceptions:
      throws java.sql.SQLException
    MethodParameters:
            Name  Flags
      metaData    
      connection  

  private io.ebean.config.dbplatform.DatabasePlatform mysqlVersion(int, int);
    descriptor: (II)Lio/ebean/config/dbplatform/DatabasePlatform;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=2, locals=3, args_size=3
        start local 0 // io.ebeaninternal.server.core.DatabasePlatformFactory this
        start local 1 // int majorVersion
        start local 2 // int minorVersion
         0: .line 192
            iload 1 /* majorVersion */
            iconst_5
            if_icmpgt 2
            iload 2 /* minorVersion */
            iconst_5
            if_icmpgt 2
         1: .line 193
            new io.ebean.config.dbplatform.mysql.MySql55Platform
            dup
            invokespecial io.ebean.config.dbplatform.mysql.MySql55Platform.<init>:()V
            areturn
         2: .line 195
      StackMap locals:
      StackMap stack:
            new io.ebean.config.dbplatform.mysql.MySqlPlatform
            dup
            invokespecial io.ebean.config.dbplatform.mysql.MySqlPlatform.<init>:()V
            areturn
        end local 2 // int minorVersion
        end local 1 // int majorVersion
        end local 0 // io.ebeaninternal.server.core.DatabasePlatformFactory this
      LocalVariableTable:
        Start  End  Slot          Name  Signature
            0    3     0          this  Lio/ebeaninternal/server/core/DatabasePlatformFactory;
            0    3     1  majorVersion  I
            0    3     2  minorVersion  I
    MethodParameters:
              Name  Flags
      majorVersion  
      minorVersion  

  private static io.ebean.config.dbplatform.DatabasePlatform readPostgres(java.sql.Connection, int);
    descriptor: (Ljava/sql/Connection;I)Lio/ebean/config/dbplatform/DatabasePlatform;
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=3, locals=9, args_size=2
        start local 0 // java.sql.Connection connection
        start local 1 // int majorVersion
         0: .line 202
            aconst_null
            astore 2
            aconst_null
            astore 3
         1: aload 0 /* connection */
            ldc "select version() as \"version\""
            invokeinterface java.sql.Connection.prepareStatement:(Ljava/lang/String;)Ljava/sql/PreparedStatement;
            astore 4 /* statement */
        start local 4 // java.sql.PreparedStatement statement
         2: .line 203
            aconst_null
            astore 5
            aconst_null
            astore 6
         3: aload 4 /* statement */
            invokeinterface java.sql.PreparedStatement.executeQuery:()Ljava/sql/ResultSet;
            astore 7 /* resultSet */
        start local 7 // java.sql.ResultSet resultSet
         4: .line 204
            aload 7 /* resultSet */
            invokeinterface java.sql.ResultSet.next:()Z
            ifeq 11
         5: .line 205
            aload 7 /* resultSet */
            ldc "version"
            invokeinterface java.sql.ResultSet.getString:(Ljava/lang/String;)Ljava/lang/String;
            invokevirtual java.lang.String.toLowerCase:()Ljava/lang/String;
            astore 8 /* productVersion */
        start local 8 // java.lang.String productVersion
         6: .line 206
            aload 8 /* productVersion */
            ldc "cockroach"
            invokevirtual java.lang.String.contains:(Ljava/lang/CharSequence;)Z
            ifeq 11
         7: .line 207
            new io.ebean.config.dbplatform.cockroach.CockroachPlatform
            dup
            invokespecial io.ebean.config.dbplatform.cockroach.CockroachPlatform.<init>:()V
         8: .line 210
            aload 7 /* resultSet */
            ifnull 9
            aload 7 /* resultSet */
            invokeinterface java.sql.ResultSet.close:()V
         9: .line 211
      StackMap locals: java.sql.Connection int java.lang.Throwable java.lang.Throwable java.sql.PreparedStatement java.lang.Throwable java.lang.Throwable java.sql.ResultSet java.lang.String
      StackMap stack: io.ebean.config.dbplatform.cockroach.CockroachPlatform
            aload 4 /* statement */
            ifnull 10
            aload 4 /* statement */
            invokeinterface java.sql.PreparedStatement.close:()V
        10: .line 207
      StackMap locals:
      StackMap stack: io.ebean.config.dbplatform.cockroach.CockroachPlatform
            areturn
        end local 8 // java.lang.String productVersion
        11: .line 210
      StackMap locals:
      StackMap stack:
            aload 7 /* resultSet */
            ifnull 17
            aload 7 /* resultSet */
            invokeinterface java.sql.ResultSet.close:()V
            goto 17
      StackMap locals:
      StackMap stack: java.lang.Throwable
        12: astore 5
            aload 7 /* resultSet */
            ifnull 13
            aload 7 /* resultSet */
            invokeinterface java.sql.ResultSet.close:()V
        end local 7 // java.sql.ResultSet resultSet
      StackMap locals:
      StackMap stack:
        13: aload 5
            athrow
      StackMap locals:
      StackMap stack: java.lang.Throwable
        14: astore 6
            aload 5
            ifnonnull 15
            aload 6
            astore 5
            goto 16
      StackMap locals:
      StackMap stack:
        15: aload 5
            aload 6
            if_acmpeq 16
            aload 5
            aload 6
            invokevirtual java.lang.Throwable.addSuppressed:(Ljava/lang/Throwable;)V
      StackMap locals:
      StackMap stack:
        16: aload 5
            athrow
        17: .line 211
      StackMap locals:
      StackMap stack:
            aload 4 /* statement */
            ifnull 25
            aload 4 /* statement */
            invokeinterface java.sql.PreparedStatement.close:()V
            goto 25
      StackMap locals:
      StackMap stack: java.lang.Throwable
        18: astore 2
            aload 4 /* statement */
            ifnull 19
            aload 4 /* statement */
            invokeinterface java.sql.PreparedStatement.close:()V
        end local 4 // java.sql.PreparedStatement statement
      StackMap locals:
      StackMap stack:
        19: aload 2
            athrow
      StackMap locals:
      StackMap stack: java.lang.Throwable
        20: astore 3
            aload 2
            ifnonnull 21
            aload 3
            astore 2
            goto 22
      StackMap locals:
      StackMap stack:
        21: aload 2
            aload 3
            if_acmpeq 22
            aload 2
            aload 3
            invokevirtual java.lang.Throwable.addSuppressed:(Ljava/lang/Throwable;)V
      StackMap locals:
      StackMap stack:
        22: aload 2
            athrow
      StackMap locals: java.sql.Connection int
      StackMap stack: java.sql.SQLException
        23: astore 2 /* e */
        start local 2 // java.sql.SQLException e
        24: .line 212
            getstatic io.ebeaninternal.server.core.DatabasePlatformFactory.logger:Lorg/slf4j/Logger;
            ldc "Error running detection query on Postgres"
            aload 2 /* e */
            invokeinterface org.slf4j.Logger.warn:(Ljava/lang/String;Ljava/lang/Throwable;)V
        end local 2 // java.sql.SQLException e
        25: .line 215
      StackMap locals:
      StackMap stack:
            iload 1 /* majorVersion */
            bipush 9
            if_icmpgt 27
        26: .line 216
            new io.ebean.config.dbplatform.postgres.Postgres9Platform
            dup
            invokespecial io.ebean.config.dbplatform.postgres.Postgres9Platform.<init>:()V
            areturn
        27: .line 218
      StackMap locals:
      StackMap stack:
            new io.ebean.config.dbplatform.postgres.PostgresPlatform
            dup
            invokespecial io.ebean.config.dbplatform.postgres.PostgresPlatform.<init>:()V
            areturn
        end local 1 // int majorVersion
        end local 0 // java.sql.Connection connection
      LocalVariableTable:
        Start  End  Slot            Name  Signature
            0   28     0      connection  Ljava/sql/Connection;
            0   28     1    majorVersion  I
            2   19     4       statement  Ljava/sql/PreparedStatement;
            4   13     7       resultSet  Ljava/sql/ResultSet;
            6   11     8  productVersion  Ljava/lang/String;
           24   25     2               e  Ljava/sql/SQLException;
      Exception table:
        from    to  target  type
           4     8      12  any
           3     9      14  any
          11    14      14  any
           2     9      18  any
          11    17      18  any
           1    10      20  any
          11    20      20  any
           0    10      23  Class java.sql.SQLException
          11    23      23  Class java.sql.SQLException
    MethodParameters:
              Name  Flags
      connection    
      majorVersion  
}
SourceFile: "DatabasePlatformFactory.java"