github.com/turbot/steampipe@v1.7.0-rc.0.0.20240517123944-7cef272d4458/pkg/interactive/metaquery/definitions.go (about)

     1  package metaquery
     2  
     3  import (
     4  	"github.com/turbot/steampipe/pkg/constants"
     5  )
     6  
     7  type metaQueryArg struct {
     8  	value       string
     9  	description string
    10  }
    11  
    12  type metaQueryDefinition struct {
    13  	title       string
    14  	description string
    15  	args        []metaQueryArg
    16  	handler     handler
    17  	validator   validator
    18  	completer   completer
    19  }
    20  
    21  var metaQueryDefinitions map[string]metaQueryDefinition
    22  
    23  func init() {
    24  	metaQueryDefinitions = map[string]metaQueryDefinition{
    25  		constants.CmdHelp: {
    26  			title:       constants.CmdHelp,
    27  			handler:     doHelp,
    28  			validator:   noArgs,
    29  			description: "Show steampipe help",
    30  		},
    31  		constants.CmdExit: {
    32  			title:       constants.CmdExit,
    33  			handler:     doExit,
    34  			validator:   noArgs,
    35  			description: "Exit from steampipe terminal",
    36  		},
    37  		constants.CmdQuit: {
    38  			title:       constants.CmdQuit,
    39  			handler:     doExit,
    40  			validator:   noArgs,
    41  			description: "Exit from steampipe terminal",
    42  		},
    43  		constants.CmdTableList: {
    44  			title:       constants.CmdTableList,
    45  			handler:     listTables,
    46  			validator:   atMostNArgs(1),
    47  			description: "List or describe tables",
    48  		},
    49  		constants.CmdSeparator: {
    50  			title:       constants.CmdSeparator,
    51  			handler:     setViperConfigFromArg(constants.ArgSeparator),
    52  			validator:   exactlyNArgs(1),
    53  			description: "Set csv output separator",
    54  		},
    55  		constants.CmdHeaders: {
    56  			title:       "headers",
    57  			handler:     setHeader,
    58  			validator:   booleanValidator(constants.CmdHeaders, validatorFromArgsOf(constants.CmdHeaders)),
    59  			description: "Enable or disable column headers",
    60  			args: []metaQueryArg{
    61  				{value: constants.ArgOn, description: "Turn on headers in output"},
    62  				{value: constants.ArgOff, description: "Turn off headers in output"},
    63  			},
    64  			completer: completerFromArgsOf(constants.CmdHeaders),
    65  		},
    66  		constants.CmdMulti: {
    67  			title:       "multi-line",
    68  			handler:     setMultiLine,
    69  			validator:   booleanValidator(constants.CmdMulti, validatorFromArgsOf(constants.CmdMulti)),
    70  			description: "Enable or disable multiline mode",
    71  			args: []metaQueryArg{
    72  				{value: constants.ArgOn, description: "Turn on multiline mode"},
    73  				{value: constants.ArgOff, description: "Turn off multiline mode"},
    74  			},
    75  			completer: completerFromArgsOf(constants.CmdMulti),
    76  		},
    77  		constants.CmdTiming: {
    78  			title:       "timing",
    79  			handler:     setTiming,
    80  			validator:   validatorFromArgsOf(constants.CmdTiming),
    81  			description: "Enable or disable query execution timing",
    82  			args: []metaQueryArg{
    83  				{value: constants.ArgOff, description: "Turn off query timer"},
    84  				{value: constants.ArgOn, description: "Display time elapsed after every query"},
    85  				{value: constants.ArgVerbose, description: "Display time elapsed and details of each scan"},
    86  			},
    87  			completer: completerFromArgsOf(constants.CmdTiming),
    88  		},
    89  		constants.CmdOutput: {
    90  			title:       constants.CmdOutput,
    91  			handler:     setViperConfigFromArg(constants.ArgOutput),
    92  			validator:   composeValidator(exactlyNArgs(1), validatorFromArgsOf(constants.CmdOutput)),
    93  			description: "Set output format: csv, json, table or line",
    94  			args: []metaQueryArg{
    95  				{value: constants.OutputFormatJSON, description: "Set output to JSON"},
    96  				{value: constants.OutputFormatCSV, description: "Set output to CSV"},
    97  				{value: constants.OutputFormatTable, description: "Set output to Table"},
    98  				{value: constants.OutputFormatLine, description: "Set output to Line"},
    99  			},
   100  			completer: completerFromArgsOf(constants.CmdOutput),
   101  		},
   102  		constants.CmdCache: {
   103  			title:       constants.CmdCache,
   104  			handler:     cacheControl,
   105  			validator:   validatorFromArgsOf(constants.CmdCache),
   106  			description: "Enable, disable or clear the query cache",
   107  			args: []metaQueryArg{
   108  				{value: constants.ArgOn, description: "Turn on caching"},
   109  				{value: constants.ArgOff, description: "Turn off caching"},
   110  				{value: constants.ArgClear, description: "Clear the cache"},
   111  			},
   112  			completer: completerFromArgsOf(constants.CmdCache),
   113  		},
   114  		constants.CmdCacheTtl: {
   115  			title:       constants.CmdCacheTtl,
   116  			handler:     cacheTTL,
   117  			validator:   atMostNArgs(1),
   118  			description: "Set the cache ttl (time-to-live)",
   119  		},
   120  		constants.CmdInspect: {
   121  			title:   constants.CmdInspect,
   122  			handler: inspect,
   123  			// .inspect only supports a single arg, however the arg validation code cannot understand escaped arguments
   124  			// e.g. it will treat csv."my table" as 2 args
   125  			// the logic to handle this escaping is lower down so we just validate to ensure at least one argument has been provided
   126  			validator:   atLeastNArgs(0),
   127  			description: "View connections, tables & column information",
   128  			completer:   inspectCompleter,
   129  		},
   130  		constants.CmdConnections: {
   131  			title:       constants.CmdConnections,
   132  			handler:     listConnections,
   133  			validator:   noArgs,
   134  			description: "List active connections",
   135  		},
   136  		constants.CmdClear: {
   137  			title:       constants.CmdClear,
   138  			handler:     clearScreen,
   139  			validator:   noArgs,
   140  			description: "Clear the console",
   141  		},
   142  		constants.CmdSearchPath: {
   143  			title:       constants.CmdSearchPath,
   144  			handler:     setOrGetSearchPath,
   145  			validator:   atMostNArgs(1),
   146  			description: "Display the current search path, or set the search-path by passing in a comma-separated list",
   147  		},
   148  		constants.CmdSearchPathPrefix: {
   149  			title:       constants.CmdSearchPathPrefix,
   150  			handler:     setSearchPathPrefix,
   151  			validator:   exactlyNArgs(1),
   152  			description: "Set a prefix to the current search-path",
   153  		},
   154  		constants.CmdAutoComplete: {
   155  			title:       "auto-complete",
   156  			handler:     setAutoComplete,
   157  			validator:   booleanValidator(constants.CmdAutoComplete, validatorFromArgsOf(constants.CmdAutoComplete)),
   158  			description: "Enable or disable auto-completion",
   159  			args: []metaQueryArg{
   160  				{value: constants.ArgOn, description: "Turn on auto-completion"},
   161  				{value: constants.ArgOff, description: "Turn off auto-completion"},
   162  			},
   163  			completer: completerFromArgsOf(constants.CmdAutoComplete),
   164  		},
   165  	}
   166  }