=== modified file 'src/com/mysql/jdbc/DatabaseMetaData.java' --- src/com/mysql/jdbc/DatabaseMetaData.java 2010-01-28 23:59:15 +0000 +++ src/com/mysql/jdbc/DatabaseMetaData.java 2010-03-10 06:33:03 +0000 @@ -738,6 +738,7 @@ while (proceduresRs.next()) { boolean shouldAdd = true; + String mysqlProcDb = proceduresRs.getString(4); if (needsClientFiltering) { shouldAdd = false; @@ -758,7 +759,7 @@ if (fields != null && fields.length == 9) { rowData = new byte[9][]; - rowData[0] = catalog == null ? null : s2b(catalog); // PROCEDURE_CAT + rowData[0] = mysqlProcDb == null ? null : s2b(mysqlProcDb); // PROCEDURE_CAT rowData[1] = null; // PROCEDURE_SCHEM rowData[2] = s2b(functionName); // PROCEDURE_NAME rowData[3] = null; // reserved1 @@ -793,6 +794,7 @@ Map procedureRowsOrderedByName, int nameIndex) throws SQLException { while (proceduresRs.next()) { boolean shouldAdd = true; + String mysqlProcDb = proceduresRs.getString(4); if (needsClientFiltering) { shouldAdd = false; @@ -809,7 +811,7 @@ if (shouldAdd) { String procedureName = proceduresRs.getString(nameIndex); byte[][] rowData = new byte[9][]; - rowData[0] = catalog == null ? null : s2b(catalog); + rowData[0] = mysqlProcDb == null ? null : s2b(mysqlProcDb); rowData[1] = null; rowData[2] = s2b(procedureName); rowData[3] = null; @@ -832,13 +834,13 @@ } private ResultSetRow convertTypeDescriptorToProcedureRow( - byte[] procNameAsBytes, String paramName, boolean isOutParam, + byte[] procNameAsBytes, String dbCatalog, String paramName, boolean isOutParam, boolean isInParam, boolean isReturnParam, TypeDescriptor typeDesc, boolean forGetFunctionColumns, int ordinal) throws SQLException { byte[][] row = forGetFunctionColumns ? new byte[17][] : new byte[14][]; - row[0] = null; // PROCEDURE_CAT + row[0] = s2b(dbCatalog); // PROCEDURE_CAT row[1] = null; // PROCEDURE_SCHEM row[2] = procNameAsBytes; // PROCEDURE/NAME row[3] = s2b(paramName); // COLUMN_NAME @@ -1471,13 +1473,13 @@ * * @see #getSearchStringEscape */ - private void getCallStmtParameterTypes(String catalog, String procName, + private void getCallStmtParameterTypes(String catalog, String dbCatalog, String procName, String parameterNamePattern, List resultRows) throws SQLException { - getCallStmtParameterTypes(catalog, procName, + getCallStmtParameterTypes(catalog, dbCatalog, procName, parameterNamePattern, resultRows, false); } - private void getCallStmtParameterTypes(String catalog, String procName, + private void getCallStmtParameterTypes(String catalog, String dbCatalog, String procName, String parameterNamePattern, List resultRows, boolean forGetFunctionColumns) throws SQLException { java.sql.Statement paramRetrievalStmt = null; @@ -1674,7 +1676,7 @@ returnsDefn, null); resultRows.add(convertTypeDescriptorToProcedureRow( - procNameAsBytes, "", false, false, true, + procNameAsBytes, dbCatalog, "", false, false, true, returnDescriptor, forGetFunctionColumns, 0)); } @@ -1812,7 +1814,7 @@ if (wildCompareRes != StringUtils.WILD_COMPARE_NO_MATCH) { ResultSetRow row = convertTypeDescriptorToProcedureRow( - procNameAsBytes, paramName, isOutParam, + procNameAsBytes, dbCatalog, paramName, isOutParam, isInParam, false, typeDesc, forGetFunctionColumns, ordinal++); @@ -4107,7 +4109,8 @@ while (procedureNameRs.next()) { proceduresToExtractList.add(procedureNameRs - .getString(3)); + .getString(3)+","+procedureNameRs + .getString(1)); } // Required to be sorted in name-order by JDBC spec, @@ -4136,9 +4139,10 @@ ArrayList resultRows = new ArrayList(); for (Iterator iter = proceduresToExtractList.iterator(); iter.hasNext();) { - String procName = (String) iter.next(); + String joined_str =(String) iter.next(); + String str_array[] = joined_str.split(","); - getCallStmtParameterTypes(catalog, procName, columnNamePattern, + getCallStmtParameterTypes(catalog, str_array[1], str_array[0], columnNamePattern, resultRows, fields.length == 17 /* for getFunctionColumns */); } @@ -4243,7 +4247,7 @@ ResultSet proceduresRs = null; boolean needsClientFiltering = true; PreparedStatement proceduresStmt = (PreparedStatement) conn - .clientPrepareStatement("SELECT name, type, comment FROM mysql.proc WHERE name like ? and db <=> ? ORDER BY name"); + .clientPrepareStatement("SELECT name, type, comment, db FROM mysql.proc WHERE name like ? and db <=> ? ORDER BY name"); try { //