"comment":"An event is a thing that happened that caused one or more users to be notified. For every notified user, there is a corresponding row in the echo_notification table.",
"columns":[
{
"name":"event_id",
"comment":"Unique auto-increment ID",
"type":"integer",
"options":{
"autoincrement":true,
"notnull":true,
"unsigned":true
}
},
{
"name":"event_type",
"comment":"Event type; one of the keys in $wgEchoNotifications",
"type":"binary",
"options":{
"notnull":true,
"length":64
}
},
{
"name":"event_agent_id",
"comment":"The agent (user who triggered the event), if any. If the agent is a logged-in user, event_agent_id contains their user ID and event_agent_ip is null. If the agent is an anonymous user, event_agent_ip contains their IP address and event_agent_id is null. If the event doesn't have an agent, both fields are null.",
"type":"integer",
"options":{
"notnull":false,
"unsigned":true
}
},
{
"name":"event_agent_ip",
"comment":"The agent (user who triggered the event), if any. If the agent is a logged-in user, event_agent_id contains their user ID and event_agent_ip is null. If the agent is an anonymous user, event_agent_ip contains their IP address and event_agent_id is null. If the event doesn't have an agent, both fields are null.",
"type":"binary",
"options":{
"notnull":false,
"length":39
}
},
{
"name":"event_extra",
"comment":"JSON blob with additional information about the event",
"type":"blob",
"options":{
"notnull":false,
"length":65530
}
},
{
"name":"event_page_id",
"comment":"Page ID of the page the event happened on, if any (key to page_id)",
"type":"integer",
"options":{
"notnull":false,
"unsigned":true
}
},
{
"name":"event_deleted",
"comment":"Whether the event pertains to a deleted page and should be hidden. Events are marked as deleted when the related page is deleted, and unmarked as deleted when the related page is undeleted",
"type":"mwtinyint",
"options":{
"notnull":true,
"unsigned":true,
"default":0
}
}
],
"indexes":[
{
"name":"echo_event_type",
"comment":"Index to get only 'alert' types or only 'message' types",
"columns":[
"event_type"
],
"unique":false
},
{
"name":"echo_event_page_id",
"comment":"Index to find events for a specific page",
"columns":[
"event_page_id"
],
"unique":false
}
],
"pk":[
"event_id"
]
},
{
"name":"echo_notification",
"comment":"A notification is a user being notified about a certain event. Multiple users can be notified about the same event.",
"columns":[
{
"name":"notification_event",
"comment":"Key to event_id",
"type":"integer",
"options":{
"notnull":true,
"unsigned":true
}
},
{
"name":"notification_user",
"comment":"Key to user_id",
"type":"integer",
"options":{
"notnull":true,
"unsigned":true
}
},
{
"name":"notification_timestamp",
"comment":"Timestamp when the notification was created",
"type":"mwtimestamp",
"options":{
"notnull":true
}
},
{
"name":"notification_read_timestamp",
"comment":"Timestamp when the user read the notification, or null if unread",
"type":"mwtimestamp",
"options":{
"notnull":false
}
},
{
"name":"notification_bundle_hash",
"comment":"Hash for bundling together similar notifications. Notifications that can be bundled together will have the same hash",
"type":"binary",
"options":{
"notnull":true,
"length":32
}
}
],
"indexes":[
{
"name":"echo_user_timestamp",
"comment":"Index to get a user's notifications in chronological order",
"columns":[
"notification_user",
"notification_timestamp"
],
"unique":false
},
{
"name":"echo_notification_event",
"comment":"Used to get all notifications for a given event",
"columns":[
"notification_event"
],
"unique":false
},
{
"name":"echo_notification_user_read_timestamp",
"comment":"Used to get read/unread notifications for a user",
"columns":[
"notification_user",
"notification_read_timestamp"
],
"unique":false
}
],
"pk":[
"notification_user",
"notification_event"
]
},
{
"name":"echo_email_batch",
"comment":"Table gathering events for batch emails. If a user asks to receive batch emails, events are gathered in this table until it's time to send an email. Once a user has been emailed about an event, it's deleted from this table.",
"columns":[
{
"name":"eeb_id",
"comment":"Unique auto-increment ID",
"type":"integer",
"options":{
"autoincrement":true,
"notnull":true,
"unsigned":true
}
},
{
"name":"eeb_user_id",
"comment":"Key to user_id",
"type":"integer",
"options":{
"notnull":true,
"unsigned":true
}
},
{
"name":"eeb_event_priority",
"comment":"Priority of the event as defined in $wgEchoNotifications; events with lower numbers are listed first",
"type":"mwtinyint",
"options":{
"notnull":true,
"unsigned":true,
"default":10
}
},
{
"name":"eeb_event_id",
"comment":"Key to event_id",
"type":"integer",
"options":{
"notnull":true,
"unsigned":true
}
},
{
"name":"eeb_event_hash",
"comment":"Same value as notification_bundle_hash, or a unique value if notification_bundle_hash is empty",
"type":"binary",
"options":{
"notnull":true,
"length":32
}
}
],
"indexes":[
{
"name":"echo_email_batch_user_event",
"comment":"Used to delete events once they have been processed, and to identify users with events to process",
"columns":[
"eeb_user_id",
"eeb_event_id"
],
"unique":true
},
{
"name":"echo_email_batch_user_hash_priority",
"comment":"Used to get a list of events for a user, grouping events with the same hash and ordering by priority",
"columns":[
"eeb_user_id",
"eeb_event_hash",
"eeb_event_priority"
],
"unique":false
}
],
"pk":[
"eeb_id"
]
},
{
"name":"echo_target_page",
"comment":"A \"target page\" of an event is a page that, when the user visits it, causes the event to be marked as read. Typically this is the same as the event's event_page_id, but some events have multiple target pages, and many events don't set a target page at all. An event's target pages are derived from the 'target-page' key in event_extra. This table is also used for moderating events when the related page is deleted, but this should use event_page_id instead (T217452).",
"columns":[
{
"name":"etp_id",
"comment":"Unique auto-increment ID",
"type":"integer",
"options":{
"autoincrement":true,
"notnull":true,
"unsigned":true
}
},
{
"name":"etp_page",
"comment":"Key to page_id",
"type":"integer",
"options":{
"notnull":true,
"unsigned":true,
"default":0
}
},
{
"name":"etp_event",
"comment":"Key to event_id",
"type":"integer",
"options":{
"notnull":true,
"unsigned":true,
"default":0
}
}
],
"indexes":[
{
"name":"echo_target_page_event",
"comment":"Not currently used",
"columns":[
"etp_event"
],
"unique":false
},
{
"name":"echo_target_page_page_event",
"comment":"Used to get the events associated with a given page",
"columns":[
"etp_page",
"etp_event"
],
"unique":false
}
],
"pk":[
"etp_id"
]
},
{
"name":"echo_push_provider",
"comment":"Table for normalizing push providers; intended for use with the NameTableStore construct.",
"columns":[
{
"name":"epp_id",
"type":"mwtinyint",
"options":{
"autoincrement":true,
"notnull":true,
"unsigned":true
}
},
{
"name":"epp_name",
"comment":"push provider name; expected values are 'fcm' and 'apns'",
"type":"blob",
"options":{
"notnull":true,
"length":255
}
}
],
"indexes":[],
"pk":[
"epp_id"
]
},
{
"name":"echo_push_subscription",
"comment":"Stores push subscriptions associated with wiki users.",