public static function getTables($statement) { $expressions = array(); if ($statement instanceof InsertStatement || $statement instanceof ReplaceStatement) { $expressions = array($statement->into->dest); } elseif ($statement instanceof UpdateStatement) { $expressions = $statement->tables; } elseif ($statement instanceof SelectStatement || $statement instanceof DeleteStatement) { $expressions = $statement->from; } elseif ($statement instanceof AlterStatement || $statement instanceof TruncateStatement) { $expressions = array($statement->table); } elseif ($statement instanceof DropStatement) { if (!$statement->options->has('TABLE')) { // No tables are dropped. return array(); } $expressions = $statement->fields; } elseif ($statement instanceof RenameStatement) { foreach ($statement->renames as $rename) { $expressions[] = $rename->old; } } $ret = array(); foreach ($expressions as $expr) { if (!empty($expr->table)) { $expr->expr = null; // Force rebuild. $expr->alias = null; // Aliases are not required. $ret[] = Expression::build($expr); } } return $ret; }
/** * @dataProvider testGetTablesProvider */ public function testGetTables($query, $expected) { $parser = new Parser($query); $this->assertEquals($expected, Query::getTables($parser->statements[0])); }