Solver *constructSolverChain(STPSolver *stpSolver,
								 std::string querySMT2LogPath,
								 std::string baseSolverQuerySMT2LogPath,
								 std::string queryPCLogPath,
								 std::string baseSolverQueryPCLogPath)
	{
	  Solver *solver = stpSolver;

	  if (optionIsSet(queryLoggingOptions, SOLVER_PC))
	  {
		solver = createPCLoggingSolver(solver,
					       baseSolverQueryPCLogPath,
					       MinQueryTimeToLog);
		std::cerr << "Logging queries that reach solver in .pc format to " 
			  << baseSolverQueryPCLogPath.c_str() << std::endl;
	  }

	  if (optionIsSet(queryLoggingOptions, SOLVER_SMTLIB))
	  {
		solver = createSMTLIBLoggingSolver(solver,
						   baseSolverQuerySMT2LogPath,
						   MinQueryTimeToLog);
		std::cerr << "Logging queries that reach solver in .smt2 format to " 
			  << baseSolverQuerySMT2LogPath.c_str() << std::endl;
	  }

	  if (UseFastCexSolver)
		solver = createFastCexSolver(solver);

	  if (UseCexCache)
		solver = createCexCachingSolver(solver);

	  if (UseCache)
		solver = createCachingSolver(solver);

	  if (UseIndependentSolver)
		solver = createIndependentSolver(solver);

	  if (DebugValidateSolver)
		solver = createValidatingSolver(solver, stpSolver);

	  if (optionIsSet(queryLoggingOptions, ALL_PC))
	  {
		solver = createPCLoggingSolver(solver,
					       queryPCLogPath,
					       MinQueryTimeToLog);
		std::cerr << "Logging all queries in .pc format to " 
			  << queryPCLogPath.c_str() << std::endl;
	  }

	  if (optionIsSet(queryLoggingOptions, ALL_SMTLIB))
	  {
		solver = createSMTLIBLoggingSolver(solver,querySMT2LogPath,
						   MinQueryTimeToLog);
		std::cerr << "Logging all queries in .smt2 format to " 
			  << querySMT2LogPath.c_str() << std::endl;
	  }

	  return solver;
	}
Solver *constructSolverChain(Solver *coreSolver, std::string querySMT2LogPath,
                             std::string baseSolverQuerySMT2LogPath,
                             std::string queryPCLogPath,
                             std::string baseSolverQueryPCLogPath) {
  Solver *solver = coreSolver;

  if (optionIsSet(queryLoggingOptions, SOLVER_PC)) {
    solver = createPCLoggingSolver(solver, baseSolverQueryPCLogPath,
                                   MinQueryTimeToLog);
    klee_message("Logging queries that reach solver in .pc format to %s\n",
                 baseSolverQueryPCLogPath.c_str());
  }

  if (optionIsSet(queryLoggingOptions, SOLVER_SMTLIB)) {
    solver = createSMTLIBLoggingSolver(solver, baseSolverQuerySMT2LogPath,
                                       MinQueryTimeToLog);
    klee_message("Logging queries that reach solver in .smt2 format to %s\n",
                 baseSolverQuerySMT2LogPath.c_str());
  }

  if (UseFastCexSolver)
    solver = createFastCexSolver(solver);

  if (UseCexCache)
    solver = createCexCachingSolver(solver);

  if (UseCache)
    solver = createCachingSolver(solver);

  if (UseIndependentSolver)
    solver = createIndependentSolver(solver);

  if (DebugValidateSolver)
    solver = createValidatingSolver(solver, coreSolver);

  if (optionIsSet(queryLoggingOptions, ALL_PC)) {
    solver = createPCLoggingSolver(solver, queryPCLogPath, MinQueryTimeToLog);
    klee_message("Logging all queries in .pc format to %s\n",
                 queryPCLogPath.c_str());
  }

  if (optionIsSet(queryLoggingOptions, ALL_SMTLIB)) {
    solver =
        createSMTLIBLoggingSolver(solver, querySMT2LogPath, MinQueryTimeToLog);
    klee_message("Logging all queries in .smt2 format to %s\n",
                 querySMT2LogPath.c_str());
  }
  if (DebugCrossCheckCoreSolverWith != NO_SOLVER) {
    Solver *oracleSolver = createCoreSolver(DebugCrossCheckCoreSolverWith);
    solver = createValidatingSolver(/*s=*/solver, /*oracle=*/oracleSolver);
  }

  return solver;
}
Beispiel #3
0
/**
 * \brief insert rf_fk, agent_fk, offset, len and type into highlight table
 *
 * @param pcroot The root of hash table
 *
 * \returns boolean (True or False)
 *
 * \callgraph
 */
FUNCTION int updateLicenseHighlighting(cacheroot_t *pcroot){

  /* If files are coming from command line instead of fossology repo,
   then there are no pfiles.  So don't update the db

   Also if we specifically do not want highlight information in the
   database skip this function
   */
  if(cur.cliMode == 1 || optionIsSet(OPTS_NO_HIGHLIGHTINFO ) ){
    return (TRUE);
  }
  PGresult *result;




#ifdef GLOBAL_DEBUG
  printf("%s %s %i \n", cur.filePath,cur.compLic , cur.theMatches->len);
#endif

  // This speeds up the writing to the database and ensures that we have either full highlight information or none
  PGresult* begin1 = PQexec(gl.pgConn, "BEGIN");
  PQclear(begin1);

  fo_dbManager_PreparedStatement* preparedKeywords;
  if(cur.keywordPositions->len > 0 ) {
    preparedKeywords = fo_dbManager_PrepareStamement(
      gl.dbManager,
      "updateLicenseHighlighting:keyword",
      "INSERT INTO highlight_keyword (pfile_fk, start, len) VALUES($1, $2, $3)",
      long, int, int
    );
  }