[MDEV-25839] Wrong data saved on EXECUTE when second use COM_STMT_SEND_LONG_DATA when first didn't Created: 2021-06-01  Updated: 2023-04-27

Status: Open
Project: MariaDB Server
Component/s: None
Affects Version/s: 10.3, 10.4, 10.5, 10.6
Fix Version/s: 10.4, 10.5

Type: Bug Priority: Major
Reporter: Diego Dupin Assignee: Dmitry Shulga
Resolution: Unresolved Votes: 0
Labels: CONNECTOR_RELATED


 Description   

This only concerns 10.3+ version. Bug is not present in 10.2.

On second execution of COM_STMT_EXECUTE that have a COM_STMT_SEND_LONG_DATA value, when first execution didn't and type differ, data inserted isn't correct.

example to reproduced :

        try (Connection con = DriverManager.getConnection(
                "jdbc:mariadb://localhost:3304/testj?useServerPrepStmts&log",
                "root",
                "")) {
            Statement stmt = con.createStatement();
            stmt.execute("DROP TABLE IF EXISTS myTable");
            stmt.execute("CREATE TABLE myTable (a LONGTEXT)");
 
            try (PreparedStatement ps = con.prepareStatement("INSERT INTO myTable (a) VALUES (?)")) {
                ps.setInt(1, 1);
                ps.execute();
 
                Reader reader2 = new StringReader("2");
                ps.setCharacterStream(1, reader2);
                ps.execute();
            }
 
            ResultSet rs = stmt.executeQuery("SELECT * FROM myTable");
            rs.next();
            assertEquals("1", rs.getString(1));
            rs.next();
            assertEquals("2", rs.getString(1)); // return unexpected value '94448646608768'
 
        }


Generated at Thu Feb 08 09:40:47 UTC 2024 using Jira 8.20.16#820016-sha1:9d11dbea5f4be3d4cc21f03a88dd11d8c8687422.