@@ -2929,39 +2929,63 @@ static void transaction_options(thread_db* tdbb,
29292929 {
29302930 case isc_tpb_consistency:
29312931 if (!isolation.assignOnce (true ))
2932+ {
29322933 ERR_post (Arg::Gds (isc_bad_tpb_content) <<
29332934 Arg::Gds (isc_tpb_multiple_txn_isolation));
2935+ }
2936+
2937+ if (read_consistency.isAssigned ())
2938+ {
2939+ ERR_post (Arg::Gds (isc_bad_tpb_content) <<
2940+ // 'Option @1 is not valid if @2 was used previously in TPB'
2941+ Arg::Gds (isc_tpb_conflicting_options) <<
2942+ Arg::Str (" isc_tpb_consistency" ) << Arg::Str (" isc_tpb_read_consistency" ));
2943+ }
29342944
29352945 if (shared_snapshot)
29362946 {
29372947 ERR_post (
29382948 Arg::Gds (isc_bad_tpb_content) <<
2949+ // 'Option @1 is not valid if @2 was used previously in TPB'
29392950 Arg::Gds (isc_tpb_conflicting_options) <<
29402951 Arg::Str (" isc_tpb_consistency" ) << Arg::Str (" isc_tpb_at_snapshot_number" ));
29412952 }
29422953
29432954 transaction->tra_flags |= TRA_degree3;
2944- transaction->tra_flags &= ~TRA_read_committed;
2955+ transaction->tra_flags &= ~( TRA_read_committed | TRA_read_consistency | TRA_rec_version) ;
29452956 break ;
29462957
29472958 case isc_tpb_concurrency:
29482959 if (!isolation.assignOnce (true ))
2960+ {
29492961 ERR_post (Arg::Gds (isc_bad_tpb_content) <<
29502962 Arg::Gds (isc_tpb_multiple_txn_isolation));
2963+ }
2964+
2965+ if (read_consistency.isAssigned ())
2966+ {
2967+ ERR_post (Arg::Gds (isc_bad_tpb_content) <<
2968+ // 'Option @1 is not valid if @2 was used previously in TPB'
2969+ Arg::Gds (isc_tpb_conflicting_options) <<
2970+ Arg::Str (" isc_tpb_concurrency" ) << Arg::Str (" isc_tpb_read_consistency" ));
2971+ }
29512972
29522973 transaction->tra_flags &= ~TRA_degree3;
2953- transaction->tra_flags &= ~TRA_read_committed;
2974+ transaction->tra_flags &= ~( TRA_read_committed | TRA_read_consistency | TRA_rec_version) ;
29542975 break ;
29552976
29562977 case isc_tpb_read_committed:
29572978 if (!isolation.assignOnce (true ))
2979+ {
29582980 ERR_post (Arg::Gds (isc_bad_tpb_content) <<
29592981 Arg::Gds (isc_tpb_multiple_txn_isolation));
2982+ }
29602983
29612984 if (shared_snapshot)
29622985 {
29632986 ERR_post (
29642987 Arg::Gds (isc_bad_tpb_content) <<
2988+ // 'Option @1 is not valid if @2 was used previously in TPB'
29652989 Arg::Gds (isc_tpb_conflicting_options) <<
29662990 Arg::Str (" isc_tpb_read_committed" ) << Arg::Str (" isc_tpb_at_snapshot_number" ));
29672991 }
@@ -3066,14 +3090,16 @@ static void transaction_options(thread_db* tdbb,
30663090
30673091 if (rec_version.isAssigned ())
30683092 {
3093+ const auto tpbStr = rec_version.asBool () ?
3094+ " isc_tpb_rec_version" : " isc_tpb_no_rec_version" ;
3095+
30693096 ERR_post (Arg::Gds (isc_bad_tpb_content) <<
30703097 // 'Option @1 is not valid if @2 was used previously in TPB'
30713098 Arg::Gds (isc_tpb_conflicting_options) <<
3072- Arg::Str (" isc_tpb_read_consistency" ) << (rec_version.asBool () ?
3073- Arg::Str (" isc_tpb_rec_version" ) : Arg::Str (" isc_tpb_no_rec_version" )) );
3099+ Arg::Str (" isc_tpb_read_consistency" ) << Arg::Str (tpbStr) );
30743100 }
30753101
3076- transaction->tra_flags |= TRA_read_consistency | TRA_rec_version;
3102+ transaction->tra_flags |= TRA_read_committed | TRA_read_consistency | TRA_rec_version;
30773103 break ;
30783104
30793105 case isc_tpb_nowait:
@@ -3481,22 +3507,19 @@ static void transaction_options(thread_db* tdbb,
34813507
34823508 if (rec_version.isAssigned () && !(transaction->tra_flags & TRA_read_committed))
34833509 {
3484- if (rec_version.asBool ())
3485- {
3486- ERR_post (Arg::Gds (isc_bad_tpb_content) <<
3487- Arg::Gds (isc_tpb_option_without_rc) << Arg::Str (" isc_tpb_rec_version" ));
3488- }
3489- else
3490- {
3491- ERR_post (Arg::Gds (isc_bad_tpb_content) <<
3492- Arg::Gds (isc_tpb_option_without_rc) << Arg::Str (" isc_tpb_no_rec_version" ));
3493- }
3510+ const auto tpbStr = rec_version.asBool () ?
3511+ " isc_tpb_rec_version" : " isc_tpb_no_rec_version" ;
3512+
3513+ ERR_post (Arg::Gds (isc_bad_tpb_content) <<
3514+ Arg::Gds (isc_tpb_option_without_rc) << Arg::Str (tpbStr));
34943515 }
34953516
3496- if ((transaction->tra_flags & TRA_read_committed) && !(tdbb->tdbb_flags & TDBB_sweeper))
3517+ if ((transaction->tra_flags & TRA_read_committed) &&
3518+ !(transaction->tra_flags & TRA_read_consistency) &&
3519+ !(tdbb->tdbb_flags & TDBB_sweeper) &&
3520+ tdbb->getDatabase ()->dbb_config ->getReadConsistency ())
34973521 {
3498- if (tdbb->getDatabase ()->dbb_config ->getReadConsistency ())
3499- transaction->tra_flags |= TRA_read_consistency | TRA_rec_version;
3522+ transaction->tra_flags |= TRA_read_consistency | TRA_rec_version;
35003523 }
35013524
35023525 if (transaction->tra_attachment ->isGbak ())
0 commit comments