Routine[] specifics = routine.getSpecificRoutines();
for (int m = 0; m < specifics.length; m++) {
row = t.getEmptyRowData();
Routine specific = specifics[m];
Type type = specific.isProcedure() ? null
: specific
.getReturnType();
//
row[specific_catalog] = database.getCatalogName().name;
row[specific_schema] = specific.getSchemaName().name;
row[specific_name] = specific.getSpecificName().name;
row[routine_catalog] = database.getCatalogName().name;
row[routine_schema] = routine.getSchemaName().name;
row[routine_name] = specific.getName().name;
row[routine_type] = specific.isProcedure() ? "PROCEDURE"
: "FUNCTION";
row[module_catalog] = null;
row[module_schema] = null;
row[module_name] = null;
row[udt_catalog] = null;
row[udt_schema] = null;
row[udt_name] = null;
row[data_type] = type == null ? null
: type.getNameString();
if (type != null && type.isCharacterType()) {
row[character_maximum_length] =
ValuePool.getLong(type.precision);
row[character_octet_length] =
ValuePool.getLong(type.precision * 2);
row[character_set_catalog] =
database.getCatalogName().name;
row[character_set_schema] =
((CharacterType) type).getCharacterSet()
.getSchemaName().name;
row[character_set_name] =
((CharacterType) type).getCharacterSet().getName()
.name;
row[collation_catalog] = database.getCatalogName().name;
row[collation_schema] =
((CharacterType) type).getCollation().getSchemaName()
.name;
row[collation_name] =
((CharacterType) type).getCollation().getName().name;
}
if (type != null && type.isNumberType()) {
row[numeric_precision] = ValuePool.getLong(type.precision);
row[numeric_precision_radix] = ValuePool.getLong(
((NumberType) type).getPrecisionRadix());
row[numeric_scale] = ValuePool.getLong(type.precision);
}
if (type != null
&& (type.isIntervalType() || type.isDateTimeType())) {
row[datetime_precision] = ValuePool.getLong(type.scale);
}
if (type != null && type.isIntervalType()) {
row[interval_type] =
IntervalType.getQualifier(type.typeCode);
row[interval_precision] =
ValuePool.getLong(type.precision);
}
row[type_udt_catalog] = null;
row[type_udt_schema] = null;
row[type_udt_name] = null;
row[scope_catalog] = null;
row[scope_schema] = null;
row[scope_name] = null;
row[maximum_cardinality] = null;
row[dtd_identifier] = null; //**
row[routine_body] = specific.getLanguage()
== Routine.LANGUAGE_JAVA ? "EXTERNAL"
: "SQL";
row[routine_definition] = specific.getSQL();
row[external_name] =
specific.getLanguage() == Routine.LANGUAGE_JAVA
? specific.getMethod().getName()
: null;
row[external_language] = specific.getLanguage()
== Routine.LANGUAGE_JAVA ? "JAVA"
: null;
row[parameter_style] = specific.getLanguage()
== Routine.LANGUAGE_JAVA ? "JAVA"
: null;
row[is_deterministic] = specific.isDeterministic() ? "YES"
: "NO";
row[sql_data_access] = specific.getDataImpactString();
row[is_null_call] = type == null ? null
: specific.isNullInputOutput()
? "YES"
: "NO";
row[sql_path] = null;
row[schema_level_routine] = "YES";
row[max_dynamic_result_sets] = ValuePool.getLong(0);