1.本发明涉及计算机技术领域,特别是涉及一种函数构建方法、装置、电子设备及可读存储介质。
背景技术:2.随着计算机技术的快速发展,系统(例如,物联网系统)会接收到用户输入的事件(例如,用户触发空调开关的事件),相应的,系统可以根据预设的判断条件,确定如何对该事件进行处理,进而,可以执行相应的业务处理,得到处理结果。
3.相关技术中,为了使系统能够实现上述过程中的业务逻辑,技术人员可以基于脚本语言(例如,javascript、lua)编写实现上述业务逻辑的代码。然而,脚本语言的使用门槛较高,对技术人员的要求也就相对较高,进而,也就会增大系统的使用和维护成本。
技术实现要素:4.本发明实施例的目的在于提供一种函数构建方法、装置、电子设备及可读存储介质,能够降低系统的使用和维护成本。具体技术方案如下:
5.在本发明实施的第一方面,首先提供了一种函数构建方法,所述方法包括:
6.获取用于实现预设业务逻辑的sql(structured query language,结构化查询语言)语句;
7.对所述sql语句进行解析,得到多个sql语句对象;
8.针对每一sql语句对象,生成与该sql语句对象对应的sql从句具有相同业务逻辑的响应式λ函数,作为待处理λ函数;
9.对各待处理λ函数进行组合,得到用于实现所述预设业务逻辑的λ函数链。
10.可选的,在所述对各待处理λ函数进行组合,得到用于实现所述预设业务逻辑的λ函数链之后,所述方法还包括:
11.当接收到所述预设业务逻辑对应的数据流时,按照所述λ函数链,对所述数据流进行处理,得到处理结果。
12.可选的,所述当接收到所述预设业务逻辑对应的数据流时,按照所述λ函数链,对所述数据流进行处理,得到处理结果,包括:
13.当通过所述λ函数链对应的数据接收接口,接收所述预设业务逻辑对应的数据流时,调用所述λ函数链对所述数据流进行处理,得到处理结果。
14.可选的,所述针对每一sql语句对象,生成与该sql语句对象对应的sql从句具有相同业务逻辑的响应式λ函数,作为待处理λ函数,包括:
15.针对每一sql语句对象,获取预先基于响应式函数库构建的,与该sql语句对象对应的sql从句具有相同业务逻辑的λ函数的函数模板;
16.基于该sql语句对象的参数,生成对应的λ函数的变量;
17.将生成的变量填充至所述函数模板,得到对应的待处理λ函数。
18.可选的,所述对各待处理λ函数进行组合,得到用于实现所述预设业务逻辑的λ函数链,包括:
19.按照对应的sql从句的指定顺序,对各待处理λ函数进行组合,得到用于实现所述预设业务逻辑的λ函数链。
20.在本发明实施的第二方面,提供了一种函数构建装置,所述装置包括:
21.构建器,用于获取用于实现预设业务逻辑的结构化查询语言sql语句;
22.解析器,用于对所述sql语句进行解析,得到多个sql语句对象;
23.所述构建器,还用于针对每一sql语句对象,生成与该sql语句对象对应的sql从句具有相同业务逻辑的响应式λ函数,作为待处理λ函数;对各待处理λ函数进行组合,得到用于实现所述预设业务逻辑的λ函数链。
24.可选的,所述装置还包括:
25.中控核心,用于在所述对各待处理λ函数进行组合,得到用于实现所述预设业务逻辑的λ函数链之后,当接收到所述预设业务逻辑对应的数据流时,按照所述λ函数链,对所述数据流进行处理,得到处理结果。
26.可选的,所述中控核心,具体用于当通过所述λ函数链对应的数据接收接口,接收所述预设业务逻辑对应的数据流时,调用所述λ函数链对所述数据流进行处理,得到处理结果。
27.可选的,所述构建器,具体用于针对每一sql语句对象,获取预先基于响应式函数库构建的,与该sql语句对象对应的sql从句具有相同业务逻辑的λ函数的函数模板;
28.基于该sql语句对象的参数,生成对应的λ函数的变量;
29.将生成的变量填充至所述函数模板,得到对应的待处理λ函数。
30.可选的,所述构建器,具体用于按照对应的sql从句的指定顺序,对各待处理λ函数进行组合,得到用于实现所述预设业务逻辑的λ函数链。
31.本发明实施例还提供了一种电子设备,包括处理器、通信接口、存储器和通信总线,其中,处理器,通信接口,存储器通过通信总线完成相互间的通信;
32.存储器,用于存放计算机程序;
33.处理器,用于执行存储器上所存放的程序时,实现上述任一所述的函数构建方法。
34.本发明实施例还提供了一种计算机可读存储介质,计算机可读存储介质内存储有计算机程序,计算机程序被处理器执行时实现上述任一所述的函数构建方法。
35.本发明实施例还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述任一所述的函数构建方法。
36.本发明实施例有益效果:
37.本发明实施例提供的一种函数构建方法,获取用于实现预设业务逻辑的sql语句;对sql语句进行解析,得到多个sql语句对象;针对每一sql语句对象,生成与该sql语句对象对应的sql从句具有相同业务逻辑的响应式λ函数,作为待处理λ函数;对各待处理λ函数进行组合,得到用于实现预设业务逻辑的λ函数链。
38.基于上述处理,可以构建与sql语句具有相同业务逻辑的响应式的λ函数链,即,用户通过sql语句就可以设置系统具有执行预设业务逻辑的功能。相对于脚本语言,sql语句的使用门槛较低,也就会降低系统的使用和维护成本。
39.当然,实施本发明的任一产品或方法并不一定需要同时达到以上所述的所有优点。
附图说明
40.为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,还可以根据这些附图获得其他的实施例。
41.图1为本发明实施例中提供的一种函数构建方法的流程图;
42.图2为本发明实施例中提供的另一种函数构建方法的流程图;
43.图3为本发明实施例中提供的一种函数构建方法的原理示意图;
44.图4为本发明实施例中提供的一种函数构建装置的结构图;
45.图5为本发明实施例中提供的一种电子设备的结构示意图。
具体实施方式
46.下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员基于本技术所获得的所有其他实施例,都属于本发明保护的范围。
47.相关技术中,为了使系统(例如,物联网系统)能够实现相应的业务逻辑,技术人员可以基于脚本语言(例如,javascript、lua)编写该业务逻辑对应的代码。然而,脚本语言的使用门槛较高,对技术人员的要求也就相对较高,进而,也就会增大系统的使用和维护成本。
48.为了解决上述问题,本发明实施例提供的一种函数构建方法,该方法可以应用于电子设备。例如,在物联网技术领域,该电子设备可以为智能家居中的中控设备,该中控设备可以接收用户的操作(例如,用户按下空调开关的操作,或者,用户关闭卧室灯的操作)触发的事件,并按照对应的业务逻辑对该事件进行处理。例如,当确定用户按下空调开关时,则关闭所有的门窗;或者,当确定用户关卧室灯时,则开启卧室的窗帘。
49.上述的业务逻辑需要用户/技术人员预先设置,即,基于本发明实施例提供的方法,用户/技术人员只需要通过sql语句就可以设置该中控设备具有执行预设业务逻辑的功能,即,生成具有该预设业务逻辑的λ函数链。相应的,当用户触发某一操作,生成该预设业务逻辑对应的事件(即数据流)时,中控设备则可以基于该λ函数链对该事件进行处理,以响应用户的操作。而相对于脚本语言,sql语句的使用门槛较低,也就会降低系统的使用和维护成本。
50.参见图1,图1为本发明实施例提供的一种函数构建方法的流程图,该方法可以包括以下步骤:
51.s101:获取用于实现预设业务逻辑的结构化查询语言sql语句。
52.s102:对sql语句进行解析,得到多个sql语句对象。
53.s103:针对每一sql语句对象,生成与该sql语句对象对应的sql从句具有相同业务
逻辑的响应式λ函数,作为待处理λ函数。
54.s104:对各待处理λ函数进行组合,得到用于实现所述预设业务逻辑的λ函数链。
55.本发明实施例提供的函数构建方法,可以构建与sql语句具有相同业务逻辑的响应式的λ函数链,即,用户通过sql语句就可以设置系统具有执行预设业务逻辑的功能。相对于脚本语言,sql语句的使用门槛较低,也就会降低系统的使用和维护成本。
56.针对步骤s101,预设业务逻辑为用户根据需求确定的,例如,针对智能家居中的中控设备,该预设业务逻辑可以表示当确定用户按下空调开关时,则关闭所有的门窗;或者,该预设业务逻辑也可以表示当确定用户关闭卧室灯时,则开启卧室的窗帘。
57.sql是一种数据库查询和程序设计语言,其是高级的非过程化编程语言,允许用户在高层数据结构上工作,且表达能力强、使用门槛低。
58.针对步骤s102,一种实现方式中,可以基于sql解析器对sql语句进行解析,得到对应的抽象语法树,该抽象语法树中节点表示各sql语句对象,即,可以得到该sql语句包含的多个sql语句对象。
59.例如,针对sql语句“select person from dept where age》30”,在进行解析后,可以得到一个column对象(对应select person部分),一个from对象(对应from dept部分),以及一个where对象(对应where age》30部分)。
60.针对步骤s103,每一sql语句对象对应一种sql从句。
61.在sql语句中,常用的sql从句可以包括:select、from、where、group by和order by。select从句用于从数据表中选取某些数据;from从句用于指定参与查询的表,也可以用于指定生成的中间表;where从句用于设定选取数据的条件,使选取的数据满足预设条件;group by从句用于对数据进行分组;order by从句用于对筛选结果进行排序,默认为升序。
62.针对上述示例,该column对象(对应select person部分)对应的sql从句为select从句;该from对象(对应from dept部分)对应的sql从句为from从句;该where对象(对应where age》30部分)对应的sql从句。
63.其中,基于函数响应式编程,可以接收函数作为输入参数和输出返回值,即,能够实现从一个函数映射到另一个函数。
64.即在本发明实施例中,针对sql语句中的每一sql从句,均可以生成对应的(即,具有相应业务逻辑)的响应式λ函数,以通过该λ函数实现该sql从句的功能。
65.例如,以where从句为例,函数响应式编程中的filter函数语义与其相同,都表示根据条件对数据进行过滤,即,二者具有相同的业务逻辑。因此,可以使用filter函数来实现where从句的业务逻辑。
66.针对步骤s104,在确定出各待处理λ函数后,可以对各待处理λ函数进行组合,得到λ函数链。由于每一待处理λ函数与对应的sql从句具有相同的业务逻辑,因此,对各待处理λ函数组合得到的λ函数链,也就能够实现整个sql从句的业务逻辑。
67.在一个实施例中,在上述步骤s104之后,该方法还可以包括以下步骤:
68.步骤一:当接收到预设业务逻辑对应的数据流时,按照λ函数链,对数据流进行处理,得到处理结果。
69.在本发明实施例中,在生成预设业务逻辑的λ函数链后,当接收到预设业务逻辑对应的数据流时,则可以基于该λ函数链对该数据流进行处理。
70.一种实现方式中,预设业务逻辑对应的数据流表示触发该预设业务逻辑的事件。例如,针对智能家居中的中控设备,该预设业务逻辑表示当确定用户按下空调开关时,则关闭所有的门窗,相应的,该预设业务逻辑对应的事件为用户按下空调开关对应的事件;或者,该预设业务逻辑表示当确定用户关闭卧室灯时,则开启卧室的窗帘,相应的,该预设业务逻辑对应的事件为用户按关闭卧室灯对应的事件。
71.在一个实施例中,上述步骤一可以包括以下步骤:
72.当通过λ函数链对应的数据接收接口,接收预设业务逻辑对应的数据流时,调用λ函数链对数据流进行处理,得到处理结果。
73.在本发明实施例中,可以为每一λ函数链设置对应的数据接收接口,例如,可以为accept接口。当电子设备通过该数据接收接口接收到数据流时,则可以调用对应的λ函数链,以对接收到的数据流进行处理。即,可以通过该数据接收接口,将该λ函数链与预设业务逻辑的数据流进行绑定。
74.在一个实施例中,参见图2,在图1的基础上,上述步骤s103可以包括以下步骤:
75.s1031:针对每一sql语句对象,获取预先基于响应式函数库构建的,与该sql语句对象对应的sql从句具有相同业务逻辑的λ函数的函数模板。
76.s1032:基于该sql语句对象的参数,生成对应的λ函数的变量。
77.s1033:将生成的变量填充至函数模板,得到对应的待处理λ函数。
78.在本发明实施中,针对每一sql从句,可以预先基于响应式函数库构建与该sql从句具有相同业务逻辑的λ函数的函数模板。
79.例如,针对where从句,构建的对应的λ函数的函数模板可以为:
80.value-》响应式函数库.filterwhen(ctx-》filter.apply(ctx))
81.其中,filterwhen表示响应式函数库的功能,filter表示类型为函数的变量,相当于where从句的条件表达式。
82.可以理解的是,此时得到的为λ函数的函数模板,该函数模板中未填入函数的变量。即,filter函数仍未被实例化。
83.然后,可以确定该sql语句对象的参数,即该sql语句对象对应的sql从句的变量,以得到需要填充至函数模板的变量。在将变量填充至函数模板后,即对函数模板进行实例化后,可以得到能够运行的λ函数(即待处理λ函数)。
84.在一个实施例中,上述步骤s104可以包括以下步骤:
85.按照对应的sql从句的指定顺序,对各待处理λ函数进行组合,得到用于实现预设业务逻辑的λ函数链。
86.在本发明实施例中,按照sql语句的实现原理,其包含的各sql从句之间具有指定顺序,因此,可以按照对应的sql从句的指定顺序,对得到各待处理λ函数进行组合,得到λ函数链。
87.一种实现方式中,针对sql语句,各sql从句之间的指定顺序可以为:from-》where-》group by-》order by。
88.例如,用户输入的sql语句为:select value from source order by value;输入的数据流序列为:{10,5,22,1}。对sql语句进行解析得到的响应式代码形如:
89.context-》orderby.apply(
90.column.apply(
91.row.apply(
92.from.apply(context))));
93.即,每一个sql从句(from,order by,select)都被转化为一个相同业务逻辑的λ函数。经过以上代码处理后的输出结果为:{1,5,10,22}。可见,实现的业务逻辑与sql语句相同。
94.参见图3,图3为本发明实施例提供的一种函数构建方法的原理示意图。针对图3,电子设备可以包含多个功能模块:中控核心、构建器、解析器、元数据和功能特性。
95.中控核心,用于对构建的λ函数链进行管理,负责提供对外交互api(app lication programming interface,应用程序接口)、实现主要流程(包括数据流处理)。构建器,用于获取sql语句,调用解析器,以及基于解析器得到的sq l语句对象构建响应式函数链(即构建λ函数链)。解析器,用于解析sql语句,生成程序化的sql语句对象。元数据,用于管理功能特性(包括λ函数的函数模板)。功能特性,用于实现具体的功能,如sql从句。
96.1、构建器接收sql语句。
97.2、构建器创建元数据,包括:2.1、使用解析器解析sql语句,得到sql语句对象。2.2、添加功能特征,即,确定与sql语句对象对应的sql从句具有相同业务逻辑的λ函数的函数模板。
98.上述功能特性包括全局功能特征和自定义功能特性。全局功能特性对应预先构建的常用的sql从句对应的λ函数的函数模板。自定义功能特性对应用户自定义的λ函数的函数模板。基于此,能够实现原生sql语句所不具备的功能和语法,以满足用户的个性化需求。
99.3、构建器用元数据构建中控核心中的λ函数链,包括:3.1对每个sql从句,基于对应的sql语句对象和添加的功能特性,得到对应的λ函数。3.2、按照sql执行顺序,对各λ函数组合,得到λ函数链。
100.基于相同的发明构思,本发明实施例还提供了一种函数构建装置,参见图4,图4为本发明实施例提供的一种函数构建装置的结构图,装置包括:
101.构建器401,用于获取用于实现预设业务逻辑的sql语句;
102.解析器402,用于对所述sql语句进行解析,得到多个sql语句对象;
103.所述构建器401,还用于针对每一sql语句对象,生成与该sql语句对象对应的sql从句具有相同业务逻辑的响应式λ函数,作为待处理λ函数;对各待处理λ函数进行组合,得到用于实现所述预设业务逻辑的λ函数链。
104.在一个实施例中,所述装置还包括:
105.中控核心,用于在所述对各待处理λ函数进行组合,得到用于实现所述预设业务逻辑的λ函数链之后,当接收到所述预设业务逻辑对应的数据流时,按照所述λ函数链,对所述数据流进行处理,得到处理结果。
106.在一个实施例中,所述中控核心,具体用于当通过所述λ函数链对应的数据接收接口,接收所述预设业务逻辑对应的数据流时,调用所述λ函数链对所述数据流进行处理,得到处理结果。
107.在一个实施例中,所述构建器401,具体用于针对每一sql语句对象,获取预先基于响应式函数库构建的,与该sql语句对象对应的sql从句具有相同业务逻辑的λ函数的函数
模板;
108.基于该sql语句对象的参数,生成对应的λ函数的变量;
109.将生成的变量填充至所述函数模板,得到对应的待处理λ函数。
110.在一个实施例中,所述构建器401,具体用于按照对应的sql从句的指定顺序,对各待处理λ函数进行组合,得到用于实现所述预设业务逻辑的λ函数链。
111.本发明实施例提供的函数构建装置,可以构建与sql语句具有相同业务逻辑的响应式的λ函数链,即,用户通过sql语句就可以设置系统具有执行预设业务逻辑的功能。相对于脚本语言,sql语句的使用门槛较低,也就会降低系统的使用和维护成本。
112.本发明实施例还提供了一种电子设备,如图5所示,包括处理器501、通信接口502、存储器503和通信总线504,其中,处理器501,通信接口502,存储器503通过通信总线504完成相互间的通信,
113.存储器503,用于存放计算机程序;
114.处理器501,用于执行存储器503上所存放的程序时,实现如下步骤:
115.获取用于实现预设业务逻辑的结构化查询语言sql语句;
116.对所述sql语句进行解析,得到多个sql语句对象;
117.针对每一sql语句对象,生成与该sql语句对象对应的sql从句具有相同业务逻辑的响应式λ函数,作为待处理λ函数;
118.对各待处理λ函数进行组合,得到用于实现所述预设业务逻辑的λ函数链。
119.上述电子设备提到的通信总线可以是外设部件互连标准(peripheral component interconnect,pci)总线或扩展工业标准结构(extended industry standard architecture,eisa)总线等。该通信总线可以分为地址总线、数据总线、控制总线等。为便于表示,图中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
120.通信接口用于上述电子设备与其他设备之间的通信。
121.存储器可以包括随机存取存储器(random access memory,ram),也可以包括非易失性存储器(non-volatile memory,nvm),例如至少一个磁盘存储器。可选的,存储器还可以是至少一个位于远离前述处理器的存储装置。
122.上述的处理器可以是通用处理器,包括中央处理器(central processing unit,cpu)、网络处理器(network processor,np)等;还可以是数字信号处理器(digital signal processor,dsp)、专用集成电路(application specific integrated circuit,asic)、现场可编程门阵列(field-programmable gate array,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。
123.在本发明提供的又一实施例中,还提供了一种计算机可读存储介质,该计算机可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现上述任一函数构建方法的步骤。
124.在本发明提供的又一实施例中,还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述实施例中任一函数构建方法。
125.在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或
部分地产生按照本发明实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(dsl))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,dvd)、或者半导体介质(例如固态硬盘solid state disk(ssd))等。
126.需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
127.本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置、电子设备和计算机可读存储介质,以及计算机程序产品实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
128.以上所述仅为本发明的较佳实施例,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本发明的保护范围内。