@@ -17,7 +17,9 @@ use databend_common_meta_app::data_mask::CreateDatamaskReply;
1717use databend_common_meta_app:: data_mask:: CreateDatamaskReq ;
1818use databend_common_meta_app:: data_mask:: DataMaskId ;
1919use databend_common_meta_app:: data_mask:: DataMaskIdIdent ;
20+ use databend_common_meta_app:: data_mask:: DataMaskIdToNameIdent ;
2021use databend_common_meta_app:: data_mask:: DataMaskNameIdent ;
22+ use databend_common_meta_app:: data_mask:: DataMaskNameIdentRaw ;
2123use databend_common_meta_app:: data_mask:: DatamaskMeta ;
2224use databend_common_meta_app:: data_mask:: MaskPolicyIdTableId ;
2325use databend_common_meta_app:: data_mask:: MaskPolicyTableIdIdent ;
@@ -46,6 +48,7 @@ use crate::txn_condition_util::txn_cond_eq_keys_with_prefix;
4648use crate :: txn_condition_util:: txn_cond_eq_seq;
4749use crate :: txn_core_util:: send_txn;
4850use crate :: txn_core_util:: txn_delete_exact;
51+ use crate :: txn_op_builder_util:: txn_op_del;
4952use crate :: txn_op_builder_util:: txn_op_put_pb;
5053
5154/// DatamaskApi is implemented upon kvapi::KVApi.
@@ -77,6 +80,8 @@ impl<KV: kvapi::KVApi<Error = MetaError>> DatamaskApi for KV {
7780
7881 let id = DataMaskId :: new ( masking_policy_id) ;
7982 let id_ident = DataMaskIdIdent :: new_generic ( name_ident. tenant ( ) , id) ;
83+ let id_to_name_ident = DataMaskIdToNameIdent :: new_generic ( name_ident. tenant ( ) , id) ;
84+ let name_raw = DataMaskNameIdentRaw :: from ( name_ident. clone ( ) ) ;
8085 let id_list_key = MaskPolicyTableIdListIdent :: new_from ( name_ident. clone ( ) ) ;
8186
8287 debug ! (
@@ -91,9 +96,11 @@ impl<KV: kvapi::KVApi<Error = MetaError>> DatamaskApi for KV {
9196 txn. condition . push ( txn_cond_eq_seq ( name_ident, 0 ) ) ;
9297 txn. condition
9398 . push ( txn_cond_eq_seq ( & row_access_name_ident, 0 ) ) ;
99+
94100 txn. if_then . extend ( vec ! [
95- txn_op_put_pb( name_ident, & id, None ) ?, // name -> db_id
101+ txn_op_put_pb( name_ident, & id, None ) ?, // name -> masking_policy_id
96102 txn_op_put_pb( & id_ident, & meta, None ) ?, // id -> meta
103+ txn_op_put_pb( & id_to_name_ident, & name_raw, None ) ?, // id -> name
97104 // TODO: Tentative retention for compatibility MaskPolicyTableIdListIdent related logic. It can be directly deleted later
98105 txn_op_put_pb( & id_list_key, & id_list, None ) ?, // data mask name -> id_list
99106 ] ) ;
@@ -159,7 +166,9 @@ impl<KV: kvapi::KVApi<Error = MetaError>> DatamaskApi for KV {
159166 }
160167
161168 // No references - drop the policy
162- let id_ident = seq_id. data . into_t_ident ( tenant) ;
169+ let id_ident = seq_id. data . into_t_ident ( tenant. clone ( ) ) ;
170+ let id_to_name_ident =
171+ DataMaskIdToNameIdent :: new_generic ( tenant, DataMaskId :: new ( policy_id) ) ;
163172 let mut txn = TxnRequest :: default ( ) ;
164173
165174 // Ensure no new references were created
@@ -168,6 +177,7 @@ impl<KV: kvapi::KVApi<Error = MetaError>> DatamaskApi for KV {
168177
169178 txn_delete_exact ( & mut txn, name_ident, seq_id. seq ) ;
170179 txn_delete_exact ( & mut txn, & id_ident, seq_meta. seq ) ;
180+ txn. if_then . push ( txn_op_del ( & id_to_name_ident) ) ;
171181
172182 // TODO: Tentative retention for compatibility. Can be deleted later.
173183 clear_table_column_mask_policy ( self , name_ident, & mut txn) . await ?;
@@ -191,6 +201,26 @@ impl<KV: kvapi::KVApi<Error = MetaError>> DatamaskApi for KV {
191201 Ok ( res. map ( |( _, seq_meta) | seq_meta) )
192202 }
193203
204+ async fn get_data_mask_id (
205+ & self ,
206+ name_ident : & DataMaskNameIdent ,
207+ ) -> Result < Option < SeqV < DataMaskId > > , MetaError > {
208+ self . get_pb ( name_ident) . await
209+ }
210+
211+ async fn get_data_mask_name_by_id (
212+ & self ,
213+ tenant : & Tenant ,
214+ policy_id : u64 ,
215+ ) -> Result < Option < String > , MetaError > {
216+ let ident = DataMaskIdToNameIdent :: new_generic ( tenant. clone ( ) , DataMaskId :: new ( policy_id) ) ;
217+ let seq_meta = self . get_pb ( & ident) . await ?;
218+
219+ debug ! ( ident : % =( & ident) ; "get_data_mask_name_by_id" ) ;
220+
221+ Ok ( seq_meta. map ( |s| s. data . data_mask_name ( ) . to_string ( ) ) )
222+ }
223+
194224 async fn get_data_mask_by_id (
195225 & self ,
196226 tenant : & Tenant ,
0 commit comments