new()

阅读(2218) 标签: new,

本章介绍new()函数的多种用法。

new ()

描述:

生成一条记录

语法:

new(xi:Fi,…)

备注:

生成一条字段名称为Fi字段值为xi的记录。

参数:

xi

字段值

Fi

字段名称

选项:

@t

返回成序表

返回值:

记录或序表

示例:

 

A

 

1

=new(1:ID,"ZHS":name)

生成一条记录

2

=new@t(1:ID,"ZHS":name)

使用@t选项,生成只有一条记录的序表

A.new( xi : Fi ,…)

描述:

计算序表/排列字段值生成新序表/排列。

语法:

A.new(xi:Fi,…)

备注:

根据序表/排列A的长度,生成一个记录数与A相同,且每条记录的字段值为xi、字段名为Fi的新序表/排列。

参数:

Fi

字段名,省略则用xi中解析出的标识符

xi

表达式,结果为字段值,省略则为null,省略xi时,不能省略: Fi。用#时表示用序号定位,此时使用原列名

A

序表/排列

选项:

@m

数据量大的复杂运算中,并行计算提升性能,计算次序不确定。

@i

xi并且计算结果为空时,不生成该行记录。

@o

A是纯序表时,未改变的旧列直接引用,不再新产生

返回值:

新的序表

示例:

Ø  从单个序表产生

 

A

 

1

=demo.query("select EID,NAME,DEPT,BIRTHDAY from EMPLOYEE")

2

=A1.new(EID:EmployeeID,NAME, #3:dept)

直接产生新序表,如与A1字段名相同,可以省略Fi

3

=A1.new(NAME,age(BIRTHDAY):AGE)

计算字段值生成新序表

4

=A1.new@m(NAME,age(BIRTHDAY):AGE)

数据量大时提升性能

5

=file("D:\\txt_files\\data1.txt").import@t()

data1.txt中内容如下:

6

=A5.new@i(CLASS,STUDENTID,SUBJECT,SCORE:score)

SCORE计算结果为空时,对应的该条记录不生成

Ø  A为纯序表时

 

A

 

1

=demo.query("select EID,NAME,DEPT,BIRTHDAY from EMPLOYEE").i()

返回纯序表

2

=A1.new@o(EID,NAME, #3:dept)

使用@o选项,未改变的旧列直接引用,不再新产生

3

=A2(1).NAME="aaa"

修改列值时会同时修改源表的,执行后A2格结果如下:

此时A1格结果如下:

 

Ø  从同序的多个序表关联运算产生

 

A

 

1

=create(Name,Chinese).record(["Jack",99,"Lucy",90])

2

=create(Name,Math).record(["Jack",89,"Lucy",96])

3

=A1.new(Name:Name,Chinese:Chinese,A2(#).Math:Math)

通过A2(#)读取A2同位置的记录

相关概念:

cs.new()

ch.new()

描述:

计算管道内记录的字段值并返回原管道

语法:

ch.new(xi:Fi,…)

备注:

针对管道ch的每条记录计算xi,并且把计算后的字段名重命名为Fi最后返回由Fi组成的原管道ch

该函数属于附加计算动作

参数:

ch

管道

xi

表达式,结果为字段值,省略则为null,省略xi时,不能省略: Fi。用#时表示用序号定位。

Fi

ch的字段名,省略则用xi中解析出的标识符

选项:

@i

xi并且计算结果为空时,不生成该行记录。

返回值:

管道ch

示例:

 

A

 

1

=demo.cursor("select * from SCORES")

创建游标

2

=file("D:\\txt_files\\data1.txt").cursor@t()

data1.txt中内容如下:

3

=channel()

创建管道

4

=channel()

创建管道

5

=A3.new(CLASS,#2:ID,SCORE+5:newScores)

管道A3变为CLASSIDnewScores

组成,并且对原有的SCORE执行表达式计算。

6

=A3.fetch()

保留管道当前数据

7

=A4.new@i(CLASS,STUDENTID,SUBJECT,SCORE:score)

SCORE计算结果为空时,对应的该条记录不生成

8

=A4.fetch()

 

9

=A1.push(A3)

将游标A1中的数据推送到管道A3,此时数据不会立即被推送到管道。

10

=A2.push(A4)

将游标A2中的数据推送到管道A4

11

=A1.fetch()

A1执行fetch()时程序才会执行管道中的计算,游标中的数据才真正被推送到管道。

12

=A3.result()

13

=A2.fetch()

 

14

=A4.result()

cs.new()

描述:

计算游标字段值并返回原游标

语法:

cs.new(xi:Fi,…)

备注:

针对游标cs的每条记录计算xi,并且把计算后的字段名重命名为Fi最后返回由Fi组成的原游标cs

参数:

cs

游标

xi

表达式,结果为字段值,省略则为null,省略xi时,不能省略: Fi。用#时表示用序号定位。

Fi

cs的字段名,省略则用xi中解析出的标识符

选项:

@i

xi并且计算结果为空时,不生成该行记录。

返回值:

游标cs

示例:

 

A

 

1

=connect("demo").cursor("select * from SCORES where SCORE<60")

 

2

=A1.new(#2:ID,CLASS,SCORE+5:newScores)

游标A1变为由IDCLASSnewScores组成,并且对原有的SCORE执行表达式计算。

3

=A2.fetch()

4

=file("D:\\txt_files\\1.txt").cursor@t()

data1.txt中内容如下:

5

=A4.new@i(CLASS,STUDENTID,SUBJECT,SCORE:score)

SCORE计算结果为空时,对应的该条记录不生成

6

=A5.fetch()

T.new( A/cs:K,x:C,…;wi,... )

描述:

根据组表的键值与序表字段对应,取出组表字段,结果返回序表/游标。

语法:

T.new(A/cs:K,x:C,…;wi,...)

备注:

T和序表A/游标cs是一对多关系,T的键/维字段与序表A/游标cs(从头开始)的字段对应后返回T的记录,已知序表A/游标cs前面字段与T的键值字段同序;A时返回序表,cs时返回游标/多路游标。

当没有@r选项时,支持聚合运算,T必须为主表,A/cs必须为子表,对子表字段做聚合。

参数:

T

组表

A/cs

序表/游标

K

字段名,A/cs后有K…参数时,则用这些字段来对应

x

字段值

C

列别名,可省略

wi

过滤条件,多个过滤条件间用逗号间隔,且条件间为AND关系

选项:

@r

复制主表记录,返回结果集按A/cs对齐

返回值:

序表/游标

示例:

 

A

 

1

=file("D:/Employee.ctx").open()

打开组表

2

=demo.query("select SALARY,NAME,EID from EMPLOYEE order by EID")

结果返回根据EID升序排列的序表

3

=A1.new(A2:EID,NAME,GENDER)

通过序表的EID与组表主键对应,取出组表字段

4

=demo.cursor("select * from EMPLOYEE order by EID")

 

 

5

=A1.new(A4,NAME:EMPName,GENDER:EMPGender).fetch()

通过游标的第一个字段与组表主键对应,取出组表的其他字段

6

=demo.query("select EID from employee where EID<10 ")

 

7

=A1.new(A6,EID,GENDER,SALARY;GENDER=="F",SALARY>2000)

通过序表的第一个字段与组表主键对应,从组表中取出Gender"F"并且SALARY大于2000的字段

8

=file("D:/pdm/sale.ctx").open()

组表内容如下:

 

9

=demo.query("select 订单ID as ID,数量 as amount from 订单明细 where 订单ID<10251")

 

10

=A8.new(A9,ID,(sum(AMOUNT)):TOTAL)

对子表字段值聚合:

11

=A8.new@r(A9,ID,AMOUNT,PRICE)

使用@r选项,按A9对齐,复制主表A8记录:

T.new( A/cs,x:C,…;wi,... )

描述:

根据键值取出集群组表中的指定字段,并返回集群多路游标。

语法:

T.new(A/cs,x:C,…;wi,...)

备注:

根据集群内表A或者集群游标cs的键值,从集群组表T中取出指定的字段x,...,要求A/cs对键有序。

参数:

T

集群组表

A/cs

集群内表/集群游标

x

字段值

C

列别名

wi

过滤条件,多个过滤条件间用逗号间隔,之间为AND关系

返回值:

集群多路游标

示例:

 

A

 

1

=file("emp10.ctx",["192.168.0.118:8281"])

 

2

=A1.open()

打开集群组表

3

=file("emp11.ctx",["192.168.0.119:8281"]).open().memory()

打开集群内表

4

=A2.new(A3,NAME,GENDER).fetch()

通过内表键值取出集群表中的指定字段

5

=file("emp12.ctx",["192.168.0.110:8281"]).open().cursor()

返回集群游标

6

=A2.new(A5,NAME:NAME,GENDER:GENDER).fetch()

通过游标键值取出集群表中的指定字段