@@ -94,14 +94,47 @@ describe("sql.compile", () => {
9494 expect ( sql . compile ( node ) ) . toEqual ( { text : "select 1" , values : [ ] } ) ;
9595 } ) ;
9696
97- it ( "with values " , ( ) => {
97+ it ( "with value " , ( ) => {
9898 const node = sql . query `select ${ sql . value ( 1 ) } ::integer` ;
9999 expect ( sql . compile ( node ) ) . toEqual ( {
100100 text : "select $1::integer" ,
101101 values : [ 1 ] ,
102102 } ) ;
103103 } ) ;
104104
105+ it ( "with two values" , ( ) => {
106+ const node = sql . query `select ${ sql . value ( 1 ) } ::integer + ${ sql . value (
107+ 2
108+ ) } ::integer`;
109+ expect ( sql . compile ( node ) ) . toEqual ( {
110+ text : "select $1::integer + $2::integer" ,
111+ values : [ 1 , 2 ] ,
112+ } ) ;
113+ } ) ;
114+
115+ it ( "with similar value twice" , ( ) => {
116+ // This _should not_ use the same placeholder as it makes the compiled SQL
117+ // dependent on the values used; better for the SQL to be stable.
118+ const node = sql . query `select ${ sql . value ( 1 ) } ::integer + ${ sql . value (
119+ 1
120+ ) } ::integer`;
121+ expect ( sql . compile ( node ) ) . toEqual ( {
122+ text : "select $1::integer + $2::integer" ,
123+ values : [ 1 , 1 ] ,
124+ } ) ;
125+ } ) ;
126+
127+ it ( "with exact same value node twice" , ( ) => {
128+ // This _should_ use the same placeholder because we've explicitly used the
129+ // same `sql.value` node.
130+ const sqlValue = sql . value ( 1 ) ;
131+ const node = sql . query `select ${ sqlValue } ::integer + ${ sqlValue } ::integer` ;
132+ expect ( sql . compile ( node ) ) . toEqual ( {
133+ text : "select $1::integer + $1::integer" ,
134+ values : [ 1 ] ,
135+ } ) ;
136+ } ) ;
137+
105138 it ( "with sub-sub-sub query" , ( ) => {
106139 const node = sql . query `select ${ sql . query `1 ${ sql . query `from ${ sql . query `foo` } ` } ` } ` ;
107140 expect ( sql . compile ( node ) ) . toEqual ( {
0 commit comments