blob: 56199997a939030fdea1fde48060bfb8986cbf28 [file]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* License); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
#ifndef TSFILE_CLI_CLI_ARGS_H
#define TSFILE_CLI_CLI_ARGS_H
#include <climits>
#include <string>
#include <vector>
namespace tsfile_cli {
struct ParsedArgs {
enum class Format { kAuto, kCsv, kTsv, kJson, kTable };
enum class TagFilterOp {
kNone,
kEq,
kNeq,
kLt,
kLteq,
kGt,
kGteq,
kRegexp,
kNotRegexp,
kBetween,
kNotBetween,
};
std::string command; // subcommand, e.g. "ls"/"write" (args[0])
std::string file; // positional <file.tsfile>; for write, the CSV/TSV
// input ("" or "-" means read stdin)
std::string device; // -d/--device filter (tree model)
std::string table; // -t/--table filter (table model); write target table
std::vector<std::string> measurements; // -m/--measurements projection
long long limit = -1; // -n/--limit; -1 means unlimited
long long offset = 0; // --offset; rows to skip before emitting
long long start = LLONG_MIN; // --start; inclusive lower time bound
long long end = LLONG_MAX; // --end; inclusive upper time bound
bool has_start = false; // whether --start was supplied
bool has_end = false; // whether --end was supplied
long long seed = 0; // --seed for the reservoir sampler
bool has_seed = false; // whether --seed was supplied
Format format = Format::kAuto; // -f/--format; kAuto resolves by TTY
bool no_header = false; // --no-header; suppress header row
std::string model; // --model tree|table override ("" = auto)
std::string output; // -o/--output; write destination .tsfile
std::string columns; // --columns spec for write (name:TYPE:cat,..)
bool verbose = false; // -v/--verbose; write progress to stderr
bool header_match = false; // --header-match; validate write header row
bool has_tag_filter = false; // --tag-filter/--tag-between was supplied
TagFilterOp tag_filter_op = TagFilterOp::kNone;
std::string tag_filter_column; // TAG column name for table row queries
std::string tag_filter_value; // comparison value or BETWEEN lower bound
std::string tag_filter_value2; // BETWEEN upper bound
bool help = false; // -h/--help requested
bool version = false; // --version requested
std::string error; // non-empty if parsing failed (the message)
};
ParsedArgs parse_args(const std::vector<std::string>& args);
} // namespace tsfile_cli
#endif // TSFILE_CLI_CLI_ARGS_H