Program: 65517
Project: 65517
Buggy source:
/** 
 * INTERNAL: Generate the nested function to convert the PLSQL type to its compatible SQL type.
 */
protected TypeInfo generateNestedFunction(ComplexDatabaseType type,boolean isNonAssociativeCollection){
  TypeInfo info=new TypeInfo();
  info.pl2SqlName=PL2SQL_PREFIX + (this.functionId++);
  info.sql2PlName=SQL2PL_PREFIX + (this.functionId++);
  if (type.isRecord()) {
    PLSQLrecord record=(PLSQLrecord)type;
    StringBuilder sb=new StringBuilder();
    sb.append(INDENT);
    sb.append(BEGIN_DECLARE_FUNCTION);
    sb.append(info.pl2SqlName);
    sb.append("String_Node_Str");
    sb.append(record.getTypeName());
    sb.append("String_Node_Str");
    sb.append(NL);
    sb.append(INDENT);
    sb.append(RTURN);
    sb.append(record.getCompatibleType());
    sb.append("String_Node_Str");
    sb.append(NL);
    sb.append(INDENT);
    sb.append(INDENT);
    sb.append("String_Node_Str");
    sb.append(record.getCompatibleType());
    sb.append("String_Node_Str");
    sb.append(NL);
    sb.append(INDENT);
    sb.append(BEGIN_BEGIN_BLOCK);
    sb.append(INDENT);
    sb.append(INDENT);
    sb.append("String_Node_Str");
    sb.append(record.getCompatibleType());
    sb.append("String_Node_Str");
    int size=record.getFields().size();
    for (int index=0; index < size; index++) {
      sb.append("String_Node_Str");
      if ((index + 1) != size) {
        sb.append("String_Node_Str");
      }
    }
    sb.append("String_Node_Str");
    sb.append(NL);
    for (    PLSQLargument argument : record.getFields()) {
      sb.append(INDENT);
      sb.append(INDENT);
      sb.append("String_Node_Str");
      sb.append(argument.name);
      if (argument.databaseType.isComplexDatabaseType()) {
        sb.append("String_Node_Str");
        sb.append(getPl2SQLName((ComplexDatabaseType)argument.databaseType));
        sb.append("String_Node_Str");
        sb.append(argument.name);
        sb.append("String_Node_Str");
      }
 else       if (argument.databaseType.equals(PLSQLBoolean)) {
        sb.append("String_Node_Str");
        sb.append(PLSQLBoolean_OUT_CONV);
        sb.append("String_Node_Str");
        sb.append(argument.name);
        sb.append("String_Node_Str");
      }
 else {
        sb.append("String_Node_Str");
        sb.append(argument.name);
        sb.append("String_Node_Str");
      }
      sb.append(NL);
    }
    sb.append(INDENT);
    sb.append(INDENT);
    sb.append(RTURN);
    sb.append("String_Node_Str");
    sb.append(NL);
    sb.append(INDENT);
    sb.append("String_Node_Str");
    sb.append(info.pl2SqlName);
    sb.append("String_Node_Str");
    sb.append(NL);
    info.pl2SqlConv=sb.toString();
    sb=new StringBuilder();
    sb.append(INDENT);
    sb.append(BEGIN_DECLARE_FUNCTION);
    sb.append(info.sql2PlName);
    sb.append("String_Node_Str");
    sb.append(record.getCompatibleType());
    sb.append("String_Node_Str");
    sb.append(NL);
    sb.append(INDENT);
    sb.append(RTURN);
    sb.append(record.getTypeName());
    sb.append("String_Node_Str");
    sb.append(NL);
    sb.append(INDENT);
    sb.append(INDENT);
    sb.append("String_Node_Str");
    sb.append(record.getTypeName());
    sb.append("String_Node_Str");
    sb.append(NL);
    sb.append(INDENT);
    sb.append(BEGIN_BEGIN_BLOCK);
    for (    PLSQLargument argument : record.getFields()) {
      sb.append(INDENT);
      sb.append(INDENT);
      sb.append("String_Node_Str");
      sb.append(argument.name);
      if (argument.databaseType.isComplexDatabaseType()) {
        sb.append("String_Node_Str");
        sb.append(getSQL2PlName((ComplexDatabaseType)argument.databaseType));
        sb.append("String_Node_Str");
        sb.append(argument.name);
        sb.append("String_Node_Str");
      }
 else       if (argument.databaseType.equals(PLSQLBoolean)) {
        sb.append("String_Node_Str");
        sb.append(PLSQLBoolean_IN_CONV);
        sb.append("String_Node_Str");
        sb.append(argument.name);
        sb.append("String_Node_Str");
      }
 else {
        sb.append("String_Node_Str");
        sb.append(argument.name);
        sb.append("String_Node_Str");
      }
      sb.append(NL);
    }
    sb.append(INDENT);
    sb.append(INDENT);
    sb.append(RTURN);
    sb.append("String_Node_Str");
    sb.append(NL);
    sb.append(INDENT);
    sb.append("String_Node_Str");
    sb.append(info.sql2PlName);
    sb.append("String_Node_Str");
    sb.append(NL);
    info.sql2PlConv=sb.toString();
  }
 else   if (type.isCollection()) {
    PLSQLCollection collection=(PLSQLCollection)type;
    StringBuilder sb=new StringBuilder();
    sb.append(INDENT);
    sb.append(BEGIN_DECLARE_FUNCTION);
    sb.append(info.pl2SqlName);
    sb.append("String_Node_Str");
    sb.append(collection.getTypeName());
    sb.append("String_Node_Str");
    sb.append(NL);
    sb.append(INDENT);
    sb.append(RTURN);
    sb.append(collection.getCompatibleType());
    sb.append("String_Node_Str");
    sb.append(NL);
    sb.append(INDENT);
    sb.append(INDENT);
    sb.append("String_Node_Str");
    sb.append(collection.getCompatibleType());
    sb.append("String_Node_Str");
    sb.append(NL);
    sb.append(INDENT);
    sb.append(BEGIN_BEGIN_BLOCK);
    sb.append(INDENT);
    sb.append(INDENT);
    sb.append("String_Node_Str");
    sb.append(collection.getCompatibleType());
    sb.append("String_Node_Str");
    sb.append(NL);
    sb.append(INDENT);
    sb.append(INDENT);
    sb.append("String_Node_Str");
    sb.append(NL);
    sb.append(INDENT);
    sb.append(INDENT);
    sb.append("String_Node_Str");
    sb.append(NL);
    sb.append(INDENT);
    sb.append(INDENT);
    sb.append("String_Node_Str");
    sb.append(NL);
    sb.append(INDENT);
    sb.append(INDENT);
    sb.append(INDENT);
    sb.append("String_Node_Str");
    if ((collection.nestedType != null) && collection.nestedType.isComplexDatabaseType()) {
      sb.append(getPl2SQLName((ComplexDatabaseType)collection.nestedType));
      sb.append("String_Node_Str");
    }
 else     if (collection.nestedType.equals(PLSQLBoolean)) {
      sb.append(PLSQLBoolean_OUT_CONV);
      sb.append("String_Node_Str");
    }
 else {
      sb.append("String_Node_Str");
    }
    sb.append(NL);
    sb.append(INDENT);
    sb.append(INDENT);
    sb.append(INDENT);
    sb.append("String_Node_Str");
    sb.append(NL);
    sb.append(INDENT);
    sb.append(INDENT);
    sb.append("String_Node_Str");
    sb.append(NL);
    sb.append(INDENT);
    sb.append(INDENT);
    sb.append(RTURN);
    sb.append("String_Node_Str");
    sb.append(NL);
    sb.append(INDENT);
    sb.append("String_Node_Str");
    sb.append(info.pl2SqlName);
    sb.append("String_Node_Str");
    sb.append(NL);
    info.pl2SqlConv=sb.toString();
    sb=new StringBuilder();
    sb.append(INDENT);
    sb.append(BEGIN_DECLARE_FUNCTION);
    sb.append(info.sql2PlName);
    sb.append("String_Node_Str");
    sb.append(collection.getCompatibleType());
    sb.append("String_Node_Str");
    sb.append(NL);
    sb.append(INDENT);
    sb.append(RTURN);
    sb.append(collection.getTypeName());
    sb.append("String_Node_Str");
    sb.append(NL);
    sb.append(INDENT);
    sb.append(INDENT);
    sb.append("String_Node_Str");
    sb.append(collection.getTypeName());
    sb.append("String_Node_Str");
    sb.append(NL);
    sb.append(INDENT);
    sb.append(BEGIN_BEGIN_BLOCK);
    sb.append(INDENT);
    sb.append(INDENT);
    if (isNonAssociativeCollection) {
      sb.append("String_Node_Str");
      sb.append(collection.getTypeName());
      sb.append("String_Node_Str");
      sb.append(NL);
      sb.append(INDENT);
      sb.append(INDENT);
      sb.append("String_Node_Str");
      sb.append(NL);
      sb.append(INDENT);
      sb.append(INDENT);
    }
    sb.append("String_Node_Str");
    sb.append(NL);
    sb.append(INDENT);
    sb.append(INDENT);
    sb.append(INDENT);
    sb.append("String_Node_Str");
    sb.append(NL);
    sb.append(INDENT);
    sb.append(INDENT);
    sb.append(INDENT);
    sb.append(INDENT);
    if ((collection.nestedType != null) && collection.nestedType.isComplexDatabaseType()) {
      sb.append("String_Node_Str");
      sb.append(getSQL2PlName((ComplexDatabaseType)collection.nestedType));
      sb.append("String_Node_Str");
    }
 else     if (collection.nestedType.equals(PLSQLBoolean)) {
      sb.append("String_Node_Str");
      sb.append(PLSQLBoolean_IN_CONV);
      sb.append("String_Node_Str");
    }
 else {
      sb.append("String_Node_Str");
    }
    sb.append(NL);
    sb.append(INDENT);
    sb.append(INDENT);
    sb.append(INDENT);
    sb.append("String_Node_Str");
    sb.append(NL);
    sb.append(INDENT);
    sb.append(INDENT);
    sb.append("String_Node_Str");
    sb.append(NL);
    sb.append(INDENT);
    sb.append(INDENT);
    sb.append(RTURN);
    sb.append("String_Node_Str");
    sb.append(NL);
    sb.append(INDENT);
    sb.append("String_Node_Str");
    sb.append(info.sql2PlName);
    sb.append("String_Node_Str");
    sb.append(NL);
    info.sql2PlConv=sb.toString();
  }
  this.typesInfo.put(type.getTypeName(),info);
  return info;
}

Fixed version (ground truth):
/** 
 * INTERNAL: Generate the nested function to convert the PLSQL type to its compatible SQL type.
 */
protected TypeInfo generateNestedFunction(ComplexDatabaseType type,boolean isNonAssociativeCollection){
  TypeInfo info=new TypeInfo();
  info.pl2SqlName=PL2SQL_PREFIX + (this.functionId++);
  info.sql2PlName=SQL2PL_PREFIX + (this.functionId++);
  if (type.isRecord()) {
    PLSQLrecord record=(PLSQLrecord)type;
    StringBuilder sb=new StringBuilder();
    sb.append(INDENT);
    sb.append(BEGIN_DECLARE_FUNCTION);
    sb.append(info.pl2SqlName);
    sb.append("String_Node_Str");
    sb.append(record.getTypeName());
    sb.append("String_Node_Str");
    sb.append(NL);
    sb.append(INDENT);
    sb.append(RTURN);
    sb.append(record.getCompatibleType());
    sb.append("String_Node_Str");
    sb.append(NL);
    sb.append(INDENT);
    sb.append(INDENT);
    sb.append("String_Node_Str");
    sb.append(record.getCompatibleType());
    sb.append("String_Node_Str");
    sb.append(NL);
    sb.append(INDENT);
    sb.append(BEGIN_BEGIN_BLOCK);
    sb.append(INDENT);
    sb.append(INDENT);
    sb.append("String_Node_Str");
    sb.append(record.getCompatibleType());
    sb.append("String_Node_Str");
    int size=record.getFields().size();
    for (int index=0; index < size; index++) {
      sb.append("String_Node_Str");
      if ((index + 1) != size) {
        sb.append("String_Node_Str");
      }
    }
    sb.append("String_Node_Str");
    sb.append(NL);
    for (    PLSQLargument argument : record.getFields()) {
      sb.append(INDENT);
      sb.append(INDENT);
      sb.append("String_Node_Str");
      sb.append(argument.name);
      if (argument.databaseType.isComplexDatabaseType() && !((ComplexDatabaseType)argument.databaseType).isJDBCType()) {
        sb.append("String_Node_Str");
        sb.append(getPl2SQLName((ComplexDatabaseType)argument.databaseType));
        sb.append("String_Node_Str");
        sb.append(argument.name);
        sb.append("String_Node_Str");
      }
 else       if (argument.databaseType.equals(PLSQLBoolean)) {
        sb.append("String_Node_Str");
        sb.append(PLSQLBoolean_OUT_CONV);
        sb.append("String_Node_Str");
        sb.append(argument.name);
        sb.append("String_Node_Str");
      }
 else {
        sb.append("String_Node_Str");
        sb.append(argument.name);
        sb.append("String_Node_Str");
      }
      sb.append(NL);
    }
    sb.append(INDENT);
    sb.append(INDENT);
    sb.append(RTURN);
    sb.append("String_Node_Str");
    sb.append(NL);
    sb.append(INDENT);
    sb.append("String_Node_Str");
    sb.append(info.pl2SqlName);
    sb.append("String_Node_Str");
    sb.append(NL);
    info.pl2SqlConv=sb.toString();
    sb=new StringBuilder();
    sb.append(INDENT);
    sb.append(BEGIN_DECLARE_FUNCTION);
    sb.append(info.sql2PlName);
    sb.append("String_Node_Str");
    sb.append(record.getCompatibleType());
    sb.append("String_Node_Str");
    sb.append(NL);
    sb.append(INDENT);
    sb.append(RTURN);
    sb.append(record.getTypeName());
    sb.append("String_Node_Str");
    sb.append(NL);
    sb.append(INDENT);
    sb.append(INDENT);
    sb.append("String_Node_Str");
    sb.append(record.getTypeName());
    sb.append("String_Node_Str");
    sb.append(NL);
    sb.append(INDENT);
    sb.append(BEGIN_BEGIN_BLOCK);
    for (    PLSQLargument argument : record.getFields()) {
      sb.append(INDENT);
      sb.append(INDENT);
      sb.append("String_Node_Str");
      sb.append(argument.name);
      if (argument.databaseType.isComplexDatabaseType() && !((ComplexDatabaseType)argument.databaseType).isJDBCType()) {
        sb.append("String_Node_Str");
        sb.append(getSQL2PlName((ComplexDatabaseType)argument.databaseType));
        sb.append("String_Node_Str");
        sb.append(argument.name);
        sb.append("String_Node_Str");
      }
 else       if (argument.databaseType.equals(PLSQLBoolean)) {
        sb.append("String_Node_Str");
        sb.append(PLSQLBoolean_IN_CONV);
        sb.append("String_Node_Str");
        sb.append(argument.name);
        sb.append("String_Node_Str");
      }
 else {
        sb.append("String_Node_Str");
        sb.append(argument.name);
        sb.append("String_Node_Str");
      }
      sb.append(NL);
    }
    sb.append(INDENT);
    sb.append(INDENT);
    sb.append(RTURN);
    sb.append("String_Node_Str");
    sb.append(NL);
    sb.append(INDENT);
    sb.append("String_Node_Str");
    sb.append(info.sql2PlName);
    sb.append("String_Node_Str");
    sb.append(NL);
    info.sql2PlConv=sb.toString();
  }
 else   if (type.isCollection()) {
    PLSQLCollection collection=(PLSQLCollection)type;
    StringBuilder sb=new StringBuilder();
    sb.append(INDENT);
    sb.append(BEGIN_DECLARE_FUNCTION);
    sb.append(info.pl2SqlName);
    sb.append("String_Node_Str");
    sb.append(collection.getTypeName());
    sb.append("String_Node_Str");
    sb.append(NL);
    sb.append(INDENT);
    sb.append(RTURN);
    sb.append(collection.getCompatibleType());
    sb.append("String_Node_Str");
    sb.append(NL);
    sb.append(INDENT);
    sb.append(INDENT);
    sb.append("String_Node_Str");
    sb.append(collection.getCompatibleType());
    sb.append("String_Node_Str");
    sb.append(NL);
    sb.append(INDENT);
    sb.append(BEGIN_BEGIN_BLOCK);
    sb.append(INDENT);
    sb.append(INDENT);
    sb.append("String_Node_Str");
    sb.append(collection.getCompatibleType());
    sb.append("String_Node_Str");
    sb.append(NL);
    sb.append(INDENT);
    sb.append(INDENT);
    sb.append("String_Node_Str");
    sb.append(NL);
    sb.append(INDENT);
    sb.append(INDENT);
    sb.append("String_Node_Str");
    sb.append(NL);
    sb.append(INDENT);
    sb.append(INDENT);
    sb.append("String_Node_Str");
    sb.append(NL);
    sb.append(INDENT);
    sb.append(INDENT);
    sb.append(INDENT);
    sb.append("String_Node_Str");
    if (collection.nestedType != null && (collection.nestedType.isComplexDatabaseType() && !((ComplexDatabaseType)collection.nestedType).isJDBCType())) {
      sb.append(getPl2SQLName((ComplexDatabaseType)collection.nestedType));
      sb.append("String_Node_Str");
    }
 else     if (collection.nestedType.equals(PLSQLBoolean)) {
      sb.append(PLSQLBoolean_OUT_CONV);
      sb.append("String_Node_Str");
    }
 else {
      sb.append("String_Node_Str");
    }
    sb.append(NL);
    sb.append(INDENT);
    sb.append(INDENT);
    sb.append(INDENT);
    sb.append("String_Node_Str");
    sb.append(NL);
    sb.append(INDENT);
    sb.append(INDENT);
    sb.append("String_Node_Str");
    sb.append(NL);
    sb.append(INDENT);
    sb.append(INDENT);
    sb.append(RTURN);
    sb.append("String_Node_Str");
    sb.append(NL);
    sb.append(INDENT);
    sb.append("String_Node_Str");
    sb.append(info.pl2SqlName);
    sb.append("String_Node_Str");
    sb.append(NL);
    info.pl2SqlConv=sb.toString();
    sb=new StringBuilder();
    sb.append(INDENT);
    sb.append(BEGIN_DECLARE_FUNCTION);
    sb.append(info.sql2PlName);
    sb.append("String_Node_Str");
    sb.append(collection.getCompatibleType());
    sb.append("String_Node_Str");
    sb.append(NL);
    sb.append(INDENT);
    sb.append(RTURN);
    sb.append(collection.getTypeName());
    sb.append("String_Node_Str");
    sb.append(NL);
    sb.append(INDENT);
    sb.append(INDENT);
    sb.append("String_Node_Str");
    sb.append(collection.getTypeName());
    sb.append("String_Node_Str");
    sb.append(NL);
    sb.append(INDENT);
    sb.append(BEGIN_BEGIN_BLOCK);
    sb.append(INDENT);
    sb.append(INDENT);
    if (isNonAssociativeCollection) {
      sb.append("String_Node_Str");
      sb.append(collection.getTypeName());
      sb.append("String_Node_Str");
      sb.append(NL);
      sb.append(INDENT);
      sb.append(INDENT);
      sb.append("String_Node_Str");
      sb.append(NL);
      sb.append(INDENT);
      sb.append(INDENT);
    }
    sb.append("String_Node_Str");
    sb.append(NL);
    sb.append(INDENT);
    sb.append(INDENT);
    sb.append(INDENT);
    sb.append("String_Node_Str");
    sb.append(NL);
    sb.append(INDENT);
    sb.append(INDENT);
    sb.append(INDENT);
    sb.append(INDENT);
    if ((collection.nestedType != null) && collection.nestedType.isComplexDatabaseType()) {
      sb.append("String_Node_Str");
      sb.append(getSQL2PlName((ComplexDatabaseType)collection.nestedType));
      sb.append("String_Node_Str");
    }
 else     if (collection.nestedType.equals(PLSQLBoolean)) {
      sb.append("String_Node_Str");
      sb.append(PLSQLBoolean_IN_CONV);
      sb.append("String_Node_Str");
    }
 else {
      sb.append("String_Node_Str");
    }
    sb.append(NL);
    sb.append(INDENT);
    sb.append(INDENT);
    sb.append(INDENT);
    sb.append("String_Node_Str");
    sb.append(NL);
    sb.append(INDENT);
    sb.append(INDENT);
    sb.append("String_Node_Str");
    sb.append(NL);
    sb.append(INDENT);
    sb.append(INDENT);
    sb.append(RTURN);
    sb.append("String_Node_Str");
    sb.append(NL);
    sb.append(INDENT);
    sb.append("String_Node_Str");
    sb.append(info.sql2PlName);
    sb.append("String_Node_Str");
    sb.append(NL);
    info.sql2PlConv=sb.toString();
  }
  this.typesInfo.put(type.getTypeName(),info);
  return info;
}