@gingkoo/pandora-metabase 1.0.136 → 1.0.137

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -43,9 +43,10 @@ var Filter = function Filter(props) {
43
43
  if (prevGroupBy !== null && prevGroupBy !== void 0 && (_prevGroupBy$group = prevGroupBy.group) !== null && _prevGroupBy$group !== void 0 && _prevGroupBy$group.length) {
44
44
  _data.columns = _data.columns.concat(prevGroupBy.group.map(function (v) {
45
45
  return _objectSpread(_objectSpread({}, v), {}, {
46
- name: v.name || v.quotes,
46
+ name: v.fieldAlias || v.name || v.quotes,
47
47
  name_zh: v.name_zh || v.quotes,
48
48
  id: v.id || v.fieldId,
49
+ fieldAlias: '',
49
50
  database_type: (v === null || v === void 0 ? void 0 : v.database_type) || SQL_COLUMN_TYPE.FLOAT,
50
51
  sql: v.sql,
51
52
  special_type: '',
@@ -56,9 +57,10 @@ var Filter = function Filter(props) {
56
57
  if (prevGroupBy !== null && prevGroupBy !== void 0 && (_prevGroupBy$by = prevGroupBy.by) !== null && _prevGroupBy$by !== void 0 && _prevGroupBy$by.length) {
57
58
  _data.columns = _data.columns.concat(prevGroupBy.by.map(function (v) {
58
59
  return _objectSpread(_objectSpread({}, v), {}, {
59
- name: v.name || v.quotes,
60
+ name: v.fieldAlias || v.name || v.quotes,
60
61
  name_zh: v.name_zh || v.quotes,
61
62
  id: v.id || v.fieldId,
63
+ fieldAlias: '',
62
64
  database_type: (v === null || v === void 0 ? void 0 : v.database_type) || SQL_COLUMN_TYPE.FLOAT,
63
65
  sql: v.sql,
64
66
  special_type: '',
@@ -11,13 +11,12 @@ import cx from 'classnames';
11
11
  import { Button, Tooltip, Input, Modal2, Modal, Toast, Dropdown, InputNumber } from '@gingkoo/pandora';
12
12
  import { FfPlus, FfLine, Repeat, RelatedWork } from '@gingkoo/pandora-icons';
13
13
  import Metabase from '../../index';
14
- import isEqual from 'lodash/isEqual';
15
14
  import cloneDeep from 'lodash/cloneDeep';
16
- import { uuidv4, getAlias, mergeNameAlias, isSameColumnByIdFirst, isSameTableByIdFirst } from '../../utils/helper';
15
+ import { uuidv4, getAlias, mergeNameAlias, isSameTableByIdFirst } from '../../utils/helper';
17
16
  import { getTopLayerZIndex } from '../../utils/helper-dom';
18
17
  import { getConstantLabel } from '../dialog/formula-list/utils';
19
18
  import { __ } from '../../locale';
20
- import { findIndex, getSubColumns } from '../../utils';
19
+ import { findIndex, getSubColumns, mergeSubQueryColumns, syncSubQueryFieldReferences } from '../../utils';
21
20
  import { TypeEnum, ColumnsPopupThemeEnum, JoinEnum, SQL_COLUMN_TYPE } from '../../store/enum';
22
21
  import { AtomsTypeEnum, ChangeType, FormulaTypeEnum } from '../../store/types';
23
22
  import { SummarizeAlias } from '../../store/helper';
@@ -952,7 +951,6 @@ var JoinData = function JoinData(props) {
952
951
  var childModalZIndex = getTopLayerZIndex() + 1;
953
952
  var newMeta = cloneDeep(store.metaList[groupIndex].list);
954
953
  var index = findIndex(store.metaList[groupIndex].list, meta);
955
- var oldList = cloneDeep(newMeta[index].subquery);
956
954
  var _toolbar = subToolbar || toolbar;
957
955
  var o = Modal2.openModal({
958
956
  zIndex: childModalZIndex,
@@ -968,21 +966,22 @@ var JoinData = function JoinData(props) {
968
966
  onOk: function onOk(newList) {
969
967
  try {
970
968
  var _store$preProps3;
971
- if (isEqual(newList, oldList)) {
972
- o.close();
973
- return;
974
- }
975
969
  newMeta[index].subquery = newList;
976
970
  newMeta[index].table2 = _objectSpread(_objectSpread({}, newList[0].table), {}, {
977
971
  alias: newMeta[index].table2.alias || getAlias(newList[0].table.name, newMeta, ((_store$preProps3 = store.preProps) === null || _store$preProps3 === void 0 ? void 0 : _store$preProps3.notExistsColumns) || [])
978
972
  });
979
973
  var items = getSubColumns(newList);
974
+ var subQueryTable = newMeta[index].table2;
980
975
  var newColumns = items.flatMap(function (item) {
981
976
  return item.columns.map(function (column) {
977
+ var columnMeta = column;
982
978
  return _objectSpread(_objectSpread({}, column), {}, {
983
- tableId: column.tableId || column.id || item.id,
984
- tableUuid: column.tableUuid || item.tableUuid,
985
- datasourceId: column.datasourceId || item.datasourceId || ''
979
+ tableId: subQueryTable.id || item.id || column.tableId || column.id,
980
+ tableUuid: subQueryTable.tableUuid || item.tableUuid || column.tableUuid,
981
+ tableName: subQueryTable.name || item.name || columnMeta.tableName || '',
982
+ tableAlias: subQueryTable.alias || item.alias || columnMeta.tableAlias || '',
983
+ datasourceId: subQueryTable.datasourceId || item.datasourceId || column.datasourceId || '',
984
+ datasourceName: subQueryTable.datasourceName || item.datasourceName || column.datasourceName || ''
986
985
  });
987
986
  });
988
987
  }).map(function (v) {
@@ -990,15 +989,10 @@ var JoinData = function JoinData(props) {
990
989
  select: false
991
990
  });
992
991
  });
993
- newMeta[index].columns = newColumns.map(function (newCol) {
994
- var existingCol = newMeta[index].columns.find(function (oldCol) {
995
- return isSameColumnByIdFirst(oldCol, newCol);
996
- });
997
- var _column = existingCol ? existingCol : newCol;
998
- _column.select = store.isSelectFields || _column.select;
999
- return _column;
1000
- });
992
+ var oldColumns = newMeta[index].columns;
993
+ newMeta[index].columns = mergeSubQueryColumns(newColumns, oldColumns, store.isSelectFields);
1001
994
  initExpressions(newMeta);
995
+ newMeta = syncSubQueryFieldReferences(newMeta, newMeta[index].table2, newMeta[index].columns, oldColumns);
1002
996
  store.setMeta(newMeta, groupIndex, {
1003
997
  obj: newList,
1004
998
  type: ChangeType.subQuery
@@ -12,12 +12,11 @@ import { __ } from '../../locale';
12
12
  import { ChangeType } from '../../store/types';
13
13
  import { Tooltip, Button, Modal, Modal2, Input, Toast } from '@gingkoo/pandora';
14
14
  import Metabase from '../../index';
15
- import { uuidv4, getAlias, isSameColumnByIdFirst, isSameTableByIdFirst } from '../../utils/helper';
15
+ import { uuidv4, getAlias, isSameTableByIdFirst } from '../../utils/helper';
16
16
  import { getTopLayerZIndex } from '../../utils/helper-dom';
17
- import { changeTableAlias, getSubColumns, isValidSQLAlias, isExistsError } from '../../utils';
17
+ import { changeTableAlias, getSubColumns, mergeSubQueryColumns, isValidSQLAlias, isExistsError, syncSubQueryFieldReferences } from '../../utils';
18
18
  import { RelatedWork } from '@gingkoo/pandora-icons';
19
19
  import cloneDeep from 'lodash/cloneDeep';
20
- import isEqual from 'lodash/isEqual';
21
20
  import ItemName from './components/item-name';
22
21
  import { SelectTable, SelectColumn } from '../dialog';
23
22
  import Wrapper from './components/Wrapper';
@@ -189,7 +188,6 @@ var TableData = function TableData(props) {
189
188
  var childModalZIndex = getTopLayerZIndex() + 1;
190
189
  var newMetaList = store.metaList[groupIndex].list.slice()[0];
191
190
  var newMeta = store.metaList[groupIndex].list.slice();
192
- var oldList = cloneDeep(newMetaList.subquery);
193
191
  var _toolbar = subToolbar || toolbar;
194
192
  var o = Modal2.openModal({
195
193
  zIndex: childModalZIndex,
@@ -204,22 +202,23 @@ var TableData = function TableData(props) {
204
202
  value: cloneDeep(val),
205
203
  onOk: function onOk(newList) {
206
204
  try {
207
- if (isEqual(newList, oldList)) {
208
- o.close();
209
- return;
210
- }
211
205
  newMetaList.subquery = newList;
212
206
  newMetaList.table = _objectSpread(_objectSpread({}, newList[0].table), {}, {
213
207
  alias: newMetaList.table.alias || getAlias(newList[0].table.name, newMeta),
214
208
  tableUuid: newMetaList.table.tableUuid || uuidv4('table')
215
209
  });
216
210
  var items = getSubColumns(newList);
211
+ var subQueryTable = newMetaList.table;
217
212
  var newColumns = items.flatMap(function (item) {
218
213
  return item.columns.map(function (column) {
214
+ var columnMeta = column;
219
215
  return _objectSpread(_objectSpread({}, column), {}, {
220
- tableId: column.tableId || column.id || item.id,
221
- tableUuid: column.tableUuid || item.tableUuid,
222
- datasourceId: column.datasourceId || item.datasourceId || ''
216
+ tableId: subQueryTable.id || item.id || column.tableId || column.id,
217
+ tableUuid: subQueryTable.tableUuid || item.tableUuid || column.tableUuid,
218
+ tableName: subQueryTable.name || item.name || columnMeta.tableName || '',
219
+ tableAlias: subQueryTable.alias || item.alias || columnMeta.tableAlias || '',
220
+ datasourceId: subQueryTable.datasourceId || item.datasourceId || column.datasourceId || '',
221
+ datasourceName: subQueryTable.datasourceName || item.datasourceName || column.datasourceName || ''
223
222
  });
224
223
  });
225
224
  }).map(function (v) {
@@ -227,16 +226,11 @@ var TableData = function TableData(props) {
227
226
  select: false
228
227
  });
229
228
  });
230
- newMetaList.columns = newColumns.map(function (newCol) {
231
- var existingCol = newMetaList.columns.find(function (oldCol) {
232
- return isSameColumnByIdFirst(oldCol, newCol);
233
- });
234
- var _column = existingCol ? existingCol : newCol;
235
- _column.select = store.isSelectFields || _column.select;
236
- return _column;
237
- });
229
+ var oldColumns = newMetaList.columns;
230
+ newMetaList.columns = mergeSubQueryColumns(newColumns, oldColumns, store.isSelectFields);
238
231
  var newMetas = store.metaList[groupIndex].list.slice();
239
232
  newMetas[0] = newMetaList;
233
+ newMetas = syncSubQueryFieldReferences(newMetas, newMetaList.table, newMetaList.columns, oldColumns);
240
234
  store.setMeta(newMetas, groupIndex, {
241
235
  obj: newList,
242
236
  type: ChangeType.subQuery
package/lib/es/utils.d.ts CHANGED
@@ -21,6 +21,8 @@ interface HelperResultType {
21
21
  };
22
22
  }
23
23
  export declare const getHelper: (list: MetaListType[], item: MetaListType) => HelperResultType;
24
+ export declare const mergeSubQueryColumns: (columns: MetaData_ColumnsType[], oldColumns?: MetaData_ColumnsType[], isSelectFields?: boolean) => MetaData_ColumnsType[];
25
+ export declare const syncSubQueryFieldReferences: (list: MetaListType[], table: MetaData_TableType, columns: MetaData_ColumnsType[], oldColumns?: MetaData_ColumnsType[]) => MetaListType[];
24
26
  export declare const getSubColumns: (metaList: any) => DataType[];
25
27
  export declare function isValidSQLAlias(str: string): boolean;
26
28
  export declare const changeTableAlias: (list: MetaListType[] | [], curObj: Pick<MetaData_TableType, "tableUuid" | "alias">) => MetaListType[];
@@ -31,7 +33,7 @@ export declare const getObjTem: (arr: any[]) => any;
31
33
  export declare const patchData: (metas: MetaListType[], constantList?: any, formulaTemplates?: any) => MetaListType[];
32
34
  export declare function reassembleByUnion(target?: any[]): any[];
33
35
  export declare const buildSqlQuery: (data: MetaListType[] | undefined, type: string) => string;
34
- export declare const isError: (item: AtomsItem | AtomsItem[], data: DataType[]) => boolean;
36
+ export declare const isError: (item: AtomsItem | AtomsItem[], data?: DataType[]) => boolean;
35
37
  export declare function containsSubset(root: unknown, target: Record<string, unknown>): boolean;
36
38
  export declare const isExistsError: (meta: any[], errorList: any[]) => boolean;
37
39
  export declare const changeCopyField: (items: AtomsItem[], data: any[]) => AtomsItem[];
package/lib/es/utils.js CHANGED
@@ -8,7 +8,7 @@ var _excluded = ["list"];
8
8
  import { __, isEn } from './locale';
9
9
  import { TypeEnum, SQL_COLUMN_TYPE } from './store/enum';
10
10
  import { AtomsTypeEnum } from './store/types';
11
- import { summarizeByToSql, summarizeToSql } from './store/helper';
11
+ import { SummarizeAlias, summarizeByToSql, summarizeToSql } from './store/helper';
12
12
  import { transformSql } from './utils/transformSql';
13
13
  import { isSameColumnByIdFirst, isSameTableByIdFirst, uuidv4 } from './utils/helper';
14
14
  import cloneDeep from 'lodash/cloneDeep';
@@ -36,19 +36,42 @@ export var getMetaTabels = function getMetaTabels(data) {
36
36
  });
37
37
  return obj;
38
38
  };
39
+ var SUB_QUERY_OUTPUT_COLUMN_KEY = '__subQueryOutputColumn';
40
+ var isSubQueryOutputColumn = function isSubQueryOutputColumn(column) {
41
+ return Boolean((column === null || column === void 0 ? void 0 : column.summarizeType) && (column === null || column === void 0 ? void 0 : column[SUB_QUERY_OUTPUT_COLUMN_KEY]));
42
+ };
39
43
  export var getColumnsTables = function getColumnsTables(data) {
40
44
  var obj = {};
41
45
  data.map(function (v) {
42
46
  var _v$datasourceId = v.datasourceId,
43
47
  datasourceId = _v$datasourceId === void 0 ? 'source' : _v$datasourceId,
48
+ _v$datasourceName = v.datasourceName,
49
+ datasourceName = _v$datasourceName === void 0 ? '' : _v$datasourceName,
44
50
  _v$id = v.id,
45
51
  id = _v$id === void 0 ? '' : _v$id,
46
52
  _v$alias = v.alias,
47
53
  alias = _v$alias === void 0 ? '' : _v$alias,
54
+ _v$name = v.name,
55
+ name = _v$name === void 0 ? '' : _v$name,
56
+ _v$name_zh = v.name_zh,
57
+ name_zh = _v$name_zh === void 0 ? '' : _v$name_zh,
58
+ _v$tableUuid = v.tableUuid,
59
+ tableUuid = _v$tableUuid === void 0 ? '' : _v$tableUuid,
48
60
  _v$columns = v.columns,
49
61
  columns = _v$columns === void 0 ? [] : _v$columns;
50
62
  var _datasourceId = datasourceId || 'source';
51
- obj[_datasourceId] = _objectSpread(_objectSpread({}, obj[_datasourceId]), {}, _defineProperty({}, id + alias, columns));
63
+ obj[_datasourceId] = _objectSpread(_objectSpread({}, obj[_datasourceId]), {}, _defineProperty({}, id + alias, columns.map(function (column) {
64
+ if (!isSubQueryOutputColumn(column)) return column;
65
+ return _objectSpread(_objectSpread({}, column), {}, {
66
+ datasourceId: _datasourceId,
67
+ datasourceName: datasourceName || column.datasourceName || '',
68
+ tableId: id || column.tableId || '',
69
+ tableName: name || column.tableName || column.table || '',
70
+ tableNameZh: name_zh || column.tableNameZh || '',
71
+ tableAlias: alias || column.tableAlias || '',
72
+ tableUuid: tableUuid || column.tableUuid || ''
73
+ });
74
+ })));
52
75
  });
53
76
  return obj;
54
77
  };
@@ -103,6 +126,240 @@ export var getHelper = function getHelper(list, item) {
103
126
  nextItem: nextItem
104
127
  };
105
128
  };
129
+ var getSummarizeOutputName = function getSummarizeOutputName(record) {
130
+ return record.fieldAlias || record.name || record.quotes || '';
131
+ };
132
+ var normalizeSubQueryColumn = function normalizeSubQueryColumn(column) {
133
+ if (!(column !== null && column !== void 0 && column.summarizeType)) return column;
134
+ var outputName = getSummarizeOutputName(column);
135
+ return _objectSpread(_objectSpread({}, column), {}, {
136
+ name: outputName,
137
+ name_zh: column.name_zh || column.quotes || '',
138
+ id: column.id || column.fieldId || outputName,
139
+ realName: column.realName || column.name || '',
140
+ fieldAlias: ''
141
+ });
142
+ };
143
+ var getOuterSubQueryFieldAlias = function getOuterSubQueryFieldAlias(existingCol, newCol) {
144
+ var existingAlias = (existingCol === null || existingCol === void 0 ? void 0 : existingCol.fieldAlias) || '';
145
+ if (!existingAlias) return '';
146
+ var oldName = (existingCol === null || existingCol === void 0 ? void 0 : existingCol.name) || '';
147
+ var newName = (newCol === null || newCol === void 0 ? void 0 : newCol.name) || '';
148
+ if (existingAlias === oldName || existingAlias === newName) return '';
149
+ return existingAlias;
150
+ };
151
+ var getSyncedSubQueryFieldAlias = function getSyncedSubQueryFieldAlias(item, matchedColumn) {
152
+ var columnAlias = matchedColumn.fieldAlias || '';
153
+ if (columnAlias) return columnAlias;
154
+ var existingAlias = item.fieldAlias || '';
155
+ if (!existingAlias) return '';
156
+ var oldName = item.fieldName || '';
157
+ var newName = matchedColumn.name || '';
158
+ if (existingAlias === oldName || existingAlias === newName) return '';
159
+ return existingAlias;
160
+ };
161
+ var getSubQueryOutputIdentity = function getSubQueryOutputIdentity(column) {
162
+ var _column$sql$split;
163
+ if (!(column !== null && column !== void 0 && column.summarizeType)) return '';
164
+ var sqlBase = typeof column.sql === 'string' ? ((_column$sql$split = column.sql.split(/\s+AS\s+/i)) === null || _column$sql$split === void 0 || (_column$sql$split = _column$sql$split[0]) === null || _column$sql$split === void 0 ? void 0 : _column$sql$split.trim()) || '' : '';
165
+ var identityParts = [column.condition, column.fieldId, sqlBase || column.realName].filter(Boolean);
166
+ if (!identityParts.length) return '';
167
+ return [column.summarizeType].concat(_toConsumableArray(identityParts)).join('|');
168
+ };
169
+ var isSameSubQueryOutputColumn = function isSameSubQueryOutputColumn(oldCol, newCol) {
170
+ var oldIdentity = getSubQueryOutputIdentity(oldCol);
171
+ var newIdentity = getSubQueryOutputIdentity(newCol);
172
+ return Boolean(oldIdentity && newIdentity && oldIdentity === newIdentity);
173
+ };
174
+ export var mergeSubQueryColumns = function mergeSubQueryColumns(columns) {
175
+ var oldColumns = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
176
+ var isSelectFields = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
177
+ return columns.map(function (newCol) {
178
+ var newColumn = newCol;
179
+ var existingCol = oldColumns.find(function (oldCol) {
180
+ var oldColumn = oldCol;
181
+ if (oldColumn.fieldUuid && newColumn.fieldUuid) {
182
+ return oldColumn.fieldUuid === newColumn.fieldUuid;
183
+ }
184
+ var oldFieldId = oldColumn.fieldId || oldColumn.id;
185
+ var newFieldId = newColumn.fieldId || newColumn.id;
186
+ if (oldFieldId && newFieldId) {
187
+ return oldFieldId === newFieldId;
188
+ }
189
+ if (isSameSubQueryOutputColumn(oldCol, newCol)) {
190
+ return true;
191
+ }
192
+ return isSameColumnByIdFirst(oldCol, newCol);
193
+ });
194
+ var nextCol = _objectSpread(_objectSpread(_objectSpread({}, existingCol || {}), newCol), {}, {
195
+ name_zh: existingCol ? existingCol.name_zh || '' : newColumn.name_zh || '',
196
+ fieldAlias: getOuterSubQueryFieldAlias(existingCol, newCol),
197
+ fieldUuid: newCol.fieldUuid || (existingCol === null || existingCol === void 0 ? void 0 : existingCol.fieldUuid) || uuidv4('field'),
198
+ select: isSelectFields || Boolean(existingCol === null || existingCol === void 0 ? void 0 : existingCol.select) || Boolean(newCol.select)
199
+ }, newColumn.summarizeType ? _defineProperty({}, SUB_QUERY_OUTPUT_COLUMN_KEY, true) : {});
200
+ return nextCol;
201
+ });
202
+ };
203
+ var getSubQueryMatchedColumn = function getSubQueryMatchedColumn(field, table, columns) {
204
+ var oldColumns = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : [];
205
+ var fieldTable = {
206
+ datasourceId: field.datasourceId,
207
+ id: field.tableId,
208
+ name: field.tableName,
209
+ alias: field.tableAlias,
210
+ tableUuid: field.tableUuid
211
+ };
212
+ if (!isSameTableByIdFirst(table, fieldTable)) {
213
+ return null;
214
+ }
215
+ var normalizeColumnTable = function normalizeColumnTable(column) {
216
+ return _objectSpread(_objectSpread({}, column), {}, {
217
+ datasourceId: table.datasourceId || '',
218
+ tableId: table.id || '',
219
+ tableName: table.name || '',
220
+ tableAlias: table.alias || '',
221
+ tableUuid: table.tableUuid || ''
222
+ });
223
+ };
224
+ var matchedColumn = columns.find(function (column) {
225
+ return isSameColumnByIdFirst(normalizeColumnTable(column), field);
226
+ });
227
+ if (matchedColumn) return matchedColumn;
228
+ var oldMatchedColumn = oldColumns.find(function (column) {
229
+ return isSameColumnByIdFirst(normalizeColumnTable(column), field);
230
+ });
231
+ if (!oldMatchedColumn) return null;
232
+ return columns.find(function (column) {
233
+ return isSameSubQueryOutputColumn(oldMatchedColumn, column);
234
+ }) || columns[oldColumns.indexOf(oldMatchedColumn)] || null;
235
+ };
236
+ var _syncSubQueryFieldItems = function syncSubQueryFieldItems() {
237
+ var items = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
238
+ var table = arguments.length > 1 ? arguments[1] : undefined;
239
+ var columns = arguments.length > 2 ? arguments[2] : undefined;
240
+ var oldColumns = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : [];
241
+ return items.map(function (item) {
242
+ var nextItem;
243
+ if (item.type === AtomsTypeEnum.FIELD) {
244
+ var matchedColumn = getSubQueryMatchedColumn(item, table, columns, oldColumns);
245
+ if (!matchedColumn) return item;
246
+ nextItem = _objectSpread(_objectSpread(_objectSpread({}, item), {}, {
247
+ tableName: table.name || item.tableName || '',
248
+ tableNameZh: table.name_zh || item.tableNameZh || '',
249
+ tableId: table.id || item.tableId || '',
250
+ tableAlias: table.alias || item.tableAlias || '',
251
+ tableUuid: table.tableUuid || item.tableUuid || '',
252
+ datasourceName: table.datasourceName || item.datasourceName || '',
253
+ datasourceId: table.datasourceId || item.datasourceId || ''
254
+ }, 'name' in item ? {
255
+ name: matchedColumn.name || item.name || ''
256
+ } : {}), {}, {
257
+ fieldName: matchedColumn.name || item.fieldName || '',
258
+ fieldNameZh: item.fieldNameZh || matchedColumn.name_zh || '',
259
+ fieldAlias: getSyncedSubQueryFieldAlias(item, matchedColumn),
260
+ fieldId: matchedColumn.id || matchedColumn.fieldId || item.fieldId || '',
261
+ fieldUuid: matchedColumn.fieldUuid || item.fieldUuid || ''
262
+ });
263
+ } else if (item.type === AtomsTypeEnum.JOIN_DEFAULT || item.type === AtomsTypeEnum.EXPRESSION) {
264
+ nextItem = _objectSpread(_objectSpread({}, item), {}, {
265
+ lhs: _syncSubQueryFieldItems(item.lhs, table, columns, oldColumns),
266
+ rhs: _syncSubQueryFieldItems(item.rhs, table, columns, oldColumns)
267
+ });
268
+ } else if (item.type === AtomsTypeEnum.FORMULA) {
269
+ nextItem = _objectSpread(_objectSpread({}, item), {}, {
270
+ args: _syncSubQueryFieldItems(item.args || [], table, columns, oldColumns)
271
+ });
272
+ } else if (item.type === AtomsTypeEnum.COLLECTION) {
273
+ nextItem = _objectSpread(_objectSpread({}, item), {}, {
274
+ list: _syncSubQueryFieldItems(item.list || [], table, columns, oldColumns)
275
+ });
276
+ } else if (item.type === AtomsTypeEnum.CASE_WHEN) {
277
+ nextItem = _objectSpread(_objectSpread({}, item), {}, {
278
+ caseAtoms: _syncSubQueryFieldItems(item.caseAtoms || [], table, columns, oldColumns),
279
+ whenClauses: (item.whenClauses || []).map(function (clause) {
280
+ return _objectSpread(_objectSpread({}, clause), {}, {
281
+ whenAtoms: _syncSubQueryFieldItems(clause.whenAtoms || [], table, columns, oldColumns),
282
+ thenAtoms: _syncSubQueryFieldItems(clause.thenAtoms || [], table, columns, oldColumns)
283
+ });
284
+ }),
285
+ elseAtoms: _syncSubQueryFieldItems(item.elseAtoms || [], table, columns, oldColumns)
286
+ });
287
+ } else if (item.type === AtomsTypeEnum.AND_OR) {
288
+ var hasBinarySides = Array.isArray(item.leftAtoms) || Array.isArray(item.rightAtoms);
289
+ nextItem = _objectSpread(_objectSpread({}, item), hasBinarySides ? {
290
+ atoms: undefined,
291
+ leftAtoms: _syncSubQueryFieldItems(item.leftAtoms || [], table, columns, oldColumns),
292
+ rightAtoms: _syncSubQueryFieldItems(item.rightAtoms || [], table, columns, oldColumns)
293
+ } : {
294
+ atoms: _syncSubQueryFieldItems(item.atoms || [], table, columns, oldColumns)
295
+ });
296
+ } else {
297
+ nextItem = item;
298
+ }
299
+ return syncAtomQuotes(nextItem);
300
+ });
301
+ };
302
+ export var syncSubQueryFieldReferences = function syncSubQueryFieldReferences(list, table, columns) {
303
+ var oldColumns = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : [];
304
+ return cloneDeep(list).map(function (meta) {
305
+ var _meta$expressions, _meta$filter, _meta$sort;
306
+ if (meta.type === TypeEnum.joinData && (_meta$expressions = meta.expressions) !== null && _meta$expressions !== void 0 && _meta$expressions.length) {
307
+ return _objectSpread(_objectSpread({}, meta), {}, {
308
+ expressions: _syncSubQueryFieldItems(meta.expressions, table, columns, oldColumns)
309
+ });
310
+ }
311
+ if (meta.type === TypeEnum.customColumn) {
312
+ return _objectSpread(_objectSpread({}, meta), {}, {
313
+ customColumn: meta.customColumn.map(function (item) {
314
+ var _item$formulaList;
315
+ return _objectSpread(_objectSpread({}, item), {}, {
316
+ formulaList: (_item$formulaList = item.formulaList) !== null && _item$formulaList !== void 0 && _item$formulaList.length ? _syncSubQueryFieldItems(item.formulaList, table, columns, oldColumns) : item.formulaList
317
+ });
318
+ })
319
+ });
320
+ }
321
+ if (meta.type === TypeEnum.summarize) {
322
+ var nextMeta = _objectSpread(_objectSpread({}, meta), {}, {
323
+ group: meta.group.map(function (group) {
324
+ var _group$atoms;
325
+ var atoms = (_group$atoms = group.atoms) !== null && _group$atoms !== void 0 && _group$atoms.length ? _syncSubQueryFieldItems(group.atoms, table, columns, oldColumns) : group.atoms;
326
+ var nextGroup = _objectSpread(_objectSpread({}, group), {}, {
327
+ atoms: atoms
328
+ });
329
+ return atoms !== null && atoms !== void 0 && atoms.length ? _objectSpread(_objectSpread({}, nextGroup), {}, {
330
+ sql: summarizeToSql(meta.group, nextGroup).sql
331
+ }) : nextGroup;
332
+ }),
333
+ by: meta.by.map(function (by) {
334
+ var _by$atoms;
335
+ var atoms = (_by$atoms = by.atoms) !== null && _by$atoms !== void 0 && _by$atoms.length ? _syncSubQueryFieldItems(by.atoms, table, columns, oldColumns) : by.atoms;
336
+ var nextBy = _objectSpread(_objectSpread({}, by), {}, {
337
+ atoms: atoms
338
+ });
339
+ return atoms !== null && atoms !== void 0 && atoms.length ? _objectSpread(_objectSpread({}, nextBy), {}, {
340
+ sql: summarizeByToSql(nextBy)
341
+ }) : nextBy;
342
+ })
343
+ });
344
+ return nextMeta;
345
+ }
346
+ if (meta.type === TypeEnum.filter && (_meta$filter = meta.filter) !== null && _meta$filter !== void 0 && _meta$filter.length) {
347
+ return _objectSpread(_objectSpread({}, meta), {}, {
348
+ filter: _syncSubQueryFieldItems(meta.filter, table, columns, oldColumns)
349
+ });
350
+ }
351
+ if (meta.type === TypeEnum.sort && (_meta$sort = meta.sort) !== null && _meta$sort !== void 0 && _meta$sort.length) {
352
+ return _objectSpread(_objectSpread({}, meta), {}, {
353
+ sort: meta.sort.map(function (sort) {
354
+ return _objectSpread(_objectSpread({}, sort), {}, {
355
+ expression: _syncSubQueryFieldItems(sort.expression, table, columns, oldColumns)
356
+ });
357
+ })
358
+ });
359
+ }
360
+ return meta;
361
+ });
362
+ };
106
363
  export var getSubColumns = function getSubColumns(metaList) {
107
364
  var obj = {
108
365
  metaKey: -1,
@@ -130,29 +387,25 @@ export var getSubColumns = function getSubColumns(metaList) {
130
387
  if (prevGroupBy !== null && prevGroupBy !== void 0 && (_prevGroupBy$group = prevGroupBy.group) !== null && _prevGroupBy$group !== void 0 && _prevGroupBy$group.length) {
131
388
  _data.columns = _data.columns.concat(prevGroupBy.group.map(function (v) {
132
389
  var _v$sql;
133
- return _objectSpread(_objectSpread({}, v), {}, {
134
- name: v.name || v.quotes,
135
- name_zh: v.name_zh || v.quotes,
390
+ return normalizeSubQueryColumn(_objectSpread(_objectSpread({}, v), {}, {
136
391
  id: v.id || v.fieldId,
137
392
  realName: ((_v$sql = v.sql) === null || _v$sql === void 0 || (_v$sql = _v$sql.split(' AS ')) === null || _v$sql === void 0 ? void 0 : _v$sql[1]) || '',
138
393
  database_type: (v === null || v === void 0 ? void 0 : v.database_type) || SQL_COLUMN_TYPE.FLOAT,
139
394
  special_type: '',
140
395
  select: true
141
- });
396
+ }));
142
397
  }));
143
398
  }
144
399
  if (prevGroupBy !== null && prevGroupBy !== void 0 && (_prevGroupBy$by = prevGroupBy.by) !== null && _prevGroupBy$by !== void 0 && _prevGroupBy$by.length) {
145
400
  _data.columns = _data.columns.concat(prevGroupBy.by.map(function (v) {
146
401
  var _v$sql2;
147
- return _objectSpread(_objectSpread({}, v), {}, {
148
- name: v.name || v.quotes,
149
- name_zh: v.name_zh || v.quotes,
402
+ return normalizeSubQueryColumn(_objectSpread(_objectSpread({}, v), {}, {
150
403
  id: v.id || v.fieldId,
151
404
  realName: ((_v$sql2 = v.sql) === null || _v$sql2 === void 0 || (_v$sql2 = _v$sql2.split(' AS ')) === null || _v$sql2 === void 0 ? void 0 : _v$sql2[1]) || '',
152
405
  database_type: (v === null || v === void 0 ? void 0 : v.database_type) || SQL_COLUMN_TYPE.FLOAT,
153
406
  special_type: '',
154
407
  select: true
155
- });
408
+ }));
156
409
  }));
157
410
  }
158
411
  data = [_data];
@@ -286,12 +539,12 @@ var getExpressionConditionText = function getExpressionConditionText(condition)
286
539
  var getSelectAtomText = function getSelectAtomText(item) {
287
540
  var displayField = item.displayField || 'value';
288
541
  var getOptionText = function getOptionText(value) {
289
- var _ref, _option$displayField;
542
+ var _ref2, _option$displayField;
290
543
  var option = (item.options || []).find(function (currentOption) {
291
544
  return currentOption.value === value;
292
545
  });
293
546
  if (!option) return value || '';
294
- return String((_ref = (_option$displayField = option[displayField]) !== null && _option$displayField !== void 0 ? _option$displayField : option.value) !== null && _ref !== void 0 ? _ref : '');
547
+ return String((_ref2 = (_option$displayField = option[displayField]) !== null && _option$displayField !== void 0 ? _option$displayField : option.value) !== null && _ref2 !== void 0 ? _ref2 : '');
295
548
  };
296
549
  if (Array.isArray(item.val)) {
297
550
  return item.val.map(function (currentValue) {
@@ -303,7 +556,10 @@ var getSelectAtomText = function getSelectAtomText(item) {
303
556
  var _getAtomDisplayText = function getAtomDisplayText(item) {
304
557
  if (!item) return '';
305
558
  if (item.type === AtomsTypeEnum.FIELD) {
306
- return item.fieldAlias || item.fieldName || '';
559
+ if (item.tableId === SummarizeAlias) {
560
+ return item.fieldAlias || item.fieldName || '';
561
+ }
562
+ return item.fieldName || item.fieldAlias || '';
307
563
  }
308
564
  if (item.type === AtomsTypeEnum.CASE_WHEN) {
309
565
  return buildCaseWhenQuotes(item);
@@ -533,7 +789,15 @@ var _changeAlias = function changeAlias(items, val, type) {
533
789
  nextItem.tableAlias = val.alias;
534
790
  }
535
791
  if (type === AliasType.field && isAliasTargetField(v, val)) {
536
- nextItem.fieldAlias = val.alias;
792
+ if (val.aliasAsFieldName && !isSameAliasTargetTable(v, val)) {
793
+ nextItem.fieldName = val.alias;
794
+ nextItem.fieldAlias = '';
795
+ if ('name' in nextItem) {
796
+ nextItem.name = val.alias;
797
+ }
798
+ } else {
799
+ nextItem.fieldAlias = val.alias;
800
+ }
537
801
  }
538
802
  } else if (v.type === AtomsTypeEnum.EXISTS || v.type === AtomsTypeEnum.NOT_EXISTS) {
539
803
  nextItem = _objectSpread({}, v);
@@ -630,8 +894,8 @@ export var changeTableAlias = function changeTableAlias(list, curObj) {
630
894
  }
631
895
  if (v.type === TypeEnum.customColumn) {
632
896
  v.customColumn.map(function (item) {
633
- var _item$formulaList;
634
- if (item !== null && item !== void 0 && item.formulaList && ((_item$formulaList = item.formulaList) === null || _item$formulaList === void 0 ? void 0 : _item$formulaList.length) > 0) {
897
+ var _item$formulaList2;
898
+ if (item !== null && item !== void 0 && item.formulaList && ((_item$formulaList2 = item.formulaList) === null || _item$formulaList2 === void 0 ? void 0 : _item$formulaList2.length) > 0) {
635
899
  item.formulaList = _changeAlias(item.formulaList, {
636
900
  uuid: tableUuid,
637
901
  alias: alias
@@ -715,7 +979,8 @@ export var changeFieldAlias = function changeFieldAlias(list, curObj) {
715
979
  tableId: tableId || (firstData === null || firstData === void 0 || (_firstData$table = firstData.table) === null || _firstData$table === void 0 ? void 0 : _firstData$table.id),
716
980
  tableName: table || (firstData === null || firstData === void 0 || (_firstData$table2 = firstData.table) === null || _firstData$table2 === void 0 ? void 0 : _firstData$table2.name),
717
981
  tableUuid: tableUuid || (firstData === null || firstData === void 0 || (_firstData$table3 = firstData.table) === null || _firstData$table3 === void 0 ? void 0 : _firstData$table3.tableUuid),
718
- datasourceId: datasourceId || (firstData === null || firstData === void 0 || (_firstData$table4 = firstData.table) === null || _firstData$table4 === void 0 ? void 0 : _firstData$table4.datasourceId)
982
+ datasourceId: datasourceId || (firstData === null || firstData === void 0 || (_firstData$table4 = firstData.table) === null || _firstData$table4 === void 0 ? void 0 : _firstData$table4.datasourceId),
983
+ aliasAsFieldName: Boolean(curObj.summarizeType)
719
984
  };
720
985
  var newList = cloneDeep(list);
721
986
  return (newList === null || newList === void 0 ? void 0 : newList.map(function (v) {
@@ -966,7 +1231,17 @@ export var buildSqlQuery = function buildSqlQuery() {
966
1231
  sql = _transformSql.sql;
967
1232
  return "".concat(typeName, "(").concat(sql, ") ");
968
1233
  };
969
- var _isError = function isError(item, data) {
1234
+ var hasLoadedColumnData = function hasLoadedColumnData() {
1235
+ var data = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
1236
+ return data.some(function (table) {
1237
+ return Array.isArray(table === null || table === void 0 ? void 0 : table.columns) && table.columns.length > 0;
1238
+ });
1239
+ };
1240
+ var _isError = function isError(item) {
1241
+ var data = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
1242
+ if (!hasLoadedColumnData(data)) {
1243
+ return false;
1244
+ }
970
1245
  var tables = getColumnsTables(data);
971
1246
  if (!item) {
972
1247
  return false;
@@ -993,11 +1268,12 @@ var _isError = function isError(item, data) {
993
1268
  }
994
1269
  if (_datasourceId === 'source') {
995
1270
  var _tables$_datasourceId;
996
- if (!(tables !== null && tables !== void 0 && (_tables$_datasourceId = tables[_datasourceId]) !== null && _tables$_datasourceId !== void 0 && _tables$_datasourceId[tableId + tableAlias])) {
1271
+ var fields = tables === null || tables === void 0 || (_tables$_datasourceId = tables[_datasourceId]) === null || _tables$_datasourceId === void 0 ? void 0 : _tables$_datasourceId[tableId + tableAlias];
1272
+ if (!fields) {
997
1273
  return true;
1274
+ } else if (!fields.length) {
1275
+ return false;
998
1276
  } else {
999
- var _tables$_datasourceId2;
1000
- var fields = (tables === null || tables === void 0 || (_tables$_datasourceId2 = tables[_datasourceId]) === null || _tables$_datasourceId2 === void 0 ? void 0 : _tables$_datasourceId2[tableId + tableAlias]) || [];
1001
1277
  return fields.every(function (field) {
1002
1278
  return !isSameColumnByIdFirst(_objectSpread(_objectSpread({}, field), {}, {
1003
1279
  datasourceId: _datasourceId,
@@ -1006,13 +1282,17 @@ var _isError = function isError(item, data) {
1006
1282
  });
1007
1283
  }
1008
1284
  } else {
1009
- var _tables$_datasourceId3, _tables$_datasourceId4;
1010
- var hasField = (_tables$_datasourceId3 = tables === null || tables === void 0 || (_tables$_datasourceId4 = tables[_datasourceId]) === null || _tables$_datasourceId4 === void 0 || (_tables$_datasourceId4 = _tables$_datasourceId4[tableId + tableAlias]) === null || _tables$_datasourceId4 === void 0 ? void 0 : _tables$_datasourceId4.some(function (v) {
1285
+ var _tables$_datasourceId2, _fields$some;
1286
+ var _fields = tables === null || tables === void 0 || (_tables$_datasourceId2 = tables[_datasourceId]) === null || _tables$_datasourceId2 === void 0 ? void 0 : _tables$_datasourceId2[tableId + tableAlias];
1287
+ if (_fields && !_fields.length) {
1288
+ return false;
1289
+ }
1290
+ var hasField = (_fields$some = _fields === null || _fields === void 0 ? void 0 : _fields.some(function (v) {
1011
1291
  return isSameColumnByIdFirst(_objectSpread(_objectSpread({}, v), {}, {
1012
1292
  datasourceId: _datasourceId,
1013
1293
  tableId: tableId
1014
1294
  }), item);
1015
- })) !== null && _tables$_datasourceId3 !== void 0 ? _tables$_datasourceId3 : false;
1295
+ })) !== null && _fields$some !== void 0 ? _fields$some : false;
1016
1296
  return !hasField;
1017
1297
  }
1018
1298
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gingkoo/pandora-metabase",
3
- "version": "1.0.136",
3
+ "version": "1.0.137",
4
4
  "description": "",
5
5
  "main": "lib/es/index.js",
6
6
  "module": "lib/es/index.js",