Skip to content

Commit 3045325

Browse files
committed
Only assign fields if all fields can be created
1 parent a0c6708 commit 3045325

File tree

1 file changed

+24
-19
lines changed

1 file changed

+24
-19
lines changed

src/main/org/firebirdsql/jdbc/FBPreparedStatement.java

Lines changed: 24 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -788,32 +788,37 @@ protected void prepareFixedStatement(String sql) throws SQLException {
788788
RowDescriptor rowDescriptor = fbStatement.getParameterDescriptor();
789789
assert rowDescriptor != null : "RowDescriptor should not be null after prepare";
790790

791-
int fieldCount = rowDescriptor.getCount();
792791
fieldValues = rowDescriptor.createDefaultFieldValues();
793-
fields = new FBField[fieldCount];
792+
fields = createFields(rowDescriptor.getCount());
794793

795-
for (int i = 0; i < fieldCount; i++) {
796-
final int fieldPosition = i;
794+
this.isExecuteProcedureStatement = fbStatement.getType() == StatementType.STORED_PROCEDURE;
795+
}
797796

798-
FieldDataProvider dataProvider = new FieldDataProvider() {
799-
public byte @Nullable [] getFieldData() {
800-
return fieldValues.getFieldData(fieldPosition);
801-
}
797+
private FBField[] createFields(final int fieldCount) throws SQLException {
798+
var fields = new FBField[fieldCount];
799+
for (int fieldPosition = 0; fieldPosition < fieldCount; fieldPosition++) {
800+
fields[fieldPosition] = createField(fieldPosition);
801+
}
802+
return fields;
803+
}
802804

803-
public void setFieldData(byte @Nullable [] data) {
804-
fieldValues.setFieldData(fieldPosition, data);
805-
}
806-
};
805+
private FBField createField(final int fieldPosition) throws SQLException {
806+
var dataProvider = new FieldDataProvider() {
807+
public byte @Nullable [] getFieldData() {
808+
return fieldValues.getFieldData(fieldPosition);
809+
}
807810

808-
// FIXME check if we can safely pass cached here
809-
FBField field = FBField.createField(getParameterDescriptor(i + 1), dataProvider, gdsHelper, false);
810-
if (field instanceof BlobListenableField blobListenableField) {
811-
blobListenableField.setBlobListener(blobListener);
811+
public void setFieldData(byte @Nullable [] data) {
812+
fieldValues.setFieldData(fieldPosition, data);
812813
}
813-
fields[i] = field;
814-
}
814+
};
815815

816-
this.isExecuteProcedureStatement = fbStatement.getType() == StatementType.STORED_PROCEDURE;
816+
// TODO check if we can safely pass cached here
817+
var field = FBField.createField(getParameterDescriptor(fieldPosition + 1), dataProvider, gdsHelper, false);
818+
if (field instanceof BlobListenableField blobListenableField) {
819+
blobListenableField.setBlobListener(blobListener);
820+
}
821+
return field;
817822
}
818823

819824
@Override

0 commit comments

Comments
 (0)