@@ -64,28 +64,37 @@ pub async fn find_ids(
6464 let mut builder = sqlx:: QueryBuilder :: new ( "SELECT id FROM instances WHERE TRUE " ) ; // The TRUE will be optimized away.
6565
6666 if let Some ( label) = filter. label {
67- if label. key . is_empty ( ) && label. value . is_some ( ) {
68- builder. push (
69- " AND EXISTS (
67+ match ( label. key . is_empty ( ) , label. value ) {
68+ // Label key is empty, label value is set.
69+ ( true , Some ( value) ) => {
70+ builder. push (
71+ " AND EXISTS (
7072 SELECT 1
7173 FROM jsonb_each_text(labels) AS kv
7274 WHERE kv.value = " ,
73- ) ;
74- builder. push_bind ( label. value . unwrap ( ) ) ;
75- builder. push ( ")" ) ;
76- } else if label. key . is_empty ( ) && label. value . is_none ( ) {
77- return Err ( DatabaseError :: InvalidArgument (
78- "finding instances based on label needs either key or a value." . to_string ( ) ,
79- ) ) ;
80- } else if !label. key . is_empty ( ) && label. value . is_none ( ) {
81- builder. push ( " AND labels ->> " ) ;
82- builder. push_bind ( label. key ) ;
83- builder. push ( " IS NOT NULL" ) ;
84- } else if !label. key . is_empty ( ) && label. value . is_some ( ) {
85- builder. push ( " AND labels ->> " ) ;
86- builder. push_bind ( label. key ) ;
87- builder. push ( " = " ) ;
88- builder. push_bind ( label. value . unwrap ( ) ) ;
75+ ) ;
76+ builder. push_bind ( value) ;
77+ builder. push ( ")" ) ;
78+ }
79+ // Label key is empty, label value is not set.
80+ ( true , None ) => {
81+ return Err ( DatabaseError :: InvalidArgument (
82+ "finding instances based on label needs either key or a value." . to_string ( ) ,
83+ ) ) ;
84+ }
85+ // Label key is not empty, label value is not set.
86+ ( false , None ) => {
87+ builder. push ( " AND labels ->> " ) ;
88+ builder. push_bind ( label. key ) ;
89+ builder. push ( " IS NOT NULL" ) ;
90+ }
91+ // Label key is not empty, label value is set.
92+ ( false , Some ( value) ) => {
93+ builder. push ( " AND labels ->> " ) ;
94+ builder. push_bind ( label. key ) ;
95+ builder. push ( " = " ) ;
96+ builder. push_bind ( value) ;
97+ }
8998 }
9099 }
91100
0 commit comments