@@ -5042,6 +5042,124 @@ describe('Parameterized', () => {
50425042
50435043 expect ( queries . getResultTable ( 'q1' ) ) . toEqual ( { r1 : { c1 : 'a' , c2 : 'odd' } } ) ;
50445044 } ) ;
5045+
5046+ test ( 'changes param from string to array and back' , ( ) => {
5047+ queries . setQueryDefinition (
5048+ 'q1' ,
5049+ 't1' ,
5050+ ( { select, where, param} ) => {
5051+ select ( 'c1' ) ;
5052+ where ( ( getTableCell ) => {
5053+ const p = param ( 'p1' ) ;
5054+ return Array . isArray ( p )
5055+ ? ( p as string [ ] ) . includes ( getTableCell ( 'c1' ) as string )
5056+ : getTableCell ( 'c1' ) === p ;
5057+ } ) ;
5058+ } ,
5059+ { p1 : 'a' } ,
5060+ ) ;
5061+
5062+ expect ( queries . getResultTable ( 'q1' ) ) . toEqual ( { r1 : { c1 : 'a' } } ) ;
5063+
5064+ queries . setParamValue ( 'q1' , 'p1' , [ 'a' , 'c' , 'e' ] ) ;
5065+
5066+ expect ( queries . getResultTable ( 'q1' ) ) . toEqual ( {
5067+ r1 : { c1 : 'a' } ,
5068+ r3 : { c1 : 'c' } ,
5069+ r5 : { c1 : 'e' } ,
5070+ } ) ;
5071+
5072+ queries . setParamValue ( 'q1' , 'p1' , 'b' ) ;
5073+
5074+ expect ( queries . getResultTable ( 'q1' ) ) . toEqual ( { r2 : { c1 : 'b' } } ) ;
5075+ } ) ;
5076+
5077+ test ( 'changes param from one array to another array' , ( ) => {
5078+ queries . setQueryDefinition (
5079+ 'q1' ,
5080+ 't1' ,
5081+ ( { select, where, param} ) => {
5082+ select ( 'c1' ) ;
5083+ where ( ( getTableCell ) => {
5084+ const p = param ( 'p1' ) as string [ ] ;
5085+ return p . includes ( getTableCell ( 'c1' ) as string ) ;
5086+ } ) ;
5087+ } ,
5088+ { p1 : [ 'a' , 'c' ] } ,
5089+ ) ;
5090+
5091+ expect ( queries . getResultTable ( 'q1' ) ) . toEqual ( {
5092+ r1 : { c1 : 'a' } ,
5093+ r3 : { c1 : 'c' } ,
5094+ } ) ;
5095+
5096+ queries . setParamValue ( 'q1' , 'p1' , [ 'b' , 'd' ] ) ;
5097+
5098+ expect ( queries . getResultTable ( 'q1' ) ) . toEqual ( {
5099+ r2 : { c1 : 'b' } ,
5100+ r4 : { c1 : 'd' } ,
5101+ } ) ;
5102+
5103+ queries . setParamValue ( 'q1' , 'p1' , [ 'a' , 'c' ] ) ;
5104+
5105+ expect ( queries . getResultTable ( 'q1' ) ) . toEqual ( {
5106+ r1 : { c1 : 'a' } ,
5107+ r3 : { c1 : 'c' } ,
5108+ } ) ;
5109+ } ) ;
5110+
5111+ test ( 'setting array param to equivalent array does not trigger' , ( ) => {
5112+ const listener = vi . fn ( ) ;
5113+ queries . setQueryDefinition (
5114+ 'q1' ,
5115+ 't1' ,
5116+ ( { select, where, param} ) => {
5117+ select ( 'c1' ) ;
5118+ where ( ( getTableCell ) => {
5119+ const p = param ( 'p1' ) as string [ ] ;
5120+ return p . includes ( getTableCell ( 'c1' ) as string ) ;
5121+ } ) ;
5122+ } ,
5123+ { p1 : [ 'a' , 'c' ] } ,
5124+ ) ;
5125+
5126+ queries . addResultTableListener ( 'q1' , listener ) ;
5127+
5128+ expect ( queries . getResultTable ( 'q1' ) ) . toEqual ( {
5129+ r1 : { c1 : 'a' } ,
5130+ r3 : { c1 : 'c' } ,
5131+ } ) ;
5132+
5133+ queries . setParamValue ( 'q1' , 'p1' , [ 'a' , 'c' ] ) ;
5134+
5135+ expect ( listener ) . not . toHaveBeenCalled ( ) ;
5136+ expect ( queries . getResultTable ( 'q1' ) ) . toEqual ( {
5137+ r1 : { c1 : 'a' } ,
5138+ r3 : { c1 : 'c' } ,
5139+ } ) ;
5140+ } ) ;
5141+
5142+ test ( 'setting primitive param to same value does not trigger' , ( ) => {
5143+ const listener = vi . fn ( ) ;
5144+ queries . setQueryDefinition (
5145+ 'q1' ,
5146+ 't1' ,
5147+ ( { select, where, param} ) => {
5148+ select ( 'c1' ) ;
5149+ where ( ( getTableCell ) => getTableCell ( 'c1' ) === param ( 'p1' ) ) ;
5150+ } ,
5151+ { p1 : 'a' } ,
5152+ ) ;
5153+
5154+ queries . addResultTableListener ( 'q1' , listener ) ;
5155+
5156+ expect ( queries . getResultTable ( 'q1' ) ) . toEqual ( { r1 : { c1 : 'a' } } ) ;
5157+
5158+ queries . setParamValue ( 'q1' , 'p1' , 'a' ) ;
5159+
5160+ expect ( listener ) . not . toHaveBeenCalled ( ) ;
5161+ expect ( queries . getResultTable ( 'q1' ) ) . toEqual ( { r1 : { c1 : 'a' } } ) ;
5162+ } ) ;
50455163 } ) ;
50465164
50475165 describe ( 'setParamValues' , ( ) => {
@@ -5098,6 +5216,33 @@ describe('Parameterized', () => {
50985216
50995217 expect ( queries . getResultRowIds ( 'q1' ) ) . toEqual ( [ 'r2' ] ) ;
51005218 } ) ;
5219+
5220+ test ( 'deletes param when missing from setParamValues' , ( ) => {
5221+ queries . setQueryDefinition (
5222+ 'q1' ,
5223+ 't1' ,
5224+ ( { select, where, param} ) => {
5225+ select ( 'c1' ) ;
5226+ where (
5227+ ( getTableCell ) =>
5228+ getTableCell ( 'c1' ) === param ( 'p1' ) ||
5229+ getTableCell ( 'c2' ) === param ( 'p2' ) ,
5230+ ) ;
5231+ } ,
5232+ { p1 : 'a' , p2 : 'even' } ,
5233+ ) ;
5234+
5235+ expect ( queries . getResultTable ( 'q1' ) ) . toEqual ( {
5236+ r1 : { c1 : 'a' } ,
5237+ r2 : { c1 : 'b' } ,
5238+ r4 : { c1 : 'd' } ,
5239+ } ) ;
5240+
5241+ queries . setParamValues ( 'q1' , { p1 : 'c' } ) ;
5242+
5243+ expect ( queries . getResultTable ( 'q1' ) ) . toEqual ( { r3 : { c1 : 'c' } } ) ;
5244+ expect ( queries . getParamValues ( 'q1' ) ) . toEqual ( { p1 : 'c' } ) ;
5245+ } ) ;
51015246 } ) ;
51025247
51035248 describe ( 'Listeners' , ( ) => {
0 commit comments