Description:
Consulting DatabaseMetaData.getProcedureColumns() or DatabaseMetaData.getFunctionColumns() with a columnNamePattern filter doesn't work unless 'useInformationSchema=true' property is set.
But even if 'useInformationSchema=true' is used, the result always contains the "empty" column corresponding to the function return, no matter the columnNamePattern used.
How to repeat:
stmt.execute("DROP PROCEDURE IF EXISTS common_name");
stmt.execute("CREATE PROCEDURE common_name (INOUT param1 CHAR(20), IN param2 CHAR(20)) BEGIN  SELECT CONCAT(param1, param2) INTO param1;  END");
stmt.execute("DROP FUNCTION IF EXISTS common_name");
stmt.execute("CREATE FUNCTION common_name (param1 CHAR(20), param2 CHAR(20)) RETURNS CHAR(40) DETERMINISTIC RETURN CONCAT(param1, param2)");
DatabaseMetaData dbmd = conn.getMetaData();
ResultSet rs;
System.out.println("Procs 1 ********");
rs = dbmd.getProcedureColumns(null, "", "%", "col2");
while (rs.next()) {
    System.out.println(rs.getString(3) + " -- " + rs.getString(4));
}
System.out.println("Procs 2 ********");
rs = dbmd.getProcedureColumns(null, "", "%", "col%");
while (rs.next()) {
    System.out.println(rs.getString(3) + " -- " + rs.getString(4));
}
System.out.println("Funcs 1 ********");
rs = dbmd.getFunctionColumns(null, "", "%", "col2");
while (rs.next()) {
    System.out.println(rs.getString(3) + " -- " + rs.getString(4));
}
System.out.println("Funcs 2 ********");
rs = dbmd.getFunctionColumns(null, "", "%", "col%");
while (rs.next()) {
    System.out.println(rs.getString(3) + " -- " + rs.getString(4));
}
Suggested fix:
Fix StringUtils.wildCompare().
Fix query that consults the information_schema regarding the procedure/function columns info
  
 
 
Description: Consulting DatabaseMetaData.getProcedureColumns() or DatabaseMetaData.getFunctionColumns() with a columnNamePattern filter doesn't work unless 'useInformationSchema=true' property is set. But even if 'useInformationSchema=true' is used, the result always contains the "empty" column corresponding to the function return, no matter the columnNamePattern used. How to repeat: stmt.execute("DROP PROCEDURE IF EXISTS common_name"); stmt.execute("CREATE PROCEDURE common_name (INOUT param1 CHAR(20), IN param2 CHAR(20)) BEGIN SELECT CONCAT(param1, param2) INTO param1; END"); stmt.execute("DROP FUNCTION IF EXISTS common_name"); stmt.execute("CREATE FUNCTION common_name (param1 CHAR(20), param2 CHAR(20)) RETURNS CHAR(40) DETERMINISTIC RETURN CONCAT(param1, param2)"); DatabaseMetaData dbmd = conn.getMetaData(); ResultSet rs; System.out.println("Procs 1 ********"); rs = dbmd.getProcedureColumns(null, "", "%", "col2"); while (rs.next()) { System.out.println(rs.getString(3) + " -- " + rs.getString(4)); } System.out.println("Procs 2 ********"); rs = dbmd.getProcedureColumns(null, "", "%", "col%"); while (rs.next()) { System.out.println(rs.getString(3) + " -- " + rs.getString(4)); } System.out.println("Funcs 1 ********"); rs = dbmd.getFunctionColumns(null, "", "%", "col2"); while (rs.next()) { System.out.println(rs.getString(3) + " -- " + rs.getString(4)); } System.out.println("Funcs 2 ********"); rs = dbmd.getFunctionColumns(null, "", "%", "col%"); while (rs.next()) { System.out.println(rs.getString(3) + " -- " + rs.getString(4)); } Suggested fix: Fix StringUtils.wildCompare(). Fix query that consults the information_schema regarding the procedure/function columns info