forked from SuperMap/iClient-JavaScript
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathJoinItem.js
More file actions
98 lines (89 loc) · 5.04 KB
/
JoinItem.js
File metadata and controls
98 lines (89 loc) · 5.04 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
import {SuperMap} from '../SuperMap';
import {Util} from '../commontypes/Util';
/**
* @class SuperMap.JoinItem
* @category iServer
* @classdesc 连接信息类。
* 该类用于矢量数据集与外部表的连接。外部表可以为另一个矢量数据集(其中纯属性数据集中没有空间几何信息)所对应的 DBMS 表,也可以是用户自建的业务表。需要注意的是,矢量数据集与外部表必须属于同一数据源。表之间的联系的建立有两种方式,一种是连接(join),一种是关联(link)。连接,实际上是依据相同的字段将一个外部表追加到指定的表;而关联是基于一个相同的字段定义了两个表格之间的联系,但不是实际的追加。用于连接两个表的字段的名称不一定相同,但类型必须一致。当两个表格之间建立了连接,通过对主表进行操作,可以对外部表进行查询,制作专题图以及分析等。当两个表格之间是一对一或多对一的关系时,可以使用 join 连接。当为多对一的关系时,允许指定多个字段之间的关联。(注意:SuperMap.JoinItem 目前支持左连接和内连接,不支持全连接和右连接,UDB 引擎不支持内连接。并且用于建立连接的两个表必须在同一个数据源下。)
* @param options - {Object} 可選参数。如:</br>
* foreignTableName - {string} 外部表的名称。</br>
* joinFilter - {string} 矢量数据集与外部表之间的连接表达式,即设定两个表之间关联的字段。</br>
* joinType - {SuperMap.JoinType} 两个表之间连接类型。</br>
* @example 下面以SQL查询说明joinItem的使用方法:
*(start code)
* function queryBySQL() {
* // 设置与外部表的连接信息
* var joinItem = new SuperMap.JoinItem({
* foreignTableName: "foreignTable",
* joinFilter: "foreignTable.CONTINENT = Countries.CONTINENT",
* joinType: "LEFTJOIN"
* })
* var queryParam, queryBySQLParams, queryBySQLService;
* // 设置查询参数,在查询参数中添加joinItem关联条件信息
* queryParam = new SuperMap.FilterParameter({
* name: "Countries@World",
* joinItems: [joinItem]
* }),
* queryBySQLParams = new SuperMap.QueryBySQLParameters({
* queryParams: [queryParam]
* }),
* queryBySQLService = new SuperMap.QueryBySQLService(url, {
* eventListeners: { "processCompleted": processCompleted, "processFailed": processFailed}
* });
* queryBySQLService.processAsync(queryBySQLParams);
* }
* function processCompleted(queryEventArgs) {//todo}
* function processFailed(e) {//todo}
* (end)
*/
export class JoinItem {
constructor(options) {
/**
* @member SuperMap.JoinItem.prototype.foreignTableName -{string}
* @description 外部表的名称。
* 如果外部表的名称是以“表名@数据源名”命名方式,则该属性只需赋值表名。
* 例如:外部表 Name@changchun,Name 为表名,changchun 为数据源名称,则该属性的赋值应为:Name。
*/
this.foreignTableName = null;
/**
* @member SuperMap.JoinItem.prototype.joinFilter -{string}
* @description 矢量数据集与外部表之间的连接表达式,即设定两个表之间关联的字段。
* 例如,将房屋面数据集(Building)的 district 字段与房屋拥有者的纯属性数据集(Owner)的 region 字段相连接,
* 两个数据集对应的表名称分别为 Table_Building 和 Table_Owner,
* 则连接表达式为 Table_Building.district = Table_Owner.region。
* 当有多个字段相连接时,用 AND 将多个表达式相连。
*/
this.joinFilter = null;
/**
* @member SuperMap.JoinItem.prototype.joinType -{JoinType}
* @description 两个表之间连接类型。
* 连接类型决定了对两个表进行连接查询后返回的记录的情况。
*/
this.joinType = null;
if (options) {
Util.extend(this, options);
}
this.CLASS_NAME = "SuperMap.JoinItem";
}
/**
* @function SuperMap.JoinItem.prototype.destroy
* @description 释放资源,将引用资源的属性置空。
*/
destroy() {
var me = this;
me.foreignTableName = null;
me.joinFilter = null;
me.joinType = null;
}
/**
* @function SuperMap.JoinItem.prototype.toServerJSONObject
* @description 转换成对应的 JSON 格式对象。
*/
toServerJSONObject() {
var dataObj = {};
dataObj = Util.copyAttributes(dataObj, this);
//joinFilter基本是个纯属性对象,这里不再做转换
return dataObj;
}
}
SuperMap.JoinItem = JoinItem;