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