buffer.append("declare\n");
// variable declarations
List<DBArgument> arguments = getArguments();
for (DBArgument argument : arguments) {
DBDataType dataType = argument.getDataType();
if (dataType.isDeclared()) {
buffer.append(" ");
appendVariableName(buffer, argument);
buffer.append(" ").append(dataType.getDeclaredType().getQualifiedName()).append(";\n");
} else if (isBoolean(dataType)) {
appendVariableName(buffer, argument);
buffer.append(" boolean;\n");
}
}
buffer.append("begin\n");
preHookExecutionCommand(buffer);
// input variable initialization
for (DBArgument argument : arguments) {
DBDataType dataType = argument.getDataType();
if (argument.isInput()) {
if (dataType.isDeclared()) {
List<DBTypeAttribute> attributes = dataType.getDeclaredType().getAttributes();
for (DBTypeAttribute attribute : attributes) {
buffer.append(" ");
appendVariableName(buffer, argument);
buffer.append(".").append(attribute.getName()).append(" := ?;\n");
}
} else if(isBoolean(dataType)) {
String stringValue = parseBoolean(argument.getName(), executionInput.getInputValue(argument));
buffer.append(" ");
appendVariableName(buffer, argument);
buffer.append(" := ").append(stringValue).append(";\n");
}
}
}
// method call
buffer.append("\n ");
if (returnArgument != null) {
DBDataType dataType = returnArgument.getDataType();
if (dataType.isDeclared() || isBoolean(dataType))
appendVariableName(buffer, returnArgument); else
buffer.append("?");
buffer.append(" := ");
}
// method parameters
buffer.append(getMethod().getQualifiedName()).append("(");
for (DBArgument argument : arguments) {
if (argument != returnArgument) {
DBDataType dataType = argument.getDataType();
if (dataType.isDeclared() || isBoolean(dataType))
appendVariableName(buffer, argument); else
buffer.append("?");
boolean isLast = arguments.indexOf(argument) == arguments.size() - 1;
if (!isLast) buffer.append(", ");
}
}
buffer.append(");\n\n");
// output variable initialization
for (DBArgument argument : arguments) {
if (argument.isOutput()) {
DBDataType dataType = argument.getDataType();
if (dataType.isDeclared()) {
List<DBTypeAttribute> attributes = dataType.getDeclaredType().getAttributes();
for (DBTypeAttribute attribute : attributes) {
buffer.append(" ? := ");
appendVariableName(buffer, argument);
buffer.append(".").append(attribute.getName()).append(";\n");
}