in kong/kong/db/schema/init.lua [2296:2364]
function Schema.new(definition, is_subschema)
if not definition then
return nil, validation_errors.SCHEMA_NO_DEFINITION
end
if not definition.fields then
return nil, validation_errors.SCHEMA_NO_FIELDS
end
local self = copy(definition)
setmetatable(self, Schema)
local cache_key = self.cache_key
if cache_key then
self.cache_key_set = {}
for i = 1, #cache_key do
self.cache_key_set[cache_key[i]] = true
end
end
for key, field in self:each_field() do
self.fields[key] = field
if field.type == "record" and field.fields then
allow_record_fields_by_name(field)
end
if field.type == "foreign" then
local err
field.schema, err = get_foreign_schema_for_field(field)
if not field.schema then
return nil, err
end
if not is_subschema then
local constraints = assert(_cache[field.reference]).constraints
if self.name then
constraints[self.name] = {
schema = self,
field_name = key,
on_delete = field.on_delete,
}
end
end
end
end
if self.workspaceable and self.name then
if not _workspaceable[self.name] then
_workspaceable[self.name] = true
insert(_workspaceable, { schema = self })
end
end
if self.name then
if not _cache[self.name] then
_cache[self.name] = {
constraints = {},
}
end
_cache[self.name].schema = self
end
return self
end