Skip to content

Commit b7c39ff

Browse files
committed
Only assign fields if all fields can be created
1 parent dfcf106 commit b7c39ff

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
@@ -784,32 +784,37 @@ protected void prepareFixedStatement(String sql) throws SQLException {
784784
RowDescriptor rowDescriptor = fbStatement.getParameterDescriptor();
785785
assert rowDescriptor != null : "RowDescriptor should not be null after prepare";
786786

787-
int fieldCount = rowDescriptor.getCount();
788787
fieldValues = rowDescriptor.createDefaultFieldValues();
789-
fields = new FBField[fieldCount];
788+
fields = createFields(rowDescriptor.getCount());
790789

791-
for (int i = 0; i < fieldCount; i++) {
792-
final int fieldPosition = i;
790+
this.isExecuteProcedureStatement = fbStatement.getType() == StatementType.STORED_PROCEDURE;
791+
}
793792

794-
FieldDataProvider dataProvider = new FieldDataProvider() {
795-
public byte @Nullable [] getFieldData() {
796-
return fieldValues.getFieldData(fieldPosition);
797-
}
793+
private FBField[] createFields(final int fieldCount) throws SQLException {
794+
var fields = new FBField[fieldCount];
795+
for (int fieldPosition = 0; fieldPosition < fieldCount; fieldPosition++) {
796+
fields[fieldPosition] = createField(fieldPosition);
797+
}
798+
return fields;
799+
}
798800

799-
public void setFieldData(byte @Nullable [] data) {
800-
fieldValues.setFieldData(fieldPosition, data);
801-
}
802-
};
801+
private FBField createField(final int fieldPosition) throws SQLException {
802+
var dataProvider = new FieldDataProvider() {
803+
public byte @Nullable [] getFieldData() {
804+
return fieldValues.getFieldData(fieldPosition);
805+
}
803806

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

812-
this.isExecuteProcedureStatement = fbStatement.getType() == StatementType.STORED_PROCEDURE;
812+
// TODO check if we can safely pass cached here
813+
var field = FBField.createField(getParameterDescriptor(fieldPosition + 1), dataProvider, gdsHelper, false);
814+
if (field instanceof BlobListenableField blobListenableField) {
815+
blobListenableField.setBlobListener(blobListener);
816+
}
817+
return field;
813818
}
814819

815820
@Override

0 commit comments

Comments
 (0)