From 2ccb0b7c14006748d5c6fc856ff8ac582e9db687 Mon Sep 17 00:00:00 2001
From: fujie <405295521@qq.com>
Date: Mon, 13 Nov 2017 19:54:12 +0800
Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9EDataSetInsertFunction?=
=?UTF-8?q?=EF=BC=8C=E5=BA=8F=E8=A1=A8=E6=96=B0=E5=A2=9E=E8=AE=B0=E5=BD=95?=
=?UTF-8?q?=E6=94=AF=E6=8C=81=E6=9D=A5=E8=87=AA=E5=88=AB=E8=A1=A8?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../function/DataSetInsertFunction.java | 62 +++++++++++++++++++
.../src/main/resources/dataset.beans.xml | 5 +-
.../impl/DefaultTinyScriptEngine.java | 2 +
.../test/resources/dataSetExample/insert.tsf | 3 +
4 files changed, 71 insertions(+), 1 deletion(-)
create mode 100644 org.tinygroup.tinyscript.dataset/src/main/java/org/tinygroup/tinyscript/dataset/function/DataSetInsertFunction.java
create mode 100644 org.tinygroup.tinyscript/src/test/resources/dataSetExample/insert.tsf
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 0000000..05a4527
--- /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 664fe6d..b70847b 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 60ec205..78714ed 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 0000000..013a7a8
--- /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
--
Gitee