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

Function par_fkey_extension

src/gpre/sql.cpp:6127–6208  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

6125//
6126
6127static void par_fkey_extension(cnstrt* cnstrt_val)
6128{
6129 // Extended foreign key definition could be as follows :
6130 //
6131 // [ON DELETE { NO ACTION | CASCADE | SET DEFAULT | SET NULL } ]
6132 // [ON UPDATE { NO ACTION | CASCADE | SET DEFAULT | SET NULL } ]
6133
6134 fb_assert(gpreGlob.token_global.tok_keyword == KW_ON);
6135 fb_assert(cnstrt_val != NULL);
6136
6137 PAR_get_token();
6138
6139 const kwwords_t keyword = gpreGlob.token_global.tok_keyword;
6140 switch (keyword)
6141 {
6142 case KW_DELETE:
6143 // NOTE: action must be defined only once
6144 if (cnstrt_val->cnstrt_fkey_def_type & REF_DELETE_ACTION)
6145 CPR_s_error("UPDATE");
6146 else
6147 cnstrt_val->cnstrt_fkey_def_type |= REF_DELETE_ACTION;
6148 break;
6149 case KW_UPDATE:
6150 // NOTE: action must be defined only once
6151 if (cnstrt_val->cnstrt_fkey_def_type & REF_UPDATE_ACTION)
6152 CPR_s_error("DELETE");
6153 else
6154 cnstrt_val->cnstrt_fkey_def_type |= REF_UPDATE_ACTION;
6155 break;
6156 default:
6157 // unexpected keyword
6158 CPR_s_error("UPDATE or DELETE");
6159 break;
6160 }
6161
6162 PAR_get_token();
6163
6164 switch (gpreGlob.token_global.tok_keyword)
6165 {
6166 case KW_NO:
6167 PAR_get_token();
6168 if (gpreGlob.token_global.tok_keyword != KW_ACTION)
6169 CPR_s_error("ACTION");
6170 else if (keyword == KW_DELETE)
6171 cnstrt_val->cnstrt_fkey_def_type |= REF_DEL_NONE;
6172 else
6173 cnstrt_val->cnstrt_fkey_def_type |= REF_UPD_NONE;
6174 break;
6175 case KW_CASCADE:
6176 if (keyword == KW_DELETE)
6177 cnstrt_val->cnstrt_fkey_def_type |= REF_DEL_CASCADE;
6178 else
6179 cnstrt_val->cnstrt_fkey_def_type |= REF_UPD_CASCADE;
6180 break;
6181 case KW_SET:
6182 PAR_get_token();
6183 switch (gpreGlob.token_global.tok_keyword)
6184 {

Callers 2

par_field_constraintFunction · 0.85
par_table_constraintFunction · 0.85

Calls 2

PAR_get_tokenFunction · 0.85
CPR_s_errorFunction · 0.85

Tested by

no test coverage detected