package com.taobao.tddl.qatest.matrix.select;
/**
* Copyright(c) 2010 taobao. All rights reserved.
* 通用产品测试
*/
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.concurrent.CountDownLatch;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized.Parameters;
import com.taobao.tddl.qatest.BaseMatrixTestCase;
import com.taobao.tddl.qatest.BaseTestCase;
import com.taobao.tddl.qatest.util.EclipseParameterized;
import com.taobao.tddl.qatest.ExecuteTableName;
/**
* Comment for SelcetAmountLimit
* <p/>
* Author By: zhuoxue.yll Created Date: 2012-7-2 上午11:10:59
*/
@RunWith(EclipseParameterized.class)
public class SelectAmountLimit extends BaseMatrixTestCase {
private final int AMOUNT_DATA = 100;
private final int thread_size = 5;
long pk = 1l;
int id = 1;
int i = 0;
@Parameters(name = "{index}:table={0}")
public static List<String[]> prepareData() {
return Arrays.asList(ExecuteTableName.normaltblTable(dbType));
}
public SelectAmountLimit(String normaltblTableName){
BaseTestCase.normaltblTableName = normaltblTableName;
}
@Before
public void MutilDataPrepare() throws SQLException {
CountDownLatch latch = new CountDownLatch(thread_size);
for (int i = 0; i < thread_size; i++) {
Thread thread = new Thread(new InsertTask(latch), "Insert Task " + i);
thread.start();
}
try {
latch.await();
} catch (InterruptedException e) {
}
}
@Test
public void selectWithLimit() throws Exception {
int start = 50;
int limit = 10;
String sql = "select * from " + normaltblTableName + " where name= ? limit ?,?";
List<Object> param = new ArrayList<Object>();
param.add(name);
param.add(start);
param.add(limit);
rc = andorQueryData(sql, param);
Assert.assertEquals(limit, resultsSize(rc));
}
@Test
public void selectWithSelectLimit() throws Exception {
int start = 5;
int limit = 1;
String sql = "select * from " + normaltblTableName + " as nor1 ,(select pk from " + normaltblTableName
+ " limit ?,?) as nor2 where nor1.pk=nor2.pk";
List<Object> param = new ArrayList<Object>();
param.add(start);
param.add(limit);
rc = andorQueryData(sql, param);
Assert.assertEquals(limit, resultsSize(rc));
}
private class InsertTask implements Runnable {
private final CountDownLatch latch;
public InsertTask(CountDownLatch latch){
this.latch = latch;
}
@Override
public void run() {
String sql = "replace into " + normaltblTableName + "(pk,id,name) VALUES(?,?,?)";
rc = null;
List<Object> param = new ArrayList<Object>();
for (; i < AMOUNT_DATA; i++) {
param.clear();
param.add(Long.parseLong(i + ""));
param.add(i);
param.add(name);
try {
andorUpdateData(sql, param);
} catch (Exception e) {
e.printStackTrace();
}
try {
if (rc != null) rc.close();
} catch (Exception e) {
e.printStackTrace();
}
}
latch.countDown();
}
}
}