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

Function create_constraint

src/gpre/cmd.cpp:1213–1331  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1211//
1212
1213static void create_constraint( gpre_req* request, const act* action, cnstrt* constraint)
1214{
1215 for (; constraint; constraint = constraint->cnstrt_next)
1216 {
1217 if (constraint->cnstrt_flags & CNSTRT_delete)
1218 continue;
1219 put_cstring(request, isc_dyn_rel_constraint, constraint->cnstrt_name->str_string);
1220
1221 switch (constraint->cnstrt_type)
1222 {
1223 case CNSTRT_PRIMARY_KEY:
1224 request->add_byte(isc_dyn_def_primary_key);
1225 break;
1226 case CNSTRT_UNIQUE:
1227 request->add_byte(isc_dyn_def_unique);
1228 break;
1229 case CNSTRT_FOREIGN_KEY:
1230 request->add_byte(isc_dyn_def_foreign_key);
1231 break;
1232 case CNSTRT_NOT_NULL:
1233 request->add_byte(isc_dyn_fld_not_null);
1234 request->add_end();
1235 continue;
1236 case CNSTRT_CHECK:
1237 create_check_constraint(request, action, constraint);
1238 request->add_end();
1239 continue;
1240 default:
1241 fb_assert(false);
1242 }
1243
1244 // stuff a zero-length name, indicating that an index
1245 // name should be generated
1246
1247 request->add_word(0);
1248
1249 if (constraint->cnstrt_type == CNSTRT_FOREIGN_KEY)
1250 {
1251 // If <referenced column list> is not specified try to catch
1252 // them right here
1253 if (constraint->cnstrt_referred_fields == NULL)
1254 get_referred_fields(action, constraint);
1255
1256 if (constraint->cnstrt_fkey_def_type & REF_UPDATE_ACTION)
1257 {
1258 request->add_byte(isc_dyn_foreign_key_update);
1259 switch (constraint->cnstrt_fkey_def_type & REF_UPDATE_MASK)
1260 {
1261 case REF_UPD_NONE:
1262 request->add_byte(isc_dyn_foreign_key_none);
1263 break;
1264 case REF_UPD_CASCADE:
1265 request->add_byte(isc_dyn_foreign_key_cascade);
1266 create_upd_cascade_trg(request, action, constraint);
1267 break;
1268 case REF_UPD_SET_DEFAULT:
1269 request->add_byte(isc_dyn_foreign_key_default);
1270 create_set_default_trg(request, action, constraint, true);

Callers 2

alter_tableFunction · 0.85
create_tableFunction · 0.85

Calls 11

put_cstringFunction · 0.85
create_check_constraintFunction · 0.85
get_referred_fieldsFunction · 0.85
create_upd_cascade_trgFunction · 0.85
create_set_default_trgFunction · 0.85
create_set_null_trgFunction · 0.85
create_del_cascade_trgFunction · 0.85
add_endMethod · 0.80
put_numericFunction · 0.70
add_byteMethod · 0.45
add_wordMethod · 0.45

Tested by

no test coverage detected