@@ -555,6 +555,98 @@ var _ = Describe("Consumer stream test", func() {
555555 }()
556556 })
557557
558+ It ("SQL filter consumer" , func () {
559+ qName := generateName ("SQL filter consumer" )
560+ connection , err := Dial (context .Background (), "amqp://" , nil )
561+ Expect (err ).To (BeNil ())
562+ queueInfo , err := connection .Management ().DeclareQueue (context .Background (), & StreamQueueSpecification {
563+ Name : qName ,
564+ })
565+ Expect (err ).To (BeNil ())
566+ Expect (queueInfo ).NotTo (BeNil ())
567+ Expect (queueInfo .name ).To (Equal (qName ))
568+
569+ publishMessagesWithMessageLogic (qName , "not_in_the_filter" , 10 , func (msg * amqp.Message ) {
570+ msg .Properties = & amqp.MessageProperties {Subject : ptr ("not" )}
571+ })
572+
573+ publishMessagesWithMessageLogic (qName , "in_the_filter" , 10 , func (msg * amqp.Message ) {
574+ msg .Properties = & amqp.MessageProperties {Subject : ptr ("in_the_filter" )}
575+ })
576+
577+ publishMessagesWithMessageLogic (qName , "in_the_filter_with_more" , 10 , func (msg * amqp.Message ) {
578+ msg .Properties = & amqp.MessageProperties {Subject : ptr ("in_the_filter_with_more" )}
579+ })
580+
581+ consumer , err := connection .NewConsumer (context .Background (), qName , & StreamConsumerOptions {
582+ InitialCredits : 200 ,
583+ Offset : & OffsetFirst {},
584+ StreamFilterOptions : & StreamFilterOptions {
585+ SQL : "properties.subject LIKE '%in_the_filter%'" ,
586+ },
587+ })
588+ Expect (err ).To (BeNil ())
589+ Expect (consumer ).NotTo (BeNil ())
590+ Expect (consumer ).To (BeAssignableToTypeOf (& Consumer {}))
591+ for i := 0 ; i < 20 ; i ++ {
592+ dc , err := consumer .Receive (context .Background ())
593+ Expect (err ).To (BeNil ())
594+ Expect (dc .Message ()).NotTo (BeNil ())
595+ if i < 10 {
596+ Expect (string (dc .Message ().GetData ())).To (Equal (fmt .Sprintf ("Message_id:%d_label:%s" , i , "in_the_filter" )))
597+ } else {
598+ Expect (string (dc .Message ().GetData ())).To (Equal (fmt .Sprintf ("Message_id:%d_label:%s" , i - 10 , "in_the_filter_with_more" )))
599+ }
600+ Expect (dc .Accept (context .Background ())).To (BeNil ())
601+ }
602+
603+ Expect (consumer .Close (context .Background ())).To (BeNil ())
604+ Expect (connection .Management ().DeleteQueue (context .Background (), qName )).To (BeNil ())
605+ Expect (connection .Close (context .Background ())).To (BeNil ())
606+ })
607+
608+ It ("SQL filter consumer combined to other fields" , func () {
609+ qName := generateName ("SQL filter consumer combined to other fields" )
610+ connection , err := Dial (context .Background (), "amqp://" , nil )
611+ Expect (err ).To (BeNil ())
612+ queueInfo , err := connection .Management ().DeclareQueue (context .Background (), & StreamQueueSpecification {
613+ Name : qName ,
614+ })
615+ Expect (err ).To (BeNil ())
616+ Expect (queueInfo ).NotTo (BeNil ())
617+ Expect (queueInfo .name ).To (Equal (qName ))
618+ publishMessagesWithMessageLogic (qName , "not_in_the_filter" , 10 , func (msg * amqp.Message ) {
619+ msg .Properties = & amqp.MessageProperties {Subject : ptr ("not" )}
620+ })
621+
622+ publishMessagesWithMessageLogic (qName , "in_the_filter" , 10 , func (msg * amqp.Message ) {
623+ msg .Properties = & amqp.MessageProperties {Subject : ptr ("p_in_the_filter" ), To : ptr ("the_id" )}
624+ msg .ApplicationProperties = map [string ]interface {}{"a_in_the_filter_key" : "a_in_the_filter_value" }
625+ })
626+
627+ consumer , err := connection .NewConsumer (context .Background (), qName , & StreamConsumerOptions {
628+ InitialCredits : 200 ,
629+ Offset : & OffsetFirst {},
630+ StreamFilterOptions : & StreamFilterOptions {
631+ SQL : "properties.subject LIKE '%in_the_filter%' AND properties.to = 'the_id' AND a_in_the_filter_key = 'a_in_the_filter_value'" ,
632+ },
633+ })
634+
635+ Expect (err ).To (BeNil ())
636+ Expect (consumer ).NotTo (BeNil ())
637+ Expect (consumer ).To (BeAssignableToTypeOf (& Consumer {}))
638+ for i := 0 ; i < 10 ; i ++ {
639+ dc , err := consumer .Receive (context .Background ())
640+ Expect (err ).To (BeNil ())
641+ Expect (dc .Message ()).NotTo (BeNil ())
642+ Expect (string (dc .Message ().GetData ())).To (Equal (fmt .Sprintf ("Message_id:%d_label:%s" , i , "in_the_filter" )))
643+ Expect (dc .Accept (context .Background ())).To (BeNil ())
644+ }
645+
646+ Expect (consumer .Close (context .Background ())).To (BeNil ())
647+ Expect (connection .Management ().DeleteQueue (context .Background (), qName )).To (BeNil ())
648+ Expect (connection .Close (context .Background ())).To (BeNil ())
649+ })
558650})
559651
560652type msgLogic = func (* amqp.Message )
0 commit comments