Github user sounakr commented on a diff in the pull request: https://github.com/apache/carbondata/pull/2417#discussion_r199081333 --- Diff: core/src/main/java/org/apache/carbondata/core/datastore/page/encoding/DefaultEncodingFactory.java --- @@ -58,16 +67,36 @@ public static EncodingFactory getInstance() { @Override public ColumnPageEncoder createEncoder(TableSpec.ColumnSpec columnSpec, ColumnPage inputPage) { // TODO: add log + ColumnPageEncoder pageEncoder = null; if (columnSpec instanceof TableSpec.MeasureSpec) { return createEncoderForMeasure(inputPage); - } else { - if (newWay) { - return createEncoderForDimension((TableSpec.DimensionSpec) columnSpec, inputPage); - } else { - assert columnSpec instanceof TableSpec.DimensionSpec; + } else if (columnSpec instanceof TableSpec.DimensionSpec) { + pageEncoder = createCodecForDimension((TableSpec.DimensionSpec) columnSpec, inputPage); + if (pageEncoder == null) { return createEncoderForDimensionLegacy((TableSpec.DimensionSpec) columnSpec); } } + return pageEncoder; + } + + private ColumnPageEncoder createCodecForDimension(TableSpec.DimensionSpec columnSpec, + ColumnPage inputPage) { + switch (columnSpec.getColumnType()) { + case PLAIN_VALUE: + if ((inputPage.getDataType() == DataTypes.BYTE) || (inputPage.getDataType() + == DataTypes.SHORT) || (inputPage.getDataType() == DataTypes.INT) || ( + inputPage.getDataType() == DataTypes.LONG)) { + return selectCodecByAlgorithmForIntegral(inputPage.getStatistics()).createEncoder(null); + } else if ((inputPage.getDataType() == DataTypes.FLOAT) || (inputPage.getDataType() + == DataTypes.DOUBLE)) { + return selectCodecByAlgorithmForFloating(inputPage.getStatistics()).createEncoder(null); + } else if (inputPage.getDataType() == DataTypes.STRING) { + // TODO. Currently let string go through legacy encoding. Later will change the encoding. + return null; + } + break; + } + return null; } private ColumnPageEncoder createEncoderForDimension(TableSpec.DimensionSpec columnSpec, --- End diff -- Done
---