public void generateQueries()

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());
    }
  }