@@ -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