This is an automated email from the ASF dual-hosted git repository. geniuspig pushed a commit to branch tag_manage in repository https://gitbox.apache.org/repos/asf/incubator-iotdb.git
commit f240f7bd2661e8ae55654fb84364b63f02d04d11 Author: zhutianci <[email protected]> AuthorDate: Sun Apr 12 11:29:15 2020 +0800 update antr4 for tags and attributes --- .../org/apache/iotdb/db/qp/strategy/SqlBase.g4 | 24 +++++++++++++-- .../qp/logical/sys/CreateTimeSeriesOperator.java | 28 ++++++++++++++--- .../iotdb/db/qp/strategy/LogicalGenerator.java | 36 +++++++++++++++++----- .../iotdb/db/qp/strategy/PhysicalGenerator.java | 2 +- 4 files changed, 75 insertions(+), 15 deletions(-) diff --git a/server/src/main/antlr4/org/apache/iotdb/db/qp/strategy/SqlBase.g4 b/server/src/main/antlr4/org/apache/iotdb/db/qp/strategy/SqlBase.g4 index 73120bb..9c6c4a1 100644 --- a/server/src/main/antlr4/org/apache/iotdb/db/qp/strategy/SqlBase.g4 +++ b/server/src/main/antlr4/org/apache/iotdb/db/qp/strategy/SqlBase.g4 @@ -24,7 +24,7 @@ singleStatement ; statement - : CREATE TIMESERIES fullPath WITH attributeClauses #createTimeseries + : CREATE TIMESERIES fullPath LR_BRACKET ID RR_BRACKET WITH attributeClauses #createTimeseries | DELETE TIMESERIES prefixPath (COMMA prefixPath)* #deleteTimeseries | INSERT INTO fullPath insertColumnSpec VALUES insertValuesSpec #insertStatement | UPDATE prefixPath setClause whereClause? #updateStatement @@ -117,7 +117,18 @@ lastClause ; attributeClauses - : DATATYPE OPERATOR_EQ dataType COMMA ENCODING OPERATOR_EQ encoding (COMMA (COMPRESSOR | COMPRESSION) OPERATOR_EQ compressor=propertyValue)? (COMMA property)* + : DATATYPE OPERATOR_EQ dataType COMMA ENCODING OPERATOR_EQ encoding + (COMMA (COMPRESSOR | COMPRESSION) OPERATOR_EQ compressor=propertyValue)? + attributeClause + tagClause + ; + +attributeClause + : (COMMA ATTRIBUTES LR_BRACKET property (COMMA property)* RR_BRACKET)? + ; + +tagClause + : (TAGS LR_BRACKET property (COMMA property)* RR_BRACKET)? ; setClause @@ -272,6 +283,7 @@ propertyValue : ID | MINUS? INT | MINUS? realLiteral + | STRING_LITERAL ; propertyLabelPair @@ -745,6 +757,14 @@ COMPRESSION TIME : T I M E ; + +ATTRIBUTES + : A T T R I B U T E S + ; + +TAGS + : T A G S + ; //============================ // End of the keywords list //============================ diff --git a/server/src/main/java/org/apache/iotdb/db/qp/logical/sys/CreateTimeSeriesOperator.java b/server/src/main/java/org/apache/iotdb/db/qp/logical/sys/CreateTimeSeriesOperator.java index de3db4b..4ae4614 100644 --- a/server/src/main/java/org/apache/iotdb/db/qp/logical/sys/CreateTimeSeriesOperator.java +++ b/server/src/main/java/org/apache/iotdb/db/qp/logical/sys/CreateTimeSeriesOperator.java @@ -29,10 +29,12 @@ import org.apache.iotdb.tsfile.read.common.Path; public class CreateTimeSeriesOperator extends RootOperator { private Path path; + private String alias; private TSDataType dataType; private TSEncoding encoding; private CompressionType compressor; - private Map<String, String> props; + private Map<String, String> attributes; + private Map<String, String> tags; public CreateTimeSeriesOperator(int tokenIntType) { super(tokenIntType); @@ -71,12 +73,28 @@ public class CreateTimeSeriesOperator extends RootOperator { return compressor; } - public Map<String, String> getProps() { - return props; + public Map<String, String> getAttributes() { + return attributes; } - public void setProps(Map<String, String> props) { - this.props = props; + public void setAttributes(Map<String, String> attributes) { + this.attributes = attributes; + } + + public String getAlias() { + return alias; + } + + public void setAlias(String alias) { + this.alias = alias; + } + + public Map<String, String> getTags() { + return tags; + } + + public void setTags(Map<String, String> tags) { + this.tags = tags; } } diff --git a/server/src/main/java/org/apache/iotdb/db/qp/strategy/LogicalGenerator.java b/server/src/main/java/org/apache/iotdb/db/qp/strategy/LogicalGenerator.java index 4d5257d..ad07198 100644 --- a/server/src/main/java/org/apache/iotdb/db/qp/strategy/LogicalGenerator.java +++ b/server/src/main/java/org/apache/iotdb/db/qp/strategy/LogicalGenerator.java @@ -64,6 +64,7 @@ import org.apache.iotdb.db.qp.logical.sys.ShowTimeSeriesOperator; import org.apache.iotdb.db.qp.strategy.SqlBaseParser.AlignByDeviceClauseContext; import org.apache.iotdb.db.qp.strategy.SqlBaseParser.AlterUserContext; import org.apache.iotdb.db.qp.strategy.SqlBaseParser.AndExpressionContext; +import org.apache.iotdb.db.qp.strategy.SqlBaseParser.AttributeClauseContext; import org.apache.iotdb.db.qp.strategy.SqlBaseParser.AttributeClausesContext; import org.apache.iotdb.db.qp.strategy.SqlBaseParser.AutoCreateSchemaContext; import org.apache.iotdb.db.qp.strategy.SqlBaseParser.ConstantContext; @@ -136,6 +137,7 @@ import org.apache.iotdb.db.qp.strategy.SqlBaseParser.ShowVersionContext; import org.apache.iotdb.db.qp.strategy.SqlBaseParser.SlimitClauseContext; import org.apache.iotdb.db.qp.strategy.SqlBaseParser.SoffsetClauseContext; import org.apache.iotdb.db.qp.strategy.SqlBaseParser.SuffixPathContext; +import org.apache.iotdb.db.qp.strategy.SqlBaseParser.TagClauseContext; import org.apache.iotdb.db.qp.strategy.SqlBaseParser.TimeIntervalContext; import org.apache.iotdb.db.qp.strategy.SqlBaseParser.TypeClauseContext; import org.apache.iotdb.db.qp.strategy.SqlBaseParser.UnsetTTLStatementContext; @@ -300,6 +302,7 @@ public class LogicalGenerator extends SqlBaseBaseListener { createTimeSeriesOperator = new CreateTimeSeriesOperator(SQLConstant.TOK_METADATA_CREATE); operatorType = SQLConstant.TOK_METADATA_CREATE; createTimeSeriesOperator.setPath(parseFullPath(ctx.fullPath())); + createTimeSeriesOperator.setAlias(ctx.ID().getText()); } @Override @@ -896,23 +899,42 @@ public class LogicalGenerator extends SqlBaseBaseListener { createTimeSeriesOperator.setDataType(TSDataType.valueOf(dataType)); createTimeSeriesOperator.setEncoding(TSEncoding.valueOf(encoding)); CompressionType compressor; - List<PropertyContext> properties = ctx.property(); - Map<String, String> props = new HashMap<>(properties.size(), 1); if (ctx.propertyValue() != null) { compressor = CompressionType.valueOf(ctx.propertyValue().getText().toUpperCase()); } else { compressor = TSFileDescriptor.getInstance().getConfig().getCompressor(); } checkMetadataArgs(dataType, encoding, compressor.toString().toUpperCase()); + createTimeSeriesOperator.setCompressor(compressor); + initializedOperator = createTimeSeriesOperator; + } + + @Override + public void enterAttributeClause(AttributeClauseContext ctx) { + super.enterAttributeClause(ctx); + List<PropertyContext> attributesList = ctx.property(); + Map<String, String> attributes = new HashMap<>(attributesList.size(), 1); if (ctx.property(0) != null) { - for (PropertyContext property : properties) { - props.put(property.ID().getText().toLowerCase(), + for (PropertyContext property : attributesList) { + attributes.put(property.ID().getText().toLowerCase(), property.propertyValue().getText().toLowerCase()); } } - createTimeSeriesOperator.setCompressor(compressor); - createTimeSeriesOperator.setProps(props); - initializedOperator = createTimeSeriesOperator; + createTimeSeriesOperator.setAttributes(attributes); + } + + @Override + public void enterTagClause(TagClauseContext ctx) { + super.enterTagClause(ctx); + List<PropertyContext> tagsList = ctx.property(); + Map<String, String> tags = new HashMap<>(tagsList.size(), 1); + if (ctx.property(0) != null) { + for (PropertyContext property : tagsList) { + tags.put(property.ID().getText().toLowerCase(), + property.propertyValue().getText().toLowerCase()); + } + } + createTimeSeriesOperator.setTags(tags); } @Override diff --git a/server/src/main/java/org/apache/iotdb/db/qp/strategy/PhysicalGenerator.java b/server/src/main/java/org/apache/iotdb/db/qp/strategy/PhysicalGenerator.java index 378af12..04b1fc3 100644 --- a/server/src/main/java/org/apache/iotdb/db/qp/strategy/PhysicalGenerator.java +++ b/server/src/main/java/org/apache/iotdb/db/qp/strategy/PhysicalGenerator.java @@ -77,7 +77,7 @@ public class PhysicalGenerator { case CREATE_TIMESERIES: CreateTimeSeriesOperator addPath = (CreateTimeSeriesOperator) operator; return new CreateTimeSeriesPlan(addPath.getPath(), addPath.getDataType(), - addPath.getEncoding(), addPath.getCompressor(), addPath.getProps()); + addPath.getEncoding(), addPath.getCompressor(), addPath.getAttributes()); case DELETE_TIMESERIES: DeleteTimeSeriesOperator deletePath = (DeleteTimeSeriesOperator) operator; return new DeleteTimeSeriesPlan(deletePath.getDeletePathList());
