From 48b7eefadce28026eabea696eb1cc86a4790b7bf Mon Sep 17 00:00:00 2001 From: liumengyi Date: Fri, 21 Feb 2025 16:46:22 +0800 Subject: [PATCH] * [feedback#8528,done] fix sql for dm. --- module/bi/config.php | 2 +- module/bi/model.php | 12 +++++++++--- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/module/bi/config.php b/module/bi/config.php index 0156ab9b2e..e96cfccdc8 100644 --- a/module/bi/config.php +++ b/module/bi/config.php @@ -124,7 +124,7 @@ $config->bi->duckSQLTemp = array(); $config->bi->duckSQLTemp['mysql'] = "LOAD '{EXTENSIONPATH}';ATTACH 'host={HOST} user={USER} password={PASSWORD} port={PORT} database={DATABASE}' as mysqldb(TYPE MYSQL);USE mysqldb;{COPYSQL}"; $config->bi->duckSQLTemp['dm'] = '{EXTENSIONPATH} --driver="{DRIVER}" --db="host={HOST} user={USER} password={PASSWORD} port={PORT} database={DATABASE}" --copy="{COPYSQL}"'; -$config->bi->drivers = array('mysql', 'duckdb'); +$config->bi->drivers = array('mysql', 'duckdb', 'dm'); $config->bi->defaultDriver = 'mysql'; $config->bi->columnTypes = new stdclass(); diff --git a/module/bi/model.php b/module/bi/model.php index c3f5421866..87564d6c53 100644 --- a/module/bi/model.php +++ b/module/bi/model.php @@ -336,9 +336,10 @@ class biModel extends model $dbh = $this->app->loadDriver($driver); $prefixSQL = $driver == 'mysql' ? 'EXPLAIN' : 'PRAGMA enable_profiling=json; EXPLAIN ANALYZE'; + if($this->config->db->driver == 'dm') $sql = $dbh->formatSQL($sql); try { - $rows = $dbh->query("$prefixSQL $sql")->fetchAll(); + $dbh->exec("$prefixSQL $sql"); } catch(Exception $e) { @@ -1696,7 +1697,7 @@ class biModel extends model $countSql = "SELECT FOUND_ROWS() AS count"; if($driver == 'duckdb') $countSql = "SELECT COUNT(1) AS count FROM ($sql)"; - if($driver == 'dm') $countSql = "SELECT COUNT(1) as count"; + if($driver == 'dm') $countSql = "SELECT COUNT(1) as count FROM ($sql)"; return array($limitSql, $countSql); } @@ -1762,7 +1763,12 @@ class biModel extends model $recPerPage = $stateObj->pager['recPerPage']; $pageID = $stateObj->pager['pageID']; - list($limitSql, $countSql) = $this->getSql($sql, $driver, $recPerPage, $pageID); + list($limitSql, $countSql) = $this->getSQL($sql, $this->config->db->driver, $recPerPage, $pageID); + if($this->config->db->driver) + { + $limitSql = $dbh->formatSQL($limitSql); + $countSql = $dbh->formatSQL($countSql); + } try {