This is an automated email from the ASF dual-hosted git repository. xiangweiwei pushed a commit to branch freemarker in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit d9130df67bc7145c4e75f2e71a9c9640f1345150 Author: Alima777 <[email protected]> AuthorDate: Wed Nov 2 16:26:49 2022 +0800 add linearFill.ftl template --- server/src/main/codegen/templates/linearFill.ftl | 112 +++++++++++++++++++++ .../process/fill/linear/DoubleLinearFill.java | 94 ----------------- .../process/fill/linear/FloatLinearFill.java | 94 ----------------- .../process/fill/linear/IntLinearFill.java | 94 ----------------- .../process/fill/linear/LongLinearFill.java | 94 ----------------- 5 files changed, 112 insertions(+), 376 deletions(-) diff --git a/server/src/main/codegen/templates/linearFill.ftl b/server/src/main/codegen/templates/linearFill.ftl new file mode 100644 index 0000000000..9a4adbb858 --- /dev/null +++ b/server/src/main/codegen/templates/linearFill.ftl @@ -0,0 +1,112 @@ +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ +<@pp.dropOutputFile /> + +<#list decimalDataTypes.types as type> + + <#assign className = "${type.dataType?cap_first}LinearFill"> + <@pp.changeOutputFile name="/org/apache/iotdb/db/mpp/execution/operator/process/fill/linear/${className}.java" /> +package org.apache.iotdb.db.mpp.execution.operator.process.fill.linear; + +import org.apache.iotdb.tsfile.read.common.block.column.Column; +import org.apache.iotdb.tsfile.read.common.block.column.${type.column}; +import org.apache.iotdb.tsfile.read.common.block.column.${type.column}Builder; + +import java.util.Optional; + +/* +* This class is generated using freemarker and the ${.template_name} template. +*/ +@SuppressWarnings("unused") +public class ${className} extends LinearFill { + + // previous value + private ${type.dataType} previousValue; + // next non-null value whose time is closest to the current TsBlock's endTime + private ${type.dataType} nextValue; + + private ${type.dataType} nextValueInCurrentColumn; + + @Override + void fillValue(Column column, int index, Object array) { + ((${type.dataType}[]) array)[index] = column.get${type.dataType?cap_first}(index); + } + + @Override + void fillValue(Object array, int index) { + ((${type.dataType}[]) array)[index] = getFilledValue(); + } + + @Override + Object createValueArray(int size) { + return new ${type.dataType}[size]; + } + + @Override + Column createNullValueColumn() { + return ${type.column}Builder.NULL_VALUE_BLOCK; + } + + @Override + Column createFilledValueColumn() { + ${type.dataType} filledValue = getFilledValue(); + return new ${type.column}(1, Optional.empty(), new ${type.dataType}[] {filledValue}); + } + + @Override + Column createFilledValueColumn(Object array, boolean[] isNull, boolean hasNullValue, int size) { + if (hasNullValue) { + return new ${type.column}(size, Optional.of(isNull), (${type.dataType}[]) array); + } else { + return new ${type.column}(size, Optional.empty(), (${type.dataType}[]) array); + } + } + + @Override + void updatePreviousValue(Column column, int index) { + previousValue = column.get${type.dataType?cap_first}(index); + } + + @Override + void updateNextValue(Column nextValueColumn, int index) { + this.nextValue = nextValueColumn.get${type.dataType?cap_first}(index); + } + + @Override + void updateNextValueInCurrentColumn(Column nextValueColumn, int index) { + this.nextValueInCurrentColumn = nextValueColumn.get${type.dataType?cap_first}(index); + } + + @Override + void updateNextValueInCurrentColumn() { + this.nextValueInCurrentColumn = this.nextValue; + } + + private ${type.dataType} getFilledValue() { + <#if type.dataType == "double"> + return (previousValue + nextValueInCurrentColumn) / 2.0; + <#elseif type.dataType == "float"> + return (previousValue + nextValueInCurrentColumn) / 2.0f; + <#else> + return (previousValue + nextValueInCurrentColumn) / 2; + </#if> + } +} + +</#list> \ No newline at end of file diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/execution/operator/process/fill/linear/DoubleLinearFill.java b/server/src/main/java/org/apache/iotdb/db/mpp/execution/operator/process/fill/linear/DoubleLinearFill.java deleted file mode 100644 index 52a228b1e4..0000000000 --- a/server/src/main/java/org/apache/iotdb/db/mpp/execution/operator/process/fill/linear/DoubleLinearFill.java +++ /dev/null @@ -1,94 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.apache.iotdb.db.mpp.execution.operator.process.fill.linear; - -import org.apache.iotdb.tsfile.read.common.block.column.Column; -import org.apache.iotdb.tsfile.read.common.block.column.DoubleColumn; -import org.apache.iotdb.tsfile.read.common.block.column.DoubleColumnBuilder; - -import java.util.Optional; - -public class DoubleLinearFill extends LinearFill { - - // previous value - private double previousValue; - // next non-null value whose time is closest to the current TsBlock's endTime - private double nextValue; - - private double nextValueInCurrentColumn; - - @Override - void fillValue(Column column, int index, Object array) { - ((double[]) array)[index] = column.getDouble(index); - } - - @Override - void fillValue(Object array, int index) { - ((double[]) array)[index] = getFilledValue(); - } - - @Override - Object createValueArray(int size) { - return new double[size]; - } - - @Override - Column createNullValueColumn() { - return DoubleColumnBuilder.NULL_VALUE_BLOCK; - } - - @Override - Column createFilledValueColumn() { - double filledValue = getFilledValue(); - return new DoubleColumn(1, Optional.empty(), new double[] {filledValue}); - } - - @Override - Column createFilledValueColumn(Object array, boolean[] isNull, boolean hasNullValue, int size) { - if (hasNullValue) { - return new DoubleColumn(size, Optional.of(isNull), (double[]) array); - } else { - return new DoubleColumn(size, Optional.empty(), (double[]) array); - } - } - - @Override - void updatePreviousValue(Column column, int index) { - previousValue = column.getDouble(index); - } - - @Override - void updateNextValue(Column nextValueColumn, int index) { - this.nextValue = nextValueColumn.getDouble(index); - } - - @Override - void updateNextValueInCurrentColumn(Column nextValueColumn, int index) { - this.nextValueInCurrentColumn = nextValueColumn.getDouble(index); - } - - @Override - void updateNextValueInCurrentColumn() { - this.nextValueInCurrentColumn = this.nextValue; - } - - private double getFilledValue() { - return (previousValue + nextValueInCurrentColumn) / 2.0; - } -} diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/execution/operator/process/fill/linear/FloatLinearFill.java b/server/src/main/java/org/apache/iotdb/db/mpp/execution/operator/process/fill/linear/FloatLinearFill.java deleted file mode 100644 index a32c60d61e..0000000000 --- a/server/src/main/java/org/apache/iotdb/db/mpp/execution/operator/process/fill/linear/FloatLinearFill.java +++ /dev/null @@ -1,94 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.apache.iotdb.db.mpp.execution.operator.process.fill.linear; - -import org.apache.iotdb.tsfile.read.common.block.column.Column; -import org.apache.iotdb.tsfile.read.common.block.column.FloatColumn; -import org.apache.iotdb.tsfile.read.common.block.column.FloatColumnBuilder; - -import java.util.Optional; - -public class FloatLinearFill extends LinearFill { - - // previous value - private float previousValue; - // next non-null value whose time is closest to the current TsBlock's endTime - private float nextValue; - - private float nextValueInCurrentColumn; - - @Override - void fillValue(Column column, int index, Object array) { - ((float[]) array)[index] = column.getFloat(index); - } - - @Override - void fillValue(Object array, int index) { - ((float[]) array)[index] = getFilledValue(); - } - - @Override - Object createValueArray(int size) { - return new float[size]; - } - - @Override - Column createNullValueColumn() { - return FloatColumnBuilder.NULL_VALUE_BLOCK; - } - - @Override - Column createFilledValueColumn() { - float filledValue = getFilledValue(); - return new FloatColumn(1, Optional.empty(), new float[] {filledValue}); - } - - @Override - Column createFilledValueColumn(Object array, boolean[] isNull, boolean hasNullValue, int size) { - if (hasNullValue) { - return new FloatColumn(size, Optional.of(isNull), (float[]) array); - } else { - return new FloatColumn(size, Optional.empty(), (float[]) array); - } - } - - @Override - void updatePreviousValue(Column column, int index) { - previousValue = column.getFloat(index); - } - - @Override - void updateNextValue(Column nextValueColumn, int index) { - this.nextValue = nextValueColumn.getFloat(index); - } - - @Override - void updateNextValueInCurrentColumn(Column nextValueColumn, int index) { - this.nextValueInCurrentColumn = nextValueColumn.getFloat(index); - } - - @Override - void updateNextValueInCurrentColumn() { - this.nextValueInCurrentColumn = this.nextValue; - } - - private float getFilledValue() { - return (previousValue + nextValueInCurrentColumn) / 2.0f; - } -} diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/execution/operator/process/fill/linear/IntLinearFill.java b/server/src/main/java/org/apache/iotdb/db/mpp/execution/operator/process/fill/linear/IntLinearFill.java deleted file mode 100644 index baf4806551..0000000000 --- a/server/src/main/java/org/apache/iotdb/db/mpp/execution/operator/process/fill/linear/IntLinearFill.java +++ /dev/null @@ -1,94 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.apache.iotdb.db.mpp.execution.operator.process.fill.linear; - -import org.apache.iotdb.tsfile.read.common.block.column.Column; -import org.apache.iotdb.tsfile.read.common.block.column.IntColumn; -import org.apache.iotdb.tsfile.read.common.block.column.IntColumnBuilder; - -import java.util.Optional; - -public class IntLinearFill extends LinearFill { - - // previous value - private int previousValue; - // next non-null value whose time is closest to the current TsBlock's endTime - private int nextValue; - - private int nextValueInCurrentColumn; - - @Override - void fillValue(Column column, int index, Object array) { - ((int[]) array)[index] = column.getInt(index); - } - - @Override - void fillValue(Object array, int index) { - ((int[]) array)[index] = getFilledValue(); - } - - @Override - Object createValueArray(int size) { - return new int[size]; - } - - @Override - Column createNullValueColumn() { - return IntColumnBuilder.NULL_VALUE_BLOCK; - } - - @Override - Column createFilledValueColumn() { - int filledValue = getFilledValue(); - return new IntColumn(1, Optional.empty(), new int[] {filledValue}); - } - - @Override - Column createFilledValueColumn(Object array, boolean[] isNull, boolean hasNullValue, int size) { - if (hasNullValue) { - return new IntColumn(size, Optional.of(isNull), (int[]) array); - } else { - return new IntColumn(size, Optional.empty(), (int[]) array); - } - } - - @Override - void updatePreviousValue(Column column, int index) { - previousValue = column.getInt(index); - } - - @Override - void updateNextValue(Column nextValueColumn, int index) { - this.nextValue = nextValueColumn.getInt(index); - } - - @Override - void updateNextValueInCurrentColumn(Column nextValueColumn, int index) { - this.nextValueInCurrentColumn = nextValueColumn.getInt(index); - } - - @Override - void updateNextValueInCurrentColumn() { - this.nextValueInCurrentColumn = this.nextValue; - } - - private int getFilledValue() { - return (previousValue + nextValueInCurrentColumn) / 2; - } -} diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/execution/operator/process/fill/linear/LongLinearFill.java b/server/src/main/java/org/apache/iotdb/db/mpp/execution/operator/process/fill/linear/LongLinearFill.java deleted file mode 100644 index 04dba1613a..0000000000 --- a/server/src/main/java/org/apache/iotdb/db/mpp/execution/operator/process/fill/linear/LongLinearFill.java +++ /dev/null @@ -1,94 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.apache.iotdb.db.mpp.execution.operator.process.fill.linear; - -import org.apache.iotdb.tsfile.read.common.block.column.Column; -import org.apache.iotdb.tsfile.read.common.block.column.LongColumn; -import org.apache.iotdb.tsfile.read.common.block.column.LongColumnBuilder; - -import java.util.Optional; - -public class LongLinearFill extends LinearFill { - - // previous value - private long previousValue; - // next non-null value whose time is closest to the current TsBlock's endTime - private long nextValue; - - private long nextValueInCurrentColumn; - - @Override - void fillValue(Column column, int index, Object array) { - ((long[]) array)[index] = column.getLong(index); - } - - @Override - void fillValue(Object array, int index) { - ((long[]) array)[index] = getFilledValue(); - } - - @Override - Object createValueArray(int size) { - return new long[size]; - } - - @Override - Column createNullValueColumn() { - return LongColumnBuilder.NULL_VALUE_BLOCK; - } - - @Override - Column createFilledValueColumn() { - long filledValue = getFilledValue(); - return new LongColumn(1, Optional.empty(), new long[] {filledValue}); - } - - @Override - Column createFilledValueColumn(Object array, boolean[] isNull, boolean hasNullValue, int size) { - if (hasNullValue) { - return new LongColumn(size, Optional.of(isNull), (long[]) array); - } else { - return new LongColumn(size, Optional.empty(), (long[]) array); - } - } - - @Override - void updatePreviousValue(Column column, int index) { - previousValue = column.getLong(index); - } - - @Override - void updateNextValue(Column nextValueColumn, int index) { - this.nextValue = nextValueColumn.getLong(index); - } - - @Override - void updateNextValueInCurrentColumn(Column nextValueColumn, int index) { - this.nextValueInCurrentColumn = nextValueColumn.getLong(index); - } - - @Override - void updateNextValueInCurrentColumn() { - this.nextValueInCurrentColumn = this.nextValue; - } - - private long getFilledValue() { - return (previousValue + nextValueInCurrentColumn) / 2L; - } -}
