public static function getForeignKeys($statement)
{
if (empty($statement->fields) || !is_array($statement->fields) || !$statement->options->has('TABLE')) {
return array();
}
$ret = array();
foreach ($statement->fields as $field) {
if (empty($field->key) || $field->key->type !== 'FOREIGN KEY') {
continue;
}
$columns = array();
foreach ($field->key->columns as $column) {
$columns[] = $column['name'];
}
$tmp = array('constraint' => $field->name, 'index_list' => $columns);
if (!empty($field->references)) {
$tmp['ref_db_name'] = $field->references->table->database;
$tmp['ref_table_name'] = $field->references->table->table;
$tmp['ref_index_list'] = $field->references->columns;
if ($opt = $field->references->options->has('ON UPDATE')) {
$tmp['on_update'] = str_replace(' ', '_', $opt);
}
if ($opt = $field->references->options->has('ON DELETE')) {
$tmp['on_delete'] = str_replace(' ', '_', $opt);
}
// if (($opt = $field->references->options->has('MATCH'))) {
// $tmp['match'] = str_replace(' ', '_', $opt);
// }
}
$ret[] = $tmp;
}
return $ret;
}