我在我的应用程序中使用MEDIAN函数。当我在生产服务器上部署它时,我得到Syntax error
,因为有一个旧版本的MariaDB。
有没有办法检查某个函数是否存在?PHP中的function_exists()
我可以像这样检查SELECT VERSION();
的版本,并维护一些函数和版本的列表。但我在寻找更简单更通用的解决方案。
现在我这样做:
// PHP + NETTE framework
$sqlVersionOK = $this->checkSqlServerVersion([10,3,3]);
if ($sqlVersionOK) { /* ... */ } else { /* ... */ }
public function checkSqlServerVersion(array $nums):bool {
$version = $this->repository->query('SELECT VERSION() AS num;')->fetch();
$version = explode('.', $version->num);
$ver = array_map(function ($item) { return (int) filter_var($item, FILTER_SANITIZE_NUMBER_INT); }, $version);
if ($ver[0] > $nums[0]) { return TRUE; } // major number is bigger
elseif($ver[0]==$nums[0] and $ver[1] >= $nums[1]) { return TRUE; } // major number is the same, minor is bigger or same
elseif($ver[0]==$nums[0] and $ver[1] == $nums[1] and $ver[2] >= $nums[1]) { return TRUE; } // major and minor numbers are the same, patch is bigger or same
else { return FALSE; }
}
谢谢。
1条答案
按热度按时间ergxz8rk1#
10.6添加了information_schema.keywords,但是它对你来说还不够早。(我不确定它是否包含所有功能)。
给定MEDIAN是10.3+窗口函数,并且仅在10.2中添加的窗口函数给出了非常有限的窗口(双关语),可以找到替代。
Stored aggregate functions仅在10.3中添加,因此不可能在10.2中创建等效的SQL函数。
MariaDB有一个executable comment syntax,其中一些函数只有在服务器具有足够的版本时才会执行,例如:
这将是10.2示例上的空查询。
一个更务实的答案是: