Skip to content

x-db Field Reference

Quick lookup for every x-db field and where it maps in the parser.

JSON pathDataclass fieldType
sql_typeColumn.sql_typeobject
semanticColumn.semanticstring
defaultColumn.defaultany
generatedColumn.generatedboolean
auto_managedColumn.auto_managedboolean
fkColumn.fkstring
refColumn.refstring
relationColumn.relationstring
on_deleteColumn.on_deletestring
on_updateColumn.on_updatestring
inverse_ofColumn.inverse_ofstring
virtualColumn.virtualboolean
storageColumn.storagestring
computedColumn.computedobject
polymorphic(not parsed)object
JSON pathDataclass fieldType
tableTable.tablestring
namespaceTable.namespacestring
primary_keyTable.primary_keystring[]
timestampsTable.timestampsboolean
soft_deleteTable.soft_deleteboolean
searchableTable.searchablestring[]
filterable(not parsed)string[]
sort_by(not parsed)string[]
auditable(not parsed)boolean
indexesTable.indexesobject[]
relationshipsTable.relationshipsobject
join_tableTable.join_tableobject

The computed field contains a recursive expression tree:

{
"fn": "concat",
"args": [{ "col": "first_name" }, " ", { "col": "last_name" }]
}

Each node is one of:

  • {"fn": "name", "args": [...]} — function call (see fn.* methods)
  • {"col": "name"} — column reference
  • literal — string or number passed through directly
storage valueMeaning
"stored"GENERATED ALWAYS AS (expr) STORED — on disk, indexable
"virtual"GENERATED ALWAYS AS (expr) VIRTUAL — computed on read
"app_only"No DB column — application layer only
{
"type": "has_many",
"target": "blog.post",
"target_table": "blog_post",
"foreign_key": "author_id",
"local_key": "id",
"backref": "author"
}

For many_to_many, a through object is added:

{
"through": {
"table": "user_role",
"local_key": "user_id",
"foreign_key": "role_id"
}
}
{
"name": "auth_user_email_key",
"columns": ["email"],
"unique": true,
"primary": false
}