Skip to content

Commit 1a305c2

Browse files
committed
Support AddFunctionField/DropCollectionField/DropFunctionField
Signed-off-by: yhmo <yihua.mo@zilliz.com>
1 parent 41c18b4 commit 1a305c2

9 files changed

Lines changed: 629 additions & 0 deletions

File tree

sdk-core/src/main/java/io/milvus/v2/client/MilvusClientV2.java

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -509,6 +509,15 @@ public void alterCollectionField(AlterCollectionFieldReq request) {
509509
rpcUtils.retry(() -> collectionService.alterCollectionField(this.getRpcStub(), request));
510510
}
511511

512+
/**
513+
* Drop a field from collection.
514+
*
515+
* @param request drop field request
516+
*/
517+
public void dropCollectionField(DropCollectionFieldReq request) {
518+
rpcUtils.retry(() -> collectionService.dropCollectionField(this.getRpcStub(), request));
519+
}
520+
512521
/**
513522
* drop a collection's properties.
514523
*
@@ -643,6 +652,15 @@ public void addCollectionFunction(AddCollectionFunctionReq request) {
643652
rpcUtils.retry(() -> collectionService.addCollectionFunction(this.getRpcStub(), request));
644653
}
645654

655+
/**
656+
* Add a function-backed field to collection.
657+
*
658+
* @param request add function field request
659+
*/
660+
public void addFunctionField(AddFunctionFieldReq request) {
661+
rpcUtils.retry(() -> collectionService.addFunctionField(this.getRpcStub(), request));
662+
}
663+
646664
/**
647665
* Alter a function of collection.
648666
*
@@ -661,6 +679,15 @@ public void dropCollectionFunction(DropCollectionFunctionReq request) {
661679
rpcUtils.retry(() -> collectionService.dropCollectionFunction(this.getRpcStub(), request));
662680
}
663681

682+
/**
683+
* Drop a function-backed field from collection.
684+
*
685+
* @param request drop function field request
686+
*/
687+
public void dropFunctionField(DropFunctionFieldReq request) {
688+
rpcUtils.retry(() -> collectionService.dropFunctionField(this.getRpcStub(), request));
689+
}
690+
664691
/////////////////////////////////////////////////////////////////////////////////////////////
665692
// Index Operations
666693
/////////////////////////////////////////////////////////////////////////////////////////////

sdk-core/src/main/java/io/milvus/v2/service/collection/CollectionService.java

Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -343,6 +343,40 @@ public Void alterCollectionField(MilvusServiceGrpc.MilvusServiceBlockingStub blo
343343
return null;
344344
}
345345

346+
public Void dropCollectionField(MilvusServiceGrpc.MilvusServiceBlockingStub blockingStub, DropCollectionFieldReq request) {
347+
String dbName = request.getDatabaseName();
348+
String collectionName = request.getCollectionName();
349+
String fieldName = request.getFieldName();
350+
Long fieldId = request.getFieldId();
351+
boolean hasFieldName = StringUtils.isNotBlank(fieldName);
352+
boolean hasFieldId = fieldId != null && fieldId > 0;
353+
if (hasFieldName == hasFieldId) {
354+
throw new MilvusClientException(ErrorCode.INVALID_PARAMS,
355+
"Exactly one of fieldName or fieldId must be provided.");
356+
}
357+
358+
String title = String.format("Drop field of collection: '%s' in database: '%s'", collectionName, dbName);
359+
AlterCollectionSchemaRequest.DropRequest.Builder dropBuilder = AlterCollectionSchemaRequest.DropRequest.newBuilder();
360+
if (hasFieldName) {
361+
dropBuilder.setFieldName(fieldName);
362+
} else {
363+
dropBuilder.setFieldId(fieldId);
364+
}
365+
366+
AlterCollectionSchemaRequest.Builder builder = AlterCollectionSchemaRequest.newBuilder()
367+
.setCollectionName(collectionName)
368+
.setAction(AlterCollectionSchemaRequest.Action.newBuilder()
369+
.setDropRequest(dropBuilder)
370+
.build());
371+
if (StringUtils.isNotEmpty(dbName)) {
372+
builder.setDbName(dbName);
373+
}
374+
375+
AlterCollectionSchemaResponse response = blockingStub.alterCollectionSchema(builder.build());
376+
rpcUtils.handleResponse(title, response.getAlterStatus());
377+
return null;
378+
}
379+
346380
public Void dropCollectionProperties(MilvusServiceGrpc.MilvusServiceBlockingStub blockingStub, DropCollectionPropertiesReq request) {
347381
String dbName = request.getDatabaseName();
348382
String collectionName = request.getCollectionName();
@@ -697,6 +731,40 @@ public Void addCollectionFunction(MilvusServiceGrpc.MilvusServiceBlockingStub bl
697731
return null;
698732
}
699733

734+
public Void addFunctionField(MilvusServiceGrpc.MilvusServiceBlockingStub blockingStub,
735+
AddFunctionFieldReq request) {
736+
if (request.getFunction() == null) {
737+
throw new MilvusClientException(ErrorCode.INVALID_PARAMS, "Function cannot be null.");
738+
}
739+
740+
String dbName = request.getDatabaseName();
741+
String collectionName = request.getCollectionName();
742+
String title = String.format("Add function field to collection: '%s' in database: '%s'", collectionName, dbName);
743+
744+
CreateCollectionReq.FieldSchema fieldSchema = SchemaUtils.convertFieldReqToFieldSchema(request);
745+
FieldSchema grpcFieldSchema = SchemaUtils.convertToGrpcFieldSchema(fieldSchema, true);
746+
AlterCollectionSchemaRequest.FieldInfo fieldInfo = AlterCollectionSchemaRequest.FieldInfo.newBuilder()
747+
.setFieldSchema(grpcFieldSchema)
748+
.build();
749+
AlterCollectionSchemaRequest.AddRequest addRequest = AlterCollectionSchemaRequest.AddRequest.newBuilder()
750+
.addFieldInfos(fieldInfo)
751+
.addFuncSchema(SchemaUtils.convertToGrpcFunction(request.getFunction()))
752+
.build();
753+
754+
AlterCollectionSchemaRequest.Builder builder = AlterCollectionSchemaRequest.newBuilder()
755+
.setCollectionName(collectionName)
756+
.setAction(AlterCollectionSchemaRequest.Action.newBuilder()
757+
.setAddRequest(addRequest)
758+
.build());
759+
if (StringUtils.isNotEmpty(dbName)) {
760+
builder.setDbName(dbName);
761+
}
762+
763+
AlterCollectionSchemaResponse response = blockingStub.alterCollectionSchema(builder.build());
764+
rpcUtils.handleResponse(title, response.getAlterStatus());
765+
return null;
766+
}
767+
700768
public Void alterCollectionFunction(MilvusServiceGrpc.MilvusServiceBlockingStub blockingStub,
701769
AlterCollectionFunctionReq request) {
702770
if (request.getFunction() == null) {
@@ -740,6 +808,32 @@ public Void dropCollectionFunction(MilvusServiceGrpc.MilvusServiceBlockingStub b
740808
return null;
741809
}
742810

811+
public Void dropFunctionField(MilvusServiceGrpc.MilvusServiceBlockingStub blockingStub,
812+
DropFunctionFieldReq request) {
813+
if (StringUtils.isEmpty(request.getFunctionName())) {
814+
throw new MilvusClientException(ErrorCode.INVALID_PARAMS, "Function name cannot be empty.");
815+
}
816+
817+
String dbName = request.getDatabaseName();
818+
String collectionName = request.getCollectionName();
819+
String title = String.format("Drop function field of collection: '%s' in database: '%s'", collectionName, dbName);
820+
AlterCollectionSchemaRequest.Builder builder = AlterCollectionSchemaRequest.newBuilder()
821+
.setCollectionName(collectionName)
822+
.setAction(AlterCollectionSchemaRequest.Action.newBuilder()
823+
.setDropRequest(AlterCollectionSchemaRequest.DropRequest.newBuilder()
824+
.setFunctionName(request.getFunctionName())
825+
.setDropFunctionOutputFields(true)
826+
.build())
827+
.build());
828+
if (StringUtils.isNotEmpty(dbName)) {
829+
builder.setDbName(dbName);
830+
}
831+
832+
AlterCollectionSchemaResponse response = blockingStub.alterCollectionSchema(builder.build());
833+
rpcUtils.handleResponse(title, response.getAlterStatus());
834+
return null;
835+
}
836+
743837
private void waitForLoadCollection(MilvusServiceGrpc.MilvusServiceBlockingStub blockingStub, String databaseName,
744838
String collectionName, Long timeoutMs, boolean refreshLoad) {
745839
long startTime = System.currentTimeMillis();
Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
/*
2+
* Licensed to the Apache Software Foundation (ASF) under one
3+
* or more contributor license agreements. See the NOTICE file
4+
* distributed with this work for additional information
5+
* regarding copyright ownership. The ASF licenses this file
6+
* to you under the Apache License, Version 2.0 (the
7+
* "License"); you may not use this file except in compliance
8+
* with the License. You may obtain a copy of the License at
9+
*
10+
* http://www.apache.org/licenses/LICENSE-2.0
11+
*
12+
* Unless required by applicable law or agreed to in writing,
13+
* software distributed under the License is distributed on an
14+
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15+
* KIND, either express or implied. See the License for the
16+
* specific language governing permissions and limitations
17+
* under the License.
18+
*/
19+
20+
package io.milvus.v2.service.collection.request;
21+
22+
public class AddFunctionFieldReq extends AddFieldReq {
23+
private String collectionName;
24+
private String databaseName;
25+
private CreateCollectionReq.Function function;
26+
27+
private AddFunctionFieldReq(AddFunctionFieldReqBuilder builder) {
28+
super(builder);
29+
this.collectionName = builder.collectionName;
30+
this.databaseName = builder.databaseName;
31+
this.function = builder.function;
32+
}
33+
34+
public String getCollectionName() {
35+
return collectionName;
36+
}
37+
38+
public void setCollectionName(String collectionName) {
39+
this.collectionName = collectionName;
40+
}
41+
42+
public String getDatabaseName() {
43+
return databaseName;
44+
}
45+
46+
public void setDatabaseName(String databaseName) {
47+
this.databaseName = databaseName;
48+
}
49+
50+
public CreateCollectionReq.Function getFunction() {
51+
return function;
52+
}
53+
54+
public void setFunction(CreateCollectionReq.Function function) {
55+
this.function = function;
56+
}
57+
58+
@Override
59+
public String toString() {
60+
return "AddFunctionFieldReq{" +
61+
"collectionName='" + collectionName + '\'' +
62+
", databaseName='" + databaseName + '\'' +
63+
", function=" + function +
64+
", " + super.toString() +
65+
'}';
66+
}
67+
68+
public static AddFunctionFieldReqBuilder builder() {
69+
return new AddFunctionFieldReqBuilder();
70+
}
71+
72+
public static class AddFunctionFieldReqBuilder extends AddFieldReq.AddFieldReqBuilder<AddFunctionFieldReqBuilder> {
73+
private String collectionName = "";
74+
private String databaseName = "";
75+
private CreateCollectionReq.Function function;
76+
77+
private AddFunctionFieldReqBuilder() {
78+
}
79+
80+
public AddFunctionFieldReqBuilder collectionName(String collectionName) {
81+
this.collectionName = collectionName;
82+
return this;
83+
}
84+
85+
public AddFunctionFieldReqBuilder databaseName(String databaseName) {
86+
this.databaseName = databaseName;
87+
return this;
88+
}
89+
90+
public AddFunctionFieldReqBuilder function(CreateCollectionReq.Function function) {
91+
this.function = function;
92+
return this;
93+
}
94+
95+
@Override
96+
public AddFunctionFieldReq build() {
97+
return new AddFunctionFieldReq(this);
98+
}
99+
}
100+
}
Lines changed: 114 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,114 @@
1+
/*
2+
* Licensed to the Apache Software Foundation (ASF) under one
3+
* or more contributor license agreements. See the NOTICE file
4+
* distributed with this work for additional information
5+
* regarding copyright ownership. The ASF licenses this file
6+
* to you under the Apache License, Version 2.0 (the
7+
* "License"); you may not use this file except in compliance
8+
* with the License. You may obtain a copy of the License at
9+
*
10+
* http://www.apache.org/licenses/LICENSE-2.0
11+
*
12+
* Unless required by applicable law or agreed to in writing,
13+
* software distributed under the License is distributed on an
14+
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15+
* KIND, either express or implied. See the License for the
16+
* specific language governing permissions and limitations
17+
* under the License.
18+
*/
19+
20+
package io.milvus.v2.service.collection.request;
21+
22+
public class DropCollectionFieldReq {
23+
private String collectionName;
24+
private String databaseName;
25+
private String fieldName;
26+
private Long fieldId;
27+
28+
private DropCollectionFieldReq(DropCollectionFieldReqBuilder builder) {
29+
this.collectionName = builder.collectionName;
30+
this.databaseName = builder.databaseName;
31+
this.fieldName = builder.fieldName;
32+
this.fieldId = builder.fieldId;
33+
}
34+
35+
public String getCollectionName() {
36+
return collectionName;
37+
}
38+
39+
public void setCollectionName(String collectionName) {
40+
this.collectionName = collectionName;
41+
}
42+
43+
public String getDatabaseName() {
44+
return databaseName;
45+
}
46+
47+
public void setDatabaseName(String databaseName) {
48+
this.databaseName = databaseName;
49+
}
50+
51+
public String getFieldName() {
52+
return fieldName;
53+
}
54+
55+
public void setFieldName(String fieldName) {
56+
this.fieldName = fieldName;
57+
}
58+
59+
public Long getFieldId() {
60+
return fieldId;
61+
}
62+
63+
public void setFieldId(Long fieldId) {
64+
this.fieldId = fieldId;
65+
}
66+
67+
@Override
68+
public String toString() {
69+
return "DropCollectionFieldReq{" +
70+
"collectionName='" + collectionName + '\'' +
71+
", databaseName='" + databaseName + '\'' +
72+
", fieldName='" + fieldName + '\'' +
73+
", fieldId=" + fieldId +
74+
'}';
75+
}
76+
77+
public static DropCollectionFieldReqBuilder builder() {
78+
return new DropCollectionFieldReqBuilder();
79+
}
80+
81+
public static class DropCollectionFieldReqBuilder {
82+
private String collectionName = "";
83+
private String databaseName = "";
84+
private String fieldName = "";
85+
private Long fieldId;
86+
87+
private DropCollectionFieldReqBuilder() {
88+
}
89+
90+
public DropCollectionFieldReqBuilder collectionName(String collectionName) {
91+
this.collectionName = collectionName;
92+
return this;
93+
}
94+
95+
public DropCollectionFieldReqBuilder databaseName(String databaseName) {
96+
this.databaseName = databaseName;
97+
return this;
98+
}
99+
100+
public DropCollectionFieldReqBuilder fieldName(String fieldName) {
101+
this.fieldName = fieldName;
102+
return this;
103+
}
104+
105+
public DropCollectionFieldReqBuilder fieldId(Long fieldId) {
106+
this.fieldId = fieldId;
107+
return this;
108+
}
109+
110+
public DropCollectionFieldReq build() {
111+
return new DropCollectionFieldReq(this);
112+
}
113+
}
114+
}

0 commit comments

Comments
 (0)