This is an automated email from the ASF dual-hosted git repository.
caogaofei pushed a commit to branch beyyes/TableModelGrammar
in repository https://gitbox.apache.org/repos/asf/iotdb.git
The following commit(s) were added to refs/heads/beyyes/TableModelGrammar by
this push:
new a746a36a450 add more relational impl
a746a36a450 is described below
commit a746a36a450d798944ea197a8be9b937e635de1d
Author: Beyyes <[email protected]>
AuthorDate: Sun Apr 7 11:13:07 2024 +0800
add more relational impl
---
.../relational/planner/RelationalModelPlanner.java | 13 +++-
.../plan/relational/analyzer/AnalyzerTest.java | 77 +++++++++-------------
.../plan/relational/analyzer/TestMatadata.java | 65 ++++++++++++------
3 files changed, 87 insertions(+), 68 deletions(-)
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/RelationalModelPlanner.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/RelationalModelPlanner.java
index 3ba6500d4cb..cfec9c17a28 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/RelationalModelPlanner.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/RelationalModelPlanner.java
@@ -21,6 +21,7 @@ package
org.apache.iotdb.db.queryengine.plan.relational.planner;
import org.apache.iotdb.common.rpc.thrift.TEndPoint;
import org.apache.iotdb.common.rpc.thrift.TSStatus;
+import org.apache.iotdb.commons.exception.IoTDBException;
import org.apache.iotdb.db.queryengine.common.MPPQueryContext;
import org.apache.iotdb.db.queryengine.common.SessionInfo;
import org.apache.iotdb.db.queryengine.execution.QueryStateMachine;
@@ -28,8 +29,10 @@ import
org.apache.iotdb.db.queryengine.plan.analyze.IAnalysis;
import org.apache.iotdb.db.queryengine.plan.planner.IPlanner;
import org.apache.iotdb.db.queryengine.plan.planner.plan.DistributedQueryPlan;
import org.apache.iotdb.db.queryengine.plan.planner.plan.LogicalQueryPlan;
+import org.apache.iotdb.db.queryengine.plan.relational.analyzer.Analysis;
import org.apache.iotdb.db.queryengine.plan.relational.analyzer.Analyzer;
import
org.apache.iotdb.db.queryengine.plan.relational.analyzer.StatementAnalyzerFactory;
+import org.apache.iotdb.db.queryengine.plan.relational.metadata.Metadata;
import org.apache.iotdb.db.queryengine.plan.scheduler.IScheduler;
import org.apache.iotdb.rpc.TSStatusCode;
@@ -40,6 +43,8 @@ import static
org.apache.iotdb.db.queryengine.execution.warnings.WarningCollecto
public class RelationalModelPlanner implements IPlanner {
+ private Metadata metadata;
+
@Override
public IAnalysis analyze(MPPQueryContext context) {
SessionInfo sessionInfo = null;
@@ -58,8 +63,12 @@ public class RelationalModelPlanner implements IPlanner {
@Override
public LogicalQueryPlan doLogicalPlan(IAnalysis analysis, MPPQueryContext
context) {
// TODO need implemented by Beyyes
-
- return null;
+ try {
+ new LogicalPlanner(context, metadata, null,
null).plan((Analysis)analysis);
+ } catch (IoTDBException e) {
+ throw new RuntimeException(e);
+ }
+ return null;
}
@Override
diff --git
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/AnalyzerTest.java
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/AnalyzerTest.java
index 35b7e24919c..d2018ff4256 100644
---
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/AnalyzerTest.java
+++
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/AnalyzerTest.java
@@ -19,6 +19,8 @@
package org.apache.iotdb.db.queryengine.plan.relational.analyzer;
+import org.apache.iotdb.db.queryengine.common.MPPQueryContext;
+import org.apache.iotdb.db.queryengine.common.QueryId;
import org.apache.iotdb.db.queryengine.common.SessionInfo;
import org.apache.iotdb.db.queryengine.plan.relational.function.BoundSignature;
import org.apache.iotdb.db.queryengine.plan.relational.function.FunctionId;
@@ -122,59 +124,40 @@ public class AnalyzerTest {
@Test
public void testSingleTableQuery() throws OperatorNotFoundException {
String sql =
- "SELECT tag1 as tmp_tag, tag2, attribute1, s1+1 as add_s1, s2 FROM
table1 "
- + "WHERE time>1 AND tag1=\"A\" and tag3=\"B\" AND s1=1 AND s3=3
ORDER BY time DESC OFFSET 10 LIMIT 5";
+ "SELECT tag1 as tt, tag2, attribute1 as attr1, s1+1, s2 FROM table1 "
+ + "WHERE time>1 AND tag1=\"A\" and tag3=\"B\" AND s1=1 OR s3=3
ORDER BY time DESC OFFSET 10 LIMIT 5";
Metadata metadata = new TestMatadata();
- TableHandle tableHandle = Mockito.mock(TableHandle.class);
- Mockito.when(
- metadata.getTableHandle(Mockito.any(), eq(new
QualifiedObjectName("testdb", "table1"))))
- .thenReturn(Optional.of(tableHandle));
-
- Map<String, ColumnHandle> map = new HashMap<>();
- TableSchema tableSchema = Mockito.mock(TableSchema.class);
- Mockito.when(tableSchema.getTableName()).thenReturn("table1");
- ColumnSchema column1 =
-
ColumnSchema.builder().setName("time").setType(INT64).setHidden(false).build();
- ColumnHandle column1Handle = Mockito.mock(ColumnHandle.class);
- map.put("time", column1Handle);
- ColumnSchema column2 =
-
ColumnSchema.builder().setName("s1").setType(INT32).setHidden(false).build();
- ColumnHandle column2Handle = Mockito.mock(ColumnHandle.class);
- map.put("s1", column2Handle);
- ColumnSchema column3 =
-
ColumnSchema.builder().setName("s2").setType(INT64).setHidden(false).build();
- ColumnHandle column3Handle = Mockito.mock(ColumnHandle.class);
- map.put("s2", column3Handle);
- List<ColumnSchema> columnSchemaList = Arrays.asList(column1, column2,
column3);
- Mockito.when(tableSchema.getColumns()).thenReturn(columnSchemaList);
-
- Mockito.when(metadata.getTableSchema(Mockito.any(),
eq(tableHandle))).thenReturn(tableSchema);
- Mockito.when(metadata.getColumnHandles(Mockito.any(),
eq(tableHandle))).thenReturn(map);
-
- ResolvedFunction lLessThanI =
- new ResolvedFunction(
- new BoundSignature("l<i", BOOLEAN, Arrays.asList(INT64, INT32)),
- new FunctionId("l<i"),
- FunctionKind.SCALAR,
- true);
-
- ResolvedFunction iAddi =
- new ResolvedFunction(
- new BoundSignature("l+i", INT64, Arrays.asList(INT32, INT32)),
- new FunctionId("l+i"),
- FunctionKind.SCALAR,
- true);
-
- Mockito.when(
- metadata.resolveOperator(eq(OperatorType.LESS_THAN),
eq(Arrays.asList(INT64, INT32))))
- .thenReturn(lLessThanI);
- Mockito.when(metadata.resolveOperator(eq(OperatorType.ADD),
eq(Arrays.asList(INT32, INT32))))
- .thenReturn(iAddi);
+ // ResolvedFunction lLessThanI =
+ // new ResolvedFunction(
+ // new BoundSignature("l<i", BOOLEAN, Arrays.asList(INT64,
INT32)),
+ // new FunctionId("l<i"),
+ // FunctionKind.SCALAR,
+ // true);
+ //
+ // ResolvedFunction iAddi =
+ // new ResolvedFunction(
+ // new BoundSignature("l+i", INT64, Arrays.asList(INT32,
INT32)),
+ // new FunctionId("l+i"),
+ // FunctionKind.SCALAR,
+ // true);
+ //
+ // Mockito.when(
+ // metadata.resolveOperator(eq(OperatorType.LESS_THAN),
eq(Arrays.asList(INT64,
+ // INT32))))
+ // .thenReturn(lLessThanI);
+ // Mockito.when(metadata.resolveOperator(eq(OperatorType.ADD),
eq(Arrays.asList(INT32,
+ // INT32))))
+ // .thenReturn(iAddi);
Analysis actualAnalysis = analyzeSQL(sql, metadata);
assertNotNull(actualAnalysis);
System.out.println(actualAnalysis.getTypes());
+
+ QueryId queryId = new QueryId("tmp_query");
+ MPPQueryContext context = new MPPQueryContext(queryId);
+ // LogicalPlanner logicalPlanner = new LogicalPlanner(context, metadata);
+
}
private Analysis analyzeSQL(String sql, Metadata metadata) {
diff --git
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/TestMatadata.java
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/TestMatadata.java
index 294dc28b354..62ac6cae73c 100644
---
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/TestMatadata.java
+++
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/TestMatadata.java
@@ -3,6 +3,7 @@ package
org.apache.iotdb.db.queryengine.plan.relational.analyzer;
import org.apache.iotdb.db.queryengine.common.SessionInfo;
import org.apache.iotdb.db.queryengine.plan.relational.function.OperatorType;
import org.apache.iotdb.db.queryengine.plan.relational.metadata.ColumnHandle;
+import org.apache.iotdb.db.queryengine.plan.relational.metadata.ColumnMetadata;
import org.apache.iotdb.db.queryengine.plan.relational.metadata.ColumnSchema;
import org.apache.iotdb.db.queryengine.plan.relational.metadata.Metadata;
import
org.apache.iotdb.db.queryengine.plan.relational.metadata.OperatorNotFoundException;
@@ -11,6 +12,8 @@ import
org.apache.iotdb.db.queryengine.plan.relational.metadata.ResolvedFunction
import org.apache.iotdb.db.queryengine.plan.relational.metadata.TableHandle;
import org.apache.iotdb.db.queryengine.plan.relational.metadata.TableMetadata;
import org.apache.iotdb.db.queryengine.plan.relational.metadata.TableSchema;
+import org.apache.iotdb.tsfile.read.common.type.BinaryType;
+import org.apache.iotdb.tsfile.read.common.type.DoubleType;
import org.apache.iotdb.tsfile.read.common.type.Type;
import org.mockito.Mockito;
@@ -27,8 +30,25 @@ import static
org.apache.iotdb.tsfile.read.common.type.LongType.INT64;
public class TestMatadata implements Metadata {
public static final String DB1 = "db1";
- public static final String DB2 = "db2";
public static final String TABLE1 = "table1";
+ public static final String TIME = "time";
+ private static final String TAG1 = "tag1";
+ private static final String TAG2 = "tag2";
+ private static final String TAG3 = "tag3";
+ private static final String ATTR1 = "attr1";
+ private static final String ATTR2 = "attr2";
+ private static final String S1 = "s1";
+ private static final String S2 = "s2";
+ private static final ColumnMetadata TIME_CM = new ColumnMetadata(TIME,
INT64);
+ private static final ColumnMetadata TAG1_CM = new ColumnMetadata(TAG1,
BinaryType.TEXT);
+ private static final ColumnMetadata TAG2_CM = new ColumnMetadata(TAG2,
BinaryType.TEXT);
+ private static final ColumnMetadata TAG3_CM = new ColumnMetadata(TAG3,
BinaryType.TEXT);
+ private static final ColumnMetadata ATTR1_CM = new ColumnMetadata(ATTR1,
BinaryType.TEXT);
+ private static final ColumnMetadata ATTR2_CM = new ColumnMetadata(ATTR2,
BinaryType.TEXT);
+ private static final ColumnMetadata S1_CM = new ColumnMetadata(S1, INT32);
+ private static final ColumnMetadata S2_CM = new ColumnMetadata(S2,
DoubleType.DOUBLE);
+
+ public static final String DB2 = "db2";
public static final String TABLE2 = "table2";
@Override
@@ -39,12 +59,25 @@ public class TestMatadata implements Metadata {
@Override
public TableSchema getTableSchema(SessionInfo session, TableHandle
tableHandle) {
- return null;
+ List<ColumnSchema> columnSchemas =
+ Arrays.asList(
+ ColumnSchema.builder(TIME_CM).build(),
+ ColumnSchema.builder(TAG1_CM).build(),
+ ColumnSchema.builder(TAG2_CM).build(),
+ ColumnSchema.builder(TAG3_CM).build(),
+ ColumnSchema.builder(ATTR1_CM).build(),
+ ColumnSchema.builder(ATTR2_CM).build(),
+ ColumnSchema.builder(S1_CM).build(),
+ ColumnSchema.builder(S2_CM).build());
+
+ return new TableSchema(TABLE1, columnSchemas);
}
@Override
public TableMetadata getTableMetadata(SessionInfo session, TableHandle
tableHandle) {
- return null;
+ return new TableMetadata(
+ TABLE1,
+ Arrays.asList(TIME_CM, TAG1_CM, TAG2_CM, TAG3_CM, ATTR1_CM, ATTR2_CM,
S1_CM, S2_CM));
}
@Override
@@ -55,22 +88,16 @@ public class TestMatadata implements Metadata {
@Override
public Map<String, ColumnHandle> getColumnHandles(SessionInfo session,
TableHandle tableHandle) {
Map<String, ColumnHandle> map = new HashMap<>();
- TableSchema tableSchema = Mockito.mock(TableSchema.class);
- Mockito.when(tableSchema.getTableName()).thenReturn("table1");
- ColumnSchema column1 =
-
ColumnSchema.builder().setName("time").setType(INT64).setHidden(false).build();
- ColumnHandle column1Handle = Mockito.mock(ColumnHandle.class);
- map.put("time", column1Handle);
- ColumnSchema column2 =
-
ColumnSchema.builder().setName("s1").setType(INT32).setHidden(false).build();
- ColumnHandle column2Handle = Mockito.mock(ColumnHandle.class);
- map.put("s1", column2Handle);
- ColumnSchema column3 =
-
ColumnSchema.builder().setName("s2").setType(INT64).setHidden(false).build();
- ColumnHandle column3Handle = Mockito.mock(ColumnHandle.class);
- map.put("s2", column3Handle);
- List<ColumnSchema> columnSchemaList = Arrays.asList(column1, column2,
column3);
- return columnSchemaList;
+ ColumnHandle columnHandle = Mockito.mock(ColumnHandle.class);
+ map.put(TIME, columnHandle);
+ map.put(TAG1, columnHandle);
+ map.put(TAG2, columnHandle);
+ map.put(TAG3, columnHandle);
+ map.put(ATTR1, columnHandle);
+ map.put(ATTR2, columnHandle);
+ map.put(S1, columnHandle);
+ map.put(S2, columnHandle);
+ return map;
}
@Override