db_drop_field() is not working with MySQL reserved words

Created on 13 April 2020, almost 5 years ago
Updated 17 April 2024, 10 months ago

db_drop_field() does not delete a column whose name is a reserved word (for example, set).

The only way to delete it is executing db_query("ALTER TABLE tablename DROP `set`");.

🐛 Bug report
Status

Closed: duplicate

Version

7.0 ⚰️

Component
MySQL driver 

Last updated about 1 month ago

Created by

🇫🇷France delta

Live updates comments and jobs are added and updated live.
Sign in to follow issues

Comments & Activities

Not all content is available!

It's likely this issue predates Contrib.social: some issue and comment data are missing.

  • 🇮🇹Italy apaderno Brescia, 🇮🇹
  • Status changed to Closed: duplicate 10 months ago
  • 🇮🇹Italy apaderno Brescia, 🇮🇹

    This is related to 🐛 DatabaseSchema_mysql::fieldExists() does not escape the column name Needs review . The issue is caused by DatabaseSchema_mysql::fieldExists(), which is called by DatabaseSchema_mysql::dropField().

    public function fieldExists($table, $column) {
      // The information_schema table is very slow to query under MySQL 5.0.
      // Instead, we try to select from the table and field in question. If it
      // fails, the most likely reason is that it does not exist. That is
      // dramatically faster than using information_schema.
      // @link http://bugs.mysql.com/bug.php?id=19588
      // @todo: This override should be removed once we require a version of MySQL
      // that has that bug fixed.
      try {
        $this->connection->queryRange("SELECT {$column} FROM {" . $table . "}", 0, 1);
        return TRUE;
      } catch (Exception $e) {
        return FALSE;
      }
    }
    

    Once that issue is fixed, this issue will be fixed too.

Production build 0.71.5 2024