You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@echarts.apache.org by sh...@apache.org on 2021/07/14 03:29:01 UTC
[echarts] branch dataset-perf updated: refact(data): fix type from
dataset may incorrect.
This is an automated email from the ASF dual-hosted git repository.
shenyi pushed a commit to branch dataset-perf
in repository https://gitbox.apache.org/repos/asf/echarts.git
The following commit(s) were added to refs/heads/dataset-perf by this push:
new 0349b87 refact(data): fix type from dataset may incorrect.
0349b87 is described below
commit 0349b87f03ba94dc153a2304de31d56c913ac690
Author: pissang <bm...@gmail.com>
AuthorDate: Wed Jul 14 11:27:43 2021 +0800
refact(data): fix type from dataset may incorrect.
---
src/chart/helper/createSeriesDataFromArray.ts | 6 +++---
src/data/DataStorage.ts | 21 +++++++++------------
src/data/SeriesData.ts | 2 +-
src/data/helper/createDimensions.ts | 11 ++++++++---
4 files changed, 21 insertions(+), 19 deletions(-)
diff --git a/src/chart/helper/createSeriesDataFromArray.ts b/src/chart/helper/createSeriesDataFromArray.ts
index b84bf0e..fa6a2fb 100644
--- a/src/chart/helper/createSeriesDataFromArray.ts
+++ b/src/chart/helper/createSeriesDataFromArray.ts
@@ -126,8 +126,8 @@ function createListFromArray(
const useEncodeDefaulter = opt.useEncodeDefaulter;
// Try to ignore unsed dimensions if sharing a high dimension datastorage
- // 10 is an experience value.
- const omitUnusedDimensions = isDataStorage(sourceOrStore) && sourceOrStore.getDimensionCount() > 10;
+ // 30 is an experience value.
+ const omitUnusedDimensions = isDataStorage(sourceOrStore) && sourceOrStore.getDimensionCount() > 30;
const encodeDefaulter = zrUtil.isFunction(useEncodeDefaulter)
? useEncodeDefaulter
: useEncodeDefaulter
@@ -151,7 +151,7 @@ function createListFromArray(
if (omitUnusedDimensions) {
// sourceOrStore
- if (!(sourceOrStore as DataStorage).syncDimensionTypes(dimInfoList)) {
+ if (!(sourceOrStore as DataStorage).canUse(dimInfoList)) {
dimInfoList = createDimensions(sourceOrStore, zrUtil.extend(createDimensionOptions, {
omitUnusedDimensions: true
}));
diff --git a/src/data/DataStorage.ts b/src/data/DataStorage.ts
index 7bc93f6..01574ec 100644
--- a/src/data/DataStorage.ts
+++ b/src/data/DataStorage.ts
@@ -267,28 +267,25 @@ class DataStorage {
}
/**
- * If we using dataset.
- * Dimensions types may only know when we initializing series.
- * So we need to sync the type back to storage when initlializing SeriesData back
- *
- * Will return false if dimension type has been known and different from given.
- * We need to recreate a new data storage in this case.
+ * The dimension defines of series may be different with dataset. For example
+ * in dataset one dimension is not ordinal and being parsed to number.
+ * In this case we can't used it in series if we wan't to use it as ordinal. This storage needs to be discarded.
*/
- syncDimensionTypes(targetDims: DataStorageDimensionInfo[]) {
+ // TODO Can't sure what's frequency will this validate fail and cause datastorage recreate.
+ canUse(targetDims: DataStorageDimensionInfo[]) {
for (let i = 0; i < targetDims.length; i++) {
const targetDim = targetDims[i];
const selfDimIdx = this.getDimensionIndex(targetDim.name);
const selfDim = this._dimensions[selfDimIdx];
- const targetDimType = targetDim.type || 'float';
- if (!selfDim
+ if (
+ !selfDim
// Type is different
- || (selfDim.type && selfDim.type !== targetDimType)
- // ordinalMeta is differnt. Usually being on the different axis.
+ || selfDim.type || 'float' !== targetDim.type || 'float'
+ // ordinalMeta is different. Usually being on the different axis.
|| (selfDim.ordinalMeta && selfDim.ordinalMeta !== targetDim.ordinalMeta)
) {
return false;
}
- selfDim.type = targetDimType;
}
return true;
}
diff --git a/src/data/SeriesData.ts b/src/data/SeriesData.ts
index e2e5345..388a7f1 100644
--- a/src/data/SeriesData.ts
+++ b/src/data/SeriesData.ts
@@ -390,7 +390,7 @@ class SeriesData<
const dimensions = this.dimensions;
const dimensionInfos = map(dimensions, dimName => this._dimensionInfos[dimName]);
if (data instanceof DataStorage) {
- if (data.syncDimensionTypes(dimensionInfos)) {
+ if (data.canUse(dimensionInfos)) {
store = data;
}
// Sync failed
diff --git a/src/data/helper/createDimensions.ts b/src/data/helper/createDimensions.ts
index 3e69c40..ad5413d 100644
--- a/src/data/helper/createDimensions.ts
+++ b/src/data/helper/createDimensions.ts
@@ -29,7 +29,7 @@ import {
} from '../../util/types';
import SeriesData from '../SeriesData';
import DataDimensionInfo from '../DataDimensionInfo';
-import { clone, createHashMap, defaults, each, HashMap, isObject, isString, map } from 'zrender/src/core/util';
+import { createHashMap, defaults, each, extend, HashMap, isObject, isString, map } from 'zrender/src/core/util';
import OrdinalMeta from '../OrdinalMeta';
import { createSourceFromSeriesDataOption, isSourceInstance, Source } from '../Source';
import DataStorage, { CtorInt32Array } from '../DataStorage';
@@ -106,8 +106,9 @@ export default function createDimensions(
const coordDimNameMap = createHashMap<true, DimensionName>();
const result: DataDimensionInfo[] = [];
const omitUnusedDimensions = opt.omitUnusedDimensions;
+ const isUsingSourceDimensionsDef = dimsDef === source.dimensionsDefine;
// Try to cache the dimNameMap if the dimensionsDefine is from source.
- const canCacheDimNameMap = (dimsDef === source.dimensionsDefine && omitUnusedDimensions);
+ const canCacheDimNameMap = (isUsingSourceDimensionsDef && omitUnusedDimensions);
let dataDimNameMap = canCacheDimNameMap && inner(source).dimNameMap;
let needsUpdateDataDimNameMap = false;
if (!dataDimNameMap) {
@@ -210,7 +211,7 @@ export default function createDimensions(
coordDim = sysDimItem.name;
const ordinalMeta = sysDimItem.ordinalMeta;
sysDimItem.ordinalMeta = null;
- sysDimItem = clone(sysDimItem);
+ sysDimItem = extend({}, sysDimItem);
sysDimItem.ordinalMeta = ordinalMeta;
// `coordDimIndex` should not be set directly.
sysDimItemDimsDef = sysDimItem.dimsDef;
@@ -241,6 +242,10 @@ export default function createDimensions(
// Apply templates.
each(dataDims, function (resultDimIdx, coordDimIndex) {
const resultItem = getResultItem(resultDimIdx);
+ // Coordinate system has a higher priority on dim type than source.
+ if (isUsingSourceDimensionsDef && sysDimItem.type != null) {
+ resultItem.type = sysDimItem.type;
+ }
applyDim(defaults(resultItem, sysDimItem), coordDim, coordDimIndex);
if (resultItem.name == null && sysDimItemDimsDef) {
let sysDimItemDimsDefItem = sysDimItemDimsDef[coordDimIndex];
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@echarts.apache.org
For additional commands, e-mail: commits-help@echarts.apache.org