Skip to content

Commit 56bbaf0

Browse files
committed
Support alter sql and procedure so that time series data type can be altered.
1 parent 8592202 commit 56bbaf0

File tree

40 files changed

+951
-17
lines changed

40 files changed

+951
-17
lines changed

iotdb-core/antlr/src/main/antlr4/org/apache/iotdb/db/qp/sql/IoTDBSqlParser.g4

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -170,6 +170,8 @@ alterTimeseries
170170

171171
alterClause
172172
: RENAME beforeName=attributeKey TO currentName=attributeKey
173+
// Change into new data type
174+
| SET DATA TYPE newType=attributeValue
173175
| SET attributePair (COMMA attributePair)*
174176
| DROP attributeKey (COMMA attributeKey)*
175177
| ADD TAGS attributePair (COMMA attributePair)*

iotdb-core/antlr/src/main/antlr4/org/apache/iotdb/db/qp/sql/SqlLexer.g4

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -233,6 +233,10 @@ DATA
233233
: D A T A
234234
;
235235

236+
TYPE
237+
: T Y P E
238+
;
239+
236240
DATABASE
237241
: D A T A B A S E
238242
;

iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/client/async/CnToDnAsyncRequestType.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,7 @@ public enum CnToDnAsyncRequestType {
8989
INVALIDATE_MATCHED_SCHEMA_CACHE,
9090
DELETE_DATA_FOR_DELETE_SCHEMA,
9191
DELETE_TIMESERIES,
92+
ALTER_TIMESERIES_DATATYPE,
9293

9394
ALTER_ENCODING_COMPRESSOR,
9495

iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/client/async/CnToDnInternalServiceAsyncRequestManager.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@
4949
import org.apache.iotdb.confignode.client.async.handlers.rpc.subscription.TopicPushMetaRPCHandler;
5050
import org.apache.iotdb.mpp.rpc.thrift.TActiveTriggerInstanceReq;
5151
import org.apache.iotdb.mpp.rpc.thrift.TAlterEncodingCompressorReq;
52+
import org.apache.iotdb.mpp.rpc.thrift.TAlterTimeSeriesReq;
5253
import org.apache.iotdb.mpp.rpc.thrift.TAlterViewReq;
5354
import org.apache.iotdb.mpp.rpc.thrift.TCheckSchemaRegionUsingTemplateReq;
5455
import org.apache.iotdb.mpp.rpc.thrift.TCheckTimeSeriesExistenceReq;
@@ -315,6 +316,11 @@ protected void initActionMapBuilder() {
315316
(req, client, handler) ->
316317
client.alterEncodingCompressor(
317318
(TAlterEncodingCompressorReq) req, (SchemaUpdateRPCHandler) handler));
319+
actionMapBuilder.put(
320+
CnToDnAsyncRequestType.ALTER_TIMESERIES_DATATYPE,
321+
(req, client, handler) ->
322+
client.alterTimeSeriesDataType(
323+
(TAlterTimeSeriesReq) req, (SchemaUpdateRPCHandler) handler));
318324
actionMapBuilder.put(
319325
CnToDnAsyncRequestType.CONSTRUCT_SCHEMA_BLACK_LIST_WITH_TEMPLATE,
320326
(req, client, handler) ->

iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/client/async/handlers/rpc/DataNodeAsyncRequestRPCHandler.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,7 @@ public static DataNodeAsyncRequestRPCHandler<?> buildHandler(
8484
case DELETE_DATA_FOR_DELETE_SCHEMA:
8585
case DELETE_TIMESERIES:
8686
case ALTER_ENCODING_COMPRESSOR:
87+
case ALTER_TIMESERIES_DATATYPE:
8788
case CONSTRUCT_SCHEMA_BLACK_LIST_WITH_TEMPLATE:
8889
case ROLLBACK_SCHEMA_BLACK_LIST_WITH_TEMPLATE:
8990
case DEACTIVATE_TEMPLATE:

iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/ConfigManager.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@
6868
import org.apache.iotdb.commons.schema.table.TreeViewSchema;
6969
import org.apache.iotdb.commons.schema.table.TsTable;
7070
import org.apache.iotdb.commons.schema.table.TsTableInternalRPCUtil;
71+
import org.apache.iotdb.commons.schema.tree.AlterTimeSeriesOperationType;
7172
import org.apache.iotdb.commons.schema.ttl.TTLCache;
7273
import org.apache.iotdb.commons.service.metric.MetricService;
7374
import org.apache.iotdb.commons.utils.AuthUtils;
@@ -153,6 +154,7 @@
153154
import org.apache.iotdb.confignode.rpc.thrift.TAlterOrDropTableReq;
154155
import org.apache.iotdb.confignode.rpc.thrift.TAlterPipeReq;
155156
import org.apache.iotdb.confignode.rpc.thrift.TAlterSchemaTemplateReq;
157+
import org.apache.iotdb.confignode.rpc.thrift.TAlterTimeSeriesReq;
156158
import org.apache.iotdb.confignode.rpc.thrift.TAuthizedPatternTreeResp;
157159
import org.apache.iotdb.confignode.rpc.thrift.TCloseConsumerReq;
158160
import org.apache.iotdb.confignode.rpc.thrift.TClusterParameters;
@@ -2363,6 +2365,22 @@ public TSStatus alterLogicalView(final TAlterLogicalViewReq req) {
23632365
}
23642366
}
23652367

2368+
@Override
2369+
public TSStatus alterTimeSeriesDataType(final TAlterTimeSeriesReq req) {
2370+
final TSStatus status = confirmLeader();
2371+
if (status.getCode() == TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
2372+
switch (AlterTimeSeriesOperationType.getType(req.operationType)) {
2373+
case ALTER_DATA_TYPE:
2374+
return procedureManager.alterTimeSeriesDataType(req);
2375+
default:
2376+
throw new IllegalArgumentException(
2377+
AlterOrDropTableOperationType.getType(req.operationType).toString());
2378+
}
2379+
} else {
2380+
return status;
2381+
}
2382+
}
2383+
23662384
@Override
23672385
public TSStatus createPipe(TCreatePipeReq req) {
23682386
TSStatus status = confirmLeader();

iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/IManager.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@
7474
import org.apache.iotdb.confignode.rpc.thrift.TAlterOrDropTableReq;
7575
import org.apache.iotdb.confignode.rpc.thrift.TAlterPipeReq;
7676
import org.apache.iotdb.confignode.rpc.thrift.TAlterSchemaTemplateReq;
77+
import org.apache.iotdb.confignode.rpc.thrift.TAlterTimeSeriesReq;
7778
import org.apache.iotdb.confignode.rpc.thrift.TCloseConsumerReq;
7879
import org.apache.iotdb.confignode.rpc.thrift.TConfigNodeRegisterReq;
7980
import org.apache.iotdb.confignode.rpc.thrift.TConfigNodeRegisterResp;
@@ -726,6 +727,9 @@ TDataPartitionTableResp getOrCreateDataPartition(
726727

727728
TSStatus alterLogicalView(TAlterLogicalViewReq req);
728729

730+
/** Alter timeseries data type. */
731+
TSStatus alterTimeSeriesDataType(TAlterTimeSeriesReq req);
732+
729733
/**
730734
* Create Pipe.
731735
*

iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/ProcedureManager.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
import org.apache.iotdb.commons.conf.CommonDescriptor;
3232
import org.apache.iotdb.commons.conf.IoTDBConstant;
3333
import org.apache.iotdb.commons.exception.IoTDBException;
34+
import org.apache.iotdb.commons.path.MeasurementPath;
3435
import org.apache.iotdb.commons.path.PartialPath;
3536
import org.apache.iotdb.commons.path.PathDeserializeUtil;
3637
import org.apache.iotdb.commons.path.PathPatternTree;
@@ -86,6 +87,7 @@
8687
import org.apache.iotdb.confignode.procedure.impl.region.RemoveRegionPeerProcedure;
8788
import org.apache.iotdb.confignode.procedure.impl.schema.AlterEncodingCompressorProcedure;
8889
import org.apache.iotdb.confignode.procedure.impl.schema.AlterLogicalViewProcedure;
90+
import org.apache.iotdb.confignode.procedure.impl.schema.AlterTimeSeriesDataTypeProcedure;
8991
import org.apache.iotdb.confignode.procedure.impl.schema.DeactivateTemplateProcedure;
9092
import org.apache.iotdb.confignode.procedure.impl.schema.DeleteDatabaseProcedure;
9193
import org.apache.iotdb.confignode.procedure.impl.schema.DeleteLogicalViewProcedure;
@@ -132,6 +134,7 @@
132134
import org.apache.iotdb.confignode.rpc.thrift.TAlterLogicalViewReq;
133135
import org.apache.iotdb.confignode.rpc.thrift.TAlterOrDropTableReq;
134136
import org.apache.iotdb.confignode.rpc.thrift.TAlterPipeReq;
137+
import org.apache.iotdb.confignode.rpc.thrift.TAlterTimeSeriesReq;
135138
import org.apache.iotdb.confignode.rpc.thrift.TCloseConsumerReq;
136139
import org.apache.iotdb.confignode.rpc.thrift.TConfigNodeRegisterReq;
137140
import org.apache.iotdb.confignode.rpc.thrift.TCreateCQReq;
@@ -471,6 +474,21 @@ public TSStatus alterLogicalView(final TAlterLogicalViewReq req) {
471474
return waitingProcedureFinished(procedure);
472475
}
473476

477+
public TSStatus alterTimeSeriesDataType(final TAlterTimeSeriesReq req) {
478+
AlterTimeSeriesDataTypeProcedure procedure;
479+
synchronized (this) {
480+
procedure =
481+
new AlterTimeSeriesDataTypeProcedure(
482+
req.getQueryId(),
483+
MeasurementPath.deserialize(ByteBuffer.wrap(req.getMeasurementPath())),
484+
req.getOperationType(),
485+
TSDataType.deserialize(req.updateInfo.get()),
486+
false);
487+
this.executor.submitProcedure(procedure);
488+
}
489+
return waitingProcedureFinished(procedure);
490+
}
491+
474492
public TSStatus setSchemaTemplate(
475493
String queryId, String templateName, String templateSetPath, boolean isGeneratedByPipe) {
476494
SetTemplateProcedure procedure = null;

iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/schema/ClusterSchemaManager.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import org.apache.iotdb.common.rpc.thrift.TSStatus;
2525
import org.apache.iotdb.commons.conf.CommonDescriptor;
2626
import org.apache.iotdb.commons.exception.MetadataException;
27+
import org.apache.iotdb.commons.path.MeasurementPath;
2728
import org.apache.iotdb.commons.path.PartialPath;
2829
import org.apache.iotdb.commons.path.PathPatternTree;
2930
import org.apache.iotdb.commons.schema.SchemaConstant;
@@ -35,6 +36,7 @@
3536
import org.apache.iotdb.commons.schema.table.column.TsTableColumnCategory;
3637
import org.apache.iotdb.commons.schema.table.column.TsTableColumnSchema;
3738
import org.apache.iotdb.commons.service.metric.MetricService;
39+
import org.apache.iotdb.commons.utils.MetadataUtils;
3840
import org.apache.iotdb.commons.utils.PathUtils;
3941
import org.apache.iotdb.commons.utils.StatusUtils;
4042
import org.apache.iotdb.confignode.client.async.CnToDnAsyncRequestType;
@@ -101,6 +103,7 @@
101103
import org.apache.iotdb.confignode.rpc.thrift.TShowTable4InformationSchemaResp;
102104
import org.apache.iotdb.confignode.rpc.thrift.TShowTableResp;
103105
import org.apache.iotdb.consensus.exception.ConsensusException;
106+
import org.apache.iotdb.db.exception.sql.SemanticException;
104107
import org.apache.iotdb.db.schemaengine.template.Template;
105108
import org.apache.iotdb.db.schemaengine.template.TemplateInternalRPCUpdateType;
106109
import org.apache.iotdb.db.schemaengine.template.TemplateInternalRPCUtil;
@@ -1618,6 +1621,18 @@ public static Optional<Pair<TSStatus, TsTable>> checkTable4View(
16181621
return Optional.empty();
16191622
}
16201623

1624+
public synchronized TSStatus timeSeriesDataTypeCheckForDataTypeAltering(
1625+
final MeasurementPath measurementPath, final TSDataType dataType) throws MetadataException {
1626+
if (!MetadataUtils.canAlter(measurementPath.getSeriesType(), dataType)) {
1627+
throw new SemanticException(
1628+
String.format(
1629+
"New type %s is not compatible with the existing one %s",
1630+
dataType, measurementPath.getSeriesType()));
1631+
}
1632+
1633+
return RpcUtils.SUCCESS_STATUS;
1634+
}
1635+
16211636
@TableModel
16221637
public long getDatabaseMaxTTL(final String database) {
16231638
return clusterSchemaInfo.getDatabaseMaxTTL(database);

0 commit comments

Comments
 (0)