@@ -1144,11 +1144,11 @@ test('sql query api test', async () => {
11441144 const query = sql `select * from ${ sqlQuery . identifier ( 'users' ) } where ${ filter } ;` ;
11451145
11461146 expect ( query . toSQL ( ) ) . toStrictEqual ( {
1147- query : 'select * from `users` where id = {param1:Int32} or id = {param2:String } and email = {param3:String}' ,
1147+ query : 'select * from `users` where id = {param1:Int32} or id = {param2:Int32 } and email = {param3:String}' ,
11481148 params : { param1 : 1 , param2 : 2 , param3 : 'hello@test.com' } ,
11491149 } ) ;
11501150 expect ( filter . toSQL ( ) ) . toStrictEqual ( {
1151- sql : 'id = {param1:Int32} or id = {param2:String } and email = {param3:String}' ,
1151+ sql : 'id = {param1:Int32} or id = {param2:Int32 } and email = {param3:String}' ,
11521152 params : { param1 : 1 , param2 : 2 , param3 : 'hello@test.com' } ,
11531153 } ) ;
11541154} ) ;
@@ -1201,14 +1201,90 @@ engine = MergeTree
12011201order by id;
12021202 ` ) . command ( ) ;
12031203
1204- const valuesIds = Array . from ( { length : 10 ** 3 } ) . fill ( [ 1 ] ) as number [ ] [ ] ;
1204+ const valuesIds = Array . from ( { length : 10 ** 1 } ) . fill ( [ 1 ] ) as number [ ] [ ] ;
12051205
12061206 console . time ( 'insert' ) ;
1207- await sql `insert into ${ sql . identifier ( 'tests' ) } values ${ sql . values ( valuesIds ) } ;` . command ( ) ;
1207+ const query = sql `insert into ${ sql . identifier ( 'tests' ) } values ${ sql . values ( valuesIds ) } ;` . command ( ) ;
1208+ const { query : rawSql , params } = query . toSQL ( ) ;
1209+ // await query;
1210+ // const rawSqlNew = rawSql.slice(0, -1) + ' FORMAT JSONEachRow;';
1211+ await clickHouseClient . command ( { query : rawSql , query_params : params as Record < string , any > } ) ;
1212+ await clickHouseClient . insert ( {
1213+ table : 'tests' ,
1214+ query_params : params as Record < string , any > ,
1215+ values : valuesIds ,
1216+ } ) ;
1217+
12081218 console . timeEnd ( 'insert' ) ;
12091219 // console.log('New user created!');
12101220 // const ids = await sql`select * from ${sql.identifier('tests')};`.query();
12111221 // console.log('Getting all users from the database:', ids);
12121222
12131223 await sql . unsafe ( `drop table tests;` ) . command ( ) ;
12141224} ) ;
1225+
1226+ test ( '1d array of strings, integer as SQLCommonParam test' , async ( ) => {
1227+ await sql . unsafe ( `create table tests(
1228+ id Int32,
1229+ path String
1230+ )
1231+ engine = MergeTree
1232+ order by id;
1233+ ` ) . command ( ) ;
1234+
1235+ const valuesToInsert = [ [ 1 , '/' ] , [ 2 , '/watch' ] , [ 3 , '/over_watch' ] ] ;
1236+
1237+ await sql `insert into tests values ${ sql . values ( valuesToInsert ) } ;` . command ( ) ;
1238+
1239+ // case0
1240+ const query0 = sql `select * from tests where path in ${ [ '/' , '/watch' ] } ;` ;
1241+ expect ( query0 . toSQL ( ) ) . toStrictEqual ( {
1242+ query : 'select * from tests where path in {param1:Array(String)};' ,
1243+ params : { param1 : [ '/' , '/watch' ] } ,
1244+ } ) ;
1245+
1246+ const res0 = await query0 ;
1247+ expect ( res0 ) . toStrictEqual ( [ { id : 1 , path : '/' } , { id : 2 , path : '/watch' } ] ) ;
1248+
1249+ // case1 (datetime)
1250+ const query1 = sql `select toDateTime(${ 1754055760745 } , 3) as some_datetime;` ;
1251+ expect ( query1 . toSQL ( ) ) . toStrictEqual ( {
1252+ query : 'select toDateTime({param1:Int64}, 3) as some_datetime;' ,
1253+ params : { param1 : 1754055760745 } ,
1254+ } ) ;
1255+
1256+ const res1 = await query1 ;
1257+ expect ( res1 . length ) . equal ( 1 ) ;
1258+
1259+ // case2 (int32 max)
1260+ const query2 = sql `select ${ 2_147_483_647 } as max_int32;` ;
1261+ expect ( query2 . toSQL ( ) ) . toStrictEqual ( {
1262+ query : 'select {param1:Int32} as max_int32;' ,
1263+ params : { param1 : 2147483647 } ,
1264+ } ) ;
1265+
1266+ const res2 = await query2 ;
1267+ expect ( res2 ) . toStrictEqual ( [ { max_int32 : 2147483647 } ] ) ;
1268+
1269+ // case3 (int32 min)
1270+ const query3 = sql `select ${ - 2_147_483_648 } as min_int32;` ;
1271+ expect ( query3 . toSQL ( ) ) . toStrictEqual ( {
1272+ query : 'select {param1:Int32} as min_int32;' ,
1273+ params : { param1 : - 2147483648 } ,
1274+ } ) ;
1275+
1276+ const res3 = await query3 ;
1277+ expect ( res3 ) . toStrictEqual ( [ { min_int32 : - 2147483648 } ] ) ;
1278+
1279+ // case4 (float)
1280+ const query4 = sql `select ${ - 2_147_483_648.123 } as some_float;` ;
1281+ expect ( query4 . toSQL ( ) ) . toStrictEqual ( {
1282+ query : 'select {param1:String} as some_float;' ,
1283+ params : { param1 : - 2147483648.123 } ,
1284+ } ) ;
1285+
1286+ const res4 = await query4 ;
1287+ expect ( res4 ) . toStrictEqual ( [ { some_float : '-2147483648.123' } ] ) ;
1288+
1289+ await sql . unsafe ( `drop table tests;` ) . command ( ) ;
1290+ } ) ;
0 commit comments