1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.shardingsphere.sqlfederation.executor.enumerator;
19
20 import org.apache.calcite.linq4j.Enumerator;
21 import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
22 import org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereColumn;
23 import org.apache.shardingsphere.infra.metadata.statistics.ShardingSphereRowData;
24 import org.apache.shardingsphere.sqlfederation.executor.utils.EnumeratorUtils;
25
26 import java.util.ArrayList;
27 import java.util.Collection;
28 import java.util.Iterator;
29 import java.util.Map;
30
31
32
33
34 public final class MemoryRowEnumerator implements Enumerator<Object> {
35
36 private final Collection<ShardingSphereRowData> rows;
37
38 private final Map<Integer, Class<?>> columnTypes;
39
40 private Iterator<ShardingSphereRowData> iterator;
41
42 private Object current;
43
44 public MemoryRowEnumerator(final Collection<ShardingSphereRowData> rows, final Collection<ShardingSphereColumn> columns, final DatabaseType databaseType) {
45 this.rows = rows;
46 columnTypes = EnumeratorUtils.createColumnTypes(new ArrayList<>(columns), databaseType);
47 iterator = rows.iterator();
48 }
49
50 @Override
51 public Object current() {
52 return current;
53 }
54
55 @Override
56 public boolean moveNext() {
57 if (iterator.hasNext()) {
58 current = EnumeratorUtils.convertToTargetType(columnTypes, iterator.next().getRows().toArray());
59 return true;
60 }
61 current = null;
62 iterator = rows.iterator();
63 return false;
64 }
65
66 @Override
67 public void reset() {
68 }
69
70 @Override
71 public void close() {
72 iterator = rows.iterator();
73 current = null;
74 }
75 }