@@ -1455,4 +1455,56 @@ mod test {
14551455
14561456 Ok ( ( ) )
14571457 }
1458+
1459+ #[ test]
1460+ fn test_prepare_multi_statement ( ) -> Result < ( ) > {
1461+ let db = checked_memory_handle ( ) ;
1462+
1463+ {
1464+ let mut stmt =
1465+ db. prepare ( "CREATE TABLE test(x INTEGER); INSERT INTO test VALUES (42); SELECT x FROM test;" ) ?;
1466+ let result: i32 = stmt. query_row ( [ ] , |row| row. get ( 0 ) ) ?;
1467+ assert_eq ! ( result, 42 ) ;
1468+ }
1469+
1470+ {
1471+ let mut stmt = db. prepare (
1472+ "CREATE TEMP TABLE temp_data(id INTEGER, value TEXT);
1473+ INSERT INTO temp_data VALUES (1, 'first'), (2, 'second');
1474+ SELECT COUNT(*) FROM temp_data;" ,
1475+ ) ?;
1476+ let count: i32 = stmt. query_row ( [ ] , |row| row. get ( 0 ) ) ?;
1477+ assert_eq ! ( count, 2 ) ;
1478+ }
1479+
1480+ Ok ( ( ) )
1481+ }
1482+
1483+ #[ test]
1484+ fn test_pivot_query ( ) -> Result < ( ) > {
1485+ let db = checked_memory_handle ( ) ;
1486+
1487+ db. execute_batch (
1488+ "CREATE TABLE cities(city VARCHAR, year INTEGER, population INTEGER);
1489+ INSERT INTO cities VALUES
1490+ ('Amsterdam', 2000, 1005),
1491+ ('Amsterdam', 2010, 1065),
1492+ ('Amsterdam', 2020, 1158),
1493+ ('Berlin', 2000, 3382),
1494+ ('Berlin', 2010, 3460),
1495+ ('Berlin', 2020, 3576);" ,
1496+ ) ?;
1497+
1498+ // PIVOT queries internally expand to multiple statements
1499+ let mut stmt = db. prepare ( "PIVOT cities ON year USING sum(population);" ) ?;
1500+ let mut rows = stmt. query ( [ ] ) ?;
1501+
1502+ let mut row_count = 0 ;
1503+ while let Some ( _row) = rows. next ( ) ? {
1504+ row_count += 1 ;
1505+ }
1506+ assert_eq ! ( row_count, 2 ) ;
1507+
1508+ Ok ( ( ) )
1509+ }
14581510}
0 commit comments