in kong/kong/db/schema/metaschema.lua [657:787]
check = function(schema)
local errors = {}
local fields = schema.fields
if not fields then
errors["fields"] = meta_errors.TABLE:format("fields")
return nil, errors
end
if not schema.table_name then
schema.table_name = schema.name
end
if schema.endpoint_key then
local found = false
for i = 1, #fields do
local k = next(fields[i])
if schema.endpoint_key == k then
found = true
break
end
end
if not found then
errors["endpoint_key"] = meta_errors.ENDPOINT_KEY
end
end
local cache_key = schema.cache_key
if cache_key then
local found
for i = 1, #cache_key do
found = nil
for j = 1, #fields do
local item = fields[j]
local k = next(item)
if cache_key[i] == k then
found = item[k]
break
end
end
if not found then
errors["cache_key"] = meta_errors.CACHE_KEY
break
end
end
if #cache_key == 1 then
if found and not found.unique then
errors["cache_key"] = meta_errors.CACHE_KEY_UNIQUE
end
end
end
if schema.subschema_key then
local found = false
for i = 1, #fields do
local item = fields[i]
local k = next(item)
local field = item[k]
if schema.subschema_key == k then
if field.type ~= "string" and field.type ~= "set" then
errors["subschema_key"] = meta_errors.SUBSCHEMA_KEY_TYPE
end
found = true
break
end
end
if not found then
errors["subschema_key"] = meta_errors.SUBSCHEMA_KEY
end
end
if schema.ttl then
for i = 1, #fields do
local k = next(fields[i])
if k == "ttl" then
errors["ttl"] = meta_errors.TTL_RESERVED
break
end
end
end
local transformations = schema.transformations
if transformations then
for i = 1, #transformations do
local input = transformations[i].input
for j = 1, #input do
if not has_schema_field(schema, input[j]) then
if not errors.transformations then
errors.transformations = {}
end
if not errors.transformations.input then
errors.transformations.input = {}
end
if not errors.transformations.input[i] then
errors.transformations.input[i] = {}
end
errors.transformations.input[i][j] = fmt("invalid field name: %s", input)
end
end
local needs = transformations[i].needs
if needs then
for j = 1, #needs do
if not has_schema_field(schema, needs[j]) then
if not errors.transformations then
errors.transformations = {}
end
if not errors.transformations.needs then
errors.transformations.needs = {}
end
if not errors.transformations.needs[i] then
errors.transformations.needs[i] = {}
end
errors.transformations.needs[i][j] = fmt("invalid field name: %s", needs[j])
end
end
end
end
end
return check_fields(schema, errors)
end,