/**
     * Set database connection string. Change table name and add extra cols if necessary.
     * 
     * @param string $dsn
     * @param string $table (default = category)
     * @param map $extra_cols
     */
    public function setDSN($dsn, $table = 'category', $extra_cols = [])
    {
        $db = new Database();
        $db->setDSN($dsn);
        $table = ADatabase::escape_name($table);
        $db->setQuery('drop', "DROP TABLE IF EXISTS {$table}");
        $query = <<<END
CREATE TABLE {$table} (
id int NOT NULL AUTO_INCREMENT,
pid int,
name varchar(255) NOT NULL,

PRIMARY KEY (id),
FOREIGN KEY (pid) REFERENCES {$table}(id) ON DELETE CASCADE ON UPDATE CASCADE
);
END;
        $db->setQuery('create', $query);
        $db->setQuery('insert', "INSERT INTO {$table} (pid, name) VALUES ('{:=pid}', '{:=name}')");
        $db->setQuery('select_name_pid', "SELECT * FROM {$table} WHERE name='{:=name}' AND pid='{:=pid}'");
        $db->setQuery('select_id', "SELECT * FROM {$table} WHERE id='{:=id}'");
    }
 /**
  * SQL Escape trim($name).
  *
  * @tok {sql_name:}a b{:sql_name} -> `a b`
  * @see ADatabase::escape_name
  * @param string $name
  * @return string
  */
 public function tok_sql_name($name)
 {
     return ADatabase::escape_name(trim($name));
 }