Skip to content

Commit 7d8d610

Browse files
committed
Only assign fields if all fields can be created
1 parent f517e85 commit 7d8d610

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

777-
int fieldCount = rowDescriptor.getCount();
778777
fieldValues = rowDescriptor.createDefaultFieldValues();
779-
fields = new FBField[fieldCount];
778+
fields = createFields(rowDescriptor.getCount());
780779

781-
for (int i = 0; i < fieldCount; i++) {
782-
final int fieldPosition = i;
780+
this.isExecuteProcedureStatement = fbStatement.getType() == StatementType.STORED_PROCEDURE;
781+
}
783782

784-
FieldDataProvider dataProvider = new FieldDataProvider() {
785-
public byte[] getFieldData() {
786-
return fieldValues.getFieldData(fieldPosition);
787-
}
783+
private FBField[] createFields(final int fieldCount) throws SQLException {
784+
FBField[] fields = new FBField[fieldCount];
785+
for (int fieldPosition = 0; fieldPosition < fieldCount; fieldPosition++) {
786+
fields[fieldPosition] = createField(fieldPosition);
787+
}
788+
return fields;
789+
}
788790

789-
public void setFieldData(byte[] data) {
790-
fieldValues.setFieldData(fieldPosition, data);
791-
}
792-
};
791+
private FBField createField(final int fieldPosition) throws SQLException {
792+
FieldDataProvider dataProvider = new FieldDataProvider() {
793+
public byte[] getFieldData() {
794+
return fieldValues.getFieldData(fieldPosition);
795+
}
793796

794-
// FIXME check if we can safely pass cached here
795-
FBField field = FBField.createField(getParameterDescriptor(i + 1), dataProvider, gdsHelper, false);
796-
if (field instanceof BlobListenableField) {
797-
((BlobListenableField) field).setBlobListener(blobListener);
797+
public void setFieldData(byte[] data) {
798+
fieldValues.setFieldData(fieldPosition, data);
798799
}
799-
fields[i] = field;
800-
}
800+
};
801801

802-
this.isExecuteProcedureStatement = fbStatement.getType() == StatementType.STORED_PROCEDURE;
802+
// TODO check if we can safely pass cached here
803+
FBField field = FBField.createField(getParameterDescriptor(fieldPosition + 1), dataProvider, gdsHelper, false);
804+
if (field instanceof BlobListenableField) {
805+
((BlobListenableField) field).setBlobListener(blobListener);
806+
}
807+
return field;
803808
}
804809

805810
@Override

0 commit comments

Comments
 (0)