@@ -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 ) {
@@ -728,15 +805,47 @@ public Void dropCollectionFunction(MilvusServiceGrpc.MilvusServiceBlockingStub b
728805 String dbName = request .getDatabaseName ();
729806 String collectionName = request .getCollectionName ();
730807 String title = String .format ("Drop function to collection: '%s' in database: '%s'" , collectionName , dbName );
731- DropCollectionFunctionRequest .Builder builder = DropCollectionFunctionRequest .newBuilder ()
808+ AlterCollectionSchemaRequest .Builder builder = AlterCollectionSchemaRequest .newBuilder ()
732809 .setCollectionName (collectionName )
733- .setFunctionName (request .getFunctionName ());
810+ .setAction (AlterCollectionSchemaRequest .Action .newBuilder ()
811+ .setDropRequest (AlterCollectionSchemaRequest .DropRequest .newBuilder ()
812+ .setFunctionName (request .getFunctionName ())
813+ .setDropFunctionOutputFields (false )
814+ .build ())
815+ .build ());
816+ if (StringUtils .isNotEmpty (dbName )) {
817+ builder .setDbName (dbName );
818+ }
819+
820+ AlterCollectionSchemaResponse response = blockingStub .alterCollectionSchema (builder .build ());
821+ rpcUtils .handleResponse (title , response .getAlterStatus ());
822+
823+ return null ;
824+ }
825+
826+ public Void dropFunctionField (MilvusServiceGrpc .MilvusServiceBlockingStub blockingStub ,
827+ DropFunctionFieldReq request ) {
828+ if (StringUtils .isEmpty (request .getFunctionName ())) {
829+ throw new MilvusClientException (ErrorCode .INVALID_PARAMS , "Function name cannot be empty." );
830+ }
831+
832+ String dbName = request .getDatabaseName ();
833+ String collectionName = request .getCollectionName ();
834+ String title = String .format ("Drop function field of collection: '%s' in database: '%s'" , collectionName , dbName );
835+ AlterCollectionSchemaRequest .Builder builder = AlterCollectionSchemaRequest .newBuilder ()
836+ .setCollectionName (collectionName )
837+ .setAction (AlterCollectionSchemaRequest .Action .newBuilder ()
838+ .setDropRequest (AlterCollectionSchemaRequest .DropRequest .newBuilder ()
839+ .setFunctionName (request .getFunctionName ())
840+ .setDropFunctionOutputFields (true )
841+ .build ())
842+ .build ());
734843 if (StringUtils .isNotEmpty (dbName )) {
735844 builder .setDbName (dbName );
736845 }
737- Status status = blockingStub .dropCollectionFunction (builder .build ());
738- rpcUtils .handleResponse (title , status );
739846
847+ AlterCollectionSchemaResponse response = blockingStub .alterCollectionSchema (builder .build ());
848+ rpcUtils .handleResponse (title , response .getAlterStatus ());
740849 return null ;
741850 }
742851
0 commit comments