in tools/template_based_query_generation/src/main/java/QueryGenerator.java [80:162]
public void generateQueries() throws IOException {
List<String> regexQueries = new ArrayList<>();
int i = 0;
while (i < user.getNumQueries()) {
List<String> rawQueries = markovChain.randomWalk(source);
if (rawQueries.get(rawQueries.size() - 1).equals("FEATURE_SINK")) {
List<String> actualQueries = rawQueries.subList(2, rawQueries.size() - 1);
StringBuilder sb = new StringBuilder();
for (String actualQuery : actualQueries) {
sb.append(regexMapping.get(actualQuery));
sb.append(" ");
}
String regexQuery = sb.toString().trim();
regexQueries.add(regexQuery);
i++;
}
}
QueryRegex qr = new QueryRegex(regexQueries, user.getNumColumns());
List<List<SkeletonPiece>> querySkeletons = qr.getQuerySkeletons();
Map<String, Map<String, List<String>>> dialectQueries = new HashMap<>();
for (String dialect : user.getDialectIndicators().keySet()) {
if (user.getDialectIndicators().get(dialect)) {
Map<String, List<String>> queryType = new HashMap<>();
queryType.put("DQL", new ArrayList<>());
queryType.put("DDL", new ArrayList<>());
queryType.put("DML", new ArrayList<>());
dialectQueries.put(dialect, queryType);
}
}
for (List<SkeletonPiece> querySkeleton : querySkeletons) {
for (String dialect: dialectQueries.keySet()) {
StringBuilder sb = new StringBuilder();
for (int j = 0; j < querySkeleton.size(); j++) {
SkeletonPiece sp = querySkeleton.get(j);
if (sp.getKeyword() != null) {
sb.append(keywordsMapping.getLanguageMap(sp.getKeyword()).get(dialect));
sb.append(" ");
} else if (sp.getToken() != null) {
sb.append(sp.getToken());
if (j != querySkeleton.size() - 1 && querySkeleton.get(j + 1).getToken() != null) {
sb.append(", ");
} else {
sb.append(" ");
}
} else {
sb.append("(");
for (MutablePair<String, DataType> pair : sp.getSchemaData()) {
sb.append(pair.getLeft());
sb.append(" ");
sb.append(dataTypeMapping.get(pair.getRight()).get(dialect));
sb.append(",");
}
sb.deleteCharAt(sb.length() - 1);
sb.append(") ");
}
}
String realQuery = sb.toString();
if (realQuery.substring(0, 6).equals("SELECT")) {
dialectQueries.get(dialect).get("DQL").add(realQuery.trim() + ";");
} else if (realQuery.substring(0, 6).equals("INSERT")) {
dialectQueries.get(dialect).get("DML").add(realQuery.trim() + ";");
} else {
dialectQueries.get(dialect).get("DDL").add(realQuery.trim() + ";");
}
}
}
try {
Utils.writeDirectory(dialectQueries, qr.getTokenProvider().getTables());
} catch (IOException exception){
exception.printStackTrace();
}
for (Table table : qr.getTokenProvider().getTables()) {
System.out.println(table.getName() + ": " + table.getSchema());
}
}