@@ -1521,6 +1521,65 @@ ODBC_TEST(t_odbc214)
1521
1521
return OK ;
1522
1522
}
1523
1523
1524
+ /* The server returns '0' and '1' for bit field in subquery, while reporting it as a BIT. Connector interpreted '0'
1525
+ as '\1'/true while fetched as a BIT since '0' != '\0' */
1526
+ ODBC_TEST (t_odbc350 )
1527
+ {
1528
+ SQLCHAR v1 = 0 , v2 = 0 ;
1529
+
1530
+ OK_SIMPLE_STMT (Stmt , "DROP TABLE IF EXISTS t_odbc350" );
1531
+ OK_SIMPLE_STMT (Stmt , "CREATE TABLE t_odbc350 (v BIT(1), v2 BIT(8), v3 BIT(9))" );
1532
+ OK_SIMPLE_STMT (Stmt , "INSERT INTO t_odbc350 VALUES(0, 0, 256)" );
1533
+
1534
+ OK_SIMPLE_STMT (Stmt , "SELECT v, (SELECT v FROM t_odbc350 LIMIT 1) FROM t_odbc350" );
1535
+
1536
+ CHECK_STMT_RC (Stmt , SQLBindCol (Stmt , 1 , SQL_C_BIT , & v1 , sizeof (v1 ), NULL ));
1537
+ CHECK_STMT_RC (Stmt , SQLBindCol (Stmt , 2 , SQL_C_BIT , & v2 , sizeof (v2 ), NULL ));
1538
+
1539
+ CHECK_STMT_RC (Stmt , SQLFetch (Stmt ));
1540
+ is_num (v1 , 0 );
1541
+ is_num (v2 , 0 );
1542
+ EXPECT_STMT (Stmt , SQLFetch (Stmt ), SQL_NO_DATA );
1543
+ CHECK_STMT_RC (Stmt , SQLFreeStmt (Stmt , SQL_CLOSE ));
1544
+
1545
+ OK_SIMPLE_STMT (Stmt , "UPDATE t_odbc350 SET v=1" );
1546
+ OK_SIMPLE_STMT (Stmt , "SELECT v, (SELECT v FROM t_odbc350 LIMIT 1) FROM t_odbc350" );
1547
+
1548
+ CHECK_STMT_RC (Stmt , SQLFetch (Stmt ));
1549
+ is_num (v1 , 1 );
1550
+ is_num (v2 , 1 );
1551
+ EXPECT_STMT (Stmt , SQLFetch (Stmt ), SQL_NO_DATA );
1552
+ CHECK_STMT_RC (Stmt , SQLFreeStmt (Stmt , SQL_CLOSE ));
1553
+
1554
+ OK_SIMPLE_STMT (Stmt , "SELECT v2, (SELECT v2 FROM t_odbc350 LIMIT 1) FROM t_odbc350" );
1555
+
1556
+ CHECK_STMT_RC (Stmt , SQLFetch (Stmt ));
1557
+ is_num (v1 , 0 );
1558
+ is_num (v2 , 0 );
1559
+ EXPECT_STMT (Stmt , SQLFetch (Stmt ), SQL_NO_DATA );
1560
+ CHECK_STMT_RC (Stmt , SQLFreeStmt (Stmt , SQL_CLOSE ));
1561
+
1562
+ OK_SIMPLE_STMT (Stmt , "SELECT v3, (SELECT v3 FROM t_odbc350 LIMIT 1) FROM t_odbc350" );
1563
+
1564
+ CHECK_STMT_RC (Stmt , SQLFetch (Stmt ));
1565
+ is_num (v1 , 1 );
1566
+ is_num (v2 , 1 );
1567
+ EXPECT_STMT (Stmt , SQLFetch (Stmt ), SQL_NO_DATA );
1568
+ CHECK_STMT_RC (Stmt , SQLFreeStmt (Stmt , SQL_CLOSE ));
1569
+
1570
+ OK_SIMPLE_STMT (Stmt , "UPDATE t_odbc350 SET v3=0" );
1571
+ OK_SIMPLE_STMT (Stmt , "SELECT v3, (SELECT v3 FROM t_odbc350 LIMIT 1) FROM t_odbc350" );
1572
+
1573
+ CHECK_STMT_RC (Stmt , SQLFetch (Stmt ));
1574
+ is_num (v1 , 0 );
1575
+ is_num (v2 , 0 );
1576
+ EXPECT_STMT (Stmt , SQLFetch (Stmt ), SQL_NO_DATA );
1577
+ CHECK_STMT_RC (Stmt , SQLFreeStmt (Stmt , SQL_CLOSE ));
1578
+ OK_SIMPLE_STMT (Stmt , "DROP TABLE IF EXISTS t_odbc350" );
1579
+
1580
+ return OK ;
1581
+ }
1582
+
1524
1583
1525
1584
MA_ODBC_TESTS my_tests []=
1526
1585
{
@@ -1554,6 +1613,7 @@ MA_ODBC_TESTS my_tests[]=
1554
1613
{t_odbc232 , "t_odbc232" },
1555
1614
{t_odbc274 , "t_odbc274_InsDelReplace_returning" },
1556
1615
{t_odbc214 , "t_odbc214_medium" },
1616
+ {t_odbc350 , "t_odbc350_bit_in_subquery" },
1557
1617
{NULL , NULL }
1558
1618
};
1559
1619
0 commit comments