@@ -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,49 @@ 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+ if (CollectionUtils .isEmpty (request .getFunction ().getOutputFieldNames ())
740+ || request .getFunction ().getOutputFieldNames ().size () != 1
741+ || !StringUtils .equals (request .getFieldName (), request .getFunction ().getOutputFieldNames ().get (0 ))) {
742+ throw new MilvusClientException (ErrorCode .INVALID_PARAMS ,
743+ "Function must have exactly one output field matching the field being added." );
744+ }
745+
746+ String dbName = request .getDatabaseName ();
747+ String collectionName = request .getCollectionName ();
748+ String title = String .format ("Add function field to collection: '%s' in database: '%s'" , collectionName , dbName );
749+
750+ CreateCollectionReq .FieldSchema fieldSchema = SchemaUtils .convertFieldReqToFieldSchema (request );
751+ FieldSchema grpcFieldSchema = SchemaUtils .convertToGrpcFieldSchema (fieldSchema )
752+ .toBuilder ()
753+ .setIsFunctionOutput (true )
754+ .build ();
755+ AlterCollectionSchemaRequest .FieldInfo fieldInfo = AlterCollectionSchemaRequest .FieldInfo .newBuilder ()
756+ .setFieldSchema (grpcFieldSchema )
757+ .build ();
758+ AlterCollectionSchemaRequest .AddRequest addRequest = AlterCollectionSchemaRequest .AddRequest .newBuilder ()
759+ .addFieldInfos (fieldInfo )
760+ .addFuncSchema (SchemaUtils .convertToGrpcFunction (request .getFunction ()))
761+ .build ();
762+
763+ AlterCollectionSchemaRequest .Builder builder = AlterCollectionSchemaRequest .newBuilder ()
764+ .setCollectionName (collectionName )
765+ .setAction (AlterCollectionSchemaRequest .Action .newBuilder ()
766+ .setAddRequest (addRequest )
767+ .build ());
768+ if (StringUtils .isNotEmpty (dbName )) {
769+ builder .setDbName (dbName );
770+ }
771+
772+ AlterCollectionSchemaResponse response = blockingStub .alterCollectionSchema (builder .build ());
773+ rpcUtils .handleResponse (title , response .getAlterStatus ());
774+ return null ;
775+ }
776+
700777 public Void alterCollectionFunction (MilvusServiceGrpc .MilvusServiceBlockingStub blockingStub ,
701778 AlterCollectionFunctionReq request ) {
702779 if (request .getFunction () == null ) {
@@ -740,6 +817,32 @@ public Void dropCollectionFunction(MilvusServiceGrpc.MilvusServiceBlockingStub b
740817 return null ;
741818 }
742819
820+ public Void dropFunctionField (MilvusServiceGrpc .MilvusServiceBlockingStub blockingStub ,
821+ DropFunctionFieldReq request ) {
822+ if (StringUtils .isEmpty (request .getFunctionName ())) {
823+ throw new MilvusClientException (ErrorCode .INVALID_PARAMS , "Function name cannot be empty." );
824+ }
825+
826+ String dbName = request .getDatabaseName ();
827+ String collectionName = request .getCollectionName ();
828+ String title = String .format ("Drop function field of collection: '%s' in database: '%s'" , collectionName , dbName );
829+ AlterCollectionSchemaRequest .Builder builder = AlterCollectionSchemaRequest .newBuilder ()
830+ .setCollectionName (collectionName )
831+ .setAction (AlterCollectionSchemaRequest .Action .newBuilder ()
832+ .setDropRequest (AlterCollectionSchemaRequest .DropRequest .newBuilder ()
833+ .setFunctionName (request .getFunctionName ())
834+ .setDropFunctionOutputFields (true )
835+ .build ())
836+ .build ());
837+ if (StringUtils .isNotEmpty (dbName )) {
838+ builder .setDbName (dbName );
839+ }
840+
841+ AlterCollectionSchemaResponse response = blockingStub .alterCollectionSchema (builder .build ());
842+ rpcUtils .handleResponse (title , response .getAlterStatus ());
843+ return null ;
844+ }
845+
743846 private void waitForLoadCollection (MilvusServiceGrpc .MilvusServiceBlockingStub blockingStub , String databaseName ,
744847 String collectionName , Long timeoutMs , boolean refreshLoad ) {
745848 long startTime = System .currentTimeMillis ();
0 commit comments