-
Notifications
You must be signed in to change notification settings - Fork 6
Open
Description
in DB:
create or alter procedure java_split (
dummy blob SUB_TYPE TEXT,
delimiter varchar(10)
) returns (item varchar(60))
external name 'org.firebirdsql.fbjava.examples.fbjava_example.FbSplit.split()'
engine java;Java:
public class FbSplit {
public static ExternalResultSet split() throws Exception {
final ProcedureContext context = ProcedureContext.get();
return new ExternalResultSet() {
ValuesMetadata outMetadata = context.getOutputMetadata();
Values outValues = context.getOutputValues();
Values inputValues = context.getInputValues();
String[] items_list = null;
int item_index;
@Override
public boolean fetch() throws Exception {
if (items_list == null) {
java.lang.Object blob_object = inputValues.getObject(1);
// FBBlob blob = (FBBlob) blob_object;
java.sql.Blob blob = (java.sql.Blob) blob_object;
byte[] bytes_data = blob.getBytes(1, (int) (blob.length())); // TO SLOW
String blob_string = new String(bytes_data);
items_list = blob_string.split(inputValues.getObject(2).toString());
}
if (item_index < items_list.length) {
outValues.setObject(1, items_list[item_index]);
item_index++;
return true;
}
return false;
}
};
}
}then call
select * from java_split(6 000 000 characters length blob, ',')40 sec execution time
but if I call from standalone java application ~1-2 sec
env:
java 8
jaybird 2.2.10
Metadata
Metadata
Assignees
Labels
No labels