@@ -2935,39 +2935,63 @@ static void transaction_options(thread_db* tdbb,
29352935 {
29362936 case isc_tpb_consistency:
29372937 if (!isolation.assignOnce (true ))
2938+ {
29382939 ERR_post (Arg::Gds (isc_bad_tpb_content) <<
29392940 Arg::Gds (isc_tpb_multiple_txn_isolation));
2941+ }
2942+
2943+ if (read_consistency.isAssigned ())
2944+ {
2945+ ERR_post (Arg::Gds (isc_bad_tpb_content) <<
2946+ // 'Option @1 is not valid if @2 was used previously in TPB'
2947+ Arg::Gds (isc_tpb_conflicting_options) <<
2948+ Arg::Str (" isc_tpb_consistency" ) << Arg::Str (" isc_tpb_read_consistency" ));
2949+ }
29402950
29412951 if (shared_snapshot)
29422952 {
29432953 ERR_post (
29442954 Arg::Gds (isc_bad_tpb_content) <<
2955+ // 'Option @1 is not valid if @2 was used previously in TPB'
29452956 Arg::Gds (isc_tpb_conflicting_options) <<
29462957 Arg::Str (" isc_tpb_consistency" ) << Arg::Str (" isc_tpb_at_snapshot_number" ));
29472958 }
29482959
29492960 transaction->tra_flags |= TRA_degree3;
2950- transaction->tra_flags &= ~TRA_read_committed;
2961+ transaction->tra_flags &= ~( TRA_read_committed | TRA_read_consistency | TRA_rec_version) ;
29512962 break ;
29522963
29532964 case isc_tpb_concurrency:
29542965 if (!isolation.assignOnce (true ))
2966+ {
29552967 ERR_post (Arg::Gds (isc_bad_tpb_content) <<
29562968 Arg::Gds (isc_tpb_multiple_txn_isolation));
2969+ }
2970+
2971+ if (read_consistency.isAssigned ())
2972+ {
2973+ ERR_post (Arg::Gds (isc_bad_tpb_content) <<
2974+ // 'Option @1 is not valid if @2 was used previously in TPB'
2975+ Arg::Gds (isc_tpb_conflicting_options) <<
2976+ Arg::Str (" isc_tpb_concurrency" ) << Arg::Str (" isc_tpb_read_consistency" ));
2977+ }
29572978
29582979 transaction->tra_flags &= ~TRA_degree3;
2959- transaction->tra_flags &= ~TRA_read_committed;
2980+ transaction->tra_flags &= ~( TRA_read_committed | TRA_read_consistency | TRA_rec_version) ;
29602981 break ;
29612982
29622983 case isc_tpb_read_committed:
29632984 if (!isolation.assignOnce (true ))
2985+ {
29642986 ERR_post (Arg::Gds (isc_bad_tpb_content) <<
29652987 Arg::Gds (isc_tpb_multiple_txn_isolation));
2988+ }
29662989
29672990 if (shared_snapshot)
29682991 {
29692992 ERR_post (
29702993 Arg::Gds (isc_bad_tpb_content) <<
2994+ // 'Option @1 is not valid if @2 was used previously in TPB'
29712995 Arg::Gds (isc_tpb_conflicting_options) <<
29722996 Arg::Str (" isc_tpb_read_committed" ) << Arg::Str (" isc_tpb_at_snapshot_number" ));
29732997 }
@@ -3072,14 +3096,16 @@ static void transaction_options(thread_db* tdbb,
30723096
30733097 if (rec_version.isAssigned ())
30743098 {
3099+ const auto tpbStr = rec_version.value ?
3100+ " isc_tpb_rec_version" : " isc_tpb_no_rec_version" ;
3101+
30753102 ERR_post (Arg::Gds (isc_bad_tpb_content) <<
30763103 // 'Option @1 is not valid if @2 was used previously in TPB'
30773104 Arg::Gds (isc_tpb_conflicting_options) <<
3078- Arg::Str (" isc_tpb_read_consistency" ) << (rec_version.value ?
3079- Arg::Str (" isc_tpb_rec_version" ) : Arg::Str (" isc_tpb_no_rec_version" )) );
3105+ Arg::Str (" isc_tpb_read_consistency" ) << Arg::Str (tpbStr) );
30803106 }
30813107
3082- transaction->tra_flags |= TRA_read_consistency | TRA_rec_version;
3108+ transaction->tra_flags |= TRA_read_committed | TRA_read_consistency | TRA_rec_version;
30833109 break ;
30843110
30853111 case isc_tpb_nowait:
@@ -3427,22 +3453,19 @@ static void transaction_options(thread_db* tdbb,
34273453
34283454 if (rec_version.isAssigned () && !(transaction->tra_flags & TRA_read_committed))
34293455 {
3430- if (rec_version.value )
3431- {
3432- ERR_post (Arg::Gds (isc_bad_tpb_content) <<
3433- Arg::Gds (isc_tpb_option_without_rc) << Arg::Str (" isc_tpb_rec_version" ));
3434- }
3435- else
3436- {
3437- ERR_post (Arg::Gds (isc_bad_tpb_content) <<
3438- Arg::Gds (isc_tpb_option_without_rc) << Arg::Str (" isc_tpb_no_rec_version" ));
3439- }
3456+ const auto tpbStr = rec_version.value ?
3457+ " isc_tpb_rec_version" : " isc_tpb_no_rec_version" ;
3458+
3459+ ERR_post (Arg::Gds (isc_bad_tpb_content) <<
3460+ Arg::Gds (isc_tpb_option_without_rc) << Arg::Str (tpbStr));
34403461 }
34413462
3442- if ((transaction->tra_flags & TRA_read_committed) && !(tdbb->tdbb_flags & TDBB_sweeper))
3463+ if ((transaction->tra_flags & TRA_read_committed) &&
3464+ !(transaction->tra_flags & TRA_read_consistency) &&
3465+ !(tdbb->tdbb_flags & TDBB_sweeper) &&
3466+ tdbb->getDatabase ()->dbb_config ->getReadConsistency ())
34433467 {
3444- if (tdbb->getDatabase ()->dbb_config ->getReadConsistency ())
3445- transaction->tra_flags |= TRA_read_consistency | TRA_rec_version;
3468+ transaction->tra_flags |= TRA_read_consistency | TRA_rec_version;
34463469 }
34473470
34483471 if (transaction->tra_attachment ->isGbak ())
0 commit comments