public Options getOptions()

in bigquery-antipattern-recognition/src/main/java/com/google/zetasql/toolkit/antipattern/cmd/AntiPatternCommandParser.java [123:345]


  public Options getOptions() {
    Options options = new Options();
    Option query =
        Option.builder(QUERY_OPTION_NAME)
            .argName(QUERY_OPTION_NAME)
            .hasArg()
            .required(false)
            .desc("set query")
            .build();
    options.addOption(query);

    Option filePath =
        Option.builder(FILE_PATH_OPTION_NAME)
            .argName(FILE_PATH_OPTION_NAME)
            .hasArg()
            .required(false)
            .desc("set file path")
            .build();
    options.addOption(filePath);

    Option folderPath =
        Option.builder(FOLDER_PATH_OPTION_NAME)
            .argName(FOLDER_PATH_OPTION_NAME)
            .hasArg()
            .required(false)
            .desc("set file path")
            .build();
    options.addOption(folderPath);

    Option useInfoSchemaFlag =
        Option.builder(READ_FROM_INFO_SCHEMA_FLAG_NAME)
            .argName(READ_FROM_INFO_SCHEMA_FLAG_NAME)
            .required(false)
            .desc("flag specifying if the queries should be read from INFORMATION_SCHEMA")
            .build();
    options.addOption(useInfoSchemaFlag);

    Option rewriteSQLFlag =
        Option.builder(REWRITE_SQL_FLAG_NAME)
            .argName(REWRITE_SQL_FLAG_NAME)
            .required(false)
            .desc("flag specifying if the queries should be rewritten using an LLM")
            .build();
    options.addOption(rewriteSQLFlag);

    Option llmStrictValidation =
        Option.builder(LLM_STRICT_VALIDATION_FLAG_NAME)
            .argName(LLM_STRICT_VALIDATION_FLAG_NAME)
            .required(false)
            .desc(
                "flag specifying that LLM results will be discarded if the validation fails (Syntactically "
                    + "invalid or antipattern still present)")
            .build();
    options.addOption(llmStrictValidation);

    Option llmRetriesSQL =
        Option.builder(LLM_RETRIES_NAME)
            .argName(LLM_RETRIES_NAME)
            .hasArg()
            .required(false)
            .desc(
                "number of retries when the LLM generates an incorrect SQL "
                    + "query (Syntactically invalid or antipattern still present)")
            .build();
    options.addOption(llmRetriesSQL);

    Option procesingProjectOption =
        Option.builder(PROCESSING_PROJECT_ID_OPTION_NAME)
            .argName(PROCESSING_PROJECT_ID_OPTION_NAME)
            .hasArg()
            .required(false)
            .desc("project where the solution will execute")
            .build();
    options.addOption(procesingProjectOption);

    Option outputTableOption =
        Option.builder(OUTPUT_TABLE_OPTION_NAME)
            .argName(OUTPUT_TABLE_OPTION_NAME)
            .hasArg()
            .required(false)
            .desc("project with the table to which output will be written")
            .build();
    options.addOption(outputTableOption);

    Option outputFileOption =
        Option.builder(OUTPUT_FILE_OPTION_NAME)
            .argName(OUTPUT_FILE_OPTION_NAME)
            .hasArg()
            .required(false)
            .desc("path to csv file for result output")
            .build();
    options.addOption(outputFileOption);

    Option inputCsvFileOption =
        Option.builder(INPUT_CSV_FILE_OPTION_NAME)
            .argName(INPUT_CSV_FILE_OPTION_NAME)
            .hasArg()
            .required(false)
            .desc("path to csv file with input queries")
            .build();
    options.addOption(inputCsvFileOption);

    Option inputBqOption =
        Option.builder(INPUT_BQ_TABLE_OPTION_NAME)
            .argName(INPUT_BQ_TABLE_OPTION_NAME)
            .hasArg()
            .required(false)
            .desc("name of bigquery table to pull queries from")
            .build();
    options.addOption(inputBqOption);

    Option infoSchemaDays =
        Option.builder(READ_FROM_INFO_SCHEMA_DAYS_OPTION_NAME)
            .argName(READ_FROM_INFO_SCHEMA_DAYS_OPTION_NAME)
            .hasArg()
            .required(false)
            .desc("Specifies how many days back should INFORMATION SCHEMA be queried for")
            .build();
    options.addOption(infoSchemaDays);

    Option infoSchemaStartTime =
        Option.builder(READ_FROM_INFO_SCHEMA_START_TIME_OPTION_NAME)
            .argName(READ_FROM_INFO_SCHEMA_START_TIME_OPTION_NAME)
            .hasArg()
            .required(false)
            .desc("Specifies start timestamp INFORMATION SCHEMA be queried for")
            .build();
    options.addOption(infoSchemaStartTime);

    Option infoSchemaEndTime =
        Option.builder(READ_FROM_INFO_SCHEMA_END_TIME_OPTION_NAME)
            .argName(READ_FROM_INFO_SCHEMA_END_TIME_OPTION_NAME)
            .hasArg()
            .required(false)
            .desc("Specifies end timestamp INFORMATION SCHEMA be queried for")
            .build();
    options.addOption(infoSchemaEndTime);

    Option infoSchemaTimeoutSecs =
        Option.builder(READ_FROM_INFO_SCHEMA_TIMEOUT_IN_SECS_OPTION_NAME)
            .argName(READ_FROM_INFO_SCHEMA_TIMEOUT_IN_SECS_OPTION_NAME)
            .hasArg()
            .required(false)
            .desc("Specifies timeout (in secs) to query INFORMATION SCHEMA")
            .build();
    options.addOption(infoSchemaTimeoutSecs);

    Option infoSchemaSlotmsMin =
        Option.builder(INFO_SCHEMA_MIN_SLOTMS)
            .argName(INFO_SCHEMA_MIN_SLOTMS)
            .hasArg()
            .required(false)
            .desc(
                "Specifies the minimum number of slotms for a query in INFORMATION_SCHEMA to be"
                    + "selected for processing. Defaults to 0 (all queries are processed)")
            .build();
    options.addOption(infoSchemaSlotmsMin);

    Option infoSchemaTable =
        Option.builder(READ_FROM_INFO_SCHEMA_TABLE_OPTION_NAME)
            .argName(READ_FROM_INFO_SCHEMA_TABLE_OPTION_NAME)
            .hasArg()
            .required(false)
            .desc("Specifies the table INFORMATION SCHEMA be queried for")
            .build();
    options.addOption(infoSchemaTable);

    Option useAnalyzerFlag =
        Option.builder(USE_ANALYZER_FLAG_NAME)
            .argName(USE_ANALYZER_FLAG_NAME)
            .required(false)
            .desc("flag specifying if the analyzer should be used")
            .build();
    options.addOption(useAnalyzerFlag);

    Option anaLyzerDefaultProjectId =
        Option.builder(ANALYZER_DEFAULT_PROJECT_ID_OPTION_NAME)
            .argName(ANALYZER_DEFAULT_PROJECT_ID_OPTION_NAME)
            .hasArg()
            .required(false)
            .desc("project id used by analyzer by default")
            .build();
    options.addOption(anaLyzerDefaultProjectId);

    Option ISTopNPercentageJobs =
        Option.builder(IS_TOP_N_PERC_JOBS_OPTION_NAME)
            .argName(IS_TOP_N_PERC_JOBS_OPTION_NAME)
            .hasArg()
            .required(false)
            .desc("Top % of jobs by slot_ms to read from INFORMATION_SCHEMA")
            .build();
    options.addOption(ISTopNPercentageJobs);

    Option region =
        Option.builder(INFO_SCHEMA_REGION)
            .argName(INFO_SCHEMA_REGION)
            .hasArg()
            .required(false)
            .desc("region")
            .build();
    options.addOption(region);

    Option info_schema_project =
        Option.builder(INFO_SCHEMA_PROJECT)
            .argName(INFO_SCHEMA_PROJECT)
            .hasArg()
            .required(false)
            .desc(
                "project for which information schema will be read. This is the "
                    + "project with the queries that you want to optimize")
            .build();
    options.addOption(info_schema_project);

    Option service_account_keyfile_path =
        Option.builder(SERVICE_ACCOUNT_KEYFILE_PATH)
            .argName(SERVICE_ACCOUNT_KEYFILE_PATH)
            .hasArg()
            .required(false)
            .desc("path to service account keyfile")
            .build();
    options.addOption(service_account_keyfile_path);
    return options;
  }