matrixone icon indicating copy to clipboard operation
matrixone copied to clipboard

[Bug]: the result is error when prepareStmt setLong value is bigger than 32767

Open aressu1985 opened this issue 3 years ago • 0 comments

Is there an existing issue for the same bug?

  • [X] I have checked the existing issues.

Environment

- Version or commit-id (e.g. v0.1.0 or 8b23a93):0.6.0
- Hardware parameters:
- OS type:
- Others:

Actual Behavior

the run the code like: stockPreparedStatement.setLong(1, stock.s_quantity);

if the var stock.s_quantity is bigger than 32767,like 32768 the real value inserted to table is -32768

ddl: CREATE TABLE stock ( s_w_id int NOT NULL, s_i_id int NOT NULL, s_quantity int NOT NULL, s_ytd decimal(8, 2) NOT NULL, s_order_cnt int NOT NULL, s_remote_cnt int NOT NULL, s_data varchar(50) NOT NULL, s_dist_01 char(24) NOT NULL, s_dist_02 char(24) NOT NULL, s_dist_03 char(24) NOT NULL, s_dist_04 char(24) NOT NULL, s_dist_05 char(24) NOT NULL, s_dist_06 char(24) NOT NULL, s_dist_07 char(24) NOT NULL, s_dist_08 char(24) NOT NULL, s_dist_09 char(24) NOT NULL, s_dist_10 char(24) NOT NULL, PRIMARY KEY (s_w_id, s_i_id) );

CODE:

protected void loadStock(Connection conn, int w_id, int numItems) {

    int k = 0;
    Stock stock = null;
    Stock prestock = null;
    //try (PreparedStatement stockPreparedStatement = getInsertStatement(conn, TPCCConstants.TABLENAME_STOCK)) {
    try{
        PreparedStatement stockPreparedStatement = conn.prepareStatement(
            "INSERT INTO stock ("+
                "  s_w_id, s_i_id, s_quantity, s_ytd, s_remote_cnt, s_order_cnt,s_data," +
                "  s_dist_01, s_dist_02, " +
                "  s_dist_03, s_dist_04, s_dist_05, s_dist_06, " +
                "  s_dist_07, s_dist_08, s_dist_09, s_dist_10" +
                "    ) " +
                "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"
        );
        for (int i = 1; i <= numItems; i++) {
            stock = new Stock();
            stock.s_i_id = i;
            stock.s_w_id = w_id;
            stock.s_quantity = TPCCUtil.randomNumber(10, 100, benchmark.rng());
            stock.s_ytd = 0;
            stock.s_order_cnt = 0;
            stock.s_remote_cnt = 0;

            // s_data
            int randPct = TPCCUtil.randomNumber(1, 100, benchmark.rng());
            int len = TPCCUtil.randomNumber(26, 50, benchmark.rng());
            if (randPct > 10) {
                // 90% of time i_data isa random string of length [26 ..
                // 50]
                stock.s_data = TPCCUtil.randomStr(len);
            } else {
                // 10% of time i_data has "ORIGINAL" crammed somewhere
                // in middle
                int startORIGINAL = TPCCUtil.randomNumber(2, (len - 8), benchmark.rng());
                stock.s_data = TPCCUtil.randomStr(startORIGINAL - 1) + "ORIGINAL" + TPCCUtil.randomStr(len - startORIGINAL - 9);
            }

            int idx = 1;
            stockPreparedStatement.setInt(idx++, stock.s_w_id);
            stockPreparedStatement.setInt(idx++, stock.s_i_id);
            stockPreparedStatement.setLong(idx++, stock.s_quantity);
            stockPreparedStatement.setDouble(idx++, stock.s_ytd);
            stockPreparedStatement.setLong(idx++, stock.s_order_cnt);
            stockPreparedStatement.setLong(idx++, stock.s_remote_cnt);
            stockPreparedStatement.setString(idx++, stock.s_data);
            stockPreparedStatement.setString(idx++, TPCCUtil.randomStr(24));
            stockPreparedStatement.setString(idx++, TPCCUtil.randomStr(24));
            stockPreparedStatement.setString(idx++, TPCCUtil.randomStr(24));
            stockPreparedStatement.setString(idx++, TPCCUtil.randomStr(24));
            stockPreparedStatement.setString(idx++, TPCCUtil.randomStr(24));
            stockPreparedStatement.setString(idx++, TPCCUtil.randomStr(24));
            stockPreparedStatement.setString(idx++, TPCCUtil.randomStr(24));
            stockPreparedStatement.setString(idx++, TPCCUtil.randomStr(24));
            stockPreparedStatement.setString(idx++, TPCCUtil.randomStr(24));
            stockPreparedStatement.setString(idx, TPCCUtil.randomStr(24));
            stockPreparedStatement.addBatch();

            k++;

            if (k != 0 && (k % workConf.getBatchSize()) == 0) {
                stockPreparedStatement.executeBatch();
                stockPreparedStatement.clearBatch();
            }

            //LOG.error("s_w_id = " + stock.s_w_id +", s_i_id = " + stock.s_i_id);
        }
        stockPreparedStatement.executeBatch();
        stockPreparedStatement.clearBatch();
    } catch (SQLException se) {
        LOG.error(se.getMessage());
        LOG.error("s_w_id = " + stock.s_w_id +", s_i_id = " + stock.s_i_id);
    }

Expected Behavior

No response

Steps to Reproduce

No response

Additional information

No response

aressu1985 avatar Oct 12 '22 03:10 aressu1985