@@ -77,6 +77,45 @@ describe('SQL', () => {
77
77
} )
78
78
} )
79
79
80
+ describe ( 'pass nested SQLStatement instances' , ( ) => {
81
+ it ( 'should not handle nested SQLStatement as parameter' , ( ) => {
82
+ const nested = SQL `table_name`
83
+ const statement = SQL `SELECT * FROM ${ nested } `
84
+ assert . equal ( statement . sql , 'SELECT * FROM table_name' )
85
+ assert . equal ( statement . text , 'SELECT * FROM table_name' )
86
+ assert . deepEqual ( statement . values , [ ] )
87
+ } )
88
+
89
+ it ( 'should merge SQLStatement instances parameters' , ( ) => {
90
+ const nested = SQL `SELECT id FROM table2 WHERE key = ${ 'value' } `
91
+ const statement = SQL `SELECT * FROM table1 WHERE id IN (${ nested } )`
92
+ assert . equal ( statement . sql , 'SELECT * FROM table1 WHERE id IN (SELECT id FROM table2 WHERE key = ?)' )
93
+ assert . equal ( statement . text , 'SELECT * FROM table1 WHERE id IN (SELECT id FROM table2 WHERE key = $1)' )
94
+ assert . deepEqual ( statement . values , [ 'value' ] )
95
+ } )
96
+
97
+ it ( 'should merge SQLStatement instances parameters, 3 nested statements test' , ( ) => {
98
+ const s1 = SQL `SELECT id FROM table WHERE key=${ 'value1' } `
99
+ const s2 = SQL `SELECT id FROM table2 WHERE key=${ 'value0' } AND key2 IN (${ s1 } )`
100
+ const s3 = SQL `SELECT id FROM table3 WHERE key=${ 'value2' } AND key3 IN (${ s2 } )`
101
+ assert . equal (
102
+ s3 . sql ,
103
+ 'SELECT id FROM table3 WHERE key=? AND key3 IN (SELECT id FROM table2 WHERE key=? AND key2 IN (SELECT id FROM table WHERE key=?))'
104
+ )
105
+ assert . equal (
106
+ s3 . text ,
107
+ 'SELECT id FROM table3 WHERE key=$1 AND key3 IN (SELECT id FROM table2 WHERE key=$2 AND key2 IN (SELECT id FROM table WHERE key=$3))'
108
+ )
109
+ assert . deepEqual ( s3 . values , [ 'value2' , 'value0' , 'value1' ] )
110
+ } )
111
+
112
+ it ( 'should not handle nested SQLStatement as parameter, if passed first' , ( ) => {
113
+ const statement = SQL `${ SQL `SELECT` } * FROM table`
114
+ assert . equal ( statement . sql , 'SELECT * FROM table' )
115
+ assert . deepEqual ( statement . values , [ ] )
116
+ } )
117
+ } )
118
+
80
119
describe ( 'setName()' , ( ) => {
81
120
82
121
it ( 'should set the name and return this' , ( ) => {
0 commit comments