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