[Bug]: the result is error when prepareStmt setLong value is bigger than 32767
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