@@ -829,6 +829,62 @@ DbInfo.Builder doParse(String jdbcUrl, DbInfo.Builder builder) {
829
829
830
830
return MODIFIED_URL_LIKE .doParse (jdbcUrl , builder );
831
831
}
832
+ },
833
+ INFORMIX_SQLI ("informix-sqli" ) {
834
+ private static final int DEFAULT_PORT = 9088 ;
835
+
836
+ @ Override
837
+ DbInfo .Builder doParse (String jdbcUrl , DbInfo .Builder builder ) {
838
+ builder = MODIFIED_URL_LIKE .doParse (jdbcUrl , builder );
839
+
840
+ DbInfo dbInfo = builder .build ();
841
+ if (dbInfo .getPort () == null ) {
842
+ builder .port (DEFAULT_PORT );
843
+ }
844
+
845
+ int hostIndex = jdbcUrl .indexOf ("://" );
846
+ if (hostIndex == -1 ) {
847
+ return builder ;
848
+ }
849
+
850
+ int dbNameStartIndex = jdbcUrl .indexOf ('/' , hostIndex + 3 );
851
+ if (dbNameStartIndex == -1 ) {
852
+ return builder ;
853
+ }
854
+ int dbNameEndIndex = jdbcUrl .indexOf (':' , dbNameStartIndex );
855
+ if (dbNameEndIndex == -1 ) {
856
+ dbNameEndIndex = jdbcUrl .length ();
857
+ }
858
+ String name = jdbcUrl .substring (dbNameStartIndex + 1 , dbNameEndIndex );
859
+ if (name .isEmpty ()) {
860
+ builder .name (null );
861
+ } else {
862
+ builder .name (name );
863
+ }
864
+
865
+ return builder ;
866
+ }
867
+ },
868
+
869
+ INFORMIX_DIRECT ("informix-direct" ) {
870
+ private final Pattern pattern = Pattern .compile ("://(.*?)(:|;|$)" );
871
+
872
+ @ Override
873
+ DbInfo .Builder doParse (String jdbcUrl , DbInfo .Builder builder ) {
874
+ builder = MODIFIED_URL_LIKE .doParse (jdbcUrl , builder );
875
+ builder .host (null );
876
+ builder .port (null );
877
+
878
+ Matcher matcher = pattern .matcher (jdbcUrl );
879
+ if (matcher .find ()) {
880
+ String name = matcher .group (1 );
881
+ if (!name .isEmpty ()) {
882
+ builder .name (name );
883
+ }
884
+ }
885
+
886
+ return builder ;
887
+ }
832
888
};
833
889
834
890
private static final Logger logger = Logger .getLogger (JdbcConnectionUrlParser .class .getName ());
@@ -998,6 +1054,10 @@ private static String toDbSystem(String type) {
998
1054
return DbSystemValues .H2 ;
999
1055
case "hsqldb" : // Hyper SQL Database
1000
1056
return "hsqldb" ;
1057
+ case "informix-sqli" : // IBM Informix
1058
+ return DbSystemValues .INFORMIX_SQLI ;
1059
+ case "informix-direct" :
1060
+ return DbSystemValues .INFORMIX_DIRECT ;
1001
1061
case "mariadb" : // MariaDB
1002
1062
return DbSystemValues .MARIADB ;
1003
1063
case "mysql" : // MySQL
@@ -1024,6 +1084,8 @@ private static final class DbSystemValues {
1024
1084
static final String MYSQL = "mysql" ;
1025
1085
static final String ORACLE = "oracle" ;
1026
1086
static final String DB2 = "db2" ;
1087
+ static final String INFORMIX_SQLI = "informix-sqli" ;
1088
+ static final String INFORMIX_DIRECT = "informix-direct" ;
1027
1089
static final String POSTGRESQL = "postgresql" ;
1028
1090
static final String HANADB = "hanadb" ;
1029
1091
static final String DERBY = "derby" ;
0 commit comments