MCPcopy Create free account
hub / github.com/FirebirdSQL/firebird / PAR_reserving

Function PAR_reserving

src/gpre/par.cpp:1071–1132  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1069//
1070
1071void PAR_reserving( USHORT flags, bool parse_sql)
1072{
1073 gpre_dbb* database;
1074
1075 while (true)
1076 {
1077 // find a relation name, or maybe a list of them
1078
1079 if (!parse_sql && terminator())
1080 break;
1081
1082 do {
1083 gpre_rel* relation = EXP_relation();
1084 if (!relation)
1085 CPR_s_error("relation name");
1086 database = relation->rel_database;
1087 rrl* lock_block = (rrl*) MSC_alloc(RRL_LEN);
1088 lock_block->rrl_next = database->dbb_rrls;
1089 lock_block->rrl_relation = relation;
1090 database->dbb_rrls = lock_block;
1091 } while (MSC_match(KW_COMMA));
1092
1093 // get the lock level and mode and apply them to all the
1094 // relations in the list
1095
1096 MSC_match(KW_FOR);
1097 USHORT lock_level = (flags & TRA_con) ? isc_tpb_protected : isc_tpb_shared;
1098 USHORT lock_mode = isc_tpb_lock_read;
1099
1100 if (MSC_match(KW_PROTECTED))
1101 lock_level = isc_tpb_protected;
1102 else if (MSC_match(KW_EXCLUSIVE))
1103 lock_level = isc_tpb_exclusive;
1104 else if (MSC_match(KW_SHARED))
1105 lock_level = isc_tpb_shared;
1106
1107 if (MSC_match(KW_WRITE))
1108 {
1109 if (flags & TRA_ro)
1110 CPR_error("write lock requested for a read_only transaction");
1111 lock_mode = isc_tpb_lock_write;
1112 }
1113 else
1114 MSC_match(KW_READ);
1115
1116 for (database = gpreGlob.isc_databases; database; database = database->dbb_next)
1117 {
1118 for (rrl* lock_block = database->dbb_rrls; lock_block; lock_block = lock_block->rrl_next)
1119 {
1120 if (!lock_block->rrl_lock_level)
1121 {
1122 fb_assert(lock_level <= MAX_UCHAR);
1123 fb_assert(lock_mode <= MAX_UCHAR);
1124 lock_block->rrl_lock_level = (UCHAR) lock_level;
1125 lock_block->rrl_lock_mode = (UCHAR) lock_mode;
1126 }
1127 }
1128 }

Callers 2

act_set_transactionFunction · 0.85
par_start_transactionFunction · 0.85

Calls 6

terminatorFunction · 0.85
EXP_relationFunction · 0.85
CPR_s_errorFunction · 0.85
MSC_allocFunction · 0.85
MSC_matchFunction · 0.85
CPR_errorFunction · 0.85

Tested by

no test coverage detected