diff --git a/org.tinygroup.tinyscript.dataset/src/main/java/org/tinygroup/tinyscript/dataset/function/DataSetInsertFunction.java b/org.tinygroup.tinyscript.dataset/src/main/java/org/tinygroup/tinyscript/dataset/function/DataSetInsertFunction.java new file mode 100644 index 0000000000000000000000000000000000000000..05a45271ff9feeee80cef23ef837f3cfc61a4718 --- /dev/null +++ b/org.tinygroup.tinyscript.dataset/src/main/java/org/tinygroup/tinyscript/dataset/function/DataSetInsertFunction.java @@ -0,0 +1,62 @@ +package org.tinygroup.tinyscript.dataset.function; + +import org.tinygroup.tinyscript.ScriptContext; +import org.tinygroup.tinyscript.ScriptException; +import org.tinygroup.tinyscript.ScriptSegment; +import org.tinygroup.tinyscript.dataset.AbstractDataSet; +import org.tinygroup.tinyscript.dataset.DataSet; +import org.tinygroup.tinyscript.dataset.util.DataSetUtil; +import org.tinygroup.tinyscript.function.AbstractScriptFunction; +import org.tinygroup.tinyscript.interpret.ResourceBundleUtil; + +public class DataSetInsertFunction extends AbstractScriptFunction { + + @Override + public String getNames() { + return "insert"; + } + + @Override + public String getBindingTypes() { + return DataSet.class.getName(); + } + @Override + public Object execute(ScriptSegment segment, ScriptContext context, Object... parameters) throws ScriptException { + try { + if (parameters == null || parameters.length == 0) { + throw new ScriptException(ResourceBundleUtil.getDefaultMessage("function.parameter.empty", getNames())); + } else if (checkParameters(parameters, 2)) { + AbstractDataSet dataSet1 = (AbstractDataSet) getValue(parameters[0]); + AbstractDataSet dataSet2 = (AbstractDataSet) getValue(parameters[1]); + return insert(dataSet1, dataSet2); + } else { + throw new ScriptException(ResourceBundleUtil.getDefaultMessage("function.parameter.error", getNames())); + } + + } catch (ScriptException e) { + throw e; + } catch (Exception e) { + throw new ScriptException(ResourceBundleUtil.getDefaultMessage("function.run.error", getNames()), e); + } + } + + private DataSet insert(AbstractDataSet dataSet1, AbstractDataSet dataSet2) throws Exception { + Object[][] datas = new Object[dataSet1.getRows() + dataSet2.getRows()][dataSet1.getFields().size()]; + for (int i = 0; i < dataSet1.getRows(); i++) { + for (int j = 0; j < datas[i].length; j++) { + datas[i][j] = dataSet1.getData(dataSet1.getShowIndex(i), dataSet1.getShowIndex(j)); + } + } + for (int i = dataSet1.getRows(); i < dataSet2.getRows() + dataSet1.getRows(); i++) { + for (int j = 0; j < datas[i].length; j++) { + int rightFieldIndex = DataSetUtil.getFieldIndex(dataSet2, dataSet1.getFields().get(j).getName()); + if (rightFieldIndex > -1) { + datas[i][j] = dataSet2.getData(dataSet2.getShowIndex(i - dataSet1.getRows()), + dataSet2.getShowIndex(rightFieldIndex)); + } + } + } + return DataSetUtil.createDynamicDataSet(dataSet1.getFields(), datas, dataSet1.isIndexFromOne()); + } + +} diff --git a/org.tinygroup.tinyscript.dataset/src/main/resources/dataset.beans.xml b/org.tinygroup.tinyscript.dataset/src/main/resources/dataset.beans.xml index 664fe6d590bc03b51877d68d5e39950a14bf317e..b70847b33561dfade2d31d79948ffd26c55d8441 100644 --- a/org.tinygroup.tinyscript.dataset/src/main/resources/dataset.beans.xml +++ b/org.tinygroup.tinyscript.dataset/src/main/resources/dataset.beans.xml @@ -186,5 +186,8 @@ - + + + diff --git a/org.tinygroup.tinyscript/src/main/java/org/tinygroup/tinyscript/impl/DefaultTinyScriptEngine.java b/org.tinygroup.tinyscript/src/main/java/org/tinygroup/tinyscript/impl/DefaultTinyScriptEngine.java index 60ec205005c676e56bb3b09535c699e235cd3dbc..78714edd7644bcdb248b09b080795405d7b47c2a 100644 --- a/org.tinygroup.tinyscript/src/main/java/org/tinygroup/tinyscript/impl/DefaultTinyScriptEngine.java +++ b/org.tinygroup.tinyscript/src/main/java/org/tinygroup/tinyscript/impl/DefaultTinyScriptEngine.java @@ -55,6 +55,7 @@ import org.tinygroup.tinyscript.dataset.function.DataSetFullJoinFunction; import org.tinygroup.tinyscript.dataset.function.DataSetGroupDynamicFunction; import org.tinygroup.tinyscript.dataset.function.DataSetGroupFunction; import org.tinygroup.tinyscript.dataset.function.DataSetGroupStagedFunction; +import org.tinygroup.tinyscript.dataset.function.DataSetInsertFunction; import org.tinygroup.tinyscript.dataset.function.DataSetIntersectionFunction; import org.tinygroup.tinyscript.dataset.function.DataSetJoinFunction; import org.tinygroup.tinyscript.dataset.function.DataSetLeftJoinFunction; @@ -209,6 +210,7 @@ public class DefaultTinyScriptEngine extends DefaultScriptEngine implements Scri addScriptFunction(new DataSetRightJoinFunction()); addScriptFunction(new DataSetLeftJoinFunction()); addScriptFunction(new DataSetFullJoinFunction()); + addScriptFunction(new DataSetInsertFunction()); addScriptFunction(new GroupDataSetFilterFunction()); addScriptFunction(new GroupDataSetSortFunction()); diff --git a/org.tinygroup.tinyscript/src/test/resources/dataSetExample/insert.tsf b/org.tinygroup.tinyscript/src/test/resources/dataSetExample/insert.tsf new file mode 100644 index 0000000000000000000000000000000000000000..013a7a8e7ac4fe102685aee67fdf681f0b571760 --- /dev/null +++ b/org.tinygroup.tinyscript/src/test/resources/dataSetExample/insert.tsf @@ -0,0 +1,3 @@ +dataSet1 = readTxt("/dataSetExample/data1.txt"); +dataSet2 = readTxt("/dataSetExample/data2.txt"); +println(dataSet1.insert(dataSet2)); \ No newline at end of file