public function exec($sql) {
        $dialect = $this->dialect;
        if (is_null($dialect)) {
            return false;
        }
        try {
            // 表前缀处理
            $sql = preg_replace_callback('#\{[a-z][a-z0-9_].*\}#i', function ($r) use ($dialect) {
                return $dialect->getTableName($r[0]);
            }, $sql);

            return false !== $dialect->exec($sql);
        } catch (\Exception $e) {
            $this->error = $e->getMessage();

            return false;
        }
    }