我们的团队一直在为新版本而努力,该版本引入了许多新功能,错误修复和性能改进you can see here。
但是,Beta 9发行的故事与我们的团队无关。是关于你的!
您如何使用数据库和必须改进的想法。
让我们探讨其中的一些想法以及它们最终如何被释放。
从SELECT
语句返回一个字段
Brian(Du-z)去年9月加入了我们的社区,并做出了一些巨大的贡献,including the one you’re reading about.
他注意到查询SELECT name FROM user
会导致以下内容。
[
{
"Name": "Name 1"
},
{
"Name": "Name 2"
}
]
但是,他觉得应该更容易进行序列化和使用简单的字符串数组。
[
"Name 1",
"Name 2"
]
他为基于Cosmosdb的FIELD
关键字提供了这个非常有用的建议:
SELECT VALUE name FROM user
经过一些讨论,这是由我们的团队实施的,现在您可以借助Brian!
来SELECT VALUE name FROM user
。
带有DEFINE FUNCTION
语句的自定义功能
塞巴斯蒂安( mathe42 )自去年9月以来一直是一个非常活跃的社区成员,大约有20个拉力请求和许多其他伟大的贡献like this one。
对于他的用例,他正在寻找某种用户定义的功能,这些功能可以使我们拥有一个可可的sultealql指令列表。
。他提出了这个如何完成的示例:
-- Define a procedure to get a person
DEFINE PROCEDURE get_person ($firstname, $lastname, $birthdate) {
LET $person = SELECT * FROM person WHERE firstname = $firstname AND lastname = $lastname AND birthdate = $birthdate;
IF (COUNT($person)==1) THEN
RETURN 1;
ELSE
RETURN CREATE person {
firstname: $firstname,
lastname: $lastname,
birthdate: $birthdate
}
END
}
-- and call it by
LET $myPerson = CALL get_person('Sebastian', 'Krüger', '2022-09-21')
经过一些讨论和托比的一些魔力,您现在可以定义全局数据库范围的自定义功能!
-- Define a global function which can be used in any query
DEFINE FUNCTION fn::get_person($first: string, $last: string, $birthday: string) {
LET $person = SELECT * FROM person WHERE [first, last, birthday] = [$first, $last, $birthday];
RETURN IF $person[0].id THEN
$person[0];
ELSE
CREATE person SET first = $first, last = $last, birthday = $birthday;
END;
};
-- Call the global custom function, receiving the returned result
LET $person = fn::get_person('Tobie', 'Morgan Hitchcock', '2022-09-21');
这允许复杂或重复定义的代码在数据库的任何查询中无缝运行。
自定义函数支持带有自定义逻辑的多个嵌套查询。
所有这些始于塞巴斯蒂安(Sebastian)在数据库中想要什么的想法,谢谢塞巴斯蒂安!
代码块和高级表达式
汤姆( tomsseisums )也加入了我们在9月的旅程中,并分享了一些可以做得更好的见解,例如this use case。
他试图从“ SurreAlDB作为后端”的角度将自己的项目适应SurseAlDB,而在SurreAlDB的力量中,我们可以在SurreAldB中处理所有数据操作,而无需任何中间层。
他试图在CREATE
/UPDATE
中设置带有丰富表情的事件和领域,但面临解析错误。
这是汤姆想做的几件事之一:
CREATE metrics SET average_sales = (
LET $sales = (SELECT quantity FROM sales);
LET $total = math::sum($sales);
LET $count = count($sales);
RETURN ($total / $count);
);
但是,当他收到意外的解析错误时,他感到失望。
{
"code": 400,
"details": "Request problems detected",
"description": "There is a problem with your request. Refer to the documentation for further information.",
"information": "There was a problem with the database: Parse error on line 1 at character 15 when parsing 'SET average_sales = (\n LET $sales = (SELECT quantity FROM sales);\n LET $total = math::sum($sal'"
}
这不阻止他想要存在,因此他创建了一个feature request for it。
经过一些讨论和更多的魔力,现在有可能,借助汤姆!
DEFINE FIELD average_sales ON metrics VALUE {
LET $sales = (SELECT VALUE quantity FROM sales);
LET $total = math::sum($sales);
LET $count = count($sales);
RETURN ($total / $count);
};
现在,您可以运行代码块,并支持任意数量的语句,包括LET
和RETURN
!
这允许编写高级自定义逻辑并允许对数据操作进行更复杂的处理。
谢谢大家,与我们一起成为这一雄心勃勃的旅程的一部分!
我们只刮擦了发布的内容,您可以find more here。
我们总是很乐意一起工作on GitHub和our Discord server。
我们期待着您接下来想到哪些想法和改进!
在此之前,我们将分享有关一些新功能的更深入的博客文章。