in tools/template_based_query_generation/src/main/java/data/Table.java [60:175]
public int getNumColumns() {
return this.schema.size();
/**
*
* @param type
* @return name of random column of given type
*/
public String getRandomColumn(String columnName, DataType type) {
List<MutablePair<String, DataType>> columns = new ArrayList<>();
for (MutablePair<String, DataType> col: this.schema) {
if (col.getRight() == type) columns.add(col);
}
int newColumnProbability = Utils.getRandomInteger(columns.size());
// add new column of specified datatype with probability 1/(n+1)
// where n is the number of existing columns of that datatype
if (newColumnProbability == 0) {
addColumn(columnName, type);
return columnName;
}
MutablePair<String, DataType> p = Utils.getRandomElement(columns);
return p.getLeft();
}
/**
*
* @param type
* @return name of random column of given type
*/
public String getRandomColumn(String columnName, DataType type) {
List<MutablePair<String, DataType>> columns = new ArrayList<>();
for (MutablePair<String, DataType> col: this.schema) {
if (col.getRight() == type) columns.add(col);
}
int newColumnProbability = Utils.getRandomInteger(columns.size());
// add new column of specified datatype with probability 1/(n+1)
// where n is the number of existing columns of that datatype
if (newColumnProbability == 0) {
addColumn(columnName, type);
return columnName;
}
MutablePair<String, DataType> p = Utils.getRandomElement(columns);
return p.getLeft();
}
/**
*
* @param numRows number of rows of data to generate
* @param dataType type of data to generate
* @return column of data with type dataType and numRows rows
* @throws IllegalArgumentException
*/
public List<?> generateColumn(int numRows, DataType dataType) throws IllegalArgumentException {
if (dataType.isIntegerType()) {
List<Integer> data = new ArrayList<>();
for (int i = 0; i < numRows; i++) {
data.add(Utils.generateRandomIntegerData(dataType));
}
return data;
} else if (dataType.isLongType()) {
List<Long> data = new ArrayList<>();
for (int i = 0; i < numRows; i++) {
data.add(Utils.generateRandomLongData(dataType));
}
return data;
} else if (dataType.isDoubleType()) {
List<Double> data = new ArrayList<>();
for (int i = 0; i < numRows; i++) {
data.add(Utils.generateRandomDoubleData(dataType));
}
return data;
} else if (dataType.isBigDecimalType()) {
List<BigDecimal> data = new ArrayList<>();
for (int i = 0; i < numRows; i++) {
data.add(Utils.generateRandomBigDecimalData(dataType));
}
return data;
} else if (dataType.isStringType()) {
List<String> data = new ArrayList<>();
for (int i = 0; i < numRows; i++) {
data.add(Utils.generateRandomStringData(dataType));
}
return data;
} else if (dataType.isBooleanType()) {
List<Boolean> data = new ArrayList<>();
for (int i = 0; i < numRows; i++) {
data.add(Utils.generateRandomBooleanData(dataType));
}
return data;
} else {
throw new IllegalArgumentException("invalid datatype");
}
}
/**
*
* @return sample data with number of rows being number of rows in table
*/
public List<List<?>> generateData() {
return generateData(this.numRows);
}
/**
*
* @param numRows number of rows to generate
* @return sample data with number of rows being numRows
*/
public List<List<?>> generateData(int numRows) {
List<List<?>> data = new ArrayList<>();
for (int i = 0; i < this.schema.size(); i++) {
List<?> column = this.generateColumn(numRows, this.schema.get(i).getRight());
data.add(column);
}
return data;
}
}