@@ -473,7 +473,8 @@ private static boolean declaredTypeIsNumericOrBoolean(String sqlType) {
473473 return baseType .equals ("TINYINT" ) || baseType .equals ("SMALLINT" ) || baseType .equals ("MEDIUMINT" )
474474 || baseType .equals ("INT" ) || baseType .equals ("INTEGER" ) || baseType .equals ("BIGINT" )
475475 || baseType .equals ("REAL" ) || baseType .equals ("FLOAT" ) || baseType .equals ("DOUBLE" )
476- || baseType .equals ("NUMERIC" ) || baseType .equals ("DECIMAL" ) || baseType .equals ("BOOLEAN" )
476+ || baseType .equals ("NUMERIC" ) || baseType .equals ("DECIMAL" ) || baseType .equals ("DEC" )
477+ || baseType .equals ("BOOLEAN" )
477478 || baseType .equals ("BOOL" ) || baseType .equals ("BIT" );
478479 }
479480
@@ -504,11 +505,15 @@ private static boolean declaredTypeMatches(String sqlType, RegisteredColumnType
504505
505506 private static boolean mysqlDeclaredTypeMatches (String sqlType , RegisteredColumnType registered ,
506507 MysqlColumnAttributes attributes ) {
507- if (!declaredTypeMatches (sqlType , new RegisteredColumnType (registered .jdbcType (),
508- attributes .columnType (), registered .precision (), registered .scale ()))) return false ;
509508 String declared = declaredPhysicalType (sqlType ).toUpperCase (java .util .Locale .ROOT );
510509 String actual = attributes .columnType () == null ? ""
511510 : attributes .columnType ().toUpperCase (java .util .Locale .ROOT );
511+ RegisteredColumnType actualType = new RegisteredColumnType (registered .jdbcType (),
512+ attributes .columnType (), registered .precision (), registered .scale ());
513+ boolean mysqlBooleanAlias = "BOOLEAN" .equals (canonicalType (normalizedBaseType (declared )))
514+ && "TINYINT" .equals (normalizedBaseType (actual ))
515+ && java .util .Arrays .equals (declaredTypeParameters (actual ), new int [] { 1 });
516+ if (!mysqlBooleanAlias && !declaredTypeMatches (declared , actualType )) return false ;
512517 return declared .matches (".*\\ bUNSIGNED\\ b.*" ) == actual .matches (".*\\ bUNSIGNED\\ b.*" )
513518 && declared .matches (".*\\ bZEROFILL\\ b.*" ) == actual .matches (".*\\ bZEROFILL\\ b.*" );
514519 }
@@ -544,10 +549,11 @@ private static String canonicalType(String type) {
544549
545550 private static int [] declaredTypeParameters (String sqlType ) {
546551 if (sqlType == null ) return new int [0 ];
547- int open = sqlType .indexOf ('(' );
548- int close = open < 0 ? -1 : sqlType .indexOf (')' , open + 1 );
552+ String physicalType = declaredPhysicalType (sqlType );
553+ int open = physicalType .indexOf ('(' );
554+ int close = open < 0 ? -1 : physicalType .indexOf (')' , open + 1 );
549555 if (open < 0 || close < 0 ) return new int [0 ];
550- String [] values = sqlType .substring (open + 1 , close ).split ("," );
556+ String [] values = physicalType .substring (open + 1 , close ).split ("," );
551557 try {
552558 int [] parsed = new int [values .length ];
553559 for (int i = 0 ; i < values .length ; i ++) parsed [i ] = Integer .parseInt (values [i ].trim ());
0 commit comments