Showing preview only (2,927K chars total). Download the full file or copy to clipboard to get everything.
Repository: turbot/steampipe
Branch: develop
Commit: d1d8fb7f9191
Files: 1010
Total size: 2.6 MB
Directory structure:
gitextract_no20qkfc/
├── .acceptance.goreleaser.yml
├── .ai/
│ ├── .gitignore
│ ├── README.md
│ ├── docs/
│ │ ├── bug-fix-prs.md
│ │ ├── bug-workflow.md
│ │ ├── parallel-coordination.md
│ │ └── test-generation-guide.md
│ └── templates/
│ ├── bugfix-pr-template.md
│ └── test-pr-template.md
├── .claude/
│ └── commands/
│ └── fix-vulnerabilities.md
├── .gitattributes
├── .github/
│ ├── ISSUE_TEMPLATE/
│ │ ├── bug_report.md
│ │ ├── feature_request.md
│ │ └── release_issue.md
│ ├── dependabot.yml
│ └── workflows/
│ ├── 01-steampipe-release.yaml
│ ├── 02-steampipe-db-image-build.yaml
│ ├── 10-test-lint.yaml
│ ├── 11-test-acceptance.yaml
│ ├── 12-test-post-release-linux-distros.yaml
│ ├── 30-stale.yaml
│ └── 31-add-issues-to-pipeling-issue-tracker.yaml
├── .gitignore
├── .gitmodules
├── .golangci.yml
├── .goreleaser.yml
├── CHANGELOG.md
├── CLAUDE.md
├── CONTRIBUTING.md
├── LICENSE
├── Makefile
├── README.md
├── cmd/
│ ├── completion.go
│ ├── doc.go
│ ├── login.go
│ ├── plugin.go
│ ├── plugin_manager.go
│ ├── query.go
│ ├── query_test.go
│ ├── root.go
│ ├── root_test.go
│ └── service.go
├── design/
│ ├── adding_to_workspace_profile.md
│ ├── connection_status_table.md
│ ├── embedded_postgres_build_instructions.md
│ ├── internal_introspection_tables.md
│ ├── internal_introspection_tables_tests.md
│ ├── mod_deps.md
│ ├── search_path.md
│ ├── sperr.md
│ ├── steampipe_data_files.md
│ ├── steampipe_service_db_connections.md
│ └── timing_output.md
├── go.mod
├── go.sum
├── main.go
├── pkg/
│ ├── cmdconfig/
│ │ ├── app_specific.go
│ │ ├── builder.go
│ │ ├── cmd_flags.go
│ │ ├── cmd_hooks.go
│ │ ├── cmd_hooks_test.go
│ │ ├── diagnostics.go
│ │ ├── doc.go
│ │ ├── env_var_type.go
│ │ ├── envvartype_string.go
│ │ ├── validate.go
│ │ ├── validate_test.go
│ │ ├── viper.go
│ │ └── viper_test.go
│ ├── connection/
│ │ ├── config_map.go
│ │ ├── connection_lifecycle_test.go
│ │ ├── connection_state_table_updater.go
│ │ ├── connection_watcher.go
│ │ ├── interface.go
│ │ ├── limiter_map.go
│ │ ├── plugin_limiter_map.go
│ │ ├── refresh_connections.go
│ │ ├── refresh_connections_state.go
│ │ └── refresh_connections_state_test.go
│ ├── connection_sync/
│ │ └── wait_for_search_path.go
│ ├── constants/
│ │ ├── app.go
│ │ ├── build.go
│ │ ├── cache.go
│ │ ├── cmd_name.go
│ │ ├── config_keys.go
│ │ ├── control_execute.go
│ │ ├── control_status.go
│ │ ├── db.go
│ │ ├── default_options.go
│ │ ├── default_workspaces.go
│ │ ├── display.go
│ │ ├── doc.go
│ │ ├── duration.go
│ │ ├── env.go
│ │ ├── exit_codes.go
│ │ ├── extensions.go
│ │ ├── flags.go
│ │ ├── history.go
│ │ ├── image.go
│ │ ├── metaquery_commands.go
│ │ ├── notifications.go
│ │ ├── oci.go
│ │ ├── output_format.go
│ │ ├── pg_hba.go
│ │ ├── postgresql_conf.go
│ │ ├── runtime/
│ │ │ ├── execution_id.go
│ │ │ └── runtime_constants.go
│ │ ├── ssl.go
│ │ ├── telemetry.go
│ │ └── workspace_profile.go
│ ├── db/
│ │ ├── db_client/
│ │ │ ├── db_client.go
│ │ │ ├── db_client_connect.go
│ │ │ ├── db_client_execute.go
│ │ │ ├── db_client_execute_retry.go
│ │ │ ├── db_client_execute_test.go
│ │ │ ├── db_client_options.go
│ │ │ ├── db_client_search_path.go
│ │ │ ├── db_client_session.go
│ │ │ ├── db_client_session_test.go
│ │ │ ├── db_client_test.go
│ │ │ └── pgx_types.go
│ │ ├── db_common/
│ │ │ ├── acquire_session_result.go
│ │ │ ├── appname.go
│ │ │ ├── cache_control.go
│ │ │ ├── cache_settings.go
│ │ │ ├── client.go
│ │ │ ├── db_session.go
│ │ │ ├── errors.go
│ │ │ ├── execute.go
│ │ │ ├── functions.go
│ │ │ ├── init_result.go
│ │ │ ├── max_connections.go
│ │ │ ├── notification_cache.go
│ │ │ ├── postgres.go
│ │ │ ├── query_with_args.go
│ │ │ ├── schema.go
│ │ │ ├── schema_metadata.go
│ │ │ ├── search_path.go
│ │ │ ├── server_settings.go
│ │ │ ├── session_system.go
│ │ │ ├── sql_connections.go
│ │ │ ├── sql_function.go
│ │ │ ├── tls_config.go
│ │ │ └── wait_connection.go
│ │ ├── db_local/
│ │ │ ├── backup.go
│ │ │ ├── backup_test.go
│ │ │ ├── create_connection.go
│ │ │ ├── execute.go
│ │ │ ├── install.go
│ │ │ ├── install_test.go
│ │ │ ├── internal.go
│ │ │ ├── local_db_client.go
│ │ │ ├── logs.go
│ │ │ ├── notify.go
│ │ │ ├── password.go
│ │ │ ├── refresh_functions_test.go
│ │ │ ├── running_info.go
│ │ │ ├── search_path.go
│ │ │ ├── server_settings.go
│ │ │ ├── service.go
│ │ │ ├── sql_clone.go
│ │ │ ├── ssl.go
│ │ │ ├── start_services.go
│ │ │ └── stop_services.go
│ │ ├── platform/
│ │ │ ├── paths_darwin_amd64.go
│ │ │ ├── paths_darwin_arm64.go
│ │ │ ├── paths_linux_386.go
│ │ │ ├── paths_linux_amd64.go
│ │ │ ├── paths_linux_arm.go
│ │ │ ├── paths_linux_arm64.go
│ │ │ ├── paths_windows_amd64.go
│ │ │ └── platform_paths.go
│ │ └── sslio/
│ │ └── sslio.go
│ ├── display/
│ │ └── timing.go
│ ├── error_helpers/
│ │ ├── cancelled.go
│ │ ├── cloud.go
│ │ ├── diags.go
│ │ ├── errors.go
│ │ ├── postgres.go
│ │ └── utils.go
│ ├── export/
│ │ ├── exporter.go
│ │ ├── helpers.go
│ │ ├── helpers_test.go
│ │ ├── manager.go
│ │ ├── manager_test.go
│ │ ├── snapshot_exporter.go
│ │ ├── target.go
│ │ └── target_test.go
│ ├── filepaths/
│ │ ├── db_path.go
│ │ ├── steampipe.go
│ │ └── workspace.go
│ ├── initialisation/
│ │ ├── cloud_metadata.go
│ │ ├── init_data.go
│ │ └── init_data_test.go
│ ├── installationstate/
│ │ └── state.go
│ ├── interactive/
│ │ ├── autocomplete_suggestions.go
│ │ ├── autocomplete_suggestions_test.go
│ │ ├── autocomplete_test.go
│ │ ├── cancel_test.go
│ │ ├── highlighter.go
│ │ ├── highlighter_test.go
│ │ ├── interactive_client.go
│ │ ├── interactive_client_autocomplete.go
│ │ ├── interactive_client_autocomplete_test.go
│ │ ├── interactive_client_cancel.go
│ │ ├── interactive_client_init.go
│ │ ├── interactive_client_test.go
│ │ ├── interactive_helpers.go
│ │ ├── interactive_helpers_test.go
│ │ ├── metaquery/
│ │ │ ├── completers.go
│ │ │ ├── definitions.go
│ │ │ ├── handler_cache.go
│ │ │ ├── handler_help.go
│ │ │ ├── handler_input.go
│ │ │ ├── handler_inspect.go
│ │ │ ├── handler_inspect_legacy.go
│ │ │ ├── handler_search_path.go
│ │ │ ├── handlers.go
│ │ │ ├── suggestions.go
│ │ │ ├── utils.go
│ │ │ ├── utils_test.go
│ │ │ └── validators.go
│ │ └── run.go
│ ├── introspection/
│ │ ├── connection_table_sql.go
│ │ ├── introspection_test.go
│ │ ├── plugin_column_table_sql.go
│ │ ├── plugin_table_sql.go
│ │ └── rate_limiters_table_sql.go
│ ├── ociinstaller/
│ │ ├── asset_downloader.go
│ │ ├── assets_image.go
│ │ ├── db.go
│ │ ├── db_downloader.go
│ │ ├── db_image.go
│ │ ├── db_test.go
│ │ ├── diskspace.go
│ │ ├── fdw.go
│ │ ├── fdw_downloader.go
│ │ ├── fdw_image.go
│ │ ├── fdw_test.go
│ │ ├── mediatypes.go
│ │ ├── oci_image_types.go
│ │ └── versionfile/
│ │ ├── db_version_file.go
│ │ └── db_version_file_test.go
│ ├── options/
│ │ ├── database.go
│ │ ├── general.go
│ │ └── plugin.go
│ ├── otel/
│ │ ├── README.md
│ │ ├── docker-compose.yaml
│ │ ├── otel-collector-config.yaml
│ │ └── prometheus.yaml
│ ├── parse/
│ │ └── plugin.go
│ ├── plugin/
│ │ ├── actions.go
│ │ ├── installed.go
│ │ ├── plugin_connection.go
│ │ └── plugin_remove.go
│ ├── pluginmanager/
│ │ ├── lifecycle.go
│ │ ├── plugin_manager_client.go
│ │ ├── state.go
│ │ └── state_test.go
│ ├── pluginmanager_service/
│ │ ├── Makefile
│ │ ├── get_response.go
│ │ ├── grpc/
│ │ │ ├── proto/
│ │ │ │ ├── plugin_manager.pb.go
│ │ │ │ ├── plugin_manager.proto
│ │ │ │ ├── plugin_manager_grpc.pb.go
│ │ │ │ ├── reattach_config.go
│ │ │ │ ├── simple_addr.go
│ │ │ │ └── supported_operations.go
│ │ │ ├── shared/
│ │ │ │ ├── grpc.go
│ │ │ │ └── interface.go
│ │ │ └── start_failure.go
│ │ ├── message_server.go
│ │ ├── message_server_test.go
│ │ ├── plugin_manager.go
│ │ ├── plugin_manager_connection_config.go
│ │ ├── plugin_manager_notifications.go
│ │ ├── plugin_manager_plugin_columns.go
│ │ ├── plugin_manager_plugin_instance.go
│ │ ├── plugin_manager_rate_limiters.go
│ │ ├── plugin_manager_test.go
│ │ ├── rate_limiter.go
│ │ ├── rate_limiters_helpers_test.go
│ │ ├── rate_limiters_test.go
│ │ └── running_plugin.go
│ ├── query/
│ │ ├── init_data.go
│ │ ├── queryexecute/
│ │ │ ├── execute.go
│ │ │ └── execute_test.go
│ │ ├── queryhistory/
│ │ │ ├── history.go
│ │ │ └── history_test.go
│ │ └── queryresult/
│ │ ├── result.go
│ │ ├── result_test.go
│ │ ├── scan_metadata.go
│ │ └── timing_result.go
│ ├── serversettings/
│ │ ├── load.go
│ │ └── setup.go
│ ├── snapshot/
│ │ ├── snapshot.go
│ │ └── snapshot_test.go
│ ├── statushooks/
│ │ ├── context.go
│ │ ├── null_hooks.go
│ │ ├── null_snapshot_progress.go
│ │ ├── snapshot_progress.go
│ │ ├── snapshot_progress_reporter.go
│ │ ├── spinner.go
│ │ ├── status_hooks.go
│ │ └── statushooks_test.go
│ ├── steampipeconfig/
│ │ ├── connection_plugin.go
│ │ ├── connection_schemas.go
│ │ ├── connection_state.go
│ │ ├── connection_state_map.go
│ │ ├── connection_state_map_test.go
│ │ ├── connection_test.go
│ │ ├── connection_updates.go
│ │ ├── connection_updates_opts.go
│ │ ├── connection_updates_test.go
│ │ ├── connection_updates_validate.go
│ │ ├── dependency_path.go
│ │ ├── load_config.go
│ │ ├── load_config_test.go
│ │ ├── load_connection_state.go
│ │ ├── load_connection_state_option.go
│ │ ├── postgres_notification.go
│ │ ├── refresh_connections_result.go
│ │ ├── shared_test.go
│ │ ├── steampipeconfig.go
│ │ ├── testdata/
│ │ │ ├── connection_config/
│ │ │ │ ├── multiple_connections/
│ │ │ │ │ └── config/
│ │ │ │ │ ├── connection1.spc
│ │ │ │ │ └── connection2.spc
│ │ │ │ ├── options_duplicate_block/
│ │ │ │ │ └── config/
│ │ │ │ │ ├── default.spc
│ │ │ │ │ └── default2.spc
│ │ │ │ ├── options_only/
│ │ │ │ │ └── config/
│ │ │ │ │ └── default.spc
│ │ │ │ ├── single_connection/
│ │ │ │ │ └── config/
│ │ │ │ │ └── connection1.spc
│ │ │ │ ├── single_connection_with_default_and_connection_options/
│ │ │ │ │ └── config/
│ │ │ │ │ ├── connection1.spc
│ │ │ │ │ └── default.spc
│ │ │ │ └── single_connection_with_default_options/
│ │ │ │ └── config/
│ │ │ │ ├── connection1.spc
│ │ │ │ └── default.spc
│ │ │ ├── connections_to_update/
│ │ │ │ ├── config/
│ │ │ │ │ └── default.spc
│ │ │ │ ├── plugins/
│ │ │ │ │ └── hub.steampipe.io/
│ │ │ │ │ └── plugins/
│ │ │ │ │ └── turbot/
│ │ │ │ │ └── connection-test-1@latest/
│ │ │ │ │ └── connection-test-1.plugin
│ │ │ │ └── plugins_src/
│ │ │ │ └── hub.steampipe.io/
│ │ │ │ └── plugins/
│ │ │ │ └── turbot/
│ │ │ │ ├── connection-test-1@latest/
│ │ │ │ │ └── connection-test-1.plugin
│ │ │ │ ├── connection-test-2@latest/
│ │ │ │ │ └── connection-test-2.plugin
│ │ │ │ └── connection-test-3@latest/
│ │ │ │ └── connection-test-3.plugin
│ │ │ ├── load_config_test/
│ │ │ │ ├── empty/
│ │ │ │ │ └── .gitstub
│ │ │ │ ├── invalid_options_block/
│ │ │ │ │ └── workspace.spc
│ │ │ │ ├── override_terminal_config/
│ │ │ │ │ └── workspace.spc
│ │ │ │ └── search_path_prefix/
│ │ │ │ └── workspace.spc
│ │ │ └── mods/
│ │ │ ├── anonymous_input/
│ │ │ │ ├── dashboard.sp
│ │ │ │ └── mod.sp
│ │ │ ├── anonymous_top_level_resource/
│ │ │ │ ├── dashboard.sp
│ │ │ │ └── mod.sp
│ │ │ ├── controls_and_groups/
│ │ │ │ ├── control.sp
│ │ │ │ ├── mod.sp
│ │ │ │ └── q1.sql
│ │ │ ├── controls_and_groups_circular/
│ │ │ │ ├── control.sp
│ │ │ │ └── mod.sp
│ │ │ ├── controls_and_groups_duplicate_child/
│ │ │ │ ├── control.sp
│ │ │ │ └── mod.sp
│ │ │ ├── dashboard_base_inheritance/
│ │ │ │ ├── mod.sp
│ │ │ │ └── report.sp
│ │ │ ├── dashboard_base_override/
│ │ │ │ ├── mod.sp
│ │ │ │ └── report.sp
│ │ │ ├── dashboard_container_with_all_children/
│ │ │ │ ├── mod.sp
│ │ │ │ └── report.sp
│ │ │ ├── dashboard_nested_containers/
│ │ │ │ ├── mod.sp
│ │ │ │ └── report.sp
│ │ │ ├── dashboard_resource_naming/
│ │ │ │ ├── mod.sp
│ │ │ │ └── report.sp
│ │ │ ├── dashboard_runtime_deps_named_arg/
│ │ │ │ ├── mod.sp
│ │ │ │ └── report.sp
│ │ │ ├── dashboard_sibling_containers/
│ │ │ │ ├── mod.sp
│ │ │ │ └── report.sp
│ │ │ ├── dashboard_simple_container/
│ │ │ │ ├── mod.sp
│ │ │ │ └── report.sp
│ │ │ ├── dashboard_simple_report/
│ │ │ │ ├── mod.sp
│ │ │ │ └── report.sp
│ │ │ ├── dashboard_with_all_children/
│ │ │ │ ├── mod.sp
│ │ │ │ └── report.sp
│ │ │ ├── dashboard_with_child_dashboard/
│ │ │ │ ├── dashboard.sp
│ │ │ │ └── mod.sp
│ │ │ ├── dashboard_with_duplicate_inputs/
│ │ │ │ ├── mod.sp
│ │ │ │ └── report.sp
│ │ │ ├── dashboard_with_duplicate_named_children/
│ │ │ │ ├── mod.sp
│ │ │ │ └── report.sp
│ │ │ ├── dashboard_with_named_children/
│ │ │ │ ├── mod.sp
│ │ │ │ └── report.sp
│ │ │ ├── duplicate_dashboard/
│ │ │ │ ├── dashboard.sp
│ │ │ │ └── mod.sp
│ │ │ ├── global_dashboard_inputs/
│ │ │ │ ├── dashboard.sp
│ │ │ │ └── mod.sp
│ │ │ ├── inputs_with_cyclic_dependency/
│ │ │ │ ├── dashboard.sp
│ │ │ │ └── mod.sp
│ │ │ ├── no_mod_hcl_queries/
│ │ │ │ ├── query.sp
│ │ │ │ └── query2.sp
│ │ │ ├── no_mod_sql_files/
│ │ │ │ ├── q1.sql
│ │ │ │ └── q2.sql
│ │ │ ├── query_with_paramdefs_control_with_named_params/
│ │ │ │ ├── control.sp
│ │ │ │ ├── mod.sp
│ │ │ │ └── query.sp
│ │ │ ├── single_mod_duplicate_query/
│ │ │ │ ├── mod.sp
│ │ │ │ ├── q1.sp
│ │ │ │ └── q1_.sp
│ │ │ ├── single_mod_no_query/
│ │ │ │ └── mod.sp
│ │ │ ├── single_mod_one_query/
│ │ │ │ ├── mod.pp
│ │ │ │ └── query.pp
│ │ │ ├── single_mod_one_query_one_control/
│ │ │ │ ├── control.sp
│ │ │ │ ├── mod.sp
│ │ │ │ └── query.sp
│ │ │ ├── single_mod_one_sql_file/
│ │ │ │ ├── mod.sp
│ │ │ │ └── q1.sql
│ │ │ ├── single_mod_sql_file_and_clashing_hcl_query/
│ │ │ │ ├── mod.sp
│ │ │ │ ├── q1.sql
│ │ │ │ └── query.sp
│ │ │ ├── single_mod_sql_file_and_hcl_query/
│ │ │ │ ├── mod.sp
│ │ │ │ ├── q2.sql
│ │ │ │ └── query.sp
│ │ │ ├── single_mod_two_queries_diff_files/
│ │ │ │ ├── mod.sp
│ │ │ │ ├── query.sp
│ │ │ │ └── query2.sp
│ │ │ ├── single_mod_two_queries_same_file/
│ │ │ │ ├── mod.sp
│ │ │ │ └── query.sp
│ │ │ ├── single_mod_two_sql_files/
│ │ │ │ ├── mod.sp
│ │ │ │ ├── q1.sql
│ │ │ │ └── q2.sql
│ │ │ ├── test_load_mod_resource_names_workspace/
│ │ │ │ ├── query_control_1.sql
│ │ │ │ ├── query_control_2.sql
│ │ │ │ ├── query_control_3.sql
│ │ │ │ └── test_workspace.sp
│ │ │ ├── two_mods/
│ │ │ │ └── mod.sp
│ │ │ └── wrong_title_referencing/
│ │ │ ├── dashboard.sp
│ │ │ └── mod.sp
│ │ ├── validate.go
│ │ ├── validation_failure.go
│ │ └── validation_failure_test.go
│ ├── task/
│ │ ├── available_versions.go
│ │ ├── config.go
│ │ ├── display.go
│ │ ├── runner.go
│ │ ├── runner_test.go
│ │ ├── version_checker.go
│ │ └── version_checker_test.go
│ ├── utils/
│ │ ├── exit.go
│ │ ├── pid_exists.go
│ │ └── user_input.go
│ └── versionhelpers/
│ └── constraints.go
├── scripts/
│ ├── install.sh
│ ├── linux_container_info.sh
│ ├── prepare_amazonlinux_container.sh
│ ├── prepare_centos_container.sh
│ ├── prepare_ubuntu_arm_container.sh
│ ├── prepare_ubuntu_container.sh
│ ├── smoke_test.sh
│ └── test_cred_rotate.sh
└── tests/
├── acceptance/
│ ├── json_patch.sh
│ ├── lib/
│ │ └── connection_map_utils.bash
│ ├── run-linux-arm.sh
│ ├── run-local.sh
│ ├── run.sh
│ ├── test_data/
│ │ ├── dashboard_inputs_with_base/
│ │ │ ├── dashboard.sp
│ │ │ └── mod.sp
│ │ ├── mods/
│ │ │ ├── bad_mod_with_dep_mod_version_require_not_met/
│ │ │ │ ├── README.md
│ │ │ │ ├── dashboard.sp
│ │ │ │ └── mod.sp
│ │ │ ├── bad_mod_with_plugin_require_not_met/
│ │ │ │ ├── README.md
│ │ │ │ ├── dashboard.sp
│ │ │ │ └── mod.sp
│ │ │ ├── bad_mod_with_sp_version_require_not_met/
│ │ │ │ ├── README.md
│ │ │ │ ├── dashboard.sp
│ │ │ │ └── mod.sp
│ │ │ ├── check_all_mod/
│ │ │ │ ├── control.sp
│ │ │ │ ├── mod.sp
│ │ │ │ └── query.sp
│ │ │ ├── config_parsing_test_mod/
│ │ │ │ ├── control.sp
│ │ │ │ ├── mod.sp
│ │ │ │ └── query.sp
│ │ │ ├── control_rendering_test_mod/
│ │ │ │ ├── mod.sp
│ │ │ │ ├── query/
│ │ │ │ │ ├── gen_query.sp
│ │ │ │ │ ├── gen_query.sql
│ │ │ │ │ ├── gen_query_with_dimensions.sp
│ │ │ │ │ ├── gen_query_with_dimensions.sql
│ │ │ │ │ └── long_short_unicode_reasons.sql
│ │ │ │ └── sp_check_test/
│ │ │ │ ├── control_check_rendering.sp
│ │ │ │ └── control_reasons_titles.sp
│ │ │ ├── csv_plugin_test/
│ │ │ │ └── csv.txt
│ │ │ ├── dashboard_cards/
│ │ │ │ ├── dashboard.sp
│ │ │ │ └── mod.sp
│ │ │ ├── dashboard_graphs/
│ │ │ │ ├── dashboard.sp
│ │ │ │ └── mod.sp
│ │ │ ├── dashboard_inputs/
│ │ │ │ ├── dashboard.sp
│ │ │ │ └── mod.sp
│ │ │ ├── dashboard_parsing_nested_node_edge_providers_fail/
│ │ │ │ ├── mod.sp
│ │ │ │ └── query_providers_nested_require_sql.sp
│ │ │ ├── dashboard_parsing_nested_query_providers_fail/
│ │ │ │ ├── mod.sp
│ │ │ │ └── query_providers_nested_require_sql.sp
│ │ │ ├── dashboard_parsing_top_level_query_providers_fail/
│ │ │ │ ├── mod.sp
│ │ │ │ └── query_providers_top_level_require_sql.sp
│ │ │ ├── dashboard_parsing_validation/
│ │ │ │ ├── mod.sp
│ │ │ │ ├── nested_dashboards.sp
│ │ │ │ ├── node_edge_providers_nested.sp
│ │ │ │ ├── node_edge_providers_top_level.sp
│ │ │ │ ├── query.sp
│ │ │ │ ├── query_providers_nested.sp
│ │ │ │ ├── query_providers_nested_dont_require_sql.sp
│ │ │ │ ├── query_providers_top_level.sp
│ │ │ │ └── query_providers_top_level_require_sql.sp
│ │ │ ├── dashboard_sibling_containers/
│ │ │ │ ├── mod.sp
│ │ │ │ └── report.sp
│ │ │ ├── dashboard_texts/
│ │ │ │ ├── dashboard.sp
│ │ │ │ └── mod.sp
│ │ │ ├── dashboard_withs/
│ │ │ │ ├── dashboard.sp
│ │ │ │ └── mod.sp
│ │ │ ├── dependent_mod_with_legacy_lock/
│ │ │ │ ├── .mod.cache.json
│ │ │ │ ├── README.md
│ │ │ │ └── mod.sp
│ │ │ ├── dependent_mod_with_variables/
│ │ │ │ ├── .mod.cache.json
│ │ │ │ ├── README.md
│ │ │ │ ├── mod.sp
│ │ │ │ ├── query.sp
│ │ │ │ └── steampipe.spvars
│ │ │ ├── failure_test_mod/
│ │ │ │ ├── control_parsing_failures_simulation/
│ │ │ │ │ └── bad_control_args.sp
│ │ │ │ ├── mod.sp
│ │ │ │ └── query/
│ │ │ │ └── query_params.sp
│ │ │ ├── functionality_test_mod/
│ │ │ │ ├── functionality/
│ │ │ │ │ ├── all_controls_ok.sp
│ │ │ │ │ ├── cache.sp
│ │ │ │ │ ├── control_args.sp
│ │ │ │ │ ├── control_summary.sp
│ │ │ │ │ └── plugin_crash.sp
│ │ │ │ ├── mod.sp
│ │ │ │ └── query/
│ │ │ │ ├── check_cache.sql
│ │ │ │ ├── check_plugincrash_normalquery1.sql
│ │ │ │ ├── check_plugincrash_normalquery2.sql
│ │ │ │ ├── query_params.sp
│ │ │ │ ├── search_path_1.sql
│ │ │ │ ├── search_path_2.sql
│ │ │ │ ├── static_query.sql
│ │ │ │ └── static_query_2.sql
│ │ │ ├── functionality_test_mod_pp/
│ │ │ │ ├── functionality/
│ │ │ │ │ ├── all_controls_ok.pp
│ │ │ │ │ ├── cache.pp
│ │ │ │ │ ├── control_args.pp
│ │ │ │ │ ├── control_summary.pp
│ │ │ │ │ └── plugin_crash.pp
│ │ │ │ ├── mod.pp
│ │ │ │ └── query/
│ │ │ │ ├── check_cache.sql
│ │ │ │ ├── check_plugincrash_normalquery1.sql
│ │ │ │ ├── check_plugincrash_normalquery2.sql
│ │ │ │ ├── query_params.pp
│ │ │ │ ├── search_path_1.sql
│ │ │ │ ├── search_path_2.sql
│ │ │ │ ├── static_query.sql
│ │ │ │ └── static_query_2.sql
│ │ │ ├── introspection_table_mod/
│ │ │ │ ├── mod.sp
│ │ │ │ ├── output.json.json
│ │ │ │ └── resources.sp
│ │ │ ├── local_mod_with_args_in_require/
│ │ │ │ └── mod.sp
│ │ │ ├── local_mod_with_mod.pp_file/
│ │ │ │ └── mod.pp
│ │ │ ├── mod_install/
│ │ │ │ └── mod-install.txt
│ │ │ ├── mod_with_blank_dimension_value/
│ │ │ │ ├── control.sp
│ │ │ │ ├── mod.sp
│ │ │ │ └── query.sp
│ │ │ ├── mod_with_both_version_and_minversion_in_plugin_block/
│ │ │ │ └── mod.sp
│ │ │ ├── mod_with_legacy_requires_block/
│ │ │ │ └── mod.sp
│ │ │ ├── mod_with_list_param/
│ │ │ │ └── mod.sp
│ │ │ ├── mod_with_minversion_in_plugin_block/
│ │ │ │ └── mod.sp
│ │ │ ├── mod_with_new_steampipe_block/
│ │ │ │ └── mod.sp
│ │ │ ├── mod_with_old_plugin_block_with_version/
│ │ │ │ └── mod.sp
│ │ │ ├── mod_with_old_steampipe_and_new_steampipe_block_in_require/
│ │ │ │ └── mod.sp
│ │ │ ├── mod_with_old_steampipe_in_require/
│ │ │ │ └── mod.sp
│ │ │ ├── nested_mod/
│ │ │ │ └── folder1/
│ │ │ │ └── folder11/
│ │ │ │ ├── folder111/
│ │ │ │ │ └── control.sp
│ │ │ │ └── mod.sp
│ │ │ ├── nested_mod_no_mod_file/
│ │ │ │ └── folder1/
│ │ │ │ └── folder11/
│ │ │ │ └── control.sp
│ │ │ ├── nested_mod_pp/
│ │ │ │ └── folder1/
│ │ │ │ └── folder11/
│ │ │ │ ├── folder111/
│ │ │ │ │ └── control.sp
│ │ │ │ └── mod.pp
│ │ │ ├── sample_workspace/
│ │ │ │ ├── cis_v130/
│ │ │ │ │ ├── cache.sp
│ │ │ │ │ ├── cis.sp
│ │ │ │ │ ├── control_args.sp
│ │ │ │ │ ├── control_summary.sp
│ │ │ │ │ ├── docs/
│ │ │ │ │ │ ├── cis-overview.md
│ │ │ │ │ │ ├── cis_v130_1.md
│ │ │ │ │ │ ├── cis_v130_1_1.md
│ │ │ │ │ │ ├── cis_v130_1_1_copy.md
│ │ │ │ │ │ ├── cis_v130_1_2.md
│ │ │ │ │ │ ├── cis_v130_1_3.md
│ │ │ │ │ │ ├── cis_v130_1_4.md
│ │ │ │ │ │ ├── cis_v130_2.md
│ │ │ │ │ │ ├── cis_v130_2_1.md
│ │ │ │ │ │ ├── cis_v130_2_1_1.md
│ │ │ │ │ │ ├── cis_v130_2_1_2.md
│ │ │ │ │ │ ├── cis_v130_2_2.md
│ │ │ │ │ │ ├── cis_v130_3.md
│ │ │ │ │ │ ├── cis_v130_3_1.md
│ │ │ │ │ │ └── cis_v130_3_10.md
│ │ │ │ │ ├── plugin_crash.sp
│ │ │ │ │ ├── section1.sp
│ │ │ │ │ ├── section2.sp
│ │ │ │ │ ├── section3.sp
│ │ │ │ │ ├── section4.sp
│ │ │ │ │ └── section5.sp
│ │ │ │ ├── mod.sp
│ │ │ │ └── query/
│ │ │ │ ├── alarm.sql
│ │ │ │ ├── check_cache.sql
│ │ │ │ ├── check_plugincrash_normalquery1.sql
│ │ │ │ ├── check_plugincrash_normalquery2.sql
│ │ │ │ ├── error.sql
│ │ │ │ ├── info.sql
│ │ │ │ ├── named_query_1.sql
│ │ │ │ ├── named_query_2.sql
│ │ │ │ ├── named_query_3.sql
│ │ │ │ ├── named_query_4.sql
│ │ │ │ ├── named_query_7.sql
│ │ │ │ ├── ok.sql
│ │ │ │ ├── query_params.sp
│ │ │ │ ├── search_path_1.sql
│ │ │ │ ├── search_path_2.sql
│ │ │ │ ├── skip.sql
│ │ │ │ └── static_query.sql
│ │ │ ├── service_mod/
│ │ │ │ ├── control.sp
│ │ │ │ ├── mod.sp
│ │ │ │ └── query.sp
│ │ │ ├── test_dependency_mod_var_set_from_auto.ppvars/
│ │ │ │ ├── .mod.cache.json
│ │ │ │ ├── .steampipe/
│ │ │ │ │ └── mods/
│ │ │ │ │ └── github.com/
│ │ │ │ │ └── pskrbasu/
│ │ │ │ │ └── steampipe-mod-dependency-vars-1@v2.0.0/
│ │ │ │ │ ├── .gitignore
│ │ │ │ │ ├── README.md
│ │ │ │ │ ├── control.sp
│ │ │ │ │ ├── mod.sp
│ │ │ │ │ └── query.sp
│ │ │ │ ├── deps.auto.ppvars
│ │ │ │ └── mod.pp
│ │ │ ├── test_dependency_mod_var_set_from_auto.spvars/
│ │ │ │ ├── .mod.cache.json
│ │ │ │ ├── .steampipe/
│ │ │ │ │ └── mods/
│ │ │ │ │ └── github.com/
│ │ │ │ │ └── pskrbasu/
│ │ │ │ │ └── steampipe-mod-dependency-vars-1@v2.0.0/
│ │ │ │ │ ├── .gitignore
│ │ │ │ │ ├── README.md
│ │ │ │ │ ├── control.sp
│ │ │ │ │ ├── mod.sp
│ │ │ │ │ └── query.sp
│ │ │ │ ├── deps.auto.spvars
│ │ │ │ └── mod.sp
│ │ │ ├── test_dependency_mod_var_set_from_command_line/
│ │ │ │ ├── .mod.cache.json
│ │ │ │ ├── .steampipe/
│ │ │ │ │ └── mods/
│ │ │ │ │ └── github.com/
│ │ │ │ │ └── pskrbasu/
│ │ │ │ │ └── steampipe-mod-dependency-vars-1@v2.0.0/
│ │ │ │ │ ├── .gitignore
│ │ │ │ │ ├── README.md
│ │ │ │ │ ├── control.sp
│ │ │ │ │ ├── mod.sp
│ │ │ │ │ └── query.sp
│ │ │ │ └── mod.sp
│ │ │ ├── test_dependency_mod_var_set_from_steampipe.ppvars/
│ │ │ │ ├── .mod.cache.json
│ │ │ │ ├── .steampipe/
│ │ │ │ │ └── mods/
│ │ │ │ │ └── github.com/
│ │ │ │ │ └── pskrbasu/
│ │ │ │ │ └── steampipe-mod-dependency-vars-1@v2.0.0/
│ │ │ │ │ ├── .gitignore
│ │ │ │ │ ├── README.md
│ │ │ │ │ ├── control.sp
│ │ │ │ │ ├── mod.sp
│ │ │ │ │ └── query.sp
│ │ │ │ ├── mod.pp
│ │ │ │ └── steampipe.ppvars
│ │ │ ├── test_dependency_mod_var_set_from_steampipe.spvars/
│ │ │ │ ├── .mod.cache.json
│ │ │ │ ├── .steampipe/
│ │ │ │ │ └── mods/
│ │ │ │ │ └── github.com/
│ │ │ │ │ └── pskrbasu/
│ │ │ │ │ └── steampipe-mod-dependency-vars-1@v2.0.0/
│ │ │ │ │ ├── .gitignore
│ │ │ │ │ ├── README.md
│ │ │ │ │ ├── control.sp
│ │ │ │ │ ├── mod.sp
│ │ │ │ │ └── query.sp
│ │ │ │ ├── mod.sp
│ │ │ │ └── steampipe.spvars
│ │ │ ├── test_workspace_mod_var_precedence_set_from_both_ppvars/
│ │ │ │ ├── README.md
│ │ │ │ ├── deps.auto.ppvars
│ │ │ │ ├── mod.pp
│ │ │ │ └── steampipe.ppvars
│ │ │ ├── test_workspace_mod_var_precedence_set_from_both_spvars/
│ │ │ │ ├── README.md
│ │ │ │ ├── deps.auto.spvars
│ │ │ │ ├── mod.sp
│ │ │ │ └── steampipe.spvars
│ │ │ ├── test_workspace_mod_var_set_from_auto.ppvars/
│ │ │ │ ├── README.md
│ │ │ │ ├── dep.auto.ppvars
│ │ │ │ └── mod.pp
│ │ │ ├── test_workspace_mod_var_set_from_auto.spvars/
│ │ │ │ ├── README.md
│ │ │ │ ├── dep.auto.spvars
│ │ │ │ └── mod.sp
│ │ │ ├── test_workspace_mod_var_set_from_command_line/
│ │ │ │ ├── README.md
│ │ │ │ └── mod.sp
│ │ │ ├── test_workspace_mod_var_set_from_explicit_ppvars/
│ │ │ │ ├── README.md
│ │ │ │ ├── deps.ppvars
│ │ │ │ └── mod.pp
│ │ │ ├── test_workspace_mod_var_set_from_explicit_spvars/
│ │ │ │ ├── README.md
│ │ │ │ ├── deps.spvars
│ │ │ │ └── mod.sp
│ │ │ ├── test_workspace_mod_var_set_from_steampipe.ppvars/
│ │ │ │ ├── README.md
│ │ │ │ ├── mod.pp
│ │ │ │ └── steampipe.ppvars
│ │ │ └── test_workspace_mod_var_set_from_steampipe.spvars/
│ │ │ ├── README.md
│ │ │ ├── mod.sp
│ │ │ └── steampipe.spvars
│ │ ├── snapshots/
│ │ │ ├── expected_sps_many_withs_dashboard.json
│ │ │ ├── expected_sps_sibling_containers_report.json
│ │ │ ├── expected_sps_testing_card_blocks_dashboard.json
│ │ │ ├── expected_sps_testing_dashboard_inputs.json
│ │ │ ├── expected_sps_testing_dashboard_inputs_with_base.json
│ │ │ ├── expected_sps_testing_nodes_and_edges_dashboard.json
│ │ │ ├── expected_sps_testing_text_blocks_dashboard.json
│ │ │ ├── source.json
│ │ │ └── target.json
│ │ ├── source_files/
│ │ │ ├── aggregator.spc
│ │ │ ├── blank_aggregator.spc
│ │ │ ├── chaos.json
│ │ │ ├── chaos2.json
│ │ │ ├── chaos2.yml
│ │ │ ├── chaos_case_sensitivity.spc
│ │ │ ├── chaos_conn_import_disabled.spc
│ │ │ ├── chaos_conn_name_escaping.spc
│ │ │ ├── chaos_no_options.spc
│ │ │ ├── chaos_options.json
│ │ │ ├── chaos_options.spc
│ │ │ ├── chaos_options.yml
│ │ │ ├── chaos_options_2.json
│ │ │ ├── chaos_options_2.spc
│ │ │ ├── chaos_options_2.yml
│ │ │ ├── chaos_ttl_options.spc
│ │ │ ├── config_tests/
│ │ │ │ ├── default.spc
│ │ │ │ ├── sp_install_dir_default/
│ │ │ │ │ └── README.md
│ │ │ │ ├── sp_install_dir_env/
│ │ │ │ │ └── README.md
│ │ │ │ ├── sp_install_dir_sample/
│ │ │ │ │ └── README.md
│ │ │ │ ├── workspace_profiles/
│ │ │ │ │ └── workspaces.spc
│ │ │ │ ├── workspace_profiles_options/
│ │ │ │ │ └── workspaces.spc
│ │ │ │ └── workspace_tests.json
│ │ │ ├── csv/
│ │ │ │ ├── a.csv
│ │ │ │ ├── a_extra_col.csv
│ │ │ │ └── b.csv
│ │ │ ├── csv_template.spc
│ │ │ ├── database_options_listen_placeholder.spc
│ │ │ ├── default_cache_ttl_10.spc
│ │ │ ├── default_search_path.spc
│ │ │ ├── dynamic_aggregator_tests/
│ │ │ │ ├── dynamic_aggregator_col_mismatch.spc
│ │ │ │ ├── dynamic_aggregator_col_type_mismatch.spc
│ │ │ │ ├── dynamic_aggregator_col_type_mismatch_2.spc
│ │ │ │ ├── dynamic_aggregator_col_type_mismatch_3.spc
│ │ │ │ ├── dynamic_aggregator_col_type_mismatch_4.spc
│ │ │ │ ├── dynamic_aggregator_same_table_cols.spc
│ │ │ │ └── dynamic_aggregator_table_mismatch.spc
│ │ │ ├── service.json
│ │ │ ├── servicenow.spc
│ │ │ ├── single_chaos.spc
│ │ │ ├── two_chaos.spc
│ │ │ ├── update_check_disabled.spc
│ │ │ ├── workspace_cache_disabled.spc
│ │ │ ├── workspace_cache_enabled.spc
│ │ │ └── workspace_cache_ttl.spc
│ │ └── templates/
│ │ ├── dynamic_aggregators_col_mismatch.json
│ │ ├── dynamic_aggregators_col_type_mismatch.json
│ │ ├── dynamic_aggregators_col_type_mismatch_2.json
│ │ ├── dynamic_aggregators_col_type_mismatch_3.json
│ │ ├── dynamic_aggregators_col_type_mismatch_4.json
│ │ ├── dynamic_aggregators_same_tables_cols_result.json
│ │ ├── dynamic_aggregators_table_mismatch_t1.json
│ │ ├── dynamic_aggregators_table_mismatch_t2.json
│ │ ├── expected_1.json
│ │ ├── expected_11.json
│ │ ├── expected_12.json
│ │ ├── expected_13.json
│ │ ├── expected_14.json
│ │ ├── expected_15.json
│ │ ├── expected_2.json
│ │ ├── expected_3.json
│ │ ├── expected_5.json
│ │ ├── expected_6.json
│ │ ├── expected_all_alarm.txt
│ │ ├── expected_blank_dimension.txt
│ │ ├── expected_check_all.json
│ │ ├── expected_check_csv.csv
│ │ ├── expected_check_csv_noheader.csv
│ │ ├── expected_check_csv_pipe_separator.csv
│ │ ├── expected_check_csv_sorted_tags.csv
│ │ ├── expected_check_html.html
│ │ ├── expected_check_json.json
│ │ ├── expected_check_markdown.md
│ │ ├── expected_check_nunit3.xml
│ │ ├── expected_check_separator_csv.csv
│ │ ├── expected_check_snapshot.sps
│ │ ├── expected_crosstab_results.txt
│ │ ├── expected_csv_header.csv
│ │ ├── expected_csv_no_header.csv
│ │ ├── expected_csv_separator_header.csv
│ │ ├── expected_csv_separator_no_header.csv
│ │ ├── expected_csv_with_null_values.csv
│ │ ├── expected_introspection_check_where.json
│ │ ├── expected_introspection_info_benchmark.json
│ │ ├── expected_introspection_info_control.json
│ │ ├── expected_introspection_info_dashboard.json
│ │ ├── expected_introspection_info_dashboard_card.json
│ │ ├── expected_introspection_info_dashboard_chart.json
│ │ ├── expected_introspection_info_dashboard_flow.json
│ │ ├── expected_introspection_info_dashboard_graph.json
│ │ ├── expected_introspection_info_dashboard_hierarchy.json
│ │ ├── expected_introspection_info_dashboard_image.json
│ │ ├── expected_introspection_info_dashboard_input.json
│ │ ├── expected_introspection_info_dashboard_table.json
│ │ ├── expected_introspection_info_dashboard_text.json
│ │ ├── expected_introspection_info_query.json
│ │ ├── expected_introspection_info_variable.json
│ │ ├── expected_json.json
│ │ ├── expected_line.txt
│ │ ├── expected_line_long.txt
│ │ ├── expected_long_title.txt
│ │ ├── expected_mixed_results.txt
│ │ ├── expected_named_query_current_folder.txt
│ │ ├── expected_plugin_help_output.txt
│ │ ├── expected_plugin_list_json.json
│ │ ├── expected_plugin_list_json_with_failed_plugins.json
│ │ ├── expected_plugin_list_json_with_missing_plugins.json
│ │ ├── expected_plugin_list_table.txt
│ │ ├── expected_plugin_list_table_with_failed_plugins.txt
│ │ ├── expected_plugin_list_table_with_missing_plugins.txt
│ │ ├── expected_query_csv.csv
│ │ ├── expected_query_csv_header_off.csv
│ │ ├── expected_query_empty_json.json
│ │ ├── expected_query_json.json
│ │ ├── expected_query_line.txt
│ │ ├── expected_query_table_header_off.txt
│ │ ├── expected_reasons.txt
│ │ ├── expected_search_path_1.txt
│ │ ├── expected_search_path_2.txt
│ │ ├── expected_search_path_3.txt
│ │ ├── expected_search_path_4.txt
│ │ ├── expected_search_path_5.txt
│ │ ├── expected_search_path_6.txt
│ │ ├── expected_search_path_internal_schema_once_1.txt
│ │ ├── expected_search_path_internal_schema_once_2.txt
│ │ ├── expected_service_help_output.txt
│ │ ├── expected_service_start_listen_local.txt
│ │ ├── expected_service_start_port.txt
│ │ ├── expected_short_title.txt
│ │ ├── expected_sql_file.txt
│ │ ├── expected_sql_glob.txt
│ │ ├── expected_sql_glob_csv_no_header.txt
│ │ ├── expected_static_query_csv_snapshot_mode.csv
│ │ ├── expected_static_query_json_snapshot_mode.json
│ │ ├── expected_static_query_table_snapshot_mode.txt
│ │ ├── expected_summary_output.txt
│ │ ├── expected_table_header.txt
│ │ ├── expected_table_no_header.txt
│ │ ├── expected_table_with_null_values.txt
│ │ ├── expected_unicode_title.txt
│ │ ├── expected_workspace.txt
│ │ └── expected_workspace_folder.txt
│ ├── test_files/
│ │ ├── blank_aggregators.bats
│ │ ├── brew.bats
│ │ ├── cache.bats
│ │ ├── chaos_and_query.bats
│ │ ├── cloud.bats
│ │ ├── config_precedence.bats
│ │ ├── connection_config.bats
│ │ ├── date_time_types.bats
│ │ ├── dynamic_aggregators.bats
│ │ ├── dynamic_schema.bats
│ │ ├── exit_codes.bats
│ │ ├── force_stop.bats
│ │ ├── installation.bats
│ │ ├── migration.bats
│ │ ├── mod.sp
│ │ ├── performance.bats
│ │ ├── plugin.bats
│ │ ├── schema_cloning.bats
│ │ ├── search_path.bats
│ │ ├── service.bats
│ │ ├── settings.bats
│ │ ├── snapshot.bats
│ │ └── ssl.bats
│ └── url_parse.sh
├── dockertesting/
│ ├── debian/
│ │ ├── Dockerfile
│ │ └── run-tests.sh
│ └── oraclelinux/
│ ├── Dockerfile
│ └── run-tests.sh
└── manual_testing/
├── args/
│ └── with1/
│ ├── dashboard.sp
│ ├── error_dash.sp
│ ├── json_dash.sp
│ ├── mod.sp
│ ├── query.sp
│ └── with_no_results.sp
├── base_inputs/
│ ├── dashboard.sp
│ └── mod.sp
├── dashboard_container_inputs/
│ ├── inputs.sp
│ └── mod.sp
├── dashboard_global_and_dashboard_inputs/
│ ├── inputs.sp
│ └── mod.sp
├── demo/
│ ├── control_demo/
│ │ ├── control.sp
│ │ ├── mod.sp
│ │ ├── queries/
│ │ │ ├── q2/
│ │ │ │ ├── q4/
│ │ │ │ │ └── q3.sql
│ │ │ │ └── q5.sql
│ │ │ ├── q2.sql
│ │ │ ├── q3.sql
│ │ │ └── q4.sql
│ │ └── query.sp
│ ├── control_demo_sql/
│ │ ├── q1.sql
│ │ ├── q2.sql
│ │ └── query.sp
│ ├── query_param_demo/
│ │ ├── control.sp
│ │ ├── control2.sp
│ │ ├── mod.sp
│ │ └── query.sp
│ ├── query_param_demo2/
│ │ ├── _00.sql
│ │ ├── _02.sql
│ │ ├── mod.sp
│ │ └── query.sp
│ ├── references/
│ │ ├── mod.sp
│ │ └── query.sp
│ └── variables_demo/
│ ├── query.sp
│ ├── steampipe.spvars
│ ├── vars.spvars
│ └── vars2.auto.spvars
├── duplicate_inputs/
│ ├── dashboard.sp
│ └── mod.sp
├── many controls/
│ ├── c1/
│ │ ├── control.sp
│ │ ├── control10.sp
│ │ ├── control11.sp
│ │ ├── control12.sp
│ │ ├── control13.sp
│ │ ├── control14.sp
│ │ ├── control2.sp
│ │ ├── control3.sp
│ │ ├── control4.sp
│ │ ├── control5.sp
│ │ ├── control6.sp
│ │ ├── control7.sp
│ │ ├── control8.sp
│ │ └── control9.sp
│ ├── c2/
│ │ ├── control.sp
│ │ ├── control10.sp
│ │ ├── control11.sp
│ │ ├── control12.sp
│ │ ├── control13.sp
│ │ ├── control14.sp
│ │ ├── control2.sp
│ │ ├── control3.sp
│ │ ├── control4.sp
│ │ ├── control5.sp
│ │ ├── control6.sp
│ │ ├── control7.sp
│ │ ├── control8.sp
│ │ └── control9.sp
│ ├── c3/
│ │ ├── control.sp
│ │ ├── control10.sp
│ │ ├── control11.sp
│ │ ├── control12.sp
│ │ ├── control13.sp
│ │ ├── control14.sp
│ │ ├── control2.sp
│ │ ├── control3.sp
│ │ ├── control4.sp
│ │ ├── control5.sp
│ │ ├── control6.sp
│ │ ├── control7.sp
│ │ ├── control8.sp
│ │ └── control9.sp
│ ├── c4/
│ │ ├── control.sp
│ │ ├── control10.sp
│ │ ├── control11.sp
│ │ ├── control12.sp
│ │ ├── control13.sp
│ │ ├── control14.sp
│ │ ├── control2.sp
│ │ ├── control3.sp
│ │ ├── control4.sp
│ │ ├── control5.sp
│ │ ├── control6.sp
│ │ ├── control7.sp
│ │ ├── control8.sp
│ │ └── control9.sp
│ ├── mod.sp
│ └── queries/
│ ├── q1.sql
│ ├── q10.sql
│ ├── q11.sql
│ ├── q12.sql
│ ├── q13.sql
│ ├── q14.sql
│ ├── q15.sql
│ ├── q16.sql
│ ├── q17.sql
│ ├── q18.sql
│ ├── q19.sql
│ ├── q2.sql
│ ├── q20.sql
│ ├── q3.sql
│ ├── q4.sql
│ ├── q5.sql
│ ├── q6.sql
│ ├── q7.sql
│ ├── q8.sql
│ └── q9.sql
├── node_reuse/
│ ├── base_ref/
│ │ ├── dashboard.sp
│ │ └── mod.sp
│ ├── base_table_with/
│ │ ├── dashboard.sp
│ │ └── mod.sp
│ ├── base_with_param_default/
│ │ ├── dashboard.sp
│ │ └── mod.sp
│ ├── graph_as_node_invalid/
│ │ ├── dashboard.sp
│ │ └── mod.sp
│ ├── inputs/
│ │ ├── dashboard.sp
│ │ └── mod.sp
│ ├── many_withs/
│ │ ├── dashboard.sp
│ │ └── mod.sp
│ ├── many_withs_base/
│ │ ├── dashboard.sp
│ │ └── mod.sp
│ ├── node_base_param_deps/
│ │ ├── dashboard.sp
│ │ └── mod.sp
│ ├── param_ref/
│ │ ├── dashboard.sp
│ │ └── mod.sp
│ ├── param_runtime_dep_invalid/
│ │ ├── dashboard.sp
│ │ └── mod.sp
│ ├── slow_dashboard/
│ │ ├── dashboard.sp
│ │ └── mod.sp
│ ├── with_dep_on_with/
│ │ ├── dashboard.sp
│ │ └── mod.sp
│ └── with_syntax/
│ ├── dashboard.sp
│ └── mod.sp
├── report_dep_control/
│ ├── mod.sp
│ └── report.sp
├── report_dupe_test/
│ └── report.sp
├── service/
│ ├── start-kill.sh
│ └── start-stop.sh
└── variables/
├── query.sp
├── steampipe.spvars
├── v1.spvars
└── vars2.auto.spvars
================================================
FILE CONTENTS
================================================
================================================
FILE: .acceptance.goreleaser.yml
================================================
before:
hooks:
- go mod tidy
- go clean -testcache && go test -timeout 30s ./...
builds:
- env:
- CGO_ENABLED=0
- GO111MODULE=on
goos:
- linux
- darwin
goarch:
- amd64
- arm64
id: "steampipe"
binary: "steampipe"
archives:
- files:
- none*
format: zip
id: homebrew
name_template: "{{ .ProjectName }}_{{ .Os }}_{{ .Arch }}"
format_overrides:
- goos: linux
format: tar.gz
================================================
FILE: .ai/.gitignore
================================================
# AI Working Directory
# Temporary files created by AI agents during development
wip/
*.tmp
*.swp
*.bak
*~
# Keep directory structure
!wip/.gitkeep
================================================
FILE: .ai/README.md
================================================
# AI Development Guide for Steampipe
This directory contains documentation, templates, and conventions for AI-assisted development on the Steampipe project.
## Guides
- **[Bug Fix PRs](docs/bug-fix-prs.md)** - Two-commit pattern, branch naming, PR format for bug fixes
- **[GitHub Issues](docs/bug-workflow.md)** - Reporting bugs and issues
- **[Test Generation](docs/test-generation-guide.md)** - Writing effective tests
- **[Parallel Coordination](docs/parallel-coordination.md)** - Working with multiple agents in parallel
## Directory Structure
```
.ai/
├── docs/ # Permanent documentation and guides
├── templates/ # Issue and PR templates
└── wip/ # Temporary workspace (gitignored)
```
## Key Conventions
- **Base branch**: `develop` for all work
- **Bug fixes**: 2-commit pattern (demonstrate → fix)
- **Small PRs**: One logical change per PR
- **Issue linking**: PR title ends with `closes #XXXX`
## For AI Agents
- Reference the relevant guide in `docs/` for your task
- Use templates in `templates/` for PR descriptions
- Use `wip/<topic>/` for coordinated parallel work (gitignored)
- Follow project conventions for branches, commits, and PRs
**Parallel work pattern**: Create `.ai/wip/<topic>/` with task files, then agents can work independently. See [parallel-coordination.md](docs/parallel-coordination.md).
================================================
FILE: .ai/docs/bug-fix-prs.md
================================================
# Bug Fix PR Guide
## Two-Commit Pattern
Every bug fix PR must have **exactly 2 commits**:
1. **Commit 1**: Demonstrate the bug (test fails)
2. **Commit 2**: Fix the bug (test passes)
This pattern provides:
- Clear demonstration that the bug exists
- Proof that the fix resolves the issue
- Easy code review (reviewers can see the test fail, then pass)
- Test-driven development (TDD) workflow
## Commit 1: Unskip/Add Test
### Purpose
Demonstrate that the bug exists by having a failing test.
### Changes
- If test exists in test suite: Remove `t.Skip()` line
- If test doesn't exist: Add the test
- **NO OTHER CHANGES**
### Commit Message Format
```
Unskip test demonstrating bug #<issue>: <brief description>
```
or
```
Add test for #<issue>: <brief description>
```
### Examples
```
Unskip test demonstrating bug #4767: GetDbClient error handling
```
```
Add test for #4717: Target.Export() should handle nil exporter gracefully
```
### Verification
```bash
# Test should FAIL
go test -v -run TestName ./pkg/path
# Exit code: 1
```
## Commit 2: Implement Fix
### Purpose
Fix the bug with minimal changes.
### Changes
- Implement the fix in production code
- **NO changes to test code**
- Keep changes minimal and focused
### Commit Message Format
```
Fix #<issue>: <brief description of fix>
```
### Examples
```
Fix #4767: GetDbClient returns (nil, error) on failure
```
```
Fix #4717: Add nil check to Target.Export()
```
### Verification
```bash
# Test should PASS
go test -v -run TestName ./pkg/path
# Exit code: 0
```
## Creating the Two Commits
### Method 1: Interactive Rebase (Recommended)
If you have more commits, squash them:
```bash
# View commit history
git log --oneline -5
# Interactive rebase to squash
git rebase -i HEAD~3
# Mark commits:
# pick <hash> Unskip test...
# squash <hash> Additional test changes
# pick <hash> Fix bug
# squash <hash> Address review comments
```
### Method 2: Cherry-Pick
If rebasing from another branch:
```bash
# In your fix branch based on develop
git cherry-pick <test-commit-hash>
git cherry-pick <fix-commit-hash>
```
### Method 3: Build Commits Correctly
```bash
# Start from develop
git checkout -b fix/1234-description develop
# Commit 1: Unskip test
# Edit test file to remove t.Skip()
git add pkg/path/file_test.go
git commit -m "Unskip test demonstrating bug #1234: Description"
# Verify it fails
go test -v -run TestName ./pkg/path
# Commit 2: Fix bug
# Edit production code
git add pkg/path/file.go
git commit -m "Fix #1234: Description of fix"
# Verify it passes
go test -v -run TestName ./pkg/path
```
## Pushing to GitHub: Two-Phase Push
**IMPORTANT**: Push commits separately to trigger CI runs for each commit. This provides clear visual evidence in the PR that the test fails before the fix and passes after.
### Phase 1: Push Test Commit (Should Fail CI)
```bash
# Create and switch to your branch
git checkout -b fix/1234-description develop
# Make commit 1 (unskip test)
git add pkg/path/file_test.go
git commit -m "Unskip test demonstrating bug #1234: Description"
# Verify test fails locally
go test -v -run TestName ./pkg/path
# Push ONLY the first commit
git push -u origin fix/1234-description
```
At this point:
- GitHub Actions will run tests
- CI should **FAIL** on the test you unskipped
- This proves the test catches the bug
### Phase 2: Push Fix Commit (Should Pass CI)
```bash
# Make commit 2 (fix bug)
git add pkg/path/file.go
git commit -m "Fix #1234: Description of fix"
# Verify test passes locally
go test -v -run TestName ./pkg/path
# Push the second commit
git push
```
At this point:
- GitHub Actions will run tests again
- CI should **PASS** with the fix
- This proves the fix works
### Creating the PR
Create the PR after the first push (before the fix):
```bash
# After phase 1 push
gh pr create --base develop \
--title "Brief description closes #1234" \
--body "## Summary
[Description]
## Changes
- Commit 1: Unskipped test demonstrating the bug
- Commit 2: Implemented fix (coming in next push)
## Test Results
Will be visible in CI runs:
- First CI run should FAIL (demonstrating bug)
- Second CI run should PASS (proving fix works)
"
```
Or create it after both commits are pushed - either way works.
### Why This Matters for Reviewers
This two-phase push gives reviewers:
1. **Visual proof** the test fails without the fix (failed CI run)
2. **Visual proof** the test passes with the fix (passed CI run)
3. **No manual verification needed** - just look at the CI history in the PR
4. **Clear diff** between what fails and what fixes it
### Example PR Timeline
```
✅ PR opened
❌ CI run #1: Test failure (commit 1)
"FAIL: TestName - expected nil, got non-nil client"
⏱️ Commit 2 pushed
✅ CI run #2: All tests pass (commit 2)
"PASS: TestName"
```
Reviewers can click through the CI runs to see the exact failure and success.
## PR Structure
### Branch Naming
```
fix/<issue-number>-brief-kebab-case-description
```
Examples:
- `fix/4767-getdbclient-error-handling`
- `fix/4743-status-spinner-visible-race`
- `fix/4717-nil-exporter-check`
### PR Title
```
Brief description closes #<issue>
```
Examples:
- `GetDbClient error handling closes #4767`
- `Race condition on StatusSpinner.visible field closes #4743`
### PR Description
```markdown
## Summary
[Brief description of the bug and fix]
## Changes
- Commit 1: Unskipped test demonstrating the bug
- Commit 2: Implemented fix by [description]
## Test Results
- Before fix: [Describe failure - panic, wrong result, etc.]
- After fix: Test passes
## Verification
\`\`\`bash
# Commit 1 (test only)
go test -v -run TestName ./pkg/path
# FAIL: [error message]
# Commit 2 (with fix)
go test -v -run TestName ./pkg/path
# PASS
\`\`\`
```
### Labels
Add appropriate labels:
- `bug`
- Severity: `critical`, `high-priority` (if available)
- Type: `security`, `race-condition`, `nil-pointer`, etc.
## What NOT to Include
### ❌ Don't Add to Commits
- Unrelated formatting changes
- Refactoring not directly related to the bug
- go.mod changes (unless required by new imports)
- Documentation updates (separate PR)
- Multiple bug fixes in one PR
### ❌ Don't Combine Commits
- Keep test and fix as separate commits
- Don't squash them together
- Don't add "fix review comments" commits (amend instead)
## Handling Review Feedback
### If Test Needs Changes
```bash
# Amend commit 1
git checkout HEAD~1
# Make test changes
git add file_test.go
git commit --amend
git rebase --continue
```
### If Fix Needs Changes
```bash
# Amend commit 2
# Make fix changes
git add file.go
git commit --amend
```
### Force Push After Amendments
```bash
git push --force-with-lease
```
## Multiple Related Bugs
If fixing multiple related bugs:
- Create separate issues for each
- Create separate PRs for each
- Don't combine into one PR
- Each PR: 2 commits
## Test Suite PRs (Different Pattern)
Test suite PRs follow a different pattern:
- **Single commit** with all tests
- Branch: `feature/tests-for-<packages>`
- Base: `develop`
- Include bug-demonstrating tests (marked as skipped)
See [templates/test-pr-template.md](../templates/test-pr-template.md)
## Verifying Commit Structure
Before pushing:
```bash
# Check commit count
git log --oneline origin/develop..HEAD
# Should show exactly 2 commits
# Check first commit (test only)
git show HEAD~1 --stat
# Should only modify test file(s)
# Check second commit (fix only)
git show HEAD --stat
# Should only modify production code file(s)
# Verify test behavior
git checkout HEAD~1 && go test -v -run TestName ./pkg/path # Should FAIL
git checkout HEAD && go test -v -run TestName ./pkg/path # Should PASS
```
## Common Mistakes
### ❌ Mistake 1: Combined Commit
```
Fix #1234: Add test and fix bug
```
**Problem**: Can't verify test catches the bug
**Solution**: Split into 2 commits
### ❌ Mistake 2: Modified Test in Fix Commit
```
Commit 1: Add test
Commit 2: Fix bug and adjust test
```
**Problem**: Test changes hide whether original test would pass
**Solution**: Only modify test in commit 1
### ❌ Mistake 3: Multiple Bugs in One PR
```
Fix #1234 and #1235: Multiple fixes
```
**Problem**: Hard to review, test, and merge independently
**Solution**: Create separate PRs
### ❌ Mistake 4: Extra Commits
```
Commit 1: Add test
Commit 2: Fix bug
Commit 3: Address review
Commit 4: Fix typo
```
**Problem**: Cluttered history
**Solution**: Squash into 2 commits
## Examples
Real examples from our codebase:
- PR #4769: [Fix #4750: Nil pointer panic in RegisterExporters](https://github.com/turbot/steampipe/pull/4769)
- PR #4773: [Fix #4748: SQL injection vulnerability](https://github.com/turbot/steampipe/pull/4773)
## Next Steps
- [GitHub Issues](bug-workflow.md) - Creating bug reports
- [Parallel Coordination](parallel-coordination.md) - Working on multiple bugs in parallel
- [Templates](../templates/) - PR templates
================================================
FILE: .ai/docs/bug-workflow.md
================================================
# GitHub Issue Guidelines
Guidelines for creating bug reports and issues.
## Bug Issue Format
**Title:**
```
BUG: Brief description of the problem
```
For security issues, use `[SECURITY]` prefix.
**Labels:** Add `bug` label
**Body Template:**
```markdown
## Description
[Clear description of the bug]
## Severity
**[HIGH/MEDIUM/LOW]** - [Impact statement]
## Reproduction
1. [Step 1]
2. [Step 2]
3. [Observed result]
## Expected Behavior
[What should happen]
## Current Behavior
[What actually happens]
## Test Reference
See `TestName` in `path/file_test.go:line` (currently skipped)
## Suggested Fix
[Optional: proposed solution]
## Related Code
- `path/file.go:line` - [description]
```
## Example
```markdown
## Description
The `GetDbClient` function returns a non-nil client even when an error
occurs during connection, causing nil pointer panics when callers
attempt to call `Close()` on the returned client.
## Severity
**HIGH** - Nil pointer panic crashes the application
## Reproduction
1. Call `GetDbClient()` with an invalid connection string
2. Function returns both an error AND a non-nil client
3. Caller attempts to defer `client.Close()` which panics
## Expected Behavior
When an error occurs, `GetDbClient` should return `(nil, error)`
following Go conventions.
## Current Behavior
Returns `(non-nil-but-invalid-client, error)` leading to panics.
## Test Reference
See `TestGetDbClient_WithConnectionString` in
`pkg/initialisation/init_data_test.go:322` (currently skipped)
## Suggested Fix
Ensure all error paths return `nil` for the client value.
## Related Code
- `pkg/initialisation/init_data.go:45-60` - GetDbClient function
```
## When You Find a Bug
1. **Create the GitHub issue** using the template above
2. **Skip the test** with reference to the issue:
```go
t.Skip("Demonstrates bug #XXXX - description. Remove skip in bug fix PR.")
```
3. **Continue your work** - don't stop to fix immediately
## Bug Fix Workflow
See [bug-fix-prs.md](bug-fix-prs.md) for the bug fix PR workflow (2-commit pattern).
## Best Practices
- Include specific reproduction steps
- Reference exact code locations with line numbers
- Explain the impact clearly
- Link to the test that demonstrates the bug
- For security issues: assess severity carefully and consider private disclosure
================================================
FILE: .ai/docs/parallel-coordination.md
================================================
# Parallel Agent Coordination
Simple patterns for coordinating multiple AI agents working in parallel.
## Basic Pattern
When working on multiple related tasks in parallel:
1. **Create a work directory** in `wip/`:
```bash
mkdir -p .ai/wip/<topic-name>
```
Example: `.ai/wip/bug-fixes-wave-1/` or `.ai/wip/test-snapshot-pkg/`
2. **Coordinator creates task files**:
```bash
# In .ai/wip/<topic>/
task-1-fix-bug-4767.md
task-2-fix-bug-4768.md
task-3-fix-bug-4769.md
plan.md # Overall coordination plan
```
3. **Parallel agents read and execute**:
```
Agent 1: "See plan in .ai/wip/bug-fixes-wave-1/ and run task-1"
Agent 2: "See plan in .ai/wip/bug-fixes-wave-1/ and run task-2"
Agent 3: "See plan in .ai/wip/bug-fixes-wave-1/ and run task-3"
```
## Task File Format
Keep task files simple:
```markdown
# Task: Fix bug #4767
## Goal
Fix GetDbClient error handling bug
## Steps
1. Create worktree: /tmp/fix-4767
2. Branch: fix/4767-getdbclient
3. Unskip test in pkg/initialisation/init_data_test.go
4. Verify test fails
5. Implement fix
6. Verify test passes
7. Push (two-phase)
8. Create PR with title: "GetDbClient error handling (closes #4767)"
## Context
See issue #4767 for details
Test is already written and skipped
```
## Work Directory Structure
Example for a bug fixing session:
```
.ai/wip/bug-fixes-wave-1/
├── plan.md # Coordinator's overall plan
├── task-1-fix-4767.md # Task for agent 1
├── task-2-fix-4768.md # Task for agent 2
├── task-3-fix-4769.md # Task for agent 3
└── status.md # Optional: track completion
```
Example for test generation:
```
.ai/wip/test-snapshot-pkg/
├── plan.md # What to test, approach
├── findings.md # Bugs found during testing
└── test-checklist.md # Coverage checklist
```
## Benefits
- **Isolated**: Each focus area has its own directory
- **Clean**: Old work directories can be deleted when done
- **Reusable**: Pattern works for any parallel work
- **Simple**: Just files and directories, no complex coordination
## Cleanup
When work is complete:
```bash
# Archive or delete the work directory
rm -rf .ai/wip/<topic-name>/
```
The `.ai/wip/` directory is gitignored, so these temporary files won't clutter the repo.
## Examples
**Parallel bug fixes:**
```
Coordinator: Creates .ai/wip/bug-fixes-wave-1/ with 10 task files
Agents 1-10: Each picks a task file and works independently
```
**Test generation with bug discovery:**
```
Coordinator: Creates .ai/wip/test-generation-phase-2/plan.md
Agent: Writes tests, documents bugs in findings.md
```
**Feature development:**
```
Coordinator: Creates .ai/wip/feature-auth/
- task-1-backend.md
- task-2-frontend.md
- task-3-tests.md
Agents: Work in parallel on each component
```
================================================
FILE: .ai/docs/test-generation-guide.md
================================================
# Test Generation Guide
Guidelines for writing effective tests.
## Focus on Value
Prioritize tests that:
- Catch real bugs
- Verify complex logic and edge cases
- Test error handling and concurrency
- Cover critical functionality
Avoid simple tests of getters, setters, or trivial constructors.
## Test Generation Process
### 1. Understand the Code
Before writing tests:
- Read the source code thoroughly
- Identify complex logic paths
- Look for error handling code
- Check for concurrency patterns
- Review TODOs and FIXMEs
### 2. Focus Areas
Look for:
- **Nil pointer dereferences** - Missing nil checks
- **Race conditions** - Concurrent access to shared state
- **Resource leaks** - Goroutines, connections, files not cleaned up
- **Edge cases** - Empty strings, zero values, boundary conditions
- **Error handling** - Incorrect error propagation
- **Concurrency issues** - Deadlocks, goroutine leaks
- **Complex logic paths** - Multiple branches, state machines
### 3. Test Structure
```go
func TestFunctionName_Scenario(t *testing.T) {
// ARRANGE: Set up test conditions
// ACT: Execute the code under test
// ASSERT: Verify results
// CLEANUP: Defer cleanup if needed
}
```
### 4. When You Find a Bug
1. Mark the test with `t.Skip()`
2. Add skip message: `"Demonstrates bug #XXXX - description. Remove skip in bug fix PR."`
3. Create a GitHub issue (see [bug-workflow.md](bug-workflow.md))
4. Continue testing
Example:
```go
func TestResetPools_NilPools(t *testing.T) {
t.Skip("Demonstrates bug #4698 - ResetPools panics with nil pools. Remove skip in bug fix PR.")
client := &DbClient{}
client.ResetPools(context.Background()) // Should not panic
}
```
### 5. Test Organization
#### File Naming
- `*_test.go` in same package as code under test
- Use `<package>_test` for black-box testing
#### Test Naming
- `Test<FunctionName>_<Scenario>`
- Examples:
- `TestValidateSnapshotTags_EdgeCases`
- `TestSpinner_ConcurrentShowHide`
- `TestGetDbClient_WithConnectionString`
#### Subtests
Use `t.Run()` for multiple related scenarios:
```go
func TestValidation_EdgeCases(t *testing.T) {
tests := []struct {
name string
input string
shouldErr bool
}{
{"empty_string", "", true},
{"valid_input", "test", false},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
err := Validate(tt.input)
if (err != nil) != tt.shouldErr {
t.Errorf("Validate() error = %v, shouldErr %v", err, tt.shouldErr)
}
})
}
}
```
### 6. Testing Best Practices
#### Concurrency Testing
```go
func TestConcurrent_Operation(t *testing.T) {
var wg sync.WaitGroup
errors := make(chan error, 100)
for i := 0; i < 10; i++ {
wg.Add(1)
go func() {
defer wg.Done()
if err := Operation(); err != nil {
errors <- err
}
}()
}
wg.Wait()
close(errors)
for err := range errors {
t.Error(err)
}
}
```
**IMPORTANT**: Don't call `t.Errorf()` from goroutines - it's not thread-safe. Use channels instead.
#### Resource Cleanup
```go
func TestWithResources(t *testing.T) {
resource := setupResource(t)
defer resource.Cleanup()
// ... test code ...
}
```
#### Table-Driven Tests
For multiple similar scenarios:
```go
tests := []struct {
name string
input string
expected string
wantErr bool
}{
{"scenario1", "input1", "output1", false},
{"scenario2", "input2", "output2", false},
{"error_case", "bad", "", true},
}
```
### 7. What NOT to Test
Avoid LOW-value tests:
- ❌ Simple getters/setters
- ❌ Trivial constructors
- ❌ Tests that just call the function
- ❌ Tests of external libraries
- ❌ Tests that duplicate each other
### 8. Test Output Quality
Tests should provide clear diagnostics on failure:
```go
// Good
t.Errorf("Expected tag validation to fail for %q, but got nil error", invalidTag)
// Bad
t.Error("validation failed")
```
### 9. Performance Considerations
- Use `testing.Short()` for slow tests
- Skip expensive tests in short mode
- Document expected execution time
```go
func TestLargeDataset(t *testing.T) {
if testing.Short() {
t.Skip("Skipping large dataset test in short mode")
}
// ... test code ...
}
```
### 10. Bug Documentation
When a test demonstrates a bug:
- Add clear comments explaining the bug
- Reference the GitHub issue number
- Show expected vs actual behavior
- Include reproduction steps
```go
// BUG: GetDbClient returns non-nil client even when error occurs
// This violates Go conventions and causes nil pointer panics
func TestGetDbClient_ErrorHandling(t *testing.T) {
t.Skip("Demonstrates bug #4767. Remove skip in fix PR.")
client, err := GetDbClient("invalid://connection")
if err != nil {
// BUG: Client should be nil when error occurs
if client != nil {
t.Error("Client should be nil when error is returned")
}
}
}
```
## Tools
- `go test -race` - Always run concurrency tests with race detector
- `go test -v` - Verbose output for debugging
- `go test -short` - Skip slow tests
- `go test -run TestName` - Run specific test
## Next Steps
When tests are complete:
1. Create GitHub issues for bugs found
2. Follow [bug-workflow.md](bug-workflow.md) for PR workflow
================================================
FILE: .ai/templates/bugfix-pr-template.md
================================================
# Bug Fix PR Template
## PR Title
```
Brief description closes #<issue>
```
## PR Description
```markdown
## Summary
[1-2 sentences: what was wrong and how it's fixed]
## Changes
### Commit 1: Demonstrate Bug
- Unskipped test `TestName` in `pkg/path/file_test.go`
- Test **FAILS** with [error/panic/wrong result]
### Commit 2: Fix Bug
- Modified `pkg/path/file.go` to [change description]
- Test now **PASSES**
## Verification
CI history shows: ❌ (commit 1) → ✅ (commit 2)
```
## Branch and Commit Messages
**Branch:**
```
fix/<issue>-brief-description
```
**Commit 1:**
```
Unskip test demonstrating bug #<issue>: description
```
**Commit 2:**
```
Fix #<issue>: description of fix
```
## Checklist
- [ ] Exactly 2 commits in PR
- [ ] Test fails on commit 1
- [ ] Test passes on commit 2
- [ ] Pushed commits separately (two CI runs visible)
- [ ] PR title ends with "closes #XXXX"
- [ ] No unrelated changes
================================================
FILE: .ai/templates/test-pr-template.md
================================================
# Test Suite PR Template
## PR Title
```
Add tests for pkg/{package1,package2}
```
## PR Description
```markdown
## Summary
Added tests for [packages], focusing on [areas: edge cases, concurrency, error handling, etc.].
## Tests Added
- **pkg/package1** - [brief description of what's tested]
- **pkg/package2** - [brief description of what's tested]
## Bugs Found
[If bugs were discovered:]
- #<issue>: [brief description]
- #<issue>: [brief description]
[Tests demonstrating bugs are marked with `t.Skip()` and issue references]
## Execution
```bash
go test ./pkg/package1 ./pkg/package2
go test -race ./pkg/package1 # if concurrency tests included
```
```
## Branch
```
feature/tests-<packages>
```
Example: `feature/tests-snapshot-task`
## Notes
- Base branch: `develop`
- Single commit with all tests
- Bug-demonstrating tests should be skipped with issue references
- Bugs will be fixed in separate PRs
================================================
FILE: .claude/commands/fix-vulnerabilities.md
================================================
---
description: Check and fix Dependabot security vulnerabilities
allowed-tools: Bash(gh api:*), Bash(gh release:*), Bash(yarn:*), Bash(go:*), Bash(make:*), Bash(git branch:*), Bash(git checkout:*), Bash(git log:*), Bash(git add:*), Bash(gh pr create:*), Skill(commit), Skill(push)
---
Remediate security vulnerabilities reported by Dependabot. Follow these steps:
## Step 1: Determine the base branch
1. Get the repository owner/name from `gh repo view --json owner,name`
2. Get the latest release: `gh release list --limit 1`
3. Derive the release branch by replacing the patch version with `x` (e.g., `v1.4.2` → `v1.4.x`)
4. Verify the branch exists: `git branch -r | grep <branch>`
**Ask the user**: "The latest release is `{tag}` and the release branch is `{branch}`. Should I use this as the base branch, or use `develop` instead?"
## Step 2: Check for vulnerabilities
1. Run `gh api repos/{owner}/{repo}/dependabot/alerts --paginate` to list open alerts
2. Filter by state=open and sort by severity (critical/high first)
3. Present a summary table: Alert #, Package, Ecosystem, Severity, CVE, Fix Version
**Ask the user**: Which vulnerabilities to fix (all high, specific ones, all)?
## Step 3: Apply fixes
### For npm dependencies:
1. Check current version: `yarn why <package>`
2. Check existing patterns: `git log --oneline --grep="vulnerab"`
3. Direct deps → update version in `package.json`
4. Transitive deps → add to `resolutions` in `package.json`
5. Run `yarn install`
6. Verify: `yarn why <package>`
### For Go dependencies:
1. Run `go get <package>@<version>`
2. Run `go mod tidy`
**Important**: For major version changes, ask user confirmation first.
## Step 4: Build and test
1. Go: Run `make` and `go test ./...`
2. npm: Run `yarn build` in the UI directory
3. Report failures before proceeding
## Step 5: Commit, push, and create PR
1. Checkout base branch and create: `fix/vulnerability-updates-{base-branch}`
2. Stage relevant files only (package.json, yarn.lock, go.mod, go.sum)
3. Use `/commit` with message listing packages, versions, and CVEs
4. Use `/push` to push the branch
5. Create PR: `gh pr create --base {base-branch}` with summary of fixes
Return the PR URL when done.
================================================
FILE: .gitattributes
================================================
**/*.sp linguist-language=HCL
================================================
FILE: .github/ISSUE_TEMPLATE/bug_report.md
================================================
---
name: Bug report
about: Create a report to help us improve
title: ''
labels: bug
assignees: ''
---
**Describe the bug**
A clear and concise description of what the bug is.
**Steampipe version (`steampipe -v`)**
Example: v0.3.0
**To reproduce**
Steps to reproduce the behavior (please include relevant code and/or commands).
**Expected behavior**
A clear and concise description of what you expected to happen.
**Additional context**
Add any other context about the problem here.
================================================
FILE: .github/ISSUE_TEMPLATE/feature_request.md
================================================
---
name: Feature request
about: Suggest an idea for this project
title: ''
labels: enhancement
assignees: ''
---
**Is your feature request related to a problem? Please describe.**
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
**Describe the solution you'd like**
A clear and concise description of what you want to happen.
**Describe alternatives you've considered**
A clear and concise description of any alternative solutions or features you've considered.
**Additional context**
Add any other context or screenshots about the feature request here.
================================================
FILE: .github/ISSUE_TEMPLATE/release_issue.md
================================================
---
name: Steampipe Release
about: Steampipe Release
title: "Steampipe v<INSERT_VERSION_HERE>"
labels: release
---
#### Changelog
[Steampipe v<INSERT_VERSION_HERE> Changelog](https://github.com/turbot/steampipe/blob/v<INSERT_VERSION_HERE>/CHANGELOG.md)
## Checklist
### Pre-release checks
- [ ] All acceptance tests pass in `steampipe` release PR
- [ ] Update check is working
- [ ] Steampipe version is correct
- [ ] Steampipe Changelog updated and reviewed
### Release Steampipe
- [ ] Merge the release PR
- [ ] Trigger the `Steampipe CLI Release` workflow. This will create the release build.
- [ ] Trigger the `Publish and Update Brew` workflow. This will update the brew formula.
### Post-release checks
- [ ] Update Changelog in the Release page (copy and paste from CHANGELOG.md)
- [ ] Test Linux install script
- [ ] Test Homebrew install
- [ ] Release branch merged to `develop`
- [ ] Raise Changelog update to `steampipe.io`, get it reviewed.
- [ ] Merge Changelog update to `steampipe.io`.
================================================
FILE: .github/dependabot.yml
================================================
# See https://docs.github.com/en/github/administering-a-repository/configuration-options-for-dependency-updates#package-ecosystem
version: 2
updates:
# Maintain dependencies for GitHub Actions
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "daily"
commit-message:
prefix: "[dep][actions]"
include: "scope"
- package-ecosystem: "gomod"
directory: "/"
schedule:
interval: "daily"
# at 2:01 am
time: "02:01"
commit-message:
prefix: "[dep][go]"
include: "scope"
pull-request-branch-name:
separator: "-"
assignees:
- "pskrbasu"
- "kaidaguerre"
labels:
- "dependencies"
- "house-keeping"
================================================
FILE: .github/workflows/01-steampipe-release.yaml
================================================
name: "01 - Steampipe: Release"
on:
workflow_dispatch:
inputs:
environment:
type: choice
description: "Select Release Type"
options:
# to change the values in this option, we also need to update the condition test below in at least 3 location. Search for github.event.inputs.environment
- Development (alpha)
- Development (beta)
- Final (RC and final release)
required: true
version:
description: "Version (without 'v')"
required: true
default: 0.2.\invalid
confirmDevelop:
description: Confirm running on develop branch
required: true
type: boolean
env:
# Version number from user input, used throughout the workflow for tagging, branching, and release operations
VERSION: ${{ github.event.inputs.version }}
# GitHub personal access token for authenticated API operations like creating releases, managing PRs, and repository access
GH_TOKEN: ${{ secrets.GH_ACCESS_TOKEN }}
# PostgreSQL connection string used in acceptance tests (tests/acceptance/test_files/cloud.bats)
SPIPETOOLS_PG_CONN_STRING: ${{ secrets.SPIPETOOLS_PG_CONN_STRING }}
# Authentication token for Steampipe Cloud services used in acceptance tests (tests/acceptance/test_files/cloud.bats and snapshot.bats)
SPIPETOOLS_TOKEN: ${{ secrets.SPIPETOOLS_TOKEN }}
# Disable update checks during CI runs to avoid unnecessary network calls and delays
STEAMPIPE_UPDATE_CHECK: false
jobs:
ensure_branch_in_homebrew:
name: Ensure branch exists in homebrew-tap
runs-on: ubuntu-latest
steps:
- name: Calculate version
id: calculate_version
run: |
echo "VERSION=v${{ github.event.inputs.version }}" >> $GITHUB_ENV
- name: Parse semver string
id: semver_parser
uses: booxmedialtd/ws-action-parse-semver@7784200024d6b3fc01253e617ec0168daf603de3 # v1.4.7
with:
input_string: ${{ github.event.inputs.version }}
- name: Checkout
if: steps.semver_parser.outputs.prerelease == ''
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
repository: turbot/homebrew-tap
token: ${{ secrets.GH_ACCESS_TOKEN }}
ref: main
- name: Delete base branch if exists
if: steps.semver_parser.outputs.prerelease == ''
run: |
git fetch --all
git push origin --delete bump-brew
git push origin --delete $VERSION
continue-on-error: true
- name: Create base branch
if: steps.semver_parser.outputs.prerelease == ''
run: |
git checkout -b bump-brew
git push --set-upstream origin bump-brew
build_and_release_cli:
name: Release CLI
needs: [ensure_branch_in_homebrew]
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
path: steampipe
ref: ${{ github.event.ref }}
- name: Checkout Pipe Fittings Components repository
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
repository: turbot/pipe-fittings
path: pipe-fittings
ref: v1.6.x
- name: Calculate version
id: calculate_version
run: |
if [ "${{ github.event.inputs.environment }}" = "Development (alpha)" ]; then
echo "VERSION=v${{ github.event.inputs.version }}-alpha.$(date +'%Y%m%d%H%M')" >> $GITHUB_ENV
elif [ "${{ github.event.inputs.environment }}" = "Development (beta)" ]; then
echo "VERSION=v${{ github.event.inputs.version }}-beta.$(date +'%Y%m%d%H%M')" >> $GITHUB_ENV
else
echo "VERSION=v${{ github.event.inputs.version }}" >> $GITHUB_ENV
fi
- name: Tag Release
run: |
cd steampipe
git config user.name "Steampipe GitHub Actions Bot"
git config user.email noreply@github.com
git tag $VERSION
git push origin $VERSION
- name: Set up Go
uses: actions/setup-go@44694675825211faa026b3c33043df3e48a5fa00 # v6.0.0
with:
go-version: 1.26
- name: Install GoReleaser
uses: goreleaser/goreleaser-action@e435ccd777264be153ace6237001ef4d979d3a7a # v6.4.0
with:
install-only: true
- name: Run GoReleaser
run: |
cd steampipe
goreleaser release --clean
env:
GITHUB_TOKEN: ${{ secrets.GH_ACCESS_TOKEN }}
create_pr_in_homebrew:
name: Create PR in homebrew-tap
if: ${{ github.event.inputs.environment == 'Final (RC and final release)' }}
needs: [ensure_branch_in_homebrew, build_and_release_cli]
runs-on: ubuntu-latest
env:
Version: ${{ github.event.inputs.version }}
steps:
- name: Calculate version
id: calculate_version
run: |
echo "VERSION=v${{ github.event.inputs.version }}" >> $GITHUB_ENV
- name: Parse semver string
id: semver_parser
uses: booxmedialtd/ws-action-parse-semver@7784200024d6b3fc01253e617ec0168daf603de3 # v1.4.7
with:
input_string: ${{ github.event.inputs.version }}
- name: Checkout
if: steps.semver_parser.outputs.prerelease == ''
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
repository: turbot/homebrew-tap
token: ${{ secrets.GH_ACCESS_TOKEN }}
ref: main
- name: Create a new branch off the base branch
if: steps.semver_parser.outputs.prerelease == ''
run: |
git fetch --all
git checkout bump-brew
git checkout -b $VERSION
git push --set-upstream origin $VERSION
- name: Close pull request if already exists
if: steps.semver_parser.outputs.prerelease == ''
run: |
gh pr close $VERSION
continue-on-error: true
- name: Create pull request
if: steps.semver_parser.outputs.prerelease == ''
run: |
gh pr create --base main --head $VERSION --title "Steampipe $Version" --body "Update formula"
update_pr_for_versioning:
name: Update PR
if: ${{ github.event.inputs.environment == 'Final (RC and final release)' }}
needs: [create_pr_in_homebrew]
runs-on: ubuntu-latest
env:
Version: ${{ github.event.inputs.version }}
steps:
- name: Calculate version
id: calculate_version
run: |
echo "VERSION=v${{ github.event.inputs.version }}" >> $GITHUB_ENV
- name: Parse semver string
id: semver_parser
uses: booxmedialtd/ws-action-parse-semver@7784200024d6b3fc01253e617ec0168daf603de3 # v1.4.7
with:
input_string: ${{ github.event.inputs.version }}
- name: Checkout
if: steps.semver_parser.outputs.prerelease == ''
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
repository: turbot/homebrew-tap
token: ${{ secrets.GH_ACCESS_TOKEN }}
ref: v${{ github.event.inputs.version }}
- name: Update live version
if: steps.semver_parser.outputs.prerelease == ''
run: |
scripts/formula_versioning.sh
git config --global user.email "puskar@turbot.com"
git config --global user.name "Puskar Basu"
git add .
git commit -m "Versioning brew formulas"
git push origin $VERSION
update_homebrew_tap:
name: Update homebrew-tap formula
if: ${{ github.event.inputs.environment == 'Final (RC and final release)' }}
needs: update_pr_for_versioning
runs-on: ubuntu-latest
steps:
- name: Calculate version
id: calculate_version
run: |
echo "VERSION=v${{ github.event.inputs.version }}" >> $GITHUB_ENV
- name: Parse semver string
id: semver_parser
uses: booxmedialtd/ws-action-parse-semver@7784200024d6b3fc01253e617ec0168daf603de3 # v1.4.7
with:
input_string: ${{ github.event.inputs.version }}
- name: Checkout
if: steps.semver_parser.outputs.prerelease == ''
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
repository: turbot/homebrew-tap
token: ${{ secrets.GH_ACCESS_TOKEN }}
ref: main
- name: Get pull request title
if: steps.semver_parser.outputs.prerelease == ''
id: pr_title
run: >-
echo "PR_TITLE=$(
gh pr view $VERSION --json title | jq .title | tr -d '"'
)" >> $GITHUB_OUTPUT
- name: Output
if: steps.semver_parser.outputs.prerelease == ''
run: |
echo ${{ steps.pr_title.outputs.PR_TITLE }}
echo ${{ env.VERSION }}
- name: Fail if PR title does not match with version
if: steps.semver_parser.outputs.prerelease == ''
run: |
if [[ "${{ steps.pr_title.outputs.PR_TITLE }}" == "Steampipe ${{ env.VERSION }}" ]]; then
echo "Correct version"
else
echo "Incorrect version"
exit 1
fi
- name: Merge pull request to update brew formula
if: steps.semver_parser.outputs.prerelease == ''
run: |
git fetch --all
gh pr merge $VERSION --squash --delete-branch
git push origin --delete bump-brew
trigger_smoke_tests:
name: Trigger Smoke Tests
if: ${{ github.event.inputs.environment == 'Final (RC and final release)' }}
needs: update_homebrew_tap
runs-on: ubuntu-latest
steps:
- name: Calculate version
id: calculate_version
run: |
echo "VERSION=v${{ github.event.inputs.version }}" >> $GITHUB_ENV
- name: Parse semver string
id: semver_parser
uses: booxmedialtd/ws-action-parse-semver@7784200024d6b3fc01253e617ec0168daf603de3 # v1.4.7
with:
input_string: ${{ github.event.inputs.version }}
- name: Trigger smoke test workflow
if: steps.semver_parser.outputs.prerelease == ''
run: |
gh workflow run "12-test-post-release-linux-distros.yaml" \
--ref ${{ github.ref }} \
--field version=$VERSION \
--repo ${{ github.repository }}
env:
GH_TOKEN: ${{ secrets.GH_ACCESS_TOKEN }}
- name: Get smoke test workflow run URL
if: steps.semver_parser.outputs.prerelease == ''
run: |
echo "Waiting for smoke test workflow to start..."
sleep 10
# Get the most recent run of the smoke test workflow
RUN_ID=$(gh run list \
--workflow="12-test-post-release-linux-distros.yaml" \
--repo ${{ github.repository }} \
--limit 1 \
--json databaseId \
--jq '.[0].databaseId')
if [ -n "$RUN_ID" ]; then
WORKFLOW_URL="https://github.com/${{ github.repository }}/actions/runs/$RUN_ID"
echo "✅ Smoke test workflow triggered successfully!"
echo "🔗 Monitor progress at: $WORKFLOW_URL"
echo ""
echo "Workflow details:"
echo " - Version: $VERSION"
echo " - Workflow: 12-test-post-release-linux-distros.yaml"
echo " - Run ID: $RUN_ID"
else
echo "⚠️ Could not retrieve workflow run ID. Check manually at:"
echo "https://github.com/${{ github.repository }}/actions/workflows/12-test-post-release-linux-distros.yaml"
fi
env:
GH_TOKEN: ${{ secrets.GH_ACCESS_TOKEN }}
================================================
FILE: .github/workflows/02-steampipe-db-image-build.yaml
================================================
name: "02 - Steampipe: Build and Publish DB Image"
# Controls when the action will run.
on:
workflow_dispatch:
inputs:
version:
description: |
Version number for the OCI image for this release - usually the same as the
postgres version
required: true
default: 14.19.0
postgres_version:
description: "Postgres Version to package (eg 14.2.0)"
required: true
default: 14.19.0
env:
PROJECT_ID: steampipe
IMAGE_NAME: db
CORE_REPO: ghcr.io/turbot/steampipe
ORG: turbot
CONFIG_SCHEMA_VERSION: "2020-11-18"
VERSION: ${{ github.event.inputs.version }}
PG_VERSION: ${{ github.event.inputs.postgres_version }}
PATH_BASE: https://repo1.maven.org/maven2/io/zonky/test/postgres
NAME_PREFIX: embedded-postgres-binaries
STEAMPIPE_UPDATE_CHECK: false
ORAS_VERSION: 1.1.0
jobs:
# This workflow contains a single job called "build"
build:
name: Build and Publish DB Image
# The type of runner that the job will run on
runs-on: ubuntu-latest
# Steps represent a sequence of tasks that will be executed as part of the job
steps:
- name: Trim asset version prefix and Validate
run: |-
echo $VERSION
trim=${VERSION#"v"}
echo $trim
if [[ $trim =~ ^[0-9]+\.[0-9]+\.[0-9]+(-.+)?$ ]]; then
echo "Version OK: $trim"
else
echo "Invalid version: $trim"
exit 1
fi
echo "VERSION=${trim}" >> $GITHUB_ENV
- name: Ensure Version Does Not Exist
run: |-
URL=https://$(echo $CORE_REPO | sed 's/\//\/v2\//')/$IMAGE_NAME/tags/list
IDX=$(curl -L $URL | jq ".tags | index(\"$VERSION\")")
if [ $IDX == "null" ]; then
echo "OK - Version does not exist: $VERSION"
else
echo "Version already exists: $VERSION"
exit 1
fi
- name: Checkout
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
ref: ${{ github.event.inputs.branch }}
# Login to GHCR
- name: Log in to the Container registry
uses: docker/login-action@5e57cd118135c172c3672efd75eb46360885c0ef # v3.6.0
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.GH_PUBLISH_ACCESS_TOKEN }}
- name: Pull & Extract - darwin amd64
run: |-
EXTRACT_DIR=extracted-darwin-amd64
# new link (darwin-amd64.txz) - https://drive.google.com/file/d/1eFFtffVnZiyGbqdSEsT1rJwsx6B8UPfW/view?usp=drive_link
curl -L -o darwin-amd64.txz "https://drive.google.com/uc?export=download&id=1eFFtffVnZiyGbqdSEsT1rJwsx6B8UPfW"
mkdir $EXTRACT_DIR
tar -xf darwin-amd64.txz --directory $EXTRACT_DIR
- name: Pull & Extract - darwin arm64
run: |-
EXTRACT_DIR=extracted-darwin-arm64
# new link (darwin-arm64.txz) - https://drive.google.com/file/d/1JWaAsd6_DUpUPLgwmvlGkeeuv70V9Hfx/view?usp=drive_link
curl -L -o darwin-arm64.txz "https://drive.google.com/uc?export=download&id=1JWaAsd6_DUpUPLgwmvlGkeeuv70V9Hfx"
mkdir $EXTRACT_DIR
tar -xf darwin-arm64.txz --directory $EXTRACT_DIR
- name: Pull & Extract - linux amd64
run: |-
EXTRACT_DIR=extracted-linux-amd64
# new link (linux-amd64.txz) - https://drive.google.com/file/d/17XnB7ipjnnDzvjAVAMCjvePRVyOvyiC-/view?usp=drive_link
curl -L -o linux-amd64.txz "https://drive.google.com/uc?export=download&id=17XnB7ipjnnDzvjAVAMCjvePRVyOvyiC-"
mkdir $EXTRACT_DIR
tar -xf linux-amd64.txz --directory $EXTRACT_DIR
- name: Pull & Extract - linux arm64
run: |-
EXTRACT_DIR=extracted-linux-arm64
# new link (linux-arm64.txz) - https://drive.google.com/file/d/1dBKin4bgTbbBSk7fToLnkNxWhixGIbtt/view?usp=drive_link
curl -L -o linux-arm64.txz "https://drive.google.com/uc?export=download&id=1dBKin4bgTbbBSk7fToLnkNxWhixGIbtt"
mkdir $EXTRACT_DIR
tar -xf linux-arm64.txz --directory $EXTRACT_DIR
- name: Build Config JSON
run: |-
JSON_STRING=$( jq -n \
--arg name "$IMAGE_NAME" \
--arg organization "$ORG" \
--arg version "$VERSION" \
--arg schemaVersion "$CONFIG_SCHEMA_VERSION" \
--arg dbVersion "$PG_VERSION" \
'{schemaVersion: $schemaVersion, db: { name: $name, organization: $organization, version: $version, dbVersion: $dbVersion} }' )
echo $JSON_STRING > config.json
- name: Build Annotations JSON
run: |-
JSON_STRING=$( jq -n \
--arg title "$IMAGE_NAME" \
--arg desc "$ORG" \
--arg version "$VERSION" \
--arg timestamp "$(date +%FT%TZ)" \
--arg vendor "Turbot HQ, Inc." \
'{
"$manifest": {
"org.opencontainers.image.title": $title,
"org.opencontainers.image.description": $desc,
"org.opencontainers.image.version": $version,
"org.opencontainers.image.created": $timestamp,
"org.opencontainers.image.vendor": $vendor
}
}' )
echo $JSON_STRING > annotations.json
# Setup ORAS
- name: Install specific version of ORAS
run: |
curl -LO https://github.com/oras-project/oras/releases/download/v${ORAS_VERSION}/oras_${ORAS_VERSION}_linux_amd64.tar.gz
sudo tar xzf oras_${ORAS_VERSION}_linux_amd64.tar.gz -C /usr/local/bin oras
oras version
# Publish to GHCR
- name: Push to Registry
run: |-
REF="$CORE_REPO/$IMAGE_NAME:$VERSION"
LATEST_REF="$CORE_REPO/$IMAGE_NAME:latest"
oras push $REF \
--config config.json:application/vnd.turbot.steampipe.config.v1+json \
--annotation-file annotations.json \
extracted-darwin-amd64:application/vnd.turbot.steampipe.db.darwin-amd64.layer.v1+tar \
extracted-darwin-arm64:application/vnd.turbot.steampipe.db.darwin-arm64.layer.v1+tar \
extracted-linux-amd64:application/vnd.turbot.steampipe.db.linux-amd64.layer.v1+tar \
extracted-linux-arm64:application/vnd.turbot.steampipe.db.linux-arm64.layer.v1+tar
# check if the version is NOT an pre-release version before tagging as latest
if [[ $VERSION =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
echo "Tagging as latest: $LATEST_REF"
oras tag $REF latest
else
echo "Skipping latest tag for pre-release version: $VERSION"
fi
================================================
FILE: .github/workflows/10-test-lint.yaml
================================================
name: "10 - Test: Linting"
on:
push:
tags:
- v*
branches:
- main
- "v*"
workflow_dispatch:
pull_request:
jobs:
golangci:
name: Test Linting
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
path: steampipe
- name: Checkout Pipe Fittings Components repository
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
repository: turbot/pipe-fittings
path: pipe-fittings
ref: v1.6.x
# this is required, check golangci-lint-action docs
- uses: actions/setup-go@0aaccfd150d50ccaeb58ebd88d36e91967a5f35b # v5.4.0
with:
go-version: '1.26'
cache: false # setup-go v4 caches by default, do not change this parameter, check golangci-lint-action doc: https://github.com/golangci/golangci-lint-action/pull/704
- name: golangci-lint
uses: golangci/golangci-lint-action@1e7e51e771db61008b38414a730f564565cf7c20 # v9.2.0
continue-on-error: true # we dont want to enforce just yet
with:
version: latest
args: --timeout=10m
working-directory: steampipe
skip-cache: true
================================================
FILE: .github/workflows/11-test-acceptance.yaml
================================================
name: "11 - Test: Acceptance"
on:
pull_request:
env:
STEAMPIPE_UPDATE_CHECK: false
SPIPETOOLS_PG_CONN_STRING: ${{ secrets.SPIPETOOLS_PG_CONN_STRING }}
SPIPETOOLS_TOKEN: ${{ secrets.SPIPETOOLS_TOKEN }}
GH_TOKEN: ${{ secrets.GH_ACCESS_TOKEN }}
STEAMPIPE_LOG: info
jobs:
goreleaser:
name: Build
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
path: steampipe
- name: Checkout Pipe Fittings Components repository
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
repository: turbot/pipe-fittings
path: pipe-fittings
ref: v1.6.x
- name: Set up Go
uses: actions/setup-go@44694675825211faa026b3c33043df3e48a5fa00 # v6.0.0
with:
go-version: 1.26
- name: Fetching Go Cache Paths
id: go-cache-paths
run: |
echo "go-build=$(go env GOCACHE)" >> $GITHUB_OUTPUT
echo "go-mod=$(go env GOMODCACHE)" >> $GITHUB_OUTPUT
# used to speedup go test
- name: Go Build Cache
id: build-cache
uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4.3.0
with:
path: ${{ steps.go-cache-paths.outputs.go-build }}
key: ${{ runner.os }}-go-build-${{ hashFiles('**/go.sum') }}
- name: Run CLI Unit Tests
run: |
cd steampipe
go clean -testcache
go test -timeout 30s ./... -test.v
- name: Install GoReleaser
uses: goreleaser/goreleaser-action@e435ccd777264be153ace6237001ef4d979d3a7a # v6.4.0
with:
install-only: true
- name: Run GoReleaser
run: |
cd steampipe
goreleaser release --clean --snapshot --parallelism 2 --config=.acceptance.goreleaser.yml
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Move build artifacts
run: |
mkdir ~/artifacts
mv $GITHUB_WORKSPACE/steampipe/dist/steampipe_linux_amd64.tar.gz ~/artifacts/linux.tar.gz
mv $GITHUB_WORKSPACE/steampipe/dist/steampipe_linux_arm64.tar.gz ~/artifacts/linux-arm64.tar.gz
mv $GITHUB_WORKSPACE/steampipe/dist/steampipe_darwin_arm64.zip ~/artifacts/darwin.zip
mv $GITHUB_WORKSPACE/steampipe/dist/steampipe_darwin_amd64.zip ~/artifacts/darwin-amd64.zip
- name: List Build Artifacts
run: ls -l ~/artifacts
- name: Save Linux Build Artifact
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
with:
name: build-artifact-linux
path: ~/artifacts/linux.tar.gz
if-no-files-found: error
overwrite: true
acceptance_test:
name: Test
needs: goreleaser
strategy:
fail-fast: false
matrix:
platform: [ubuntu-latest] # add other platforms as needed
test_block:
- "migration"
- "brew"
- "installation"
- "plugin"
- "connection_config"
- "service"
- "settings"
- "ssl"
- "blank_aggregators"
- "search_path"
- "chaos_and_query"
- "date_time_types"
- "dynamic_schema"
- "dynamic_aggregators"
- "cache"
- "performance"
- "config_precedence"
- "cloud"
- "snapshot"
- "schema_cloning"
- "exit_codes"
- "force_stop"
exclude:
- platform: macos-latest
test_block: migration
- platform: macos-latest
test_block: force_stop
runs-on: ${{ matrix.platform }}
steps:
- name: Checkout
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
submodules: true
- name: Set up Go
uses: actions/setup-go@44694675825211faa026b3c33043df3e48a5fa00 # v6.0.0
with:
go-version: 1.26
- name: Prepare for downloads
id: prepare-for-downloads
run: |
mkdir ~/artifacts
- name: Download Linux Build Artifacts
uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0
if: ${{ matrix.platform == 'ubuntu-latest' }}
with:
name: build-artifact-linux
path: ~/artifacts
- name: Extract Linux Artifacts and Install Binary
if: ${{ matrix.platform == 'ubuntu-latest' }}
run: |
mkdir ~/build
tar -xf ~/artifacts/linux.tar.gz -C ~/build
- name: Set PATH
run: |
echo "PATH=$PATH:$HOME/build:$GITHUB_WORKSPACE/tests/acceptance/lib/bats-core/libexec" >> $GITHUB_ENV
- name: Go install jd
run: |-
go install github.com/josephburnett/jd@latest
- name: Install DB
id: install-db
continue-on-error: false
run: |
STEAMPIPE_LOG_LEVEL=trace steampipe query "select 1"
steampipe plugin install chaos chaosdynamic --progress=false
- name: Save Install DB Logs
if: always()
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
with:
name: install-db-logs-${{ matrix.test_block }}-${{ matrix.platform }}
path: ~/.steampipe/logs
if-no-files-found: error
- name: Run Test Suite
id: run-test-suite
timeout-minutes: 15
continue-on-error: true
run: |
chmod +x $GITHUB_WORKSPACE/tests/acceptance/run.sh
$GITHUB_WORKSPACE/tests/acceptance/run.sh ${{ matrix.test_block }}.bats
echo "exit_code=$(echo $?)" >> $GITHUB_OUTPUT
echo ">> here"
- name: Save Test Suite Logs
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
with:
name: test-logs-${{ matrix.test_block }}-${{ matrix.platform }}
path: ~/.steampipe/logs
if-no-files-found: error
# This job checks whether the test suite has passed or not.
# Since the exit_code is set only when the bats test suite pass,
# we have added the if-conditional block
- name: Check Test Passed/Failed
if: ${{ success() }}
continue-on-error: false
run: |
if [ ${{ steps.run-test-suite.outputs.exit_code }} -eq 0 ]; then
exit 0
else
exit 1
fi
clean_up:
# let's clean up the artifacts.
# incase this step isn't reached,
# artifacts automatically expire after 90 days anyway
# refer:
# https://docs.github.com/en/actions/configuring-and-managing-workflows/persisting-workflow-data-using-artifacts#downloading-and-deleting-artifacts-after-a-workflow-run-is-complete
name: Clean Up Artifacts
needs: acceptance_test
if: ${{ needs.acceptance_test.result == 'success' }}
runs-on: ubuntu-latest
steps:
- name: Clean up Linux Build
uses: geekyeggo/delete-artifact@f275313e70c08f6120db482d7a6b98377786765b # v5.1.0
with:
name: build-artifact-linux
failOnError: true
- name: Clean up Darwin Build
uses: geekyeggo/delete-artifact@f275313e70c08f6120db482d7a6b98377786765b # v5.1.0
with:
name: build-artifact-darwin
failOnError: true
================================================
FILE: .github/workflows/12-test-post-release-linux-distros.yaml
================================================
name: "12 - Test: Linux Distros (Post-release)"
on:
workflow_dispatch:
inputs:
version:
description: "Version to test (with 'v' prefix, e.g., v1.0.0)"
required: true
type: string
env:
# Version from input, used to download the correct release artifacts
VERSION: ${{ github.event.inputs.version }}
# Disable update checks during smoke tests
STEAMPIPE_UPDATE_CHECK: false
# Slack webhook URL for notifications
SLACK_WEBHOOK_URL: ${{ secrets.PIPELING_RELEASE_BOT_WEBHOOK_URL }}
jobs:
smoke_test_ubuntu_24:
name: Smoke test (Ubuntu 24, x86_64)
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
- name: Download Linux Release Artifact
run: |
mkdir -p ./artifacts
gh release download ${{ env.VERSION }} \
--pattern "*linux_amd64.tar.gz" \
--dir ./artifacts \
--repo ${{ github.repository }}
# Rename to expected format
mv ./artifacts/*linux_amd64.tar.gz ./artifacts/linux.tar.gz
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@b5ca514318bd6ebac0fb2aedd5d36ec1b5c232a2 # v3.10.0
- name: Pull Ubuntu latest Image
run: docker pull ubuntu:latest
- name: Create and Start Ubuntu latest Container
run: |
docker run -d --name ubuntu-24-test -v ${{ github.workspace }}/artifacts:/artifacts -v ${{ github.workspace }}/scripts:/scripts ubuntu:latest tail -f /dev/null
- name: Get runner/container info
run: |
docker exec ubuntu-24-test /scripts/linux_container_info.sh
- name: Install dependencies, create user, and assign necessary permissions
run: |
docker exec ubuntu-24-test /scripts/prepare_ubuntu_container.sh
- name: Run smoke tests
run: |
docker exec -u steampipe ubuntu-24-test /scripts/smoke_test.sh
- name: Stop and Remove Container
run: |
docker stop ubuntu-24-test
docker rm ubuntu-24-test
smoke_test_ubuntu_22:
name: Smoke test (Ubuntu 22, x86_64)
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
- name: Download Linux Release Artifact
run: |
mkdir -p ./artifacts
gh release download ${{ env.VERSION }} \
--pattern "*linux_amd64.tar.gz" \
--dir ./artifacts \
--repo ${{ github.repository }}
# Rename to expected format
mv ./artifacts/*linux_amd64.tar.gz ./artifacts/linux.tar.gz
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@b5ca514318bd6ebac0fb2aedd5d36ec1b5c232a2 # v3.10.0
- name: Pull Ubuntu latest Image
run: docker pull ubuntu:latest
- name: Create and Start Ubuntu latest Container
run: |
docker run -d --name ubuntu-22-test -v ${{ github.workspace }}/artifacts:/artifacts -v ${{ github.workspace }}/scripts:/scripts ubuntu:22.04 tail -f /dev/null
- name: Get runner/container info
run: |
docker exec ubuntu-22-test /scripts/linux_container_info.sh
- name: Install dependencies, create user, and assign necessary permissions
run: |
docker exec ubuntu-22-test /scripts/prepare_ubuntu_container.sh
- name: Run smoke tests
run: |
docker exec -u steampipe ubuntu-22-test /scripts/smoke_test.sh
- name: Stop and Remove Container
run: |
docker stop ubuntu-22-test
docker rm ubuntu-22-test
smoke_test_centos_9:
name: Smoke test (CentOS Stream 9, x86_64)
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
- name: Download Linux Release Artifact
run: |
mkdir -p ./artifacts
gh release download ${{ env.VERSION }} \
--pattern "*linux_amd64.tar.gz" \
--dir ./artifacts \
--repo ${{ github.repository }}
# Rename to expected format
mv ./artifacts/*linux_amd64.tar.gz ./artifacts/linux.tar.gz
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@b5ca514318bd6ebac0fb2aedd5d36ec1b5c232a2 # v3.10.0
- name: Pull CentOS Stream 9 image
run: docker pull quay.io/centos/centos:stream9
- name: Create and Start CentOS stream9 Container
run: |
docker run -d --name centos-stream9-test -v ${{ github.workspace }}/artifacts:/artifacts -v ${{ github.workspace }}/scripts:/scripts quay.io/centos/centos:stream9 tail -f /dev/null
- name: Get runner/container info
run: |
docker exec centos-stream9-test /scripts/linux_container_info.sh
- name: Install dependencies, create user, and assign necessary permissions
run: |
docker exec centos-stream9-test /scripts/prepare_centos_container.sh
- name: Run smoke tests
run: |
docker exec -u steampipe centos-stream9-test /scripts/smoke_test.sh
- name: Stop and Remove Container
run: |
docker stop centos-stream9-test
docker rm centos-stream9-test
smoke_test_amazonlinux:
name: Smoke test (Amazon Linux 2023, x86_64)
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
- name: Download Linux Release Artifact
run: |
mkdir -p ./artifacts
gh release download ${{ env.VERSION }} \
--pattern "*linux_amd64.tar.gz" \
--dir ./artifacts \
--repo ${{ github.repository }}
# Rename to expected format
mv ./artifacts/*linux_amd64.tar.gz ./artifacts/linux.tar.gz
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@b5ca514318bd6ebac0fb2aedd5d36ec1b5c232a2 # v3.10.0
- name: Pull Amazon Linux 2023 Image
run: docker pull amazonlinux:2023
- name: Create and Start Amazon Linux 2023 Container
run: |
docker run -d --name amazonlinux-2023-test -v ${{ github.workspace }}/artifacts:/artifacts -v ${{ github.workspace }}/scripts:/scripts amazonlinux:2023 tail -f /dev/null
- name: Get runner/container info
run: |
docker exec amazonlinux-2023-test /scripts/linux_container_info.sh
- name: Install dependencies, create user, and assign necessary permissions
run: |
docker exec amazonlinux-2023-test /scripts/prepare_amazonlinux_container.sh
- name: Run smoke tests
run: |
docker exec -u steampipe amazonlinux-2023-test /scripts/smoke_test.sh
- name: Stop and Remove Container
run: |
docker stop amazonlinux-2023-test
docker rm amazonlinux-2023-test
smoke_test_linux_arm64:
name: Smoke test (Ubuntu 24, ARM64)
runs-on: ubuntu-24.04-arm
steps:
- name: Checkout
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
- name: Download Linux Release Artifact
run: |
mkdir -p ./artifacts
gh release download ${{ env.VERSION }} \
--pattern "*linux_arm64.tar.gz" \
--dir ./artifacts \
--repo ${{ github.repository }}
# Rename to expected format
mv ./artifacts/*linux_arm64.tar.gz ./artifacts/linux.tar.gz
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Extract Linux Artifacts and Install Binary
run: |
sudo tar -xzf ./artifacts/linux.tar.gz -C /usr/local/bin
sudo chmod +x /usr/local/bin/steampipe
- name: Install jq
run: |
sudo apt-get update
sudo apt-get install -y jq
- name: Create steampipe user and setup environment
run: |
sudo useradd -m steampipe
sudo mkdir -p /home/steampipe/.steampipe/logs
sudo chown -R steampipe:steampipe /home/steampipe
- name: Get runner/container info
run: |
uname -a
cat /etc/os-release
- name: Run smoke tests
run: |
chmod +x $GITHUB_WORKSPACE/scripts/smoke_test.sh
sudo cp $GITHUB_WORKSPACE/scripts/smoke_test.sh /home/steampipe/smoke_test.sh
sudo chown steampipe:steampipe /home/steampipe/smoke_test.sh
sudo -u steampipe /home/steampipe/smoke_test.sh
notify_completion:
name: Notify completion
runs-on: ubuntu-latest
needs:
[
smoke_test_ubuntu_24,
smoke_test_centos_9,
smoke_test_amazonlinux,
smoke_test_linux_arm64,
]
if: always()
steps:
- name: Check results and notify
run: |
# Check if all jobs succeeded
UBUNTU_24_RESULT="${{ needs.smoke_test_ubuntu_24.result }}"
CENTOS_9_RESULT="${{ needs.smoke_test_centos_9.result }}"
AMAZONLINUX_RESULT="${{ needs.smoke_test_amazonlinux.result }}"
ARM64_RESULT="${{ needs.smoke_test_linux_arm64.result }}"
WORKFLOW_URL="https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}"
if [ "$UBUNTU_24_RESULT" = "success" ] && [ "$CENTOS_9_RESULT" = "success" ] && [ "$AMAZONLINUX_RESULT" = "success" ] && [ "$ARM64_RESULT" = "success" ]; then
MESSAGE="✅ Steampipe ${{ env.VERSION }} smoke tests passed!\n\n🔗 View details: $WORKFLOW_URL"
else
MESSAGE="❌ Steampipe ${{ env.VERSION }} smoke tests failed!\n\n🔗 View details: $WORKFLOW_URL"
fi
curl -X POST -H 'Content-type: application/json' \
--data "{\"text\":\"$MESSAGE\"}" \
${{ env.SLACK_WEBHOOK_URL }}
================================================
FILE: .github/workflows/30-stale.yaml
================================================
name: "30 - Admin: Stale Issues and PRs"
on:
schedule:
- cron: "0 8 * * *"
workflow_dispatch:
inputs:
dryRun:
description: Set to true for a dry run
required: false
default: "false"
type: string
jobs:
stale:
runs-on: ubuntu-latest
steps:
- name: Stale issues and PRs
id: stale-issues-and-prs
uses: actions/stale@5f858e3efba33a5ca4407a664cc011ad407f2008 # v10.1.0
with:
close-issue-message: |
This issue was closed because it has been stalled for 90 days with no activity.
close-issue-reason: 'not_planned'
close-pr-message: |
This PR was closed because it has been stalled for 90 days with no activity.
# Set days-before-close to 30 because we want to close the issue/PR after 90 days total, since days-before-stale is set to 60
days-before-close: 30
days-before-stale: 60
debug-only: ${{ inputs.dryRun }}
exempt-issue-labels: 'good first issue,help wanted'
repo-token: ${{ secrets.GITHUB_TOKEN }}
stale-issue-label: 'stale'
stale-issue-message: |
This issue is stale because it has been open 60 days with no activity. Remove stale label or comment or this will be closed in 30 days.
stale-pr-label: 'stale'
stale-pr-message: |
This PR is stale because it has been open 60 days with no activity. Remove stale label or comment or this will be closed in 30 days.
start-date: "2021-02-09"
operations-per-run: 1000
================================================
FILE: .github/workflows/31-add-issues-to-pipeling-issue-tracker.yaml
================================================
name: Assign Issue to Project
on:
issues:
types: [opened]
jobs:
add-to-project:
uses: turbot/steampipe-workflows/.github/workflows/assign-issue-to-pipeling-issue-tracker.yml@main
with:
issue_number: ${{ github.event.issue.number }}
repository: ${{ github.repository }}
secrets: inherit
================================================
FILE: .gitignore
================================================
# Editor cache and lock files
*.swp
*.swo
.idea/
.vscode/
.DS_Store
# Binaries for programs and plugins
*.exe
*.exe~
*.dll
*.so
*.dylib
# Test binary, built with `go test -c`
*.test
# Output of the go coverage tool, specifically when used with LiteIDE
*.out
# Dependency directories (remove the comment below to include it)
# vendor/
# Dashboard UI
/ui/dashboard/.idea
/ui/dashboard/.vscode
/ui/dashboard/build
/ui/dashboard/node_modules
/ui/dashboard/src/icons/materialSymbols.ts
/ui/dashboard/output
/ui/dashboard/yarn-debug.log*
/ui/dashboard/yarn-error.log*
# Dist directory is created by goreleaser
/dist
================================================
FILE: .gitmodules
================================================
[submodule "bats-core"]
path = tests/acceptance/lib/bats-core
url = https://github.com/bats-core/bats-core
[submodule "bats-assert"]
path = tests/acceptance/lib/bats-assert
url = https://github.com/bats-core/bats-assert
[submodule "bats-support"]
path = tests/acceptance/lib/bats-support
url = https://github.com/bats-core/bats-support
================================================
FILE: .golangci.yml
================================================
version: "2"
linters:
default: none
enable:
# default rules
- errcheck
- govet
- ineffassign
- staticcheck
- unused
# other rules
- asasalint
- asciicheck
- bidichk
- depguard
- durationcheck
- forbidigo
- gocritic
- gocheckcompilerdirectives
- gosec
- makezero
- nilerr
- nolintlint
- reassign
- sqlclosecheck
- unconvert
settings:
nolintlint:
require-explanation: true
require-specific: true
staticcheck:
checks:
- "all"
- "-ST*" # stylecheck: not previously enabled (merged into staticcheck in v2)
- "-QF*" # quickfix suggestions: not previously enabled (merged into staticcheck in v2)
gosec:
excludes:
- G101 # false positives on non-credential string constants
- G602 # false positives on range loops and safe slice access
- G706 # false positives on logging config/environment values
forbidigo:
forbid:
- pattern: "^(fmt\\.Print(|f|ln)|print|println)$"
- pattern: "^(fmt\\.Fprint(|f|ln)|print|println)$"
gocritic:
disabled-checks:
- ifElseChain # style
- singleCaseSwitch # style & it's actually not a bad idea to use single case switch in some cases
- assignOp # style
- commentFormatting # style
depguard:
rules:
main:
deny:
- pkg: "github.com/pkg/errors"
desc: Should be replaced by standard lib errors package
exclusions:
presets:
- std-error-handling # errcheck: unchecked Close/Remove/print calls
- common-false-positives # gosec: G103, G204, G304 false positives
- legacy # gosec: G104, G301, G302, G307
paths:
- "tests/acceptance"
run:
timeout: 5m
================================================
FILE: .goreleaser.yml
================================================
version: 2
before:
hooks:
- go mod tidy
builds:
- env:
- CGO_ENABLED=0
- GO111MODULE=on
goos:
- linux
- darwin
goarch:
- amd64
- arm64
id: "steampipe"
binary:
'steampipe'
ldflags:
# Go Releaser analyzes your Git repository and identifies the most recent Git tag (typically the highest version number) as the version for your release.
# This is how it determines the value of {{.Version}}.
- -s -w -X main.version={{.Version}} -X main.date={{.Date}} -X main.commit={{.Commit}} -X main.builtBy=goreleaser
archives:
- files:
- none*
format: zip
id: homebrew
name_template: "{{ .ProjectName }}_{{ .Os }}_{{ .Arch }}"
format_overrides:
- goos: linux
format: tar.gz
nfpms:
- id: "steampipe"
builds: ['steampipe']
formats:
- deb
- rpm
vendor: "steampipe.io"
homepage: "https://steampipe.io/"
maintainer: "Turbot Support <help@turbot.com>"
description: "Use SQL to instantly query your cloud services (AWS, Azure, GCP and more). Open source CLI. No DB required."
file_name_template: "{{ .ProjectName }}_{{ .Os }}_{{ .Arch }}"
rpm:
summary: "Use SQL to instantly query your cloud services (AWS, Azure, GCP and more). Open source CLI. No DB required."
# it is necessary to specify the name_template of the snapshot, or else the snapshot gets created with
# two dash(-) which results in a 500 error while downloading
snapshot:
name_template: '{{ .Version }}'
# snapcrafts:
# - id: "steampipe"
# builds: ['steampipe']
# description: "Use SQL to instantly query your cloud services (AWS, Azure, GCP and more). Open source CLI. No DB required."
# summary: "Snap package"
# name_template: "{{ .ProjectName }}_{{ .Os }}_{{ .Arch }}"
checksum:
name_template: 'checksums.txt'
release:
prerelease: auto
changelog:
disable: true
brews:
-
ids:
- homebrew
name: steampipe@{{ .Major }}.{{ .Minor }}.{{ .Patch }}
repository:
owner: turbot
name: homebrew-tap
branch: bump-brew
directory: Formula
url_template: "https://github.com/turbot/steampipe/releases/download/{{ .Tag }}/{{ .ArtifactName }}"
homepage: "https://steampipe.io/"
description: "Steampipe exposes APIs and services as a high-performance relational database, giving you the ability to write SQL-based queries to explore, assess and report on dynamic data."
skip_upload: auto
install: |-
bin.install "steampipe"
================================================
FILE: CHANGELOG.md
================================================
## v2.4.0 [2026-02-27]
_Whats new_
- Compiled with Go 1.26.
## v2.3.6 [2026-02-20]
_Bug fixes_
- Fix `date` and `timestamptz` display formatting in query results. ([#4450](https://github.com/turbot/steampipe/issues/4450))
## v2.3.5 [2026-02-06]
_Bug fixes_
- Fix autocomplete regression where suggestions disappear when typing a table name after `from `. ([#4928](https://github.com/turbot/steampipe/issues/4928))
_Dependencies_
- Updated `golang.org/x/crypto` package to remediate security vulnerabilities.
## v2.3.4 [2025-12-16]
_Bug fixes_
- Fix database client deadlocks caused by concurrent session map access during connection pool cleanup. ([#4917](https://github.com/turbot/steampipe/issues/4917))
## v2.3.3 [2025-12-15]
**Memory and Resource Management**
- Fix query history memory leak due to unbounded growth. ([#4811](https://github.com/turbot/steampipe/issues/4811))
- Fix unbounded growth in autocomplete suggestions maps. ([#4812](https://github.com/turbot/steampipe/issues/4812))
- Fix goroutine leak in snapshot functionality. ([#4768](https://github.com/turbot/steampipe/issues/4768))
**Context and Synchronization**
- Fix RunBatchSession blocking when initData.Loaded never closes. ([#4781](https://github.com/turbot/steampipe/issues/4781))
**File Operations and Installation**
- Fix atomic write to prevent partial files during export. ([#4718](https://github.com/turbot/steampipe/issues/4718))
- Fix atomic OCI installations to prevent inconsistent states. ([#4758](https://github.com/turbot/steampipe/issues/4758))
- Fix atomic FDW binary replacement. ([#4753](https://github.com/turbot/steampipe/issues/4753))
- Fix disk space validation before OCI installation. ([#4754](https://github.com/turbot/steampipe/issues/4754))
**General Fixes**
- Improved SQL query parameterization in connection state management to prevent SQL injections. ([#4748](https://github.com/turbot/steampipe/issues/4748))
- Increase snapshot row streaming timeout from 5s to 30s. ([#4866](https://github.com/turbot/steampipe/issues/4866))
**Dependencies**
- Updated `containerd` and `crypto` packages to remediate vulnerabilities.
## v2.3.2 [2025-11-03]
_Bug fixes_
- Fix Linux builds by aligning the glibc baseline with supported distros to restore compatibility. ([#4691](https://github.com/turbot/steampipe/issues/4691))
## v2.3.1 [2025-10-31]
_Bug fixes_
- Fix issue where MacOS binaries failed to run due to absolute openssl paths. ([#4679](https://github.com/turbot/steampipe/issues/4679))
## v2.3.0 [2025-10-30]
_Whats new_
- Update database version to PostgreSQL 14.19. ([#4644](https://github.com/turbot/steampipe/issues/4644))
_Bug fixes_
- Fix issue where the truncation message was not showing in batch queries for table output format. ([#4674](https://github.com/turbot/steampipe/issues/4674))
- Improve truncation message for datasets exceeding 10k rows in table output format. ([#4674](https://github.com/turbot/steampipe/issues/4674))
## v2.2.0 [2025-09-24]
_Whats new_
- Add support for using context functions in steampipe connection config. ([#4433](https://github.com/turbot/steampipe/issues/4433))
- Show message during startup indicating whether Steampipe launched its own Postgres or connected to an existing service. ([#4427](https://github.com/turbot/steampipe/issues/4427))
_Bug fixes_
- Fix issue where running `plugin update` was creating the default config file, if it did not exist. ([#4628](https://github.com/turbot/steampipe/issues/4628))
- Fix help message after uninstalling plugins. ([#4483](https://github.com/turbot/steampipe/issues/4483))
- Fix issue where steampipe login was not respecting `PIPES_INSTALL_DIR` env var. ([#4402](https://github.com/turbot/steampipe/issues/4402))
## v2.1.0 [2025-07-09]
_Whats new_
- Compiled with Go 1.24.
- The versioning mechanism has been changed to use GoReleaser for automated version management during the build process.
_Breaking changes_
- The [version](https://pkg.go.dev/github.com/turbot/steampipe@v1.1.4/pkg/version) package, which was previously used to control CLI versioning, has been removed in this version. This change only affects users who were importing the Steampipe version package in their Go code. Regular CLI usage is not impacted.
_Bug fixes_
- Bump module to v2. ([#4593](https://github.com/turbot/steampipe/issues/4593))
_Dependencies_
- Update `go-viper` package to remediate moderate vulnerabilities.
## v2.0.1 [2025-06-11]
_Bug fixes_
- Fix `plugin manager is not running` error when starting steampipe via a symlink. ([#4573](https://github.com/turbot/steampipe/issues/4573))
## v2.0.0 [2025-06-11]
_Breaking changes_
- Increased the minimum required `glibc` version to `2.34` for the FDW, due to the upgrade of the Linux build environment from Ubuntu 20.04 to Ubuntu 22.04 GitHub runners. As a result, Steampipe no longer supports older Linux distributions such as Ubuntu 20.04 and Amazon Linux 2.
_Bug fixes_
- Fix issue where the FDW did not correctly provide planning cost information for key-columns with an `any-of` requirement. This led the Postgres planner to choose query plans that do not include filters on those columns, even when filters were present in the query. ([#558](https://github.com/turbot/steampipe-postgres-fdw/issues/558))
- Fix issue where Steampipe was returning a 0 exit code even when a wrong sub-command was run. ([#4563](https://github.com/turbot/steampipe/issues/4563))
## v1.1.4 [2025-06-04]
_Bug fixes_
- Fix issue where steampipe was returning 0 exit-code in batch mode even incase of API failures. ([#4551](https://github.com/turbot/steampipe/issues/4551))
_Dependencies_
- Update FDW to 1.12.7 to remediate high vulnerabilities.
## v1.1.3 [2025-05-15]
_Bug fixes_
- Fix intermittent `Reattachment process not found` error when starting steampipe service. ([#4507](https://github.com/turbot/steampipe/issues/4507))
## v1.1.2 [2025-05-06]
_Bug fixes_
- Fix issue where system-ingestible output format(csv) was humanised(comma separated) leading to a breaking change in query outputs. ([#4525](https://github.com/turbot/steampipe/issues/4525))
## v1.1.1 [2025-04-25]
_Bug fixes_
- Fix issue where query batch mode outputs(json, csv, line) were not printing the rows received to stdout when any of the other rows returned an API error. ([#4516](https://github.com/turbot/steampipe/issues/4516))
- Fix issue where query batch mode table output always returned a 0 row count when timing was enabled. ([#4520](https://github.com/turbot/steampipe/issues/4520))
## v1.1.0 [2025-04-10]
_Whats new_
- Update database version to PostgreSQL 14.17. ([#4461](https://github.com/turbot/steampipe/issues/4461))
_Bug fixes_
- Fix issue where plugin start timeout was getting limited to 60s. ([#4477](https://github.com/turbot/steampipe/issues/4477))
## v1.0.3 [2025-02-03]
_Bug fixes_
- Update FDW to 1.12.2 to remediate critical and high vulnerabilities. ([#533](https://github.com/turbot/steampipe-postgres-fdw/issues/533))
## v1.0.2 [2025-01-20]
_Dependencies_
- Upgrade `crypto`, `net` and `go-git` packages to remediate critical and high vulnerabilities.
## v1.0.1 [2024-11-21]
_Bug fixes_
- Fix issue where the steampipe interactive meta-command `.cache clear` was not clearing the cache. ([#4443](https://github.com/turbot/steampipe/issues/4443))
## v1.0.0 [2024-10-22]
_Breaking changes_
The mod functionality, which was previously deprecated and moved to Powerpipe, has been removed in this version.
- Removed the `check`, `dashboard`, `mod`, and `variable` commands. ([#4413](https://github.com/turbot/steampipe/issues/4413))
- Removed support for running named queries. ([#4416](https://github.com/turbot/steampipe/issues/4416))
- Removed the `watch` and `mod-location` CLI args from the `query` command. ([#4417](https://github.com/turbot/steampipe/issues/4417))
- Removed the `dashboard`, `dashboard-listen`, and `dashboard-port` CLI args from the `service` command. ([#4418](https://github.com/turbot/steampipe/issues/4418))
- Removed the `STEAMPIPE_MOD_LOCATION` and `STEAMPIPE_INTROSPECTION` env vars. ([#4419](https://github.com/turbot/steampipe/issues/4419))
- Removed support for deprecated `STEAMPIPE_CLOUD_HOST` and `STEAMPIPE_CLOUD_TOKEN` env vars. ([#4420](https://github.com/turbot/steampipe/issues/4420))
- Removed the `watch`, `introspection`, and `mod-location` workspace profile args. ([#4421](https://github.com/turbot/steampipe/issues/4421))
- Removed the `check` and `dashboard` options from workspace profiles. ([#4422](https://github.com/turbot/steampipe/issues/4422))
- Removed the `dashboard` option from global options (`default.spc`). ([#4423](https://github.com/turbot/steampipe/issues/4423))
## v0.24.2 [2024-09-13]
_Bug fixes_
- Fix incorrect versioning in v0.24.1. ([#4388](https://github.com/turbot/steampipe/issues/4388))
## v0.24.1 [2024-09-13]
_Bug fixes_
- Fix issue where steampipe failed to download embedded PostgreSQL database and FDW during installation. ([#4382](https://github.com/turbot/steampipe/issues/4382))
## v0.24.0 [2024-09-05]
_Whats new_
- Add ability to configure plugin startup timeout. ([#4320](https://github.com/turbot/steampipe/issues/4320))
- Install FDW and embedded postgres database from GHCR instead of GCP. ([#4344](https://github.com/turbot/steampipe/issues/4344))
- Update query JSON output format to add a `columns` property containing the column information. This allows us to handle duplicate column names by appending a unique suffix to duplicate column name ([#4317](https://github.com/turbot/steampipe/issues/4317))
Existing query JSON format:
```
$ steampipe query "select account_id, arn from aws_account" --output json
{
"rows": [
{
"account_id": "123456789012",
"arn": "arn:aws:::123456789012"
}
]
}
```
New query JSON format(with new `columns` property):
```
$ steampipe query "select account_id, arn from aws_account" --output json
{
"columns": [
{
"name": "account_id",
"data_type": "text"
},
{
"name": "arn",
"data_type": "text"
}
],
"rows": [
{
"account_id": "123456789012",
"arn": "arn:aws:::123456789012"
}
]
}
```
_Bug fixes_
- Fix issue where plugin manager was incorrectly reporting a shutdown. ([#4365](https://github.com/turbot/steampipe/issues/4365))
## v0.23.5 [2024-08-21]
_Bug fixes_
- Fix issue where refresh connections was not creating a new connection if it was not in the search path. ([#4353](https://github.com/turbot/steampipe/issues/4353))
## v0.23.4 [2024-08-13]
_Whats new_
- Compiled with Go 1.22. ([#4340](https://github.com/turbot/steampipe/issues/4340))
_Bug fixes_
- Fix query error message to not include internal function names. ([#4335](https://github.com/turbot/steampipe/issues/4335))
## v0.23.3 [2024-07-17]
_Bug fixes_
- When installing plugins, do not use local docker config for credential store if the plugin is being installed from GHCR, enabling installation from GHCR to work even if docker-credential-desktop not in PATH. ([#4323](https://github.com/turbot/steampipe/issues/4323))
- Fix issue where steampipe returned 0 exit code even if failed to export snapshot. ([#4276](https://github.com/turbot/steampipe/issues/4276))
- Query command should support legacy 'true' and 'false' for --timing flag. ([#4282](https://github.com/turbot/steampipe/issues/4282))
- Fix issue where sps output is not working. ([#4297](https://github.com/turbot/steampipe/issues/4297))
- When loading creating connection plugins, return connections successfully created even if some connections fail, due to config not being available. ([#474](https://github.com/turbot/steampipe-postgres-fdw/issues/474))
- Show scan info in query JSON output only when timing config is verbose. ([#4292](https://github.com/turbot/steampipe/issues/4292))
## v0.23.2 [2024-05-17]
_Bug fixes_
- Update FDW to 1.11.2 to remove unnecessary NOTICE level log messages. ([#469](https://github.com/turbot/steampipe-postgres-fdw/issues/469))
## v0.23.1 [2024-05-11]
_Bug fixes_
- Update FDW to 1.11.1 to fix bad Linux Arm build. ([#4271](https://github.com/turbot/steampipe/issues/4271))
- Update hydrates count in timing verbose mode to use integer formatting(e.g. 119,138). ([#4270](https://github.com/turbot/steampipe/issues/4270))
## v0.23.0 [2024-05-09]
_Whats new_
- Add support for connection key columns. ([#768](https://github.com/turbot/steampipe-plugin-sdk/issues/768))
A `ConnectionKeyColumn` defines a column that has a value which maps 1-1 to a Steampipe connection
and so can be used to filter connections when executing an aggregator query.
These columns are treated as (optional) KeyColumns. This means they are taken into account in the query planning.
- Add support for pushing down sort order. ([#447](https://github.com/turbot/steampipe-postgres-fdw/issues/447))
- Update limit pushdown logic to push down the limit if all sort clauses are pushed down. ([#458](https://github.com/turbot/steampipe-postgres-fdw/issues/458))
- Add support for `WHERE column=val1 OR column=val2 OR column=val3...`
- Adds support for verbose timing information. ([#4244](https://github.com/turbot/steampipe/issues/4244))
- Migrate from plugin registry from GCP to GHCR. ([#4232](https://github.com/turbot/steampipe/issues/4232))
_Bug fixes_
- Fix hang when timing disabled. ([#4237](https://github.com/turbot/steampipe/issues/4237))
- Add signal handler for signal 16 to avoid FDW crash. ([#457](https://github.com/turbot/steampipe-postgres-fdw/issues/457))
_Breaking changes_
- JSON query output has changed from a JSON array of result rows to a JSON object with a `rows` property containing the result rows, and (optionally) a metadata property containing timing information.
## v0.22.2 [2024-04-05]
_Bug fixes_
* Fix issue where daily update check message showed a <nil> when there was no message to show. ([#4206](https://github.com/turbot/steampipe/issues/4206))
* Fix issue where local plugins are not being loaded. ([#4196](https://github.com/turbot/steampipe/issues/4196))
* Re-add support for 'implicit' local plugins (i.e. the plugin binary exists but there is no entry in the `versions.json`). ([#4223](https://github.com/turbot/steampipe/issues/4223))
* Add support for nested dashboards. ([#4208](https://github.com/turbot/steampipe/issues/4208))
## v0.22.1 [2024-03-15]
_Whats new_
* Improve startup performance with high plugin count - parallelize plugin startup. ([#4183](https://github.com/turbot/steampipe/issues/4183))
* Add database SSL password support for encrypted private key in order to handle your own certificates. ([#4149](https://github.com/turbot/steampipe/issues/4149))
_Bug fixes_
* Fix issue where plugin list cannot re-create top-level versions.json file if the file has been corrupted or empty. ([#4191](https://github.com/turbot/steampipe/issues/4191))
## v0.22.0 [2024-03-06]
_Steampipe unbundled, introducing Powerpipe_
[Powerpipe](https://powerpipe.io) is now the recommended way to run dashboards and benchmarks!
Mods still work as normal in Steampipe for now, but they are deprecated and will be removed in a future release:
* [Steampipe unbundled →](https://steampipe.io/blog/steampipe-unbundled)
* [Powerpipe for Steampipe users →](https://powerpipe.io/blog/migrating-from-steampipe)
_Whats new_
* Added `version` column to `steampipe_plugin` table. ([#4141](https://github.com/turbot/steampipe/issues/4141))
* Direct all errors and warnings to standard error (stderr). ([4162](https://github.com/turbot/steampipe/issues/4162))
_Bug fixes_
* Fixed the issue where `search_path_prefix` set in `database options` does not alter the search path. ([#4160](https://github.com/turbot/steampipe/issues/4160))
* Fix issue where `asff` output was always missing the first row. ([#4157](https://github.com/turbot/steampipe/pull/4157))
_Deprecations and migrations_
* Steampipe mods and dashboards are now separately available in [Powerpipe](https://powerpipe.io), a new [open-source project](https://github.com/turbot/powerpipe). The steampipe mod, check and dashboard commands have been deprecated and will be removed in a future version. [Migration guide](https://powerpipe.io/blog/migrating-from-steampipe).
* Deprecated `cloud-host` and `cloud-token` CLI args, and replaced them with `pipes-host` and `pipes-token` respectively. ([#4137](https://github.com/turbot/steampipe/issues/4137))
* Deprecated `STEAMPIPE_CLOUD_HOST` and `STEAMPIPE_CLOUD_TOKEN` env vars, replaced with `PIPES_HOST` and `PIPES_TOKEN` respectively. ([#4137](https://github.com/turbot/steampipe/issues/4137))
* Deprecated `cloud_host` and `cloud_token` workspace args, replaced with `pipes_host` and `pipes_token` respectively. ([#4137](https://github.com/turbot/steampipe/issues/4137))
* Removed support for deprecated `terminal options`. ([#3751](https://github.com/turbot/steampipe/issues/3751))
* Removed support for deprecated `max_parallel` property in `general options`. ([#4132](https://github.com/turbot/steampipe/issues/4132))
* Removed support for deprecated `connection options`. ([#4131](https://github.com/turbot/steampipe/issues/4131))
* Removed deprecated `version` property from the mod `require` block. ([#3750](https://github.com/turbot/steampipe/issues/3750))
## v0.21.8 [2024-02-23]
_Bug fixes_
* Fix growing memory usage following file watching events when running dashboard server. ([#4150](https://github.com/turbot/steampipe/issues/4150))
## v0.21.7 [2024-02-09]
_Bug fixes_
* Fix variables not being reloaded after file watch event. ([#4123](https://github.com/turbot/steampipe/issues/4123))
* Fix modfile being left invalid after mod uninstall. Fix variables not being reloaded after file watch event. ([#4124](https://github.com/turbot/steampipe/issues/4124))
## v0.21.6 [2024-02-06]
_Bug fixes_
* Fix `HomeDirectoryModfileCheck` returning false positive, causing errors when executing steampipe out of the home directory. ([#4118](https://github.com/turbot/steampipe/issues/4118))
## v0.21.5 [2024-02-05]
_Bug fixes_
* Fix dependency variable validation - was failing if dependency variable value was set in the vars file. ([#4110](https://github.com/turbot/steampipe/issues/4110))
* Fix UI freeze when prompting for workspace variables. ([#4105](https://github.com/turbot/steampipe/issues/4105))
## v0.21.4 [2024-01-23]
_Bug fixes_
* Fixed schema clone function failing if table has an LTREE column. ([#4079](https://github.com/turbot/steampipe/issues/4079))
* Maintain the order of execution when running multiple queries in batch mode. ([#3728](https://github.com/turbot/steampipe/issues/3728))
* Fixes issue where using any meta-command would load connection state even if not required. ([#3614](https://github.com/turbot/steampipe/issues/3614))
* Fixes issue where plugin version backfilling would write versions.json to cwd if the plugin folder is not found. ([#4073](https://github.com/turbot/steampipe/issues/4073))
* Simplifies and fix available port check. ([#4030](https://github.com/turbot/steampipe/issues/4030))
## v0.21.3 [2023-12-22]
_Whats new_
* Allow using pprof on FDW when STEAMPIPE_FDW_PPROF environment variable is set. ([#368](https://github.com/turbot/steampipe-postgres-fdw/issues/368))
_Bug fixes_
* Set connection state to error if plugin load fails. ([#4043](https://github.com/turbot/steampipe/issues/4043))
* Fixes incorrect row count in timing output for aggregator connections. ([#402](https://github.com/turbot/steampipe-postgres-fdw/issues/402))
* OpenTelemetry metric names must only contain [A-Za-z0-9_.-]. ([#369](https://github.com/turbot/steampipe-postgres-fdw/issues/369))
* Maintain the order of execution when running multiple queries in batch mode. ([#3728](https://github.com/turbot/steampipe/issues/3728))
## v0.21.2 [2023-12-12]
_Whats new_
* Add `steampipe_plugin_column` introspection table to the `steampipe_internal` schema. ([#4003](https://github.com/turbot/steampipe/issues/4003))
_Bug fixes_
* Fixes issue where a query would return 'null' for an empty result set when output is set to json. ([#3955](https://github.com/turbot/steampipe/issues/3955))
* Fix custom registries bugs
* Clean up apt temporary files in Dockerfile
## v0.21.1 [2023-10-03]
_Bug fixes_
* Added support for the missing `mod-location` flag to the `steampipe variable list` command. ([#3942](https://github.com/turbot/steampipe/issues/3942))
## v0.21.0 [2023-10-02]
_Whats new?_
* Define [rate and concurrency limits](https://steampipe.io/docs/guides/limiter#concurrency--rate-limiting) for plugin execution. ([#3746](https://github.com/turbot/steampipe/issues/3746))
* Define multiple instances of a plugin version using a `plugin` connection config block. ([#3807](https://github.com/turbot/steampipe/issues/3807))
* The maximum memory used by plugins and the CLI can now be specified either in `plugin` instance definitions or the new `plugin` options block. ([#3807](https://github.com/turbot/steampipe/issues/3807))
* New introspection tables `steampipe_plugin` and `steampipe_plugin_limiter` containing all configured plugin instances and limiters. ([#3746](https://github.com/turbot/steampipe/issues/3746))
* New introspection table `steampipe_server_settings` populated with server settings data during service startup. ([#3462](https://github.com/turbot/steampipe/issues/3462))
* Running `plugin install` with no arguments installs all referenced plugins. ([#3451](https://github.com/turbot/steampipe/issues/3451))
* New `--output` flag for `plugin list` cmd allows selection between `json` and `table` output. ([#3368](https://github.com/turbot/steampipe/issues/3368))
* Each plugin directory ncontains a `version.json` which can be used to recompose the global plugin `versions.json` if it is missing or corrupt. ([#3492](https://github.com/turbot/steampipe/issues/3492))
* Typing `.cache` in interactive prompt shows the current value of cache. ([#2439](https://github.com/turbot/steampipe/issues/2439))
* Steampipe commands bypass plugin requirement check if installed plugin is locally built. ([#3643](https://github.com/turbot/steampipe/issues/3643))
* New `skip-config` flag disables writing of default plugin config during plugin installation. ([#3531](https://github.com/turbot/steampipe/issues/3531), [#2206](https://github.com/turbot/steampipe/issues/2206))
* Logs are now written to file instead of console. ([#2916](https://github.com/turbot/steampipe/issues/2916))
* When plugin startup fails, report useful message in the CLI. ([#3732](https://github.com/turbot/steampipe/issues/3732))
* Users are warned to not have mod.sp files in home directory. ([#2321](https://github.com/turbot/steampipe/issues/2321))
* Updated messaging when service is started on an unavailable port. ([#623](https://github.com/turbot/steampipe/issues/623))
* Log files are rotated if the process is active across date boundaries. ([#125](https://github.com/turbot/steampipe/issues/125), [#3825](https://github.com/turbot/steampipe/issues/3825))
* Listen hosts may be selected when starting steampipe service. ([#3505](https://github.com/turbot/steampipe/issues/3505))
* Initialisation behaviour for the sample options has been changed: always copy a sample file (`default.spc.sample`), but only overwrite the `default.spc` file with the sample content if the existing file has not been modified. ([#3431](https://github.com/turbot/steampipe/issues/3431))
* Validation for the workspace profile `cache` settings. ([#3646](https://github.com/turbot/steampipe/issues/3646))
* Support OCI registries requiring authentication. ([#2819](https://github.com/turbot/steampipe/issues/2819))
* Compiled with Go 1.21. ([#3763](https://github.com/turbot/steampipe/issues/3763))
_Bug fixes_
* Plugin manager shutdown stalling intermittently due to deadlocks. ([#3818](https://github.com/turbot/steampipe/issues/3818))
* Temporary tables dropped in interactive prompt when pool connections recycled. ([#3781](https://github.com/turbot/steampipe/issues/3781),[#3543](https://github.com/turbot/steampipe/issues/3543))
* `service start` was not listening on `network` by default. ([#3593](https://github.com/turbot/steampipe/issues/3593))
* Multi line logs from plugins not rendered correctly in plugin logs. ([#3678](https://github.com/turbot/steampipe/issues/3678))
* `.inspect` panicking for long column descriptions. ([#3709](https://github.com/turbot/steampipe/issues/3709))
* Interactive prompt crashing when there is a code panic. ([#3713](https://github.com/turbot/steampipe/issues/3713))
* Incorrect zsh completion instructions.
* Steampipe should not create export files for cancelled control runs. ([#3578](https://github.com/turbot/steampipe/issues/3578))
* `BuildFullResourceName` not validating non empty arguments. ([#3601](https://github.com/turbot/steampipe/issues/3601))
* Spinner not showing when exporting check results. ([#3577](https://github.com/turbot/steampipe/issues/3577))
* `stdin` was consumed by `query` command even if there are arguments. ([#1985](https://github.com/turbot/steampipe/issues/1985))
* When exporting multiple benchmarks, results now merged the results into a single export. ([#2380](https://github.com/turbot/steampipe/issues/2380))
* Raise warning when pseudo-resources are ignored because of named HCL resources. ([#1328](https://github.com/turbot/steampipe/issues/1328))
* Database reinstalled unnecessarily if any FDW files were missing. ([#2040](https://github.com/turbot/steampipe/issues/2040))
* Improved error message when steampipe fails to parse a mod definition file because mod block does not exist. ([#1198](https://github.com/turbot/steampipe/issues/1198))
* Only `install-dir` and `workspace` flags should be global flags. All other flags should only apply to specific command. ([#3542](https://github.com/turbot/steampipe/issues/3542))
* Passing an empty list for list variables was not working. ([#2094](https://github.com/turbot/steampipe/issues/2094))
* Show deprecation warning for `version` field in `require` block of mod definition.
* Temporary directories were not always being cleaned up after plugin commands.
* `plugin list` returned nothing if no plugins were installed. ([#3927](https://github.com/turbot/steampipe/issues/3927))
_Deprecations and migrations_
* Table `steampipe_connection_state` renamed to `steampipe_connection`
* Removed migration and backward compatibility of data files from v0.13.0. ([#3517](https://github.com/turbot/steampipe/issues/3517))
* Removed deprecated `workspace-chdir` flag. ([#3925](https://github.com/turbot/steampipe/issues/3925))
* Migrated from `cloud.steampipe.io` to `pipes.turbot.com`. ([#3724](https://github.com/turbot/steampipe/issues/3724))
* Removed support for plugins which do not support multiple connections (i.e. using SDK < v4.0.0).
* Deprecated `terminal options`.
## v0.20.12 [2023-09-14]
_Whats new?_
* Updated help outputs for steampipe mod commands. ([#1817](https://github.com/turbot/steampipe/issues/1817))
_Bug fixes_
* Fixes issue where expired root and server SSL certificates were not getting rotated. ([#3596](https://github.com/turbot/steampipe/issues/3596))
* Fixes issue where steampipe was returning an `index out of range` error when the `children` property of a `benchmark` contains an invalid name. ([#3563](https://github.com/turbot/steampipe/issues/3563))
* Steampipe should not validate locally installed plugins when connecting to remote database. ([#3516](https://github.com/turbot/steampipe/issues/3516))
## v0.20.11 [2023-08-28]
_Bug fixes_
* Fix validation error for `input` blocks using `base` inheritance. ([#3755](https://github.com/turbot/steampipe/issues/3755))
* Fix support for mixed case schema names. ([#3753](https://github.com/turbot/steampipe/issues/3753))
* If the SQL file passed as an argument to `steampipe query` does not exist, display the `file does not exist` error. ([#1752](https://github.com/turbot/steampipe/issues/1752))
## v0.20.10 [2023-08-11]
_Bug fixes_
* Fixes issue where CAPITAL arguments to '.cache' meta command were not getting recognised. ([#3670](https://github.com/turbot/steampipe/issues/3670))
* Fixes issue where `port` property in dashboard options was not respected. ([#3664](https://github.com/turbot/steampipe/issues/3685))
* Fixes issue where using a bad workspace-database with a valid token gives invalid token as the error. ([#3610](https://github.com/turbot/steampipe/issues/3610))
* Fixes timing issue where refresh connections was sometimes not run when starting service. ([#3734](https://github.com/turbot/steampipe/issues/3734))
* Fixes issue where db connections are not closed after sending postgres notification. ([#3744](https://github.com/turbot/steampipe/issues/3744))
## v0.20.9 [2023-07-11]
_Bug fixes_
* Fix aggregator connections being dropped intermittently when refreshing connections. ([#3664](https://github.com/turbot/steampipe/issues/3664))
* Ensure dynamic aggregator schema is updated if connections are added. ([#3645](https://github.com/turbot/steampipe/issues/3645))
## v0.20.8 [2023-07-03]
_Bug fixes_
* Fixes issue where setting cache ttl from the CLI results in cache being disabled for that session. ([#3639](https://github.com/turbot/steampipe/issues/3639))
## v0.20.7 [2023-06-22]
_Bug fixes_
* Fixes issue where aggregator connections are updated every time RefreshConnections runs. ([#3582](https://github.com/turbot/steampipe/issues/3582))
* Add `connections` column to steampipe_connection_state table. ([#3582](https://github.com/turbot/steampipe/issues/3582))
* Fixes issue where exporting check all yields a badly formatted filename. ([#3591](https://github.com/turbot/steampipe/issues/3591))
* Fix variable value validation not taking into account command line variable values. ([#3606](https://github.com/turbot/steampipe/issues/3606))
## v0.20.6 [2023-06-14]
_Bug fixes_
* Fix variable validation ([#3546](https://github.com/turbot/steampipe/issues/3546)):
* Raise warning or error when setting a value for a variable which is not found or inaccessible (e.g. because it is in a transitive dependency).
* Validate that mod require `args` properties can be resolved.
* Support resolution of variables for transitive dependencies using parent mod `require` block `args` property. ([#3549](https://github.com/turbot/steampipe/issues/3549))
* `steampipe mod update` now updates transitive mods. ([#3547](https://github.com/turbot/steampipe/issues/3547))
* It is now be possible to set values for variables in the current mod using fully qualified variable names. ([#3551](https://github.com/turbot/steampipe/issues/3551))
* Only variables for root mod and top level dependency mods can be set by user. ([#3550](https://github.com/turbot/steampipe/issues/3550))
* Avoid orphan plugin processes when running short batch queries. ([#3514](https://github.com/turbot/steampipe/issues/3514))
* Delete dynamic schemas before updating them to avoid a timing issue showing incorrect schema. ([#3510](https://github.com/turbot/steampipe/issues/3510))
* Fixes issue where blank dimension values are leaving extra spaces in 'table' rendering. ([#3474](https://github.com/turbot/steampipe/issues/3474))
* Fixes issue when steampipe fails to startup if plugin version file is blank. ([#3518](https://github.com/turbot/steampipe/issues/3518))
* Fixes issue where OS specific metadata directories were being considered as check templates. ([#3523](https://github.com/turbot/steampipe/issues/3523))
* Fixes issue where prefixing a 'v' on a version stream during plugin install would come back with 'not found'. ([#3513](https://github.com/turbot/steampipe/issues/3513))
* Increase plugin load timeout to 20s. ([#3564](https://github.com/turbot/steampipe/issues/3564))
Fixes issue where timing is not shown in interactive prompt even if .timing is on. ([#3557](https://github.com/turbot/steampipe/issues/3557))
* Fixes issue where 'dot' commands in interactive prompt fail to execute if there's a file/folder by the same name in the working directory. ([#3558](https://github.com/turbot/steampipe/issues/3558))
* Fixes issue where 'plugin list' hangs if there are connections with 'import_schema = "disabled"'. ([#3561](https://github.com/turbot/steampipe/issues/3561))
## v0.20.5 [2023-05-31]
_Bug fixes_
* Set incomplete connections to `Incomplete` before setting ready connections to `Pending` to avoid ready connections ending up `Incomplete`. ([#3507](https://github.com/turbot/steampipe/issues/3507))
## v0.20.4 [2023-05-31]
_Bug fixes_
* Ensure `Ready` connections are set to `Pending` state on startup. This makes sure connection changes are reflected in the connection schema if a query is executed soon after startup. ([#3483](https://github.com/turbot/steampipe/issues/3483))
## v0.20.3 [2023-05-30]
_Whats new?_
* Update refresh connections to execute updates serially by default. ([#3498](https://github.com/turbot/steampipe/issues/3498))
_Bug fixes_
* Fix issue where result counter spinner was not showing up in interactive when timing was enabled. ([#3481](https://github.com/turbot/steampipe/issues/3481))
* Fixes issue where dependency mods are installed even if there is an installed mod which satisfies requirement. ([#3475](https://github.com/turbot/steampipe/issues/3475))
* Ensure a schema is created for blank aggregators when connections are added. ([#3488](https://github.com/turbot/steampipe/issues/3488))
* Fix issue where `steampipe completion` command was creating install directories. ([#3485](https://github.com/turbot/steampipe/issues/3485))
* Don't use custom theme color `yellow` for severity cards, to avoid clashing with Tailwind's yellow palette. ([#3501](https://github.com/turbot/steampipe/issues/3501))
## v0.20.2 [2023-05-19]
_Whats new?_
* Re-add support for legacy command-schema. ([#3457](https://github.com/turbot/steampipe/issues/3457))
_Bug fixes_
* Cleanup temp plugin files when killing plugin manager. ([#3292](https://github.com/turbot/steampipe/issues/3292))
## v0.20.1 [2023-05-19]
_Bug fixes_
- Update FDW version to v1.7.1 to work around bad Linux Arm build of FDW v1.70. ([#3455](https://github.com/turbot/steampipe/issues/3455), [#311](https://github.com/turbot/steampipe-postgres-fdw/issues/311))
## v0.20.0 [2023-05-18]
#### Connection Management
- Optimise connection initialisation for high connection count ([#3394](https://github.com/turbot/steampipe/issues/3394),[#3267](https://github.com/turbot/steampipe/issues/3267),[#3236](https://github.com/turbot/steampipe/issues/3236),[#3229](https://github.com/turbot/steampipe/issues/3229),[#3413](https://github.com/turbot/steampipe/issues/3413))
- Execute RefreshConnections asyncronously in service startup
- Start executing queries without waiting for connections to load, add smart error handling to wait for required connection
- Optimise autocomplete for high connection count
- Autocomplete and inspect data available before all conections are refreshed
- Add `steampipe_connection_state` table to indicate the loading state of connections
- Add support for `import_schema` property in connection config, controlling whether to create a postgres schema for a steampipe connection. Closes #3407
- Optimise schema creation by cloning connection schemas
- Add locking to ensure only a single instance of RefreshConnections runs
- Update refresh connections to write comments for exemplar schemas first, followed by remaining schemas.
- Update connection and plugin validation during refreshConnections. ([#3432](https://github.com/turbot/steampipe/issues/3432),[#3402](https://github.com/turbot/steampipe/issues/3402))
- ensure failed connections are set to 'error' in connection state.
- Schema names starting with steampipe_ are to be reserved for steampipe.
#### Mod Dependency Management
- Support mods requiring different versions of the same depdency mod. ([#3302](https://github.com/turbot/steampipe/issues/3302))
- Support transitive dependencies referencing variables from different versions of same mod.([#3337](https://github.com/turbot/steampipe/issues/3337))
- Resource references in dependency mods must be fully qualified. ([#3335](https://github.com/turbot/steampipe/issues/3335))
- Locals in dependency mods cannot be referenced. ([#3336](https://github.com/turbot/steampipe/issues/3336))
- Fix issue where 'mod install' on an existing mod would sometimes corrupt the 'mod.sp' file. ([#3376](https://github.com/turbot/steampipe/issues/3376))
- Fix issue where mod installation would fail silently for unmet dependencies in top mod in force mode. ([#3358](https://github.com/turbot/steampipe/issues/3358))
- Fix issue where mod list output is not printed in a specific order. ([#3349](https://github.com/turbot/steampipe/issues/3349))
- Fix issue where a mod would install even if plugin dependencies are not met. ([#3041](https://github.com/turbot/steampipe/issues/3041))
- Fix issue where running mods with unmet dependencies does not raise warnings. ([#3324](https://github.com/turbot/steampipe/issues/3324))
- Fix mod commands failing when using a `https` prefix. ([#3257](https://github.com/turbot/steampipe/issues/3257))
- Fix issue where mod install/update continues installation even with unsatisfied requirements. ([#3291](https://github.com/turbot/steampipe/issues/3291))
- Fix nil reference exception when loading a mod using the legacy `requires` property. ([#3347](https://github.com/turbot/steampipe/issues/3347))
#### Caching
- Updates in cache configuration to allow disabling of all caching on server. ([#3258](https://github.com/turbot/steampipe/issues/3258))
- STEAMPIPE_CACHE environment variable controls both *service* cache-enabled and *client* cache-enabled
- *service* cache enabled is used by the plugin manager to enable/disable caching on the plugins during startup.
- *client* cache enabled is used to enable/disable the cache on the database session.
- Introduce SQL functions to easily manipulate caching functionality - `meta_cache()` and `meta_cache_ttl()`. ([#3442](https://github.com/turbot/steampipe/issues/3442))
_What's new?_
- Add support for time-series charts. ([#1389](https://github.com/turbot/steampipe/issues/1389))
- Updates to workspace profile - add additional properties and command specific options blocks. ([#3223](https://github.com/turbot/steampipe/issues/3223))
- Adds a `--progress` flag to `plugin install` to disable progress bars. ([#2953](https://github.com/turbot/steampipe/issues/2953))
- Detect older versions of MacOS and warn that Steampipe does not support them. ([#3256](https://github.com/turbot/steampipe/issues/3256))
- Updates the default content written to 'default.spc' and remove deprecated blocks. ([#3391](https://github.com/turbot/steampipe/issues/3391))
- Show plugin name with stream (if not latest) in the progress bar during plugin update. ([#3241](https://github.com/turbot/steampipe/issues/3241),[#3330](https://github.com/turbot/steampipe/issues/3330))
- Replace all '...' with ellipsis … in terminal output. ([#3441](https://github.com/turbot/steampipe/issues/3441))
- Add check to the mod init function so users are aware if it's run in the home directory or if there are a large number of non-mod files in the path. ([#2562](https://github.com/turbot/steampipe/issues/2562))
- Add query column in introspection tables to populate FullName if a QueryProvider references a named query. ([#3161](https://github.com/turbot/steampipe/issues/3161))
- Improve error message when running steampipe check/dashboard outside a mod. ([#3215](https://github.com/turbot/steampipe/issues/3215))
_Bug fixes_
- Fixes issue where not being able to open the browser results in a fatal error during login. ([#3437](https://github.com/turbot/steampipe/issues/3437))
- Fixes issue where 'internal' would be added twice in the search_path if one is mentioned in the non default search path. ([#3397](https://github.com/turbot/steampipe/issues/3397))
- Set mod name in resource metadata for pseudo-resources. ([#3405](https://github.com/turbot/steampipe/issues/3405))
- Fix error message when connecting to steampipe cloud if login token has expired or become corrupted. ([#3418](https://github.com/turbot/steampipe/issues/3418))
- Fix `invalid output format` error when running dashboard if `output` is set in terminal options. ([#3293](https://github.com/turbot/steampipe/issues/3293))
- Fixes issue where execution continues even if there's an unexpected error in parsing config. ([#3286](https://github.com/turbot/steampipe/issues/3286))
- Fix rendering issues when running .inspect. ([#3268](https://github.com/turbot/steampipe/issues/3268))
- Fixes issue where spinner was not showing up in interactive prompt while a query was executing. ([#3259](https://github.com/turbot/steampipe/issues/3259))
- Fix crash on shutdown if init not complete. ([#3352](https://github.com/turbot/steampipe/issues/3352))
- Fixes issue where workspace introspection option was boolean instead of control/info/none. ([#3389](https://github.com/turbot/steampipe/issues/3389))
- Fixes issue where network failures during plugin install was returning 0 exit code. ([#3367](https://github.com/turbot/steampipe/issues/3367))
- Ensure successful shutdown after dashboard service start failure. ([#3354](https://github.com/turbot/steampipe/issues/3354))
- Ensure plugin-manager command does not execute scheduled tasks - avoid deprecation warnings which make the plugin manager GRPC startup fail. ([#3410](https://github.com/turbot/steampipe/issues/3410)
## v0.19.5 [2023-04-27]
_Bug fixes_
* Fix plugin manager to crash with unhandled signal caused by connection validation warning following a file watcher event. ([#3371](https://github.com/turbot/steampipe/issues/3371))
* Fix array bounds error when querying an aggregator with no children. Show useful error instead. ([#303](https://github.com/turbot/steampipe-postgres-fdw/issues/303))
* Fixes issue where having non graphic code points in output would mess up table output in interactive. ([#3205](https://github.com/turbot/steampipe/issues/3205))
## v0.19.4 [2023-04-06]
_What's new?_
* Dashboard snapshot href links now work for external URLs. ([#3278](https://github.com/turbot/steampipe/issues/3278))
* Numeric dashboard benchmark summary card values should render using locale string. ([#3299](https://github.com/turbot/steampipe/issues/3299))
* Improve hover title grammar of critical/high severity dashboard benchmark badges. ([#3300](https://github.com/turbot/steampipe/issues/3300))
* _Bug fixes_
* Fix issue where installing transitive mod dependencies leaves the lock file with an entry with an incorrect key. ([#3285](https://github.com/turbot/steampipe/issues/3285))
* Fix duplicate dashboard UI benchmark nodes being rendered for deep benchmark hierarchies with mixture of benchmark and child controls. ([#3298](https://github.com/turbot/steampipe/issues/3298))
## v0.19.3 [2023-03-24]
_Bug fixes_
* Fix issue where the json output of variable list command was returning wrong values for `value` and `value_default` fields. ([#3265](https://github.com/turbot/steampipe/issues/3265))
* Fix dashboard UI crash when select inputs return null labels or values. ([#3244](https://github.com/turbot/steampipe/issues/3244))
## v0.19.2 [2023-03-16]
_Bug fixes_
* When creating a query snapshot, respect the `snapshot-title` arg when assigning a title to the dashboard. ([#3233](https://github.com/turbot/steampipe/issues/3233))
## v0.19.1 [2023-03-09]
_Bug fixes_
* Fix `service stop` failing if invoked directly after a schema change notification. ([#3206](https://github.com/turbot/steampipe/issues/3206))
## v0.19.0 [2023-03-09]
_What's new?_
* Add support for aggregator connections with dynamic tables. ([#2886](https://github.com/turbot/steampipe/issues/2886))
* Support updating of dynamic plugin schemas based on file watching events (e.g. a new csv file is created in a watched location) ([#2767](https://github.com/turbot/steampipe/issues/2767))
* Make workspace loading asynchronous. ([#3123](https://github.com/turbot/steampipe/issues/3123))
* Make database start timeout configurable. ([#3038](https://github.com/turbot/steampipe/issues/3038))
* When initialising interactive mode, instead of showing `Initializing...`, show the current status. ([#3077](https://github.com/turbot/steampipe/issues/3077))
* Show the exported file location when `--progress` flag is enabled. ([#2860](https://github.com/turbot/steampipe/issues/2860))
* For aggregator connections, add child connection names to connections.json. ([#3079](https://github.com/turbot/steampipe/issues/3079))
* Aggregator connection with no child connections should only be a warning - not an error. ([#3155](https://github.com/turbot/steampipe/issues/3155))
* Cleanup connection state file to remove legacy properties. ([#3086](https://github.com/turbot/steampipe/issues/3086))
* Dashboard server should emit updated dashboard metadata when available dashboards changes. ([#3182](https://github.com/turbot/steampipe/issues/3182))
* Update interactive prompt `.inspect` output and autocomplete based on changes to connection config or dynamic schema updates. ([#3184](https://github.com/turbot/steampipe/issues/3184))
_Bug fixes_
* Steampipe config validation failure no longer prevents Steampipe commands from running - instead invalid connections are removed. ([#3156](https://github.com/turbot/steampipe/issues/3156))
* Fixes issue where variables list command was not including description in JSON output. ([#3114](https://github.com/turbot/steampipe/issues/3114))
* Ensure version display is consistent between startup and `--v` flag. ([#3031](https://github.com/turbot/steampipe/issues/3031))
* When a plugin fails to load, remove connections for that plugin from the connection state file. ([#3124](https://github.com/turbot/steampipe/issues/3124))
* Fix running a single dashboard from the command line failing if the dashboard needs inputs and the dashboard name is not fully qualified. ([#3168](https://github.com/turbot/steampipe/issues/3168),[#3154](https://github.com/turbot/steampipe/issues/3154))
* Fix workspace load crash for invalid mod definition. ([#3174](https://github.com/turbot/steampipe/issues/3174))
* Limit should not be pushed down if there are unconverted restrictions. ([#291](https://github.com/turbot/steampipe-postgres-fdw/issues/291))
* Dashboard text inputs are not correctly themed in Steampipe Cloud dashboard UI dark mode. ([#3181](https://github.com/turbot/steampipe/issues/3181))
* Fix nil reference panic in FDW when a scan fails to start - do not add an iterator to Hub.runningIterators until scan is started successfully. ([#298](https://github.com/turbot/steampipe-postgres-fdw/issues/298))
* Fix `tuple concurrently updated ` error when running multiple instances of steampipe dashboard concurrently. ([#3188](https://github.com/turbot/steampipe/issues/3188))
* Fix Postgres error "cached plan must not change result type" when dynamic plugin schema changes. ([#3185](https://github.com/turbot/steampipe/issues/3185))
## v0.18.6 [2023-02-15]
_Bug fixes_
* Fix issue where inspect would not work with table names with a '.' (dot). ([#2455](https://github.com/turbot/steampipe/issues/2455))
* Fix issue where autocomplete does not quote table names that need to be quoted. ([#3065](https://github.com/turbot/steampipe/issues/3065))
* Fix issue where check csv output was appending an extra line at the end. ([#3106](https://github.com/turbot/steampipe/issues/3106))
* Fixes issue where snapshot mode in query leads to duplicate rows in console/file output. ([#3112](https://github.com/turbot/steampipe/issues/3112))
## v0.18.5 [2023-02-07]
_Bug fixes_
* Fix double counting of control errors in benchmark summary. ([#3084](https://github.com/turbot/steampipe/issues/3084))
## v0.18.4 [2023-02-03]
_Bug fixes_
* Fix dashboard panel detail crash when viewing data tables with non-string values in text columns. ([#3071](https://github.com/turbot/steampipe/issues/3071))
* Fixes issue where steampipe notifies of available update even if plugin is updated. ([#2998](https://github.com/turbot/steampipe/issues/2998))
* Fix issue where snapshot creation was failing for command line queries in batch mode. ([#2943](https://github.com/turbot/steampipe/issues/2943))
* Add a helpful error message when snapshot sharing fails because of an invalid token. ([#2944](https://github.com/turbot/steampipe/issues/2944))
* Fix query batch mode returning zero exit code when rows return errors. ([#3044](https://github.com/turbot/steampipe/issues/3044))
* Fixes issue where options from `default.spc` were taking precedence over environment variable settings. ([#3060](https://github.com/turbot/steampipe/issues/3060))
## v0.18.3 [2023-02-01]
_Bug fixes_
* Fix issue where `search_path` is not getting set from connection-config watching in service mode. ([#3047](https://github.com/turbot/steampipe/issues/3047))
* Fix issue where extra newline was added to interactive prompt before messages were printed. ([#3027](https://github.com/turbot/steampipe/issues/3027))
* Fix issue where when running a dashboard from a dependent mod, default variable vals are not being included in the snapshot. ([#2730](https://github.com/turbot/steampipe/issues/2730))
* Update `--version` output to match the startup message. ([#3028](https://github.com/turbot/steampipe/issues/3028))
## v0.18.2 [2023-01-27]
_Bug fixes_
* Fix dashboard property blocks not taking effect in node/edge property tooltips. ([#3026](https://github.com/turbot/steampipe/issues/3026))
## v0.18.1 [2023-01-18]
_Bug fixes_
* Fix workspace file watching events sometime causing dashboard to stall and stop responding to events. ([#3007](https://github.com/turbot/steampipe/issues/3007))
* Fix cancelling dashboards (e.g. by pressing 'back' on the browser) sometimes leaving the dashboard server in a state where it will not respond to socket events. ([#3008](https://github.com/turbot/steampipe/issues/3008))
* Increase database connection timeout and improve the error message if connection failure occurs. ([#2377](https://github.com/turbot/steampipe/issues/2377))
* Validate that input references are of the form `self.input.<input-name>`. ([#2990](https://github.com/turbot/steampipe/issues/2990))
* Fix `check --where` and `check --tag`. ([#3001](https://github.com/turbot/steampipe/issues/3001))
* Ensure correct exit code is returned when a mod plugin requirements are not met. ([#2986](https://github.com/turbot/steampipe/issues/2986))
* Fix dashboard leaf_node_updated events for v0.17.4 CLI being ignored by v0.18.0 UI clients. ([#2994](https://github.com/turbot/steampipe/issues/2994))
* Fix dashboard table interpolated template rendering not working in line view. ([#3014](https://github.com/turbot/steampipe/issues/3014))
* Fix HCL validation to allow benchmark and control blocks in dashboard. ([#3015](https://github.com/turbot/steampipe/issues/3015))
## v0.18.0 [2023-01-12]
_What's new?_
* Add support for visualisations of your data with graphs, with easily composable data structures using nodes and edges. ([#2249](https://github.com/turbot/steampipe/issues/2249))
* Improved dashboard UI panel controls for quicker access to common tasks such as downloading panel data. ([#2663](https://github.com/turbot/steampipe/issues/2663))
* Add support for `with` blocks. ([#2772](https://github.com/turbot/steampipe/issues/2772))
* Add support for `param` runtime dependencies. ([#2910](https://github.com/turbot/steampipe/issues/2910))
* Add dashboard panel log to panel detail to get an understanding of the execution history of a panel. ([#2895](https://github.com/turbot/steampipe/issues/2895))
* Remove usage of prepared statements - instead execute sql directly.([#2789](https://github.com/turbot/steampipe/issues/2789))
* Modify the update checker to run asynchronously. ([#2770](https://github.com/turbot/steampipe/issues/2770))
* Update steampipe_reference introspection table to include references from `with` blocks. ([#2934](https://github.com/turbot/steampipe/issues/2934))
* Update arg validation to ignore extra named args but fail on extra positional args (currently fails if too many named args passed) ([#2783](https://github.com/turbot/steampipe/issues/2783))
* Update dashboard states to `initialized`, `blocked`, `running`, `complete`, `error`, `canceled`. ([#2939](https://github.com/turbot/steampipe/issues/2939))
* Update dashboard UI version mismatch logic to redirect to a version-enabled URL to get past localhost cached index.html. ([#2940](https://github.com/turbot/steampipe/issues/2940))
* Upgrades 'pgx' to v5. ([#2776](https://github.com/turbot/steampipe/issues/2776))
* Add a `--max-parallel` flag to `dashboard` command and set default to 10. ([#2754](https://github.com/turbot/steampipe/issues/2754))
* When parsing query args, ensure jsonb args are passed to query as string not map.([#2802](https://github.com/turbot/steampipe/issues/2802))
* Update Makefile to allow overriding build output directory path
_Bug fixes_
* Fixes issue where interactive prompt was not showing timing data for 'json', 'csv' and 'line' outputs. ([#2699](https://github.com/turbot/steampipe/issues/2699))
* Fixes issue where value from '--separator' was not being used in CSV rendering. ([#544](https://github.com/turbot/steampipe/issues/544))
* Fixes issue where implicit services are not shutting down when the last instance of steampipe exits. ([#2833](https://github.com/turbot/steampipe/issues/2833))
* When editing dashboard files, after adding/fixing errors in the HCL the dashboard server will sometimes stall. ([#2952](https://github.com/turbot/steampipe/issues/2952))
* Dashboard select/combo inputs using integer `value` do not render options. ([#2972](https://github.com/turbot/steampipe/issues/2972))
_Deprecations_
* Hcl validation is now stricter. ([#2923](https://github.com/turbot/steampipe/issues/2923))
* Add deprecation warnings for deprecated hcl properties. ([#2973](https://github.com/turbot/steampipe/issues/2973))
* Remove `search_path` and `search_path_prefix` from `control` and `query` resources. ([#2963](https://github.com/turbot/steampipe/issues/2963))
* Exit codes have been updated. ([#2329](https://github.com/turbot/steampipe/issues/2395))
```
const (
ExitCodeSuccessful = 0
ExitCodeControlsAlarm = 1 // check - no runtime errors, 1 or more control alarms, no control errors
ExitCodeControlsError = 2 // check - no runtime errors, 1 or more control errors
ExitCodePluginLoadingError = 11 // plugin - loading error
ExitCodePluginListFailure = 12 // plugin - listing failed
ExitCodePluginNotFound = 13 // plugin - not found
ExitCodeSnapshotCreationFailed = 21 // snapshot - creation failed
ExitCodeSnapshotUploadFailed = 22 // snapshot - upload failed
ExitCodeServiceSetupFailure = 31 // service - setup failed
ExitCodeServiceStartupFailure = 32 // service - start failed
ExitCodeServiceStopFailure = 33 // service - stop failed
ExitCodeQueryExecutionFailed = 41 // query - 1 or more queries failed - change in behavior(previously the exitCode used to be the number of queries that failed)
ExitCodeLoginCloudConnectionFailed = 51 // login - connecting to cloud failed
ExitCodeInitializationFailed = 250 // common - initialization failed
ExitCodeBindPortUnavailable = 251 // common (service/dashboard) - port binding failed
ExitCodeNoModFile = 252 // common - no mod file
ExitCodeFileSystemAccessFailure = 253 // common - file system access failed
ExitCodeInsufficientOrWrongInputs = 254 // common - runtime error (insufficient or wrong input)
ExitCodeUnknownErrorPanic = 255 // common - runtime error (unknown panic)
)
```
## v0.17.4 [2022-12-02]
_Bug fixes_
* Fixes issue where the `--separator` flag was not being used in the `csv` output/export for `steampipe check`. ([#544](https://github.com/turbot/steampipe/issues/544))
## v0.17.3 [2022-11-24]
_Bug fixes_
* Fix shared memory errors for high connection count - update postgres config to reverts `max_locks_per_transaction` to the pre v0.17.0 value of 2048. ([#2756](https://github.com/turbot/steampipe/issues/2756))
## v0.17.2 [2022-11-18]
_Bug fixes_
* Fix dashboard interpolated string expressions with adjacent expressions not separated by spaces not rendering the second expression ([#2752](https://github.com/turbot/steampipe/issues/2752))
* Ensure workspace and panel errors are shown in dashboard panels ([#2742](https://github.com/turbot/steampipe/issues/2742))
* Fix issue where control execution errors were not shown in CSV rendering. ([#2674](https://github.com/turbot/steampipe/issues/2674))
* Escape query arguments when resolving prepared statement execution SQL. ([#2676](https://github.com/turbot/steampipe/issues/2676))
* Fixes issue where a '--where' or '--tag' flag were not creating the introspection tables. ([#2670](https://github.com/turbot/steampipe/issues/2670))
## v0.17.1 [2022-11-10]
_Bug fixes_
* Fix query command `--export` flag raising an error that it cannot be used in interactive mode, even when not in interactive mode. ([#2707](https://github.com/turbot/steampipe/issues/2707))
* Fix RefreshConnections sometimes storing an unset plugin ModTime property in the connection state file. This leads to failure to refresh connections when plugin has been rebuilt or updated. ([#2721](https://github.com/turbot/steampipe/issues/2721))
* Fix dashboard text inputs being editable in snapshot mode. ([#2717](https://github.com/turbot/steampipe/issues/2717))
* Fix dashboard JSONB columns in CSV data downloads not serialising correctly. ([#2733](https://github.com/turbot/steampipe/issues/2733))
* Add dashboard error modal when users are running a different UI and CLI version ([#2728](https://github.com/turbot/steampipe/issues/2728))
* Fixes control dashboards not displaying progress. ([#2735](https://github.com/turbot/steampipe/issues/2735))
## v0.17.0 [2022-11-08]
_What's new?_
* Add support for `workspace profiles`, defined using HCL config and selected using `--workspace` arg. ([#2510](https://github.com/turbot/steampipe/issues/2510), [#2574](https://github.com/turbot/steampipe/issues/2574))
* Update CLI to upload snapshots to Steampipe cloud using `--share` and `--snapshot` options. ([#2367](https://github.com/turbot/steampipe/issues/2367))
* Add `steampipe login` command. ([#2583](https://github.com/turbot/steampipe/issues/2583))
* Update `dashboard` command to support passing a dashboard name as an argument. ([#2365](https://github.com/turbot/steampipe/issues/2365))
* Adds `list` sub command for `query`, `check` and `dashboard`. ([#2653](https://github.com/turbot/steampipe/issues/2653))
* Add `snapshot`/`sps` output and export format. ([#2473](https://github.com/turbot/steampipe/issues/2473))
* Add `--snapshot-title arg`. Ensure snapshots and exports are named consistently.([#2666](https://github.com/turbot/steampipe/issues/2666))
* Add `autocomplete` meta command and terminal option. ([#2560](https://github.com/turbot/steampipe/issues/2560), [#1692](https://github.com/turbot/steampipe/issues/1692))
* Add ability to save and open snapshots from the dashboard UI. ([#2577](https://github.com/turbot/steampipe/issues/2577))
* Add support for viewing control snapshots in the dashboard UI. ([#2688](https://github.com/turbot/steampipe/issues/2688))
* Add a configurable query timeout. ([#666](https://github.com/turbot/steampipe/issues/666), [#2593](https://github.com/turbot/steampipe/issues/2593))
* Update database code to use `pgx` interface so we can leverage the connection pool hook functions to pre-warm connections. ([#2422](https://github.com/turbot/steampipe/issues/2422))
* Rationalise and simplify postgres configuration. ([#2471](https://github.com/turbot/steampipe/issues/2471))
* Support executing any query-provider resources using the steampipe query command. ([#2558](https://github.com/turbot/steampipe/issues/2558))
* Improve help messages when a plugin is installed but the connection is not configured. ([#2319](https://github.com/turbot/steampipe/issues/2319))
* Add better help messages for mod plugin requirements not satisfied error. ([#2361](https://github.com/turbot/steampipe/issues/2361))
* Reduce the max frequency of connection config changed events to every 4 second. ([#2535](https://github.com/turbot/steampipe/issues/2535))
* Add `Variables` and `Inputs` to dashboard `ExecutionStarted` event. ([#2606](https://github.com/turbot/steampipe/issues/2606))
* Validate check output and export formats _before_ execution. ([#2619](https://github.com/turbot/steampipe/issues/2619))
* When starting a plugin process, pass a SecureConfig, to silence the `nil SecureConfig` error. ([#2567](https://github.com/turbot/steampipe/issues/2567))
* Optimise autocomplete by only loading completions on startup or when connection config changes, rather than every time a query is entered . ([#2561](https://github.com/turbot/steampipe/issues/2561))
* Remove explicit setting of open-file limit, now that Go 1.19 does it automatically. ([#2630](https://github.com/turbot/steampipe/issues/2630))
_Bug fixes_
* Update `GetPathKeys` to treat key columns with `AnyOf` require property with the same precedence as `Required`. ([#254](https://github.com/turbot/steampipe-postgres-fdw/issues/254))
* Remove blank lines in CSV and JSON query results ([#2333](https://github.com/turbot/steampipe/issues/2333), [#2340](https://github.com/turbot/steampipe/issues/2340))
* Fix UpdateConnectionConfigs call to pass the new connection for changed connections (currently the old connection is passed). ([#2349](https://github.com/turbot/steampipe/issues/2349))
* When passing empty array as variable, cast to correct type if possible. ([#2094](https://github.com/turbot/steampipe/issues/2094))
* Fixes issue where progress bars are not sorted for plugin update. ([#2501](https://github.com/turbot/steampipe/issues/2501))
* Fix intermittent dashboard shutdown stall. ([#2328](https://github.com/turbot/steampipe/issues/2328))
* Fix connection watching only adding first changed connection config to the payload of the UpdateConnectionConfigs call. ([#2395](https://github.com/turbot/steampipe/issues/2395))
* Fix the alignment of plugin update/install outputs. ([#2417](https://github.com/turbot/steampipe/issues/2417))
* Fix timeout running `service start --dashboard` with many mods installed - increase dashboard service startup timeout to 30s. ([#2434](https://github.com/turbot/steampipe/issues/2434))
* Ensure `dashboard` and `control` return exit status zero after successful run ([#2449](https://github.com/turbot/steampipe/issues/2449), [#2447](https://github.com/turbot/steampipe/issues/2447))
* Fixes issue where steampipe requests for firewall exceptions during installation. ([#2478](https://github.com/turbot/steampipe/issues/2478))
* Fix retrieval of default user workspace. ([#2499](https://github.com/turbot/steampipe/issues/2499))
* Fix plugin-manager panic when plugin startup times out. ([#2546](https://github.com/turbot/steampipe/issues/2546))
* Fix prompt failing to show when service installation runs in interactive mode. ([#2529](https://github.com/turbot/steampipe/issues/2529))
* Validate inputs when running single dashboard. Do not upload snapshot if dashboard was cancelled. ([#2551](https://github.com/turbot/steampipe/issues/2551))
* Fixes issue where the CLI would fail to connect to local service if there are credential files in `~/.postgresql`. ([#1417](https://github.com/turbot/steampipe/issues/1417))
* Fixes issue where 'Alt` keyboard combinations would error in WSL. ([#2549](https://github.com/turbot/steampipe/issues/2549))
* Fix unintuitive errors from steampipe plugin commands when a plugin (version) is missing. ([#2361](https://github.com/turbot/steampipe/issues/2361))
* Clean up error messaging when a bad template is put in the templates dir. ([#2670](https://github.com/turbot/steampipe/issues/2670))
* Fix crash when plugin list fails to connect to database.
_Deprecations_
* Deprecate `workspace-chdir`, replace with `mod-location`. ([#2511](https://github.com/turbot/steampipe/issues/2511))
## v0.16.4 [2022-09-26]
_Bug fixes_
* Fix `Plugin.GetSchema failed - no connection name passed and multiple connections loaded` error - update FDW to fix packaging issue affecting Arm Linux. ([#2464](https://github.com/turbot/steampipe/issues/2464))
## v0.16.3 [2022-09-17]
_Bug fixes_
* Fix dashboard UI benchmark controls rendering a control node per control result, rather than a control node with multiple results within it. ([#2440](https://github.com/turbot/steampipe/issues/2440))
* Fix `double` qual values not being passed to plugin. ([#243](https://github.com/turbot/steampipe-postgres-fdw/issues/243))
## v0.16.2 [2022-09-15]
_Bug fixes_
* Update FDW to not start scan until the first time IterateForeignScan is called. ([#237](https://github.com/turbot/steampipe-postgres-fdw/issues/237))
* Fix database initialisation failures due to invalid locale. ([#2368](https://github.com/turbot/steampipe/issues/2368))
* Use ellipsis char instead of 3 dots in plugin update/install when cutting off the plugin name. ([#2355](https://github.com/turbot/steampipe/issues/2355))
* Add help message for WSL1 installation failures. ([#2379](https://github.com/turbot/steampipe/issues/2379))
* Show query timing information even if query returns an error.([#2331](https://github.com/turbot/steampipe/issues/2331))
* Fix dashboard UI benchmarks with both child controls and benchmarks not rendering their controls. ([#2440](https://github.com/turbot/steampipe/issues/2440))
## v0.16.1 [2022-08-31]
_Bug fixes_
* Limit connection lifetime in the database connection pool. ([#2375](https://github.com/turbot/steampipe/issues/2375))
* Fix connection watching when multiple connection configs are changed - ensure _all_ configs are updated. ([#2395](https://github.com/turbot/steampipe/issues/2395))
* Reduce startup time when multiple mods are loaded - only create introspection tables if `STEAMPIPE_INTROSPECTION` environment variable is set. ([#2396](https://github.com/turbot/steampipe/issues/2396))
## v0.16.0 [2022-08-24]
_What's new?_
* Add support for plugin processes to handle multiple connections (rather than a process per connection), improving startup time and reducing memory usage. ([#2262](https://github.com/turbot/steampipe/issues/2262))
* Limit the maximum memory used by the plugin query cache can using the environment variable STEAMPIPE_CACHE_MAX_SIZE_MB ([#2363](https://github.com/turbot/steampipe/issues/2363))
* Update base image for the steampipe docker container. ([#2233](https://github.com/turbot/steampipe/issues/2233))
* Improve help messages when a plugin is installed but the connection is not configured. ([#2319](https://github.com/turbot/steampipe/issues/2319))
* Only add a blank line between query results, not after the final result. ([#2333](https://github.com/turbot/steampipe/issues/2333), [#2340](https://github.com/turbot/steampipe/issues/2340))
* Timing terminal output now uses appropriate fidelity (secs, ms) for easier readability. ([#2246](https://github.com/turbot/steampipe/issues/2246))
* Disable FDW update message during plugin update. ([#2312](https://github.com/turbot/steampipe/issues/2312))
* Update dashboard `ExecutionComplete` event to include only variables referenced by the dashboard/benchmark being run. ([#2283](https://github.com/turbot/steampipe/issues/2283))
* Add support for single and multi-select combo inputs in dashboards, allowing for a combination of static/query-driven and custom options.
* Improve display of connection validation errors.
* Improve handling of dashboards with multiple inputs.
* Improve layout of dashboard error modal.
_Bug fixes_
* Fix interactive multi-line mode. ([#2260](https://github.com/turbot/steampipe/issues/2260))
* Fix intermittent failure for dashboard server shutting down when pressing ctrl+c. ([#2328](https://github.com/turbot/steampipe/issues/2328))
* Fix Steampipe terminating if query (or empty line) is entered before initialisation completes. ([#2300](https://github.com/turbot/steampipe/issues/2300))
* Fix pasting a query during CLI initialization causing it to be duplicated on the screen. ([#1980](https://github.com/turbot/steampipe/issues/1980))
* Fix connecting to remote database using `--workspace-database`. ([#2324](https://github.com/turbot/steampipe/issues/2324))
## v0.15.4 [2022-07-14]
_Bug fixes_
* Fix dashboard UI not rendering for chart/flow/hierarchy/input when type is set to table. ([#2250](https://github.com/turbot/steampipe/issues/2250))
* Fix flow/hierarchy dashboard UI bug where id/to_id and id/from_id/to_id rows would not render the expected results. ([#2254](https://github.com/turbot/steampipe/issues/2254))
* Fix FDW build issue which causes load failure on Arm Docker images. ([#219](https://github.com/turbot/steampipe-postgres-fdw/issues/219))
## v0.15.3 [2022-07-14]
_Bug fixes_
* Fix crash when inspecting tables in interactive mode. ([#2243](https://github.com/turbot/steampipe/issues/2243))
## v0.15.2 [2022-07-13]
_Bug fixes_
* Fix intermittent hang in interactive mode if timing is enabled. ([#2237](https://github.com/turbot/steampipe/issues/2237))
## v0.15.1 [2022-07-07]
_Bug fixes_
* Fixes various EOF query errors. ([#192](https://github.com/turbot/steampipe-postgres-fdw/issues/192), [#201](https://github.com/turbot/steampipe-postgres-fdw/issues/201), [#207](https://github.com/turbot/steampipe-postgres-fdw/issues/207))
* Ensure DashboardChanged events are generated when child elements have a changed index within a container. ([#2228](https://github.com/turbot/steampipe/issues/2228))
* Fix incorrectly identified changed inputs in DashboardChanged events. ([#2221](https://github.com/turbot/steampipe/issues/2221))
* Fix dashboard UI crashing when socket connection reconnects. ([#2224](https://github.com/turbot/steampipe/issues/2224))
* Fix intermittent "concurrent map access" error when timing is enabled. ([#2231](https://github.com/turbot/steampipe/issues/2231))
## v0.15.0 [2022-06-23]
_What's new?_
* Add support for Open Telemetry. ([#1193](https://github.com/turbot/steampipe/issues/1193))
* Update `.timing` output to return additional query metadata such as the number of hydrate functions called andd the cache status. ([#2192](https://github.com/turbot/steampipe/issues/2192))
* Add `steampipe_command.scan_metadata` table to support returning additional data from `.timing` command. ([#203](https://github.com/turbot/steampipe-postgres-fdw/issues/203))
* Update postgres config to enable auto-vacuum. ([#2083](https://github.com/turbot/steampipe/issues/2083))
* Add `--show-password` CLI arg to reveal the db user password. Disables password visibility by default. ([#2033](https://github.com/turbot/steampipe/issues/2033))
* Update dashboard snapshot format, making control/benchmark output consistent with dashboards. ([#2154](https://github.com/turbot/steampipe/issues/2154))
* Support optional names for dashboard child blocks. ([#2161](https://github.com/turbot/steampipe/issues/2161))
* Improve the response to `steampipe plugin update all` to make it more helpful. ([#2125](https://github.com/turbot/steampipe/issues/2125))
* Add better help message when invalid locale settings caused db init failure. ([#1673](https://github.com/turbot/steampipe/issues/1673))
* Update json control output template to use Go templating, rather than just serialising the results. ([#2163](https://github.com/turbot/steampipe/issues/2163))
_Bug fixes_
* Add control severity in the check run CSV output. ([#2083](https://github.com/turbot/steampipe/issues/2083))
* Ensure prompt is shown after installing updated FDW. ([#2101](https://github.com/turbot/steampipe/issues/2101))
* Fix nil pointer error when empty array passed as variable value. ([#2094](https://github.com/turbot/steampipe/issues/2094))
* Fix interactive query failing with EOF error if the history.json is empty. ([#2151](https://github.com/turbot/steampipe/issues/2151))
* Update autocomplete description for `.output` to include `line` as an option. ([#2142](https://github.com/turbot/steampipe/issues/2142))
* Fix issue where check/templates were not getting updated even when the template file has been updated. ([#2180](https://github.com/turbot/steampipe/issues/2180))
* Fix `check all` so it does not runs controls/benchmarks from dependency mods. ([#2182](https://github.com/turbot/steampipe/issues/2182))
## v0.14.6 [2022-05-25]
_Bug fixes_
* Fix update check failing for large numbers of plugins, with little or no feedback on the error. ([#2118](https://github.com/turbot/steampipe/issues/2118))
* Fix database startup failure with `EOF` error on Mac M1 after updating FDW. ([#2116](https://github.com/turbot/steampipe/issues/2116))
* Fix intermittent `Unrecognized remote plugin message` error on Mac M1 after updating a plugin which has been locally built. Closes ([#2123](https://github.com/turbot/steampipe/issues/2123))
## v0.14.5 [2022-05-23]
_Bug fixes_
* Add support for setting dependent mod variable values using an spvars file or by setting the `Args` property in the mod `Require` block. ([#2076](https://github.com/turbot/steampipe/issues/2076), [#2077](https://github.com/turbot/steampipe/issues/2077))
* Add support for JSONB quals. ([#185](https://github.com/turbot/steampipe-postgres-fdw/issues/185))
* Fix pasting a query during CLI initialization causing it to be duplicated on the screen. ([#1980](https://github.com/turbot/steampipe/issues/1980))
* Remove limit of 2 decodes - execute as many passes as needed (as long as the number of unresolved dependencies decreases). Fixes intermittent dependency error when loading steampipe-mod-ibm-insights. ([#2062](https://github.com/turbot/steampipe/issues/2062))
* Fix workspace lock file not being correctly migrated. ([#2069](https://github.com/turbot/steampipe/issues/2069))
* Fix intermittent panic error on plugin install. ([#2069](https://github.com/turbot/steampipe/issues/2069))
* Fix nil pointer error when an empty array passed as variable value. ([#2094](https://github.com/turbot/steampipe/issues/2094))
* When running `steampipe service start --dashboard`, ensure `--workspace-chdir` arg is respected. ([#2103](https://github.com/turbot/steampipe/issues/2103))
## v0.14.4 [2022-05-12]
_Bug fixes_
* Fix ctrl+c during dashboard execution causing a `panic: send on closed channel`. ([#2048](https://github.com/turbot/steampipe/issues/2048))
* Fix backward compatibility issues in config file migration which could cause the plugin `versions.json` to become corrupted. ([#2042](https://github.com/turbot/steampipe/issues/2042))
* Fix `backups` folder is being created even if no database backup is taken. ([#2049](https://github.com/turbot/steampipe/issues/2049))
* If updated db package with same Postgres version is detected, install binaries without doing a full db install. ([#2038](https://github.com/turbot/steampipe/issues/2038))
* Fix dashboard UI benchmark nodes collapsing during running. ([#2045](https://github.com/turbot/steampipe/issues/2045))
## v0.14.3 [2022-05-10]
_Bug fixes_
* Fix a regression in v0.14.2 that would prevent migration of public schema data during migration from v0.14.x versions. ([#2034](https://github.com/turbot/steampipe/issues/2034))
## v0.14.2 [2022-05-10]
_Bug fixes_
* When initialising the database, check whether the ImageRef of the currently installed database is correct and if not, reinstall. This provides a mechanism to force a db package update even if the Postgres version has not changed. ([#2026](https://github.com/turbot/steampipe/issues/2026))
* Ensure `Digest` payload field is not empty when calling VersionCheck endpoint. This is to handle a potential config migration bug which can result in empty `image_digest` fields in the plugin versions state file. ([#2030](https://github.com/turbot/steampipe/issues/2030))
* Fix prepared statement creation failure when installing a fresh db from a mod folder. ([#2028](https://github.com/turbot/steampipe/issues/2028))
* Limit the number of database backups as part of the daily cleanup. ([#2012](https://github.com/turbot/steampipe/issues/2012))
## v0.14.1 [2022-05-09]
_Bug fixes_
* Check if a previous version of Steampipe has a service running, and fail gracefully if so.
If we fail to detect as service, but find a postgres process running in the install dir, kill it before migrating data. ([#2022](https://github.com/turbot/steampipe/issues/2022))
## v0.14.0 [2022-05-09]
_What's new?_
* Support real-time running and viewing of benchmarks in the dashboard UI with drill-down through benchmarks and controls to individual resource results. ([#1760](https://github.com/turbot/steampipe/issues/1760))
* Update database version to Postgresql 14. ([#43](https://github.com/turbot/steampipe/issues/43))
* Add native support for Arm architecture machines. ([#253](https://github.com/turbot/steampipe/issues/253))
* Update Go to 1.18. ([#1783](https://github.com/turbot/steampipe/issues/1783))
* Migrate all json config files to use snake case property names. ([#1730](https://github.com/turbot/steampipe/issues/1730))
* Add `input` flag to disable interactive prompting for variables. ([#1839](https://github.com/turbot/steampipe/issues/1839))
* Add `variable list` command. ([#1868](https://github.com/turbot/steampipe/issues/1868))
* Allow dependent mods to have the same variable name as the parent mod. ([#1922](https://github.com/turbot/steampipe/issues/1922))
* Update Dockerfile for postgres 14, and to disable telemetry. ([#1941](https://github.com/turbot/steampipe/issues/1941))
* Update the output and performance of plugin operations. ([#1780](https://github.com/turbot/steampipe/issues/1780), [#1778](https://github.com/turbot/steampipe/issues/1778), [#1777](https://github.com/turbot/steampipe/issues/1777), [#1776](https://github.com/turbot/steampipe/issues/1776))
* Rename folder .steampipe/report/assets to .steampipe/dashboard/assets. ([#1751](https://github.com/turbot/steampipe/issues/1751))
* Add `Alias` property to the dependencies listed in .mod.cache.json. ([#1731](https://github.com/turbot/steampipe/issues/1731))
_Bug fixes_
* Fix issue preventing dashboard UI from displaying in Safari ([#1984](https://github.com/turbot/steampipe/issues/1984))
* Fix intermittent "relation not found errors", when running dashboards. ([#1919](https://github.com/turbot/steampipe/issues/1919))
* Update 'check' and 'dashboard' command to NOT fail if any connection fails to load. ([#1885](https://github.com/turbot/steampipe/issues/1885))
* Update mod parsing to pass variable values to dependent mods. ([#1694](https://github.com/turbot/steampipe/issues/1694))
* Update control running to retry acquireSession in case of error, and report error in case of failure. ([#1951](https://github.com/turbot/steampipe/issues/1951))
* Fix required Steampipe version in mod.sp not being respected when running query command. ([#1734](https://github.com/turbot/steampipe/issues/1734))
* Fix dashboard cancellation is stalling when the dashboard has no children. ([#1837](https://github.com/turbot/steampipe/issues/1837))
* Fix interactive query Initialisation hang when no plugins are installed. ([#1860](https://github.com/turbot/steampipe/issues/1860))
* Escape quotes in all postgres object names. ([#1893](https://github.com/turbot/steampipe/issues/1893))
* Fixes issue where plugin install crashes for non-existent plugins. ([#1896](https://github.com/turbot/steampipe/issues/1896))
* Fix execution of dashboards causing a hang after a change or recovering from workspace error. ([#1907](https://github.com/turbot/steampipe/issues/1907))
* Fix JSON data with \u0000 errors in Postgres with "unsupported Unicode escape sequence". ([#118](https://github.com/turbot/steampipe-postgres-fdw/issues/118))
* Update dashboards to handle ExecutionError events. ([#1997](https://github.com/turbot/steampipe/issues/1997))
* Fixes issue where `service stop` command outputs "service stopped" even if no services were actually running. ([#1456](https://github.com/turbot/steampipe/issues/1456))
## v0.13.6 [2022-04-14]
_Bug fixes_
* Update dashboard UI to use wss when the location protocol is https. ([#1717](https://github.com/turbot/steampipe/issues/1717))
* Fix interactive query initialisation hang when no plugins are installed. ([#1860](https://github.com/turbot/steampipe/issues/1860))
* Fixes issue where `steampipe query` was always using a default port. ([#1753](https://github.com/turbot/steampipe/issues/1753))
## v0.13.5 [2022-04-01]
_Bug fixes_
* Ensure the search path is escaped. ([#1770](https://github.com/turbot/steampipe/issues/1770))
## v0.13.4 [2022-03-31]
_What's new?_
* Add `ShortName` property to the dependencies listed in .mod.cache.json. ([#1731](https://github.com/turbot/steampipe/issues/1731))
_Bug fixes_
* Fix setting search path after connection config changed event. ([#1700](https://github.com/turbot/steampipe/issues/1700))
* Fixes issue where tags and dimensions are not sorted in output of `check` command. ([#1715](https://github.com/turbot/steampipe/issues/1715))
* Fix required Steampipe version in mod.sp not being validated when running `query` command. ([#1734](https://github.com/turbot/steampipe/issues/1734))
## v0.13.3 [2022-03-21]
_Bug fixes_
* Fix issue where dashboard starts up even if there are initialization errors (for example unmet dependencies). ([#1711](https://github.com/turbot/steampipe/issues/1711))
## v0.13.2 [2022-03-18]
_Bug fixes_
* Fix dashboard shutdown sometimes stalling. ([#1708](https://github.com/turbot/steampipe/issues/1708))
## v0.13.1 [2022-03-17]
_What's new?_
* Improve recording of browser history in dashboard UI. ([#1633](https://github.com/turbot/steampipe/issues/1633))
* Improve template rendering performance in dashboard UI. ([#1646](https://github.com/turbot/steampipe/issues/1646))
* Add linking support to cards in dashboard UI. ([#1651](https://github.com/turbot/steampipe/issues/1651))
* Add support for `--search-path`, `--search-path-prefix`, `--var` and `--var-file` flags to `dashboard` command. ([#1674](https://github.com/turbot/steampipe/issues/1674))
* Add ability to define static card label and value in HCL. ([#1695](https://github.com/turbot/steampipe/issues/1695))
* Add feedback during workspace load in `dashboard` command. ([#1567](https://github.com/turbot/steampipe/issues/1567))
_Bug fixes_
* Fix excessive memory usage intialising a high number of connections. ([#1656](https://github.com/turbot/steampipe/issues/1656))
* Fix issue where service was not shut down if command is cancelled during initialisation. ([#1288](https://github.com/turbot/steampipe/issues/1288))
* Fix issue where installing a plugin from any `stream` other than `latest` did not install the default `config` file. ([#1660](https://github.com/turbot/steampipe/issues/1660))
* Fix query argument resolution not working correctly when some args are provided by HCL and some from runtime args. ([#1661](https://github.com/turbot/steampipe/issues/1661))
* Fix issue where legacy `requires` property was not evaluating in mods. ([#1686](https://github.com/turbot/steampipe/issues/1686))
## v0.13.0 [2022-03-10]
_What's new?_
* Add `steampipe dashboard` command ([#1364](https://github.com/turbot/steampipe/issues/1364))
* Add `--dashboard` option to `steampipe service` command. ([#1472](https://github.com/turbot/steampipe/issues/1472))
* Add support for `ltree` columns. ([#157](https://github.com/turbot/steampipe-postgres-fdw/issues/157))
* Add support for `inet` columns. ([#156](https://github.com/turbot/steampipe-postgres-fdw/issues/156))
* Add support for finding the mod definition by searching up the working directory tree. ([#1533](https://github.com/turbot/steampipe/issues/1533))
* Update OCI download to use a tmp folder underneath the destination folder. ([#1545](https://github.com/turbot/steampipe/issues/1545))
* Disable update checks running for plugin update command. ([#1470](https://github.com/turbot/steampipe/issues/1470))
_Bug fixes_
* Fix connection file watching. ([#1469](https://github.com/turbot/steampipe/issues/1469))
* Fix `.inspect` command for steampipe cloud connections. ([#1497](https://github.com/turbot/steampipe/issues/1497))
* Fix plugin validation error sometimes causing Steampipe to crash. ([#1387](https://github.com/turbot/steampipe/issues/1387), [#146](https://github.com/turbot/steampipe-postgres-fdw/issues/146))
* Fix plugin validation errors not being displayed as warnings on startup. ([#1413](https://github.com/turbot/steampipe/issues/1413))
* Fix workspace event handler causing freeze during initialisation. ([#1428](https://github.com/turbot/steampipe/issues/1428))
* Fix duplicate resources not being reported during mod load. ([#1477](https://github.com/turbot/steampipe/issues/1477))
* Fix interactive query cancellation only working once.([#1625](https://github.com/turbot/steampipe/issues/1625))
* Fix failure to detect duplicate pseudo resources. ([#1478](https://github.com/turbot/steampipe/issues/1478))
* Fix refreshing an aggregate connection causing a plugin crash. ([#1537](https://github.com/turbot/steampipe/issues/1537))
* Ensure SetConnectionConfig is only called once. ([#1368](https://github.com/turbot/steampipe/issues/1368))
* Fix 'is nil' qual causing a plugin crash. ([#154](https://github.com/turbot/steampipe-postgres-fdw/issues/154))
* Update plugin manager to remove plugin from map if startup fails. Prevents timeout when retrying to start a failed plugin. ([#1631](https://github.com/turbot/steampipe/issues/1631))
* Fix issue where plugin-manager becomes unstable if plugins crash. ([#1453](https://github.com/turbot/steampipe/issues/1453))
## v0.12.2 [2022-01-27]
_Bug fixes_
* Fix occasional `Unrecognized remote plugin message` errors on startup when running update checks. ([#1354](https://github.com/turbot/steampipe/issues/1354))
## v0.12.1 [2022-01-22]
_Bug fixes_
* When running queries with `csv` output, "loading results..." remains on screen after displaying results. ([#1340](https://github.com/turbot/steampipe/issues/1340))
## v0.12.0 [2022-01-20]
_What's new?_
* Update `check` to support template based export and output formats. ([#1289](https://github.com/turbot/steampipe/issues/1289))
* Add new check output format: `asff` (AWS Security Finding Format). ([#1305](https://github.com/turbot/steampipe/issues/1305))
* Add new check output format: `nunit3`. ([#1196](https://github.com/turbot/steampipe/issues/1196))
_Bug fixes_
* Fixes issue where plugins, FDW and Postgres were logging using a different timestamp formats. Now all timestamps use `UTC` ([#927](https://github.com/turbot/steampipe/issues/927))
## v0.11.2 [2022-01-10]
_Bug fixes_
* Fix issue where `steampipe check` table output only displays the summary. ([#1300](https://github.com/turbot/steampipe/issues/1300))
## v0.11.1 [2022-01-06]
_Bug fixes_
* Plugin instantiation failures should be reported as warnings not errors. ([#1283](https://github.com/turbot/steampipe/issues/1283))
* Fix issue where database name is not printed in output of `steampipe service start`. ([#1270](https://github.com/turbot/steampipe/issues/1270))
* Fix issue where service is not shutdown if interrupted while interactive prompt is initialising. ([#1004](https://github.com/turbot/steampipe/issues/1004))
* Add support for installer to detect running service when upgrading. ([#1269](https://github.com/turbot/steampipe/issues/1269))
## v0.11.0 [2021-12-21]
_What's new?_
* Add support for mod management commands: `mod install`, `mod update`, `mod uninstall`, `mod list`, `mod init`. ([#442](https://github.com/turbot/steampipe/issues/442), [#443](https://github.com/turbot/steampipe/issues/443))
* Startup optimizations.
* When retrieving plugin schema, identify the minimum set of schemas we need to fetch - to allow for multiple connections with the same schema. ([#1183](https://github.com/turbot/steampipe/issues/1183))
* Avoid retrieving schema from database for check and non-interactive query execution.
* Update plugin manager to instantiate plugins in parallel.
* Only create prepared statements if the query has parameters. ([#1231](https://github.com/turbot/steampipe/issues/1231))
* Update Postgres driver to `pgx`. (This removes the need to query the database for the db connection Pid every time we execute a query.) ([#1179](https://github.com/turbot/steampipe/issues/1179))
* Update connection management to use file modified time instead of filehash to detect connection changes. ([#1186](https://github.com/turbot/steampipe/issues/1186))
* Show query timing at the end of the query results. ([#1177](https://github.com/turbot/steampipe/issues/1177))
* Update workspace-database argument to handle connection strings starting with both `postgres` and `postgresql`. ([#1199](https://github.com/turbot/steampipe/issues/1199))
* Enables the `tablefunc` extension for the Steampipe database. ([#1154](https://github.com/turbot/steampipe/issues/1154))
* Improve plugin uninstall output when connections remain. ([#1158](https://github.com/turbot/steampipe/issues/1158))
* Disable progress when running in a non-tty environment. ([#1210](https://github.com/turbot/steampipe/issues/1210))
* Bump Go to 1.17
* Add support for protoc-gen-go-grpc 1.1.0_2
_Changed Behaviour_
* Only load pseudo-resources if there is a modfile in the workspace folder. (Note - a modfile can be created by running `steampipe mod init`). ([#1238](https://github.com/turbot/steampipe/issues/1238))
_Bug fixes_
* Update database planning code give required key columns a lower cost than than optional key columns. Fixes some complex queries with `in` clauses. ([#116](https://github.com/turbot/steampipe-postgres-fdw/issues/116), [#117](https://github.com/turbot/steampipe-postgres-fdw/issues/117), [#124](https://github.com/turbot/steampipe-postgres-fdw/issues/124))
* Fix issue where `local` plugins are not evaluated as `local` as given in docs. ([#1176](https://github.com/turbot/steampipe/issues/1176))
* Fix nil reference exception during refresh connections when using dynamic plugins. ([#1223](https://github.com/turbot/steampipe/issues/1223))
* Fix issue where running service had to be stopped to install in a new install-dir. ([#1216](https://github.com/turbot/steampipe/issues/1216))
* Fix warning not being shown when running 'steampipe check'. ([#1229](https://github.com/turbot/steampipe/issues/1229))
## v0.10.0 [2021-11-24]
_What's new?_
* Add support for parallel control execution. ([#1001](https://github.com/turbot/steampipe/issues/1001))
* Only spawn a single plugin per steampipe connection, no matter how many db connections use it.
* Share a single query result cache between multiple database connections.
* Add support for connecting to a remote database, including a Steampipe Cloud workspace database. ([#1175](https://github.com/turbot/steampipe/issues/1175))
* When cli displays error messages from plugins, they are now be prefixed with plugin name. ([#1071](https://github.com/turbot/steampipe/issues/1071))
* Do not show plugin error messages in JSON/CSV output. ([#1110](https://github.com/turbot/steampipe/issues/1110))
* Provider more responsive feedback for control runs. ([#1101](https://github.com/turbot/steampipe/issues/1101))
* Create prepared statements one by one to allow accurate error reporting and reduce memory burden. ([#1148](https://github.com/turbot/steampipe/issues/1148))
* Improve display of asyncronous error in interactive prompt. ([#1085](https://github.com/turbot/steampipe/issues/1085))
* Deprecate `workspace` argument, replace with `workspace-chdir`
_Bug fixes_
* Table names with special characters are now escaped correctly in auto-complete and `.inspect`. ([#1109](https://github.com/turbot/steampipe/issues/1109))
* Fix reflection error when loading a workspace from a hidden folder. ([#1157](https://github.com/turbot/steampipe/issues/1157))
* Fix intermittent crash when using boolean quals on jsonb columns. ([#122](https://github.com/turbot/steampipe-postgres-fdw/issues/122))
## v0.9.1 [2021-11-11]
_Bug fixes_
* Escape schema names when dropping connection schema. ([#1074](https://github.com/turbot/steampipe/issues/1074))
* Add support for quoted arguments with whitespace in query meta-commands (e.g. `.inspect`). ([#1067](https://github.com/turbot/steampipe/issues/1067))
* Fix issue where Postgres usernames weren't getting escaped properly when setting search path. ([#1094](https://github.com/turbot/steampipe/issues/1094)).
* Add support to fall back to `more` (if available) where `less` is not available in the environment. ([#1072](https://github.com/turbot/steampipe/issues/1072))
* Non-turbot plugin installs now show link to documentation. ([#1075](https://github.com/turbot/steampipe/issues/1075))
* Constrain check table-output rendering to a minimum width to avoid rendering crashes. ([#1062](https://github.com/turbot/steampipe/issues/1062))
* `steampipe check --dry-run` should not display control summary. ([#1053](https://github.com/turbot/steampipe/issues/1053))
## v0.9.0 [2021-10-24]
_What's new?_
* Update `check` command to support `markdown` and `HTML` output. ([#480](https://github.com/turbot/steampipe/issues/480), [#1011](https://github.com/turbot/steampipe/issues/1011))
* Add support for plugins with dynamic schema - reload plugin schema on startup. ([#1012](https://github.com/turbot/steampipe/issues/1012))
* Add `steampipe_reference` introspection table. ([#972](https://github.com/turbot/steampipe/issues/972))
* Add `steampipe_variable` reflection table. ([#859](https://github.com/turbot/steampipe/issues/859))
* Add `check` summary in `table` output. ([#710](https://github.com/turbot/steampipe/issues/710))
* Update DateTime and Timestamp columns to use "timestamp with time zone", not "timestamp". ([#94](https://github.com/turbot/steampipe-postgres-fdw/issues/94))
* Add support for setting a custom database name when installing. ([#936](https://github.com/turbot/steampipe/issues/936))
* Support JSON and YAML connection config. ([#969](https://github.com/turbot/steampipe/issues/969))
* Allow plugin uninstall even if there are active connections. ([#852](https://github.com/turbot/steampipe/issues/852))
* Control results are now ordered by status. ([465](https://github.com/turbot/steampipe/issues/465))
* Add support for SSL certificate validation and rotation. ([#1020](https://github.com/turbot/steampipe/issues/1020))
* Remove deprecated flags `--db-listen` and `--db-port` from service start. ([#582](https://github.com/turbot/steampipe/issues/582))
_Bug fixes_
* Plugin commands now exit with a non-zero code on error. ([#980](https://github.com/turbot/steampipe/issues/980))
* Fix for incorrect message from service status when service is not running. ([#975](https://github.com/turbot/steampipe/issues/975))
* Update introspection tables to ensure naming consistency - fix mods and pseudo resources to remove type prefix. ([#959](https://github.com/turbot/steampipe/issues/959))
* Fix for plugin list failing with 'invalid memory address'. ([#984](https://github.com/turbot/steampipe/issues/984))
## v0.8.5 [2021-10-07]
_Bug fixes_
* Fix handling of null unicode chars in JSON fields. ([#102](https://github.com/turbot/steampipe-postgres-fdw/issues/102))
* Fix issue where queries with a`limit` clause not always listing all results. Only pass the limit to the plugin if all quals are supported by plugin `key columns`. [#103](https://github.com/turbot/steampipe-postgres-fdw/issues/103))
## v0.8.4 [2021-09-29]
_Bug fixes_
* Update client error handling to only refresh session data for a 'context deadline exceeded' error. This avoids recursion in the error handling. ([#970](https://github.com/turbot/steampipe/issues/970))
## v0.8.3 [2021-09-28]
_What's new?_
* Update `service start` command to support `database-password` arg and `STEAMPIPE_DATABASE_PASSWORD` environment variable, to allow a custom password to be used when running in service mode. ([#725](https://github.com/turbot/steampipe/issues/725))
* Small updates to output of `steampipe service` commands. ([#812](https://github.com/turbot/steampipe/issues/812))
* Add support for piping `stdout` and `stderr` from `service start` to the `TRACE log`. ([#810](https://github.com/turbot/steampipe/issues/810))
_Bug fixes_
* Update Docker image to remove password file. ([#957](https://github.com/turbot/steampipe/issues/957))
* Fix filewatching to ensure prepared statements are correctly created and updated to reflect SQL file changes. ([#901](https://github.com/turbot/steampipe/issues/901))
* Ensure session data is restored after a SQL client error. Reset SQL client after a failure to create a transaction. ([#939](https://github.com/turbot/steampipe/issues/939))
* Fix service lifecycle management issues when state file is deleted while service is running. ([#872](https://github.com/turbot/steampipe/issues/872))
* Fix issue where `service stop` shuts down service even if non-Steampipe clients are connected. ([#887](https://github.com/turbot/steampipe/issues/887))
* Fix connection config not being passed when instantiating plugins to retrieve their schema. This resulted in descriptions not being shown for dynamic tables dynamic tables. ([#932](https://github.com/turbot/steampipe/issues/932))
* Fix issue where `install.sh` fails for IPv6 enabled system. ([#861](https://github.com/turbot/steampipe/issues/861))
## v0.8.2 [2021-09-14]
_Bug fixes_
* Fix nil pointer error when running a fully qualified query (i.e. including mod name). ([#902](https://github.com/turbot/steampipe/issues/902))
## v0.8.1 [2021-09-12]
_Bug fixes_
* Disable database log polling, which was causing high CPU usage.
* Fix null reference exception for certain `is null` queries. ([#97](https://github.com/turbot/steampipe-postgres-fdw/issues/97))
* Add support for CIDROID type when converting Postgres datums to qual values. ([#54](https://github.com/turbot/steampipe-postgres-fdw/issues/54))
* Fix autocomplete casing for .cache metacommands. ([#875](https://github.com/turbot/steampipe/issues/875))
## v0.8.0 [2021-09-09]
_What's new?_
* Add HCL support for variables. ([#754](https://github.com/turbot/steampipe/issues/754))
* Add HCL support for passing parameters to queries. ([#802](https://github.com/turbot/steampipe/issues/802))
* Add `completion` command providing completion support for bash, zshell and fish. ([#481](https://github.com/turbot/steampipe/issues/481))
* Add `.cache` metacommand to control the FDW cache from the interactive prompt. ([#688](https://github.com/turbot/steampipe/issues/688))
* Remove hardcoded Postgres runtime flags by adding defaults to postgresql.conf ([#767](https://github.com/turbot/steampipe/issues/767))
* Add support for syntax highlighting in interactive prompt. ([#64](https://github.com/turbot/steampipe/issues/64))
* Update interactive prompt to use adaptive suggestion window instead of giving `console window is too small` error. ([#712](https://github.com/turbot/steampipe/issues/712))
* Log Postgres output if database initialisation fails. ([#800](https://github.com/turbot/steampipe/issues/800))
* Various minor UI tweaks. ([#786](https://github.com/turbot/steampipe/issues/786))
_Bug fixes_
* Fix issue where the `>` prompt disappears when messages are shown from file watcher or asyncronous initialisation. ([#713](https://github.com/turbot/steampipe/issues/713))
* Fix errors during async interactive startup leaving the prompt in a bad state. ([#728](https://github.com/turbot/steampipe/issues/728))
* Fix for delay in `loading results` spinner showing, caused by asyncronous initialisation. ([#671](https://github.com/turbot/steampipe/issues/671))
* Fix for missing `control_description`, `control_title` in `csv` output of `check` command. ([#739](https://github.com/turbot/steampipe/issues/739))
* Fix for `0` exit code even if `service start` fails. ([#762](https://github.com/turbot/steampipe/issues/762))
* Fix issue where configs referring to unavailable plugin will display incorrect error message. ([#796](https://github.com/turbot/steampipe/issues/796))
* Mod parsing now raises an error if duplicate locals are found. ([#846](https://github.com/turbot/steampipe/issues/846))
* Fix JSON data with '\u0000' resulting in Postgres error "unsupported Unicode escape sequence". ([#93](https://github.com/turbot/steampipe-postgres-fdw/issues/93))
## v0.7.3 [2021-08-18]
_Bug fixes_
* Retry a control run if the plugin crashes. ([#757](https://github.com/turbot/steampipe/issues/757))
* Restart a plugin if it exits unexpectedly. ([#89](https://github.com/turbot/steampipe-postgres-fdw/issues/89))
## v0.7.2 [2021-08-06]
_Bug fixes_
* Fix issue where interactive prompt hangs with a `;` input. ([#700](https://github.com/turbot/steampipe/issues/700))
* Fix cancellation not working when database client becomes unresponsive. ([#733](https://github.com/turbot/steampipe/issues/733))
* Prevent update checks from getting triggered for `service stop`. ([#745](https://github.com/turbot/steampipe/issues/745))
* Add `initializing` spinner while waiting for asynchronous initialization to finish. ([#671](https://github.com/turbot/steampipe/issues/671))
* Prevent `interactive prompt` from disappearing after asynchronous messages are shown. ([#713](https://github.com/turbot/steampipe/issues/713))
## v0.7.1 [2021-07-29]
_What's new?_
* Add `open_graph` property to `steampipe_mod` reflection table. ([#692](https://github.com/turbot/steampipe/issues/692))
_Bug fixes_
* When an aggregator connection is evaluating a wildcard, only include connections with compatible plugin type. ([#687](https://github.com/turbot/steampipe/issues/687))
* Fix search path not being honored by `steampipe check`. ([#708](https://github.com/turbot/steampipe/issues/708))
* Fix interactive console becoming unresponsive after ";" query. ([#700](https://github.com/turbot/steampipe/issues/700))
* Fix `nil pointer exception` in `steampipe plugin`. ([#678](https://github.com/turbot/steampipe/issues/678))
## v0.7.0 [2021-07-22]
_What's new?_
* Add support for aggregator connections. ([#610](https://github.com/turbot/steampipe/issues/610))
* Service management improvements:
* Remove locking from service code to allow multiple `query` and `check` sessions in parallel without requiring a service start.([#579](https://github.com/turbot/steampipe/issues/579))
* Update service start to 'claim' a service started by query or check session, instead of failing. ([#580](https://github.com/turbot/steampipe/issues/580))
* Update `service status` - add `--all` flag to list status for all running services.([#580](https://github.com/turbot/steampipe/issues/580))
* Update `service start` to add `--foreground` flag. ([#535](https://github.com/turbot/steampipe/issues/535))
* Improvements for Docker:
* Run `initdb` if database is installed but `data directory` is empty. ([#575](https://github.com/turbot/steampipe/issues/575))
* Split `versions.json` into 2 files, one in the plugins dir, one in the database dir. ([#576](https://github.com/turbot/steampipe/issues/576))
* Update plugin install to put temp files underneath the plugin directory. ([#600](https://github.com/turbot/steampipe/issues/600))
* Steampipe service startup now validates that the `data-dir` is writable. ([#659](https://github.com/turbot/steampipe/issues/659))
* Optimise interactive startup by initializing asynchronously. ([#627](https://github.com/turbot/steampipe/issues/627))
* Optimise query caching - construct key based on the columns returned by the plugin, not the columns requested.([#82](https://github.com/turbot/steampipe-postgres-fdw/issues/82))
* Update Steampipe service to support SSL. ([#602](https://github.com/turbot/steampipe/issues/602))
* Show timer result before query output, so it is visible even if results require paging. ([#655](https://github.com/turbot/steampipe/issues/655))
* Increase length of history file to 500 entries. ([#664](https://github.com/turbot/steampipe/issues/664))
_Bug fixes_
* Do not disable pager when errors are displayed in interactive mode. ([#606](https://github.com/turbot/steampipe/issues/606))
* Fixes issue where `STEAMPIPE_INSTALL_DIR` was not being respected. ([#613](https://github.com/turbot/steampipe/issues/613))
* Fix multiple ctrl+C presses causing a crash on control runs. ([#630](https://github.com/turbot/steampipe/issues/630))
* Ensure multiline control errors are rendered in full ([#672](https://github.com/turbot/steampipe/issues/672))
* Fix crash when benchmark has duplicate children. Instead, raise a validaiton failure. ([#667](https://github.com/turbot/steampipe/issues/667))
* Fixes issue where `service stop` does not work on `Linux` systems. ([#653](https://github.com/turbot/steampipe/issues/653))
* Plugin schema validation errors should be displayed as warning, and not cause Steampipe to exit. ([#644](https://github.com/turbot/steampipe/issues/644))
## v0.6.2 [2021-07-08]
_Bug fixes_
* Revert prototype code inadvertently included in 0.6.1
## v0.6.1 [2021-07-08]
_What's new?_
* Support executing control queries using the query command. ([#470](https://github.com/turbot/steampipe/issues/470))
* Update steampipe-plugin-sdk reference version to support ProtocolVersion `20210701`
_Bug fixes_
* Fix issue where `dimension` values were not rendered in generated CSV for `check`. ([#587](https://github.com/turbot/steampipe/issues/587))
* Fix Linux Installer script showing verification error for Amazon Linux. ([#479](https://github.com/turbot/steampipe/issues/438))
* Fix issue where using `--timing` with `check` was not showing duration. ([#571](https://github.com/turbot/steampipe/issues/571))
* Fix problem where milliseconds of timestamps were not being displayed ([#76](https://github.com/turbot/steampipe-postgres-fdw/issues/76))
* Fix freezing issues with 'limit' and cancellation. ([#74](https://github.com/turbot/steampipe-postgres-fdw/issues/74))
* Fix incorrect caching of 'get' query results for plugins build with sdk >= 0.3.0. ([#60](https://github.com/turbot/steampipe-postgres-fdw/issues/60))
## v0.6.0 [2021-06-17]
_What's new?_
* Add `csv` output format to `check` command. ([#479](https://github.com/turbot/steampipe/issues/479))
* Add `--export` flag to `check` command. ([#511](https://github.com/turbot/steampipe/issues/511))
* Add `--dry-run` flag to `check` command to show which controls would be run. ([#468](https://github.com/turbot/steampipe/issues/468))
* Add `--tag` and `--where` arguments to `check` command to provide filtering of the controls which are run. ([#539](https://github.com/turbot/steampipe/issues/539))
* Update `service status` to make messaging more helpful when the service is running for a query session. ([#531](https://github.com/turbot/steampipe/issues/531))
* Update `query` to add support for reading from `STDIN`. ([#499](https://github.com/turbot/steampipe/issues/499))
* Validate that plugin versions required by the workspace mod are installed. ([#557](https://github.com/turbot/steampipe/issues/557))
_Bug fixes_
* Update `check` exit code to be the number of alerts. ([#498](https://github.com/turbot/steampipe/issues/498))
* Update check output formatting is now consistent when there is both a plugin and steampipe update. ([#423](https://github.com/turbot/steampipe/issues/423))
* Fix failure to load SQL files from workspace folder if they include `$$` escape characters. ([#554](https://github.com/turbot/steampipe/issues/554))
## v0.5.3 [2021-06-14]
_Bug fixes_
* Fixes Steampipe failing to run when too many benchmarks use the same controls. ([#528](https://github.com/turbot/steampipe/issues/528))
## v0.5.2 [2021-06-10]
_Bug fixes_
* Ensure consistent ordering of query result cache key when more than one qual is used. ([#53](https://github.com/turbot/steampipe-postgres-fdw/issues/53))
* Fixes `check` command `json` output. ([#525](https://github.com/turbot/steampipe/issues/525))
## v0.5.1 [2021-05-27]
_What's new?_
* Update the `check` output to show the tree structure of the benchmarks and controls. ([#500](https://github.com/turbot/steampipe/issues/500))
_Bug fixes_
* Fix issue where interactive prompt sometimes hangs on cancellation. ([#507](https://github.com/turbot/steampipe/issues/507))
* Fix stack overflow error when allocating colors for large number of dimension property values. ([#509](https://github.com/turbot/steampipe/issues/509))
* Fix query result cache key being built incorrectly when more than one qual is used. ([#453](https://github.com/turbot/steampipe-postgres-fdw/issues/53))
## v0.5.0 [2021-05-20]
_What's new?_
* New `check` command, to run controls and benchmarks. ([#410](https://github.com/turbot/steampipe/issues/410), [#413](https://github.com/turbot/steampipe/issues/413))
* Add resource reflection tables `steampipe_mod`, `steampipe_query`, `steampipe_control` and `steampipe_benchmark`. ([#406](https://github.com/turbot/steampipe/issues/406))
* Parsing of variable references, functions and locals. ([#405](https://github.com/turbot/steampipe/issues/405))
* Support for cancellation of queries and control runs. ([#475](https://github.com/turbot/steampipe/issues/475))
## v0.4.3 [2021-05-13]
_Bug fixes_
* Fix cache check code incorrectly identifying a cache hit after a count(*) query. ([#44](https://github.com/turbot/steampipe-postgres-fdw/issues/44))
* Fix spinner displaying multiple newlines if spinner text is wider than the terminal. ([#450](https://github.com/turbot/steampipe/issues/450))
## v0.4.2 [2021-05-06]
_Bug fixes_
* Make `.inspect` column headers lowercase. ([#439](https://github.com/turbot/steampipe/issues/439))
* Fix edge case where update notification may be displayed once when running in query `batch` mode, instead if being suppressed. This occurred the very first time an update check was performed. ([#428](https://github.com/turbot/steampipe/issues/428))
* When checking for SDK compatibility of loaded plugins, use the protocol version, not the SDK version. ([#453](https://github.com/turbot/steampipe/issues/453))
## v0.4.1 [2021-04-22]
_Bug fixes_
* Ensure we report an error and do not start database service if `port` is already in use. ([#399](https://github.com/turbot/steampipe/issues/399))
* Update check should not run when executing `query` command non-interactively. ([#301](https://github.com/turbot/steampipe/issues/301))
## v0.4.0 [2021-04-15]
_What's new?_
* Named query support - all SQL file in current folder (or the folder specified by the `workspace` argument) will be loaded and available to run as `named queries`. ([#369](https://github.com/turbot/steampipe/issues/369))
* When running in interactive mode, a file watcher is enabled for the current workspace (can be disabled using the `watch` argument or `terminal` config property). When enabled, any new or updated SQL files in the workspace will be reflected in the available named queries. ([#380](https://github.com/turbot/steampipe/issues/380))
* The `query` command now accepts multiple unnamed arguments, each of which may be either a filepath to a SQL file, a named query or the raw SQL of the query. ([#388](https://github.com/turbot/steampipe/issues/388))
* The search path for the steampipe database service may be specified using the `database` config. ([#353](https://github.com/turbot/steampipe/issues/353))
* The search path and search path prefix terminal sessions may be specified using `terminal` config, command line argument or meta-commands. ([#353](https://github.com/turbot/steampipe/issues/353), [#357](https://github.com/turbot/steampipe/issues/358), [#358](https://github.com/turbot/steampipe/issues/358))
## v0.3.6 [2021-04-08]
_Bug fixes_
* Fix log trimming, which was broken by the change of log location. ([#344](https://github.com/turbot/steampipe/issues/344))
* Plugin updates should be listed alphabetically. ([#339](https://github.com/turbot/steampipe/issues/339))
## v0.3.5 [2021-04-02]
_Bug fixes_
* Fix `.inspect` not working with unqualified table names. ([#346](https://github.com/turbot/steampipe/issues/346))
## v0.3.4 [2021-04-01]
_Bug fixes_
* Ensure that after adding a connection, search path changes are reflected in the current query session. ([#340](https://github.com/turbot/steampipe/issues/340))
* Fix extra trailing white-space issue in `line` output. ([#332](https://github.com/turbot/steampipe/issues/332))
* Remove HTML escaping from JSON output. ([#336](https://github.com/turbot/steampipe/issues/336))
* Fix issue where service is always listening on network listener. ([#330](https://github.com/turbot/steampipe/issues/330))
* Fix incorrect error message when trying to update a non-installed plugin ([#343](https://github.com/turbot/steampipe/issues/343))
* Fix the search path not being updated when removing the last connection. ([#345](https://github.com/turbot/steampipe/issues/345))
## v0.3.3 [2021-03-22]
_Bug fixes_
* Verify the `steampipe` foreign server exists when starting the database service and if it does not, re-initialise the FDW and create the server. ([#324](https://github.com/turbot/steampipe/issues/324))
## v0.3.2 [2021-03-20]
_Bug fixes_
* Remove Postgres synchronous_commit=off setting, which could cause FDW setup in Postgres to not be committed during setup (on Linux). ([#319](https://github.com/turbot/steampipe/issues/319))
* `.header` terminal setting should also affect table output. ([#312](https://github.com/turbot/steampipe/issues/312))
## v0.3.1 [2021-03-19]
_Bug fixes_
* Fix crash when doing "is (not) null" checks on JSON fields. ([#38](https://github.com/turbot/steampipe-postgres-fdw/issues/38))
## v0.3.0 [2021-03-18]
_What's new?_
* Support setting Steampipe options using a config file. ([#230](https://github.com/turbot/steampipe/issues/230))
* Add `install-dir` argument to specify location of the installation folder. ([#241](https://github.com/turbot/steampipe/issues/241))
* Improve the handling of database quals. Query restrictions are now passed the plugin for a much wider ranger of queries including joins and nested queries. ([#3](https://github.com/turbot/steampipe-postgres-fdw/issues/3))
* Improve handling and reporting of config parsing failures. ([#307](https://github.com/turbot/steampipe/issues/307))
* Move the log location to `~/.steampipe/logs` ([#278](https://github.com/turbot/steampipe/issues/278))
* Change postgres log prefix to `database-` ([#310](https://github.com/turbot/steampipe/issues/310))
* Deprecate `db-port` and `listener` arguments, replace with `database-port` and `database-listener`. ([#302](https://github.com/turbot/steampipe/issues/302))
## v0.2.5 [2021-03-15]
_Bug fixes_
* Fix crash when installing a plugin after a fresh install. ([#283](https://github.com/turbot/steampipe/issues/283))
* Fix `.inspect` meta-command failure if no arguments are provided. ([#282](https://github.com/turbot/steampipe/issues/282))
## v0.2.4 [2021-03-11]
_What's new?_
* Autocomplete now includes public schema. ([#123](https://github.com/turbot/steampipe/issues/123))
* Add bug report and feature request issue templates. ([#266](https://github.com/turbot/steampipe/issues/266))
* Add `SECURITY.md`. ([#266](https://github.com/turbot/steampipe/issues/266))
* Update spacing for plugin update and install messages. ([#264](https://github.com/turbot/steampipe/issues/264))
_Bug fixes_
* Remove invalid update notifications for plugins which cannot be found in the registry. ([#265](https://github.com/turbot/steampipe/issues/265))
* Fix typo in install.sh.
## v0.2.3 [2021-03-03]
_What's new?_
* Increase timeout for plugin update HTTP call. ([#216](https://github.com/turbot/steampipe/issues/216))
* `plugin update` now checks installed version of a plugin is out of date before updating. ([#234](https://github.com/turbot/steampipe/issues/234))
* Improve the error messages for sql errors. ([#118](https://github.com/turbot/steampipe/issues/118))
* Wrap `plugin list` output to window width. ([#235](https://github.com/turbot/steampipe/issues/235))
_Bug fixes_
* Fix timestamp quals not being passed to plugin. ([#247](https://github.com/turbot/steampipe/issues/247))
* Fix `steampipe server not found` error after failed connection validation. ([#220](https://github.com/turbot/steampipe/issues/220))
* Ensure all panics are recovered. ([#246](https://github.com/turbot/steampipe/issues/246))
## v0.2.2 [2021-02-25]
_What's new?_
* Set Inspect column width to no larger than required to display data. ([#155](https://github.com/turbot/steampipe/issues/155))
* Plugin SDK version check should ignore patch and prerelease version. ([#217](https://github.com/turbot/steampipe/issues/217))
* Enforce reserved connection name ('public', 'internal'). ([#168](https://github.com/turbot/steampipe/issues/168))
* Do not allow Steampipe to run from Root. ([#167](https://github.com/turbot/steampipe/issues/167))
* `plugin update`, `plugin install` and `plugin uninstall` commands display error if no plugins specified in args. ([#199](https://github.com/turbot/steampipe/issues/199))
* Remove global `--config` flag. ([#215](https://github.com/turbot/steampipe/issues/215))
_Bug fixes_
* Fix cache retrieving incorrect data for multi-connection queries.([#223](https://github.com/turbot/steampipe/issues/223))
* Ensure search path is set for clients other than Steampipe. ([#218](https://github.com/turbot/steampipe/issues/218))
* Spinner should not be displayed in non-interactive query mode. ([#227](https://github.com/turbot/steampipe/issues/227))
## v0.2.1 [2021-02-20]
_Bug fixes_
* Ensure all hydrate errors are reported. ([#206](https://github.com/turbot/steampipe/issues/206))
* Change plugin update URL to hub.steampipe.io. ([#201](https://github.com/turbot/steampipe/issues/201))
* Steampipe version string should include 'prerelease' suffix if it is set. ([#200](https://github.com/turbot/steampipe/issues/200))
* Column headers in table output should respect casing of the column name. ([#181](https://github.com/turbot/steampipe/issues/181))
## v0.2.0 [2021-02-18]
_What's new?_
* Add support for multiregion queries. ([#197](https://github.com/turbot/steampipe/issues/197))
* Add support for connection config. ([#173](https://github.com/turbot/steampipe/issues/173))
* Add `plugin update` command. ([#176](https://github.com/turbot/steampipe/issues/176))
* Add automatic checking of plugin versions. ([#164](https://github.com/turbot/steampipe/issues/164))
* Add caching of query results. This is disabled by default but may be enabled by setting `STEAMPIPE_CACHE=true`
NOTE: It is expected this will be updated to default to true in the next patch release. ([#11](https://github.com/turbot/steampipe-postgres-fdw/issues/11))
* Log whether Steampipe is running in Windows subsystem for Linux. ([#171](https://github.com/turbot/steampipe/issues/171))
* All env vars should have STEAMPIPE_ prefix. ([#172](https://github.com/turbot/steampipe/issues/172))
* Display null column values as <null> instead of an empty string. ([#186](https://github.com/turbot/steampipe/issues/186))
* Validate that plugins do not have an sdk version greater than the version steampipe is built against. ([#183](https://github.com/turbot/steampipe/issues/183))
_Bug fixes_
* Fix hitting a space after a meta-command causing runtime error. ([#182](https://github.com/turbot/steampipe/issues/182))
## v0.1.3 [2021-02-11]
_What's new?_
* Add 'line' output format. ([#114](https://github.com/turbot/steampipe/issues/114))
* Log files older than 7 days are deleted. ([#121](https://github.com/turbot/steampipe/issues/121))
_Bug fixes_
* Fix multi line editing issues. ([#103](https://github.com/turbot/steampipe/issues/103))
* Fix command-Right breaking for unicode chars ([#9](https://github.com/turbot/steampipe/issues/9))
* Fix 'no unpinned buffers available' error. ([#122](https://github.com/turbot/steampipe/issues/122))
* Fix database installation failure for certain Linux configurations. ([#133](https://github.com/turbot/steampipe/issues/133))
## v0.1.2 [2021-02-04]
_What's new?_
* The `.inspect` command no longer requires the fully qualified name for tables. ([#21](https://github.com/turbot/steampipe/issues/21))
* The helper function `glob` has been added. ([#134](https://github.com/turbot/steampipe/issues/134))
* The output of the `plugin install` command now shows the installed version. ([#93](https://github.com/turbot/steampipe/issues/93))
* The `.help` command now displays a link to the inline help docs. ([#92](https://github.com/turbot/steampipe/issues/92))
* The wait spinner is now only shown in interactive mode. ([#106](https://github.com/turbot/steampipe/issues/106))
_Bug fixes_
* Fix JSON and bool columns displaying as strings. ([#95](https://github.com/turbot/steampipe/issues/95))
* Fix column headings displaying in upper case. ([#94](https://github.com/turbot/steampipe/issues/94))
## v0.1.1 [2021-01-28]
_What's new?_
* A new meta-command `.help` has been added. ([#54](https://github.com/turbot/steampipe/issues/54))
* After `steampipe plugin install`, a link to the plugin docs is displayed.
* A spinner is now displayed for slow queries. ([#77](https://github.com/turbot/steampipe/issues/77))
* A maximum column width of 1024 is now enforced - content longer than this will wrap. ([#12](https://github.com/turbot/steampipe/issues/12))
* The `description` column of the `.inspect` command now fills the available horizontal screen space. ([#11](https://github.com/turbot/steampipe/issues/11))
* The Linux installation package now uses tar instead of zip. ([#63](https://github.com/turbot/steampipe/issues/63))
_Bug fixes_
* Fix results paging failure for very long rows (> 64k chars). ([#75](https://github.com/turbot/steampipe/issues/75))
* Fix invalid query resulting in the database session remaining open. ([#60](https://github.com/turbot/steampipe/issues/60))
* Fix data formatting in json output. ([#14](https://github.com/turbot/steampipe/issues/14))
* Fix incorrect plugin hub link.
* Fix `steampipe query` panic when exiting after `service stopped --force` has been run. ([#38](https://github.com/turbot/steampipe/issues/38))
* Fix `runtime error: slice bounds out of range [1:0]`. ([#40](https://github.com/turbot/steampipe/issues/40))
* Fix boolean meta-command showing wrong status when no parameter is passed. ([#48](https://github.com/turbot/steampipe/issues/48))
================================================
FILE: CLAUDE.md
================================================
# Steampipe
Steampipe is a zero-ETL tool that lets you query cloud APIs using SQL. It embeds PostgreSQL and uses a Foreign Data Wrapper (FDW) to translate SQL queries into API calls via a plugin system.
## Architecture Overview
```
┌───────────────────
gitextract_no20qkfc/
├── .acceptance.goreleaser.yml
├── .ai/
│ ├── .gitignore
│ ├── README.md
│ ├── docs/
│ │ ├── bug-fix-prs.md
│ │ ├── bug-workflow.md
│ │ ├── parallel-coordination.md
│ │ └── test-generation-guide.md
│ └── templates/
│ ├── bugfix-pr-template.md
│ └── test-pr-template.md
├── .claude/
│ └── commands/
│ └── fix-vulnerabilities.md
├── .gitattributes
├── .github/
│ ├── ISSUE_TEMPLATE/
│ │ ├── bug_report.md
│ │ ├── feature_request.md
│ │ └── release_issue.md
│ ├── dependabot.yml
│ └── workflows/
│ ├── 01-steampipe-release.yaml
│ ├── 02-steampipe-db-image-build.yaml
│ ├── 10-test-lint.yaml
│ ├── 11-test-acceptance.yaml
│ ├── 12-test-post-release-linux-distros.yaml
│ ├── 30-stale.yaml
│ └── 31-add-issues-to-pipeling-issue-tracker.yaml
├── .gitignore
├── .gitmodules
├── .golangci.yml
├── .goreleaser.yml
├── CHANGELOG.md
├── CLAUDE.md
├── CONTRIBUTING.md
├── LICENSE
├── Makefile
├── README.md
├── cmd/
│ ├── completion.go
│ ├── doc.go
│ ├── login.go
│ ├── plugin.go
│ ├── plugin_manager.go
│ ├── query.go
│ ├── query_test.go
│ ├── root.go
│ ├── root_test.go
│ └── service.go
├── design/
│ ├── adding_to_workspace_profile.md
│ ├── connection_status_table.md
│ ├── embedded_postgres_build_instructions.md
│ ├── internal_introspection_tables.md
│ ├── internal_introspection_tables_tests.md
│ ├── mod_deps.md
│ ├── search_path.md
│ ├── sperr.md
│ ├── steampipe_data_files.md
│ ├── steampipe_service_db_connections.md
│ └── timing_output.md
├── go.mod
├── go.sum
├── main.go
├── pkg/
│ ├── cmdconfig/
│ │ ├── app_specific.go
│ │ ├── builder.go
│ │ ├── cmd_flags.go
│ │ ├── cmd_hooks.go
│ │ ├── cmd_hooks_test.go
│ │ ├── diagnostics.go
│ │ ├── doc.go
│ │ ├── env_var_type.go
│ │ ├── envvartype_string.go
│ │ ├── validate.go
│ │ ├── validate_test.go
│ │ ├── viper.go
│ │ └── viper_test.go
│ ├── connection/
│ │ ├── config_map.go
│ │ ├── connection_lifecycle_test.go
│ │ ├── connection_state_table_updater.go
│ │ ├── connection_watcher.go
│ │ ├── interface.go
│ │ ├── limiter_map.go
│ │ ├── plugin_limiter_map.go
│ │ ├── refresh_connections.go
│ │ ├── refresh_connections_state.go
│ │ └── refresh_connections_state_test.go
│ ├── connection_sync/
│ │ └── wait_for_search_path.go
│ ├── constants/
│ │ ├── app.go
│ │ ├── build.go
│ │ ├── cache.go
│ │ ├── cmd_name.go
│ │ ├── config_keys.go
│ │ ├── control_execute.go
│ │ ├── control_status.go
│ │ ├── db.go
│ │ ├── default_options.go
│ │ ├── default_workspaces.go
│ │ ├── display.go
│ │ ├── doc.go
│ │ ├── duration.go
│ │ ├── env.go
│ │ ├── exit_codes.go
│ │ ├── extensions.go
│ │ ├── flags.go
│ │ ├── history.go
│ │ ├── image.go
│ │ ├── metaquery_commands.go
│ │ ├── notifications.go
│ │ ├── oci.go
│ │ ├── output_format.go
│ │ ├── pg_hba.go
│ │ ├── postgresql_conf.go
│ │ ├── runtime/
│ │ │ ├── execution_id.go
│ │ │ └── runtime_constants.go
│ │ ├── ssl.go
│ │ ├── telemetry.go
│ │ └── workspace_profile.go
│ ├── db/
│ │ ├── db_client/
│ │ │ ├── db_client.go
│ │ │ ├── db_client_connect.go
│ │ │ ├── db_client_execute.go
│ │ │ ├── db_client_execute_retry.go
│ │ │ ├── db_client_execute_test.go
│ │ │ ├── db_client_options.go
│ │ │ ├── db_client_search_path.go
│ │ │ ├── db_client_session.go
│ │ │ ├── db_client_session_test.go
│ │ │ ├── db_client_test.go
│ │ │ └── pgx_types.go
│ │ ├── db_common/
│ │ │ ├── acquire_session_result.go
│ │ │ ├── appname.go
│ │ │ ├── cache_control.go
│ │ │ ├── cache_settings.go
│ │ │ ├── client.go
│ │ │ ├── db_session.go
│ │ │ ├── errors.go
│ │ │ ├── execute.go
│ │ │ ├── functions.go
│ │ │ ├── init_result.go
│ │ │ ├── max_connections.go
│ │ │ ├── notification_cache.go
│ │ │ ├── postgres.go
│ │ │ ├── query_with_args.go
│ │ │ ├── schema.go
│ │ │ ├── schema_metadata.go
│ │ │ ├── search_path.go
│ │ │ ├── server_settings.go
│ │ │ ├── session_system.go
│ │ │ ├── sql_connections.go
│ │ │ ├── sql_function.go
│ │ │ ├── tls_config.go
│ │ │ └── wait_connection.go
│ │ ├── db_local/
│ │ │ ├── backup.go
│ │ │ ├── backup_test.go
│ │ │ ├── create_connection.go
│ │ │ ├── execute.go
│ │ │ ├── install.go
│ │ │ ├── install_test.go
│ │ │ ├── internal.go
│ │ │ ├── local_db_client.go
│ │ │ ├── logs.go
│ │ │ ├── notify.go
│ │ │ ├── password.go
│ │ │ ├── refresh_functions_test.go
│ │ │ ├── running_info.go
│ │ │ ├── search_path.go
│ │ │ ├── server_settings.go
│ │ │ ├── service.go
│ │ │ ├── sql_clone.go
│ │ │ ├── ssl.go
│ │ │ ├── start_services.go
│ │ │ └── stop_services.go
│ │ ├── platform/
│ │ │ ├── paths_darwin_amd64.go
│ │ │ ├── paths_darwin_arm64.go
│ │ │ ├── paths_linux_386.go
│ │ │ ├── paths_linux_amd64.go
│ │ │ ├── paths_linux_arm.go
│ │ │ ├── paths_linux_arm64.go
│ │ │ ├── paths_windows_amd64.go
│ │ │ └── platform_paths.go
│ │ └── sslio/
│ │ └── sslio.go
│ ├── display/
│ │ └── timing.go
│ ├── error_helpers/
│ │ ├── cancelled.go
│ │ ├── cloud.go
│ │ ├── diags.go
│ │ ├── errors.go
│ │ ├── postgres.go
│ │ └── utils.go
│ ├── export/
│ │ ├── exporter.go
│ │ ├── helpers.go
│ │ ├── helpers_test.go
│ │ ├── manager.go
│ │ ├── manager_test.go
│ │ ├── snapshot_exporter.go
│ │ ├── target.go
│ │ └── target_test.go
│ ├── filepaths/
│ │ ├── db_path.go
│ │ ├── steampipe.go
│ │ └── workspace.go
│ ├── initialisation/
│ │ ├── cloud_metadata.go
│ │ ├── init_data.go
│ │ └── init_data_test.go
│ ├── installationstate/
│ │ └── state.go
│ ├── interactive/
│ │ ├── autocomplete_suggestions.go
│ │ ├── autocomplete_suggestions_test.go
│ │ ├── autocomplete_test.go
│ │ ├── cancel_test.go
│ │ ├── highlighter.go
│ │ ├── highlighter_test.go
│ │ ├── interactive_client.go
│ │ ├── interactive_client_autocomplete.go
│ │ ├── interactive_client_autocomplete_test.go
│ │ ├── interactive_client_cancel.go
│ │ ├── interactive_client_init.go
│ │ ├── interactive_client_test.go
│ │ ├── interactive_helpers.go
│ │ ├── interactive_helpers_test.go
│ │ ├── metaquery/
│ │ │ ├── completers.go
│ │ │ ├── definitions.go
│ │ │ ├── handler_cache.go
│ │ │ ├── handler_help.go
│ │ │ ├── handler_input.go
│ │ │ ├── handler_inspect.go
│ │ │ ├── handler_inspect_legacy.go
│ │ │ ├── handler_search_path.go
│ │ │ ├── handlers.go
│ │ │ ├── suggestions.go
│ │ │ ├── utils.go
│ │ │ ├── utils_test.go
│ │ │ └── validators.go
│ │ └── run.go
│ ├── introspection/
│ │ ├── connection_table_sql.go
│ │ ├── introspection_test.go
│ │ ├── plugin_column_table_sql.go
│ │ ├── plugin_table_sql.go
│ │ └── rate_limiters_table_sql.go
│ ├── ociinstaller/
│ │ ├── asset_downloader.go
│ │ ├── assets_image.go
│ │ ├── db.go
│ │ ├── db_downloader.go
│ │ ├── db_image.go
│ │ ├── db_test.go
│ │ ├── diskspace.go
│ │ ├── fdw.go
│ │ ├── fdw_downloader.go
│ │ ├── fdw_image.go
│ │ ├── fdw_test.go
│ │ ├── mediatypes.go
│ │ ├── oci_image_types.go
│ │ └── versionfile/
│ │ ├── db_version_file.go
│ │ └── db_version_file_test.go
│ ├── options/
│ │ ├── database.go
│ │ ├── general.go
│ │ └── plugin.go
│ ├── otel/
│ │ ├── README.md
│ │ ├── docker-compose.yaml
│ │ ├── otel-collector-config.yaml
│ │ └── prometheus.yaml
│ ├── parse/
│ │ └── plugin.go
│ ├── plugin/
│ │ ├── actions.go
│ │ ├── installed.go
│ │ ├── plugin_connection.go
│ │ └── plugin_remove.go
│ ├── pluginmanager/
│ │ ├── lifecycle.go
│ │ ├── plugin_manager_client.go
│ │ ├── state.go
│ │ └── state_test.go
│ ├── pluginmanager_service/
│ │ ├── Makefile
│ │ ├── get_response.go
│ │ ├── grpc/
│ │ │ ├── proto/
│ │ │ │ ├── plugin_manager.pb.go
│ │ │ │ ├── plugin_manager.proto
│ │ │ │ ├── plugin_manager_grpc.pb.go
│ │ │ │ ├── reattach_config.go
│ │ │ │ ├── simple_addr.go
│ │ │ │ └── supported_operations.go
│ │ │ ├── shared/
│ │ │ │ ├── grpc.go
│ │ │ │ └── interface.go
│ │ │ └── start_failure.go
│ │ ├── message_server.go
│ │ ├── message_server_test.go
│ │ ├── plugin_manager.go
│ │ ├── plugin_manager_connection_config.go
│ │ ├── plugin_manager_notifications.go
│ │ ├── plugin_manager_plugin_columns.go
│ │ ├── plugin_manager_plugin_instance.go
│ │ ├── plugin_manager_rate_limiters.go
│ │ ├── plugin_manager_test.go
│ │ ├── rate_limiter.go
│ │ ├── rate_limiters_helpers_test.go
│ │ ├── rate_limiters_test.go
│ │ └── running_plugin.go
│ ├── query/
│ │ ├── init_data.go
│ │ ├── queryexecute/
│ │ │ ├── execute.go
│ │ │ └── execute_test.go
│ │ ├── queryhistory/
│ │ │ ├── history.go
│ │ │ └── history_test.go
│ │ └── queryresult/
│ │ ├── result.go
│ │ ├── result_test.go
│ │ ├── scan_metadata.go
│ │ └── timing_result.go
│ ├── serversettings/
│ │ ├── load.go
│ │ └── setup.go
│ ├── snapshot/
│ │ ├── snapshot.go
│ │ └── snapshot_test.go
│ ├── statushooks/
│ │ ├── context.go
│ │ ├── null_hooks.go
│ │ ├── null_snapshot_progress.go
│ │ ├── snapshot_progress.go
│ │ ├── snapshot_progress_reporter.go
│ │ ├── spinner.go
│ │ ├── status_hooks.go
│ │ └── statushooks_test.go
│ ├── steampipeconfig/
│ │ ├── connection_plugin.go
│ │ ├── connection_schemas.go
│ │ ├── connection_state.go
│ │ ├── connection_state_map.go
│ │ ├── connection_state_map_test.go
│ │ ├── connection_test.go
│ │ ├── connection_updates.go
│ │ ├── connection_updates_opts.go
│ │ ├── connection_updates_test.go
│ │ ├── connection_updates_validate.go
│ │ ├── dependency_path.go
│ │ ├── load_config.go
│ │ ├── load_config_test.go
│ │ ├── load_connection_state.go
│ │ ├── load_connection_state_option.go
│ │ ├── postgres_notification.go
│ │ ├── refresh_connections_result.go
│ │ ├── shared_test.go
│ │ ├── steampipeconfig.go
│ │ ├── testdata/
│ │ │ ├── connection_config/
│ │ │ │ ├── multiple_connections/
│ │ │ │ │ └── config/
│ │ │ │ │ ├── connection1.spc
│ │ │ │ │ └── connection2.spc
│ │ │ │ ├── options_duplicate_block/
│ │ │ │ │ └── config/
│ │ │ │ │ ├── default.spc
│ │ │ │ │ └── default2.spc
│ │ │ │ ├── options_only/
│ │ │ │ │ └── config/
│ │ │ │ │ └── default.spc
│ │ │ │ ├── single_connection/
│ │ │ │ │ └── config/
│ │ │ │ │ └── connection1.spc
│ │ │ │ ├── single_connection_with_default_and_connection_options/
│ │ │ │ │ └── config/
│ │ │ │ │ ├── connection1.spc
│ │ │ │ │ └── default.spc
│ │ │ │ └── single_connection_with_default_options/
│ │ │ │ └── config/
│ │ │ │ ├── connection1.spc
│ │ │ │ └── default.spc
│ │ │ ├── connections_to_update/
│ │ │ │ ├── config/
│ │ │ │ │ └── default.spc
│ │ │ │ ├── plugins/
│ │ │ │ │ └── hub.steampipe.io/
│ │ │ │ │ └── plugins/
│ │ │ │ │ └── turbot/
│ │ │ │ │ └── connection-test-1@latest/
│ │ │ │ │ └── connection-test-1.plugin
│ │ │ │ └── plugins_src/
│ │ │ │ └── hub.steampipe.io/
│ │ │ │ └── plugins/
│ │ │ │ └── turbot/
│ │ │ │ ├── connection-test-1@latest/
│ │ │ │ │ └── connection-test-1.plugin
│ │ │ │ ├── connection-test-2@latest/
│ │ │ │ │ └── connection-test-2.plugin
│ │ │ │ └── connection-test-3@latest/
│ │ │ │ └── connection-test-3.plugin
│ │ │ ├── load_config_test/
│ │ │ │ ├── empty/
│ │ │ │ │ └── .gitstub
│ │ │ │ ├── invalid_options_block/
│ │ │ │ │ └── workspace.spc
│ │ │ │ ├── override_terminal_config/
│ │ │ │ │ └── workspace.spc
│ │ │ │ └── search_path_prefix/
│ │ │ │ └── workspace.spc
│ │ │ └── mods/
│ │ │ ├── anonymous_input/
│ │ │ │ ├── dashboard.sp
│ │ │ │ └── mod.sp
│ │ │ ├── anonymous_top_level_resource/
│ │ │ │ ├── dashboard.sp
│ │ │ │ └── mod.sp
│ │ │ ├── controls_and_groups/
│ │ │ │ ├── control.sp
│ │ │ │ ├── mod.sp
│ │ │ │ └── q1.sql
│ │ │ ├── controls_and_groups_circular/
│ │ │ │ ├── control.sp
│ │ │ │ └── mod.sp
│ │ │ ├── controls_and_groups_duplicate_child/
│ │ │ │ ├── control.sp
│ │ │ │ └── mod.sp
│ │ │ ├── dashboard_base_inheritance/
│ │ │ │ ├── mod.sp
│ │ │ │ └── report.sp
│ │ │ ├── dashboard_base_override/
│ │ │ │ ├── mod.sp
│ │ │ │ └── report.sp
│ │ │ ├── dashboard_container_with_all_children/
│ │ │ │ ├── mod.sp
│ │ │ │ └── report.sp
│ │ │ ├── dashboard_nested_containers/
│ │ │ │ ├── mod.sp
│ │ │ │ └── report.sp
│ │ │ ├── dashboard_resource_naming/
│ │ │ │ ├── mod.sp
│ │ │ │ └── report.sp
│ │ │ ├── dashboard_runtime_deps_named_arg/
│ │ │ │ ├── mod.sp
│ │ │ │ └── report.sp
│ │ │ ├── dashboard_sibling_containers/
│ │ │ │ ├── mod.sp
│ │ │ │ └── report.sp
│ │ │ ├── dashboard_simple_container/
│ │ │ │ ├── mod.sp
│ │ │ │ └── report.sp
│ │ │ ├── dashboard_simple_report/
│ │ │ │ ├── mod.sp
│ │ │ │ └── report.sp
│ │ │ ├── dashboard_with_all_children/
│ │ │ │ ├── mod.sp
│ │ │ │ └── report.sp
│ │ │ ├── dashboard_with_child_dashboard/
│ │ │ │ ├── dashboard.sp
│ │ │ │ └── mod.sp
│ │ │ ├── dashboard_with_duplicate_inputs/
│ │ │ │ ├── mod.sp
│ │ │ │ └── report.sp
│ │ │ ├── dashboard_with_duplicate_named_children/
│ │ │ │ ├── mod.sp
│ │ │ │ └── report.sp
│ │ │ ├── dashboard_with_named_children/
│ │ │ │ ├── mod.sp
│ │ │ │ └── report.sp
│ │ │ ├── duplicate_dashboard/
│ │ │ │ ├── dashboard.sp
│ │ │ │ └── mod.sp
│ │ │ ├── global_dashboard_inputs/
│ │ │ │ ├── dashboard.sp
│ │ │ │ └── mod.sp
│ │ │ ├── inputs_with_cyclic_dependency/
│ │ │ │ ├── dashboard.sp
│ │ │ │ └── mod.sp
│ │ │ ├── no_mod_hcl_queries/
│ │ │ │ ├── query.sp
│ │ │ │ └── query2.sp
│ │ │ ├── no_mod_sql_files/
│ │ │ │ ├── q1.sql
│ │ │ │ └── q2.sql
│ │ │ ├── query_with_paramdefs_control_with_named_params/
│ │ │ │ ├── control.sp
│ │ │ │ ├── mod.sp
│ │ │ │ └── query.sp
│ │ │ ├── single_mod_duplicate_query/
│ │ │ │ ├── mod.sp
│ │ │ │ ├── q1.sp
│ │ │ │ └── q1_.sp
│ │ │ ├── single_mod_no_query/
│ │ │ │ └── mod.sp
│ │ │ ├── single_mod_one_query/
│ │ │ │ ├── mod.pp
│ │ │ │ └── query.pp
│ │ │ ├── single_mod_one_query_one_control/
│ │ │ │ ├── control.sp
│ │ │ │ ├── mod.sp
│ │ │ │ └── query.sp
│ │ │ ├── single_mod_one_sql_file/
│ │ │ │ ├── mod.sp
│ │ │ │ └── q1.sql
│ │ │ ├── single_mod_sql_file_and_clashing_hcl_query/
│ │ │ │ ├── mod.sp
│ │ │ │ ├── q1.sql
│ │ │ │ └── query.sp
│ │ │ ├── single_mod_sql_file_and_hcl_query/
│ │ │ │ ├── mod.sp
│ │ │ │ ├── q2.sql
│ │ │ │ └── query.sp
│ │ │ ├── single_mod_two_queries_diff_files/
│ │ │ │ ├── mod.sp
│ │ │ │ ├── query.sp
│ │ │ │ └── query2.sp
│ │ │ ├── single_mod_two_queries_same_file/
│ │ │ │ ├── mod.sp
│ │ │ │ └── query.sp
│ │ │ ├── single_mod_two_sql_files/
│ │ │ │ ├── mod.sp
│ │ │ │ ├── q1.sql
│ │ │ │ └── q2.sql
│ │ │ ├── test_load_mod_resource_names_workspace/
│ │ │ │ ├── query_control_1.sql
│ │ │ │ ├── query_control_2.sql
│ │ │ │ ├── query_control_3.sql
│ │ │ │ └── test_workspace.sp
│ │ │ ├── two_mods/
│ │ │ │ └── mod.sp
│ │ │ └── wrong_title_referencing/
│ │ │ ├── dashboard.sp
│ │ │ └── mod.sp
│ │ ├── validate.go
│ │ ├── validation_failure.go
│ │ └── validation_failure_test.go
│ ├── task/
│ │ ├── available_versions.go
│ │ ├── config.go
│ │ ├── display.go
│ │ ├── runner.go
│ │ ├── runner_test.go
│ │ ├── version_checker.go
│ │ └── version_checker_test.go
│ ├── utils/
│ │ ├── exit.go
│ │ ├── pid_exists.go
│ │ └── user_input.go
│ └── versionhelpers/
│ └── constraints.go
├── scripts/
│ ├── install.sh
│ ├── linux_container_info.sh
│ ├── prepare_amazonlinux_container.sh
│ ├── prepare_centos_container.sh
│ ├── prepare_ubuntu_arm_container.sh
│ ├── prepare_ubuntu_container.sh
│ ├── smoke_test.sh
│ └── test_cred_rotate.sh
└── tests/
├── acceptance/
│ ├── json_patch.sh
│ ├── lib/
│ │ └── connection_map_utils.bash
│ ├── run-linux-arm.sh
│ ├── run-local.sh
│ ├── run.sh
│ ├── test_data/
│ │ ├── dashboard_inputs_with_base/
│ │ │ ├── dashboard.sp
│ │ │ └── mod.sp
│ │ ├── mods/
│ │ │ ├── bad_mod_with_dep_mod_version_require_not_met/
│ │ │ │ ├── README.md
│ │ │ │ ├── dashboard.sp
│ │ │ │ └── mod.sp
│ │ │ ├── bad_mod_with_plugin_require_not_met/
│ │ │ │ ├── README.md
│ │ │ │ ├── dashboard.sp
│ │ │ │ └── mod.sp
│ │ │ ├── bad_mod_with_sp_version_require_not_met/
│ │ │ │ ├── README.md
│ │ │ │ ├── dashboard.sp
│ │ │ │ └── mod.sp
│ │ │ ├── check_all_mod/
│ │ │ │ ├── control.sp
│ │ │ │ ├── mod.sp
│ │ │ │ └── query.sp
│ │ │ ├── config_parsing_test_mod/
│ │ │ │ ├── control.sp
│ │ │ │ ├── mod.sp
│ │ │ │ └── query.sp
│ │ │ ├── control_rendering_test_mod/
│ │ │ │ ├── mod.sp
│ │ │ │ ├── query/
│ │ │ │ │ ├── gen_query.sp
│ │ │ │ │ ├── gen_query.sql
│ │ │ │ │ ├── gen_query_with_dimensions.sp
│ │ │ │ │ ├── gen_query_with_dimensions.sql
│ │ │ │ │ └── long_short_unicode_reasons.sql
│ │ │ │ └── sp_check_test/
│ │ │ │ ├── control_check_rendering.sp
│ │ │ │ └── control_reasons_titles.sp
│ │ │ ├── csv_plugin_test/
│ │ │ │ └── csv.txt
│ │ │ ├── dashboard_cards/
│ │ │ │ ├── dashboard.sp
│ │ │ │ └── mod.sp
│ │ │ ├── dashboard_graphs/
│ │ │ │ ├── dashboard.sp
│ │ │ │ └── mod.sp
│ │ │ ├── dashboard_inputs/
│ │ │ │ ├── dashboard.sp
│ │ │ │ └── mod.sp
│ │ │ ├── dashboard_parsing_nested_node_edge_providers_fail/
│ │ │ │ ├── mod.sp
│ │ │ │ └── query_providers_nested_require_sql.sp
│ │ │ ├── dashboard_parsing_nested_query_providers_fail/
│ │ │ │ ├── mod.sp
│ │ │ │ └── query_providers_nested_require_sql.sp
│ │ │ ├── dashboard_parsing_top_level_query_providers_fail/
│ │ │ │ ├── mod.sp
│ │ │ │ └── query_providers_top_level_require_sql.sp
│ │ │ ├── dashboard_parsing_validation/
│ │ │ │ ├── mod.sp
│ │ │ │ ├── nested_dashboards.sp
│ │ │ │ ├── node_edge_providers_nested.sp
│ │ │ │ ├── node_edge_providers_top_level.sp
│ │ │ │ ├── query.sp
│ │ │ │ ├── query_providers_nested.sp
│ │ │ │ ├── query_providers_nested_dont_require_sql.sp
│ │ │ │ ├── query_providers_top_level.sp
│ │ │ │ └── query_providers_top_level_require_sql.sp
│ │ │ ├── dashboard_sibling_containers/
│ │ │ │ ├── mod.sp
│ │ │ │ └── report.sp
│ │ │ ├── dashboard_texts/
│ │ │ │ ├── dashboard.sp
│ │ │ │ └── mod.sp
│ │ │ ├── dashboard_withs/
│ │ │ │ ├── dashboard.sp
│ │ │ │ └── mod.sp
│ │ │ ├── dependent_mod_with_legacy_lock/
│ │ │ │ ├── .mod.cache.json
│ │ │ │ ├── README.md
│ │ │ │ └── mod.sp
│ │ │ ├── dependent_mod_with_variables/
│ │ │ │ ├── .mod.cache.json
│ │ │ │ ├── README.md
│ │ │ │ ├── mod.sp
│ │ │ │ ├── query.sp
│ │ │ │ └── steampipe.spvars
│ │ │ ├── failure_test_mod/
│ │ │ │ ├── control_parsing_failures_simulation/
│ │ │ │ │ └── bad_control_args.sp
│ │ │ │ ├── mod.sp
│ │ │ │ └── query/
│ │ │ │ └── query_params.sp
│ │ │ ├── functionality_test_mod/
│ │ │ │ ├── functionality/
│ │ │ │ │ ├── all_controls_ok.sp
│ │ │ │ │ ├── cache.sp
│ │ │ │ │ ├── control_args.sp
│ │ │ │ │ ├── control_summary.sp
│ │ │ │ │ └── plugin_crash.sp
│ │ │ │ ├── mod.sp
│ │ │ │ └── query/
│ │ │ │ ├── check_cache.sql
│ │ │ │ ├── check_plugincrash_normalquery1.sql
│ │ │ │ ├── check_plugincrash_normalquery2.sql
│ │ │ │ ├── query_params.sp
│ │ │ │ ├── search_path_1.sql
│ │ │ │ ├── search_path_2.sql
│ │ │ │ ├── static_query.sql
│ │ │ │ └── static_query_2.sql
│ │ │ ├── functionality_test_mod_pp/
│ │ │ │ ├── functionality/
│ │ │ │ │ ├── all_controls_ok.pp
│ │ │ │ │ ├── cache.pp
│ │ │ │ │ ├── control_args.pp
│ │ │ │ │ ├── control_summary.pp
│ │ │ │ │ └── plugin_crash.pp
│ │ │ │ ├── mod.pp
│ │ │ │ └── query/
│ │ │ │ ├── check_cache.sql
│ │ │ │ ├── check_plugincrash_normalquery1.sql
│ │ │ │ ├── check_plugincrash_normalquery2.sql
│ │ │ │ ├── query_params.pp
│ │ │ │ ├── search_path_1.sql
│ │ │ │ ├── search_path_2.sql
│ │ │ │ ├── static_query.sql
│ │ │ │ └── static_query_2.sql
│ │ │ ├── introspection_table_mod/
│ │ │ │ ├── mod.sp
│ │ │ │ ├── output.json.json
│ │ │ │ └── resources.sp
│ │ │ ├── local_mod_with_args_in_require/
│ │ │ │ └── mod.sp
│ │ │ ├── local_mod_with_mod.pp_file/
│ │ │ │ └── mod.pp
│ │ │ ├── mod_install/
│ │ │ │ └── mod-install.txt
│ │ │ ├── mod_with_blank_dimension_value/
│ │ │ │ ├── control.sp
│ │ │ │ ├── mod.sp
│ │ │ │ └── query.sp
│ │ │ ├── mod_with_both_version_and_minversion_in_plugin_block/
│ │ │ │ └── mod.sp
│ │ │ ├── mod_with_legacy_requires_block/
│ │ │ │ └── mod.sp
│ │ │ ├── mod_with_list_param/
│ │ │ │ └── mod.sp
│ │ │ ├── mod_with_minversion_in_plugin_block/
│ │ │ │ └── mod.sp
│ │ │ ├── mod_with_new_steampipe_block/
│ │ │ │ └── mod.sp
│ │ │ ├── mod_with_old_plugin_block_with_version/
│ │ │ │ └── mod.sp
│ │ │ ├── mod_with_old_steampipe_and_new_steampipe_block_in_require/
│ │ │ │ └── mod.sp
│ │ │ ├── mod_with_old_steampipe_in_require/
│ │ │ │ └── mod.sp
│ │ │ ├── nested_mod/
│ │ │ │ └── folder1/
│ │ │ │ └── folder11/
│ │ │ │ ├── folder111/
│ │ │ │ │ └── control.sp
│ │ │ │ └── mod.sp
│ │ │ ├── nested_mod_no_mod_file/
│ │ │ │ └── folder1/
│ │ │ │ └── folder11/
│ │ │ │ └── control.sp
│ │ │ ├── nested_mod_pp/
│ │ │ │ └── folder1/
│ │ │ │ └── folder11/
│ │ │ │ ├── folder111/
│ │ │ │ │ └── control.sp
│ │ │ │ └── mod.pp
│ │ │ ├── sample_workspace/
│ │ │ │ ├── cis_v130/
│ │ │ │ │ ├── cache.sp
│ │ │ │ │ ├── cis.sp
│ │ │ │ │ ├── control_args.sp
│ │ │ │ │ ├── control_summary.sp
│ │ │ │ │ ├── docs/
│ │ │ │ │ │ ├── cis-overview.md
│ │ │ │ │ │ ├── cis_v130_1.md
│ │ │ │ │ │ ├── cis_v130_1_1.md
│ │ │ │ │ │ ├── cis_v130_1_1_copy.md
│ │ │ │ │ │ ├── cis_v130_1_2.md
│ │ │ │ │ │ ├── cis_v130_1_3.md
│ │ │ │ │ │ ├── cis_v130_1_4.md
│ │ │ │ │ │ ├── cis_v130_2.md
│ │ │ │ │ │ ├── cis_v130_2_1.md
│ │ │ │ │ │ ├── cis_v130_2_1_1.md
│ │ │ │ │ │ ├── cis_v130_2_1_2.md
│ │ │ │ │ │ ├── cis_v130_2_2.md
│ │ │ │ │ │ ├── cis_v130_3.md
│ │ │ │ │ │ ├── cis_v130_3_1.md
│ │ │ │ │ │ └── cis_v130_3_10.md
│ │ │ │ │ ├── plugin_crash.sp
│ │ │ │ │ ├── section1.sp
│ │ │ │ │ ├── section2.sp
│ │ │ │ │ ├── section3.sp
│ │ │ │ │ ├── section4.sp
│ │ │ │ │ └── section5.sp
│ │ │ │ ├── mod.sp
│ │ │ │ └── query/
│ │ │ │ ├── alarm.sql
│ │ │ │ ├── check_cache.sql
│ │ │ │ ├── check_plugincrash_normalquery1.sql
│ │ │ │ ├── check_plugincrash_normalquery2.sql
│ │ │ │ ├── error.sql
│ │ │ │ ├── info.sql
│ │ │ │ ├── named_query_1.sql
│ │ │ │ ├── named_query_2.sql
│ │ │ │ ├── named_query_3.sql
│ │ │ │ ├── named_query_4.sql
│ │ │ │ ├── named_query_7.sql
│ │ │ │ ├── ok.sql
│ │ │ │ ├── query_params.sp
│ │ │ │ ├── search_path_1.sql
│ │ │ │ ├── search_path_2.sql
│ │ │ │ ├── skip.sql
│ │ │ │ └── static_query.sql
│ │ │ ├── service_mod/
│ │ │ │ ├── control.sp
│ │ │ │ ├── mod.sp
│ │ │ │ └── query.sp
│ │ │ ├── test_dependency_mod_var_set_from_auto.ppvars/
│ │ │ │ ├── .mod.cache.json
│ │ │ │ ├── .steampipe/
│ │ │ │ │ └── mods/
│ │ │ │ │ └── github.com/
│ │ │ │ │ └── pskrbasu/
│ │ │ │ │ └── steampipe-mod-dependency-vars-1@v2.0.0/
│ │ │ │ │ ├── .gitignore
│ │ │ │ │ ├── README.md
│ │ │ │ │ ├── control.sp
│ │ │ │ │ ├── mod.sp
│ │ │ │ │ └── query.sp
│ │ │ │ ├── deps.auto.ppvars
│ │ │ │ └── mod.pp
│ │ │ ├── test_dependency_mod_var_set_from_auto.spvars/
│ │ │ │ ├── .mod.cache.json
│ │ │ │ ├── .steampipe/
│ │ │ │ │ └── mods/
│ │ │ │ │ └── github.com/
│ │ │ │ │ └── pskrbasu/
│ │ │ │ │ └── steampipe-mod-dependency-vars-1@v2.0.0/
│ │ │ │ │ ├── .gitignore
│ │ │ │ │ ├── README.md
│ │ │ │ │ ├── control.sp
│ │ │ │ │ ├── mod.sp
│ │ │ │ │ └── query.sp
│ │ │ │ ├── deps.auto.spvars
│ │ │ │ └── mod.sp
│ │ │ ├── test_dependency_mod_var_set_from_command_line/
│ │ │ │ ├── .mod.cache.json
│ │ │ │ ├── .steampipe/
│ │ │ │ │ └── mods/
│ │ │ │ │ └── github.com/
│ │ │ │ │ └── pskrbasu/
│ │ │ │ │ └── steampipe-mod-dependency-vars-1@v2.0.0/
│ │ │ │ │ ├── .gitignore
│ │ │ │ │ ├── README.md
│ │ │ │ │ ├── control.sp
│ │ │ │ │ ├── mod.sp
│ │ │ │ │ └── query.sp
│ │ │ │ └── mod.sp
│ │ │ ├── test_dependency_mod_var_set_from_steampipe.ppvars/
│ │ │ │ ├── .mod.cache.json
│ │ │ │ ├── .steampipe/
│ │ │ │ │ └── mods/
│ │ │ │ │ └── github.com/
│ │ │ │ │ └── pskrbasu/
│ │ │ │ │ └── steampipe-mod-dependency-vars-1@v2.0.0/
│ │ │ │ │ ├── .gitignore
│ │ │ │ │ ├── README.md
│ │ │ │ │ ├── control.sp
│ │ │ │ │ ├── mod.sp
│ │ │ │ │ └── query.sp
│ │ │ │ ├── mod.pp
│ │ │ │ └── steampipe.ppvars
│ │ │ ├── test_dependency_mod_var_set_from_steampipe.spvars/
│ │ │ │ ├── .mod.cache.json
│ │ │ │ ├── .steampipe/
│ │ │ │ │ └── mods/
│ │ │ │ │ └── github.com/
│ │ │ │ │ └── pskrbasu/
│ │ │ │ │ └── steampipe-mod-dependency-vars-1@v2.0.0/
│ │ │ │ │ ├── .gitignore
│ │ │ │ │ ├── README.md
│ │ │ │ │ ├── control.sp
│ │ │ │ │ ├── mod.sp
│ │ │ │ │ └── query.sp
│ │ │ │ ├── mod.sp
│ │ │ │ └── steampipe.spvars
│ │ │ ├── test_workspace_mod_var_precedence_set_from_both_ppvars/
│ │ │ │ ├── README.md
│ │ │ │ ├── deps.auto.ppvars
│ │ │ │ ├── mod.pp
│ │ │ │ └── steampipe.ppvars
│ │ │ ├── test_workspace_mod_var_precedence_set_from_both_spvars/
│ │ │ │ ├── README.md
│ │ │ │ ├── deps.auto.spvars
│ │ │ │ ├── mod.sp
│ │ │ │ └── steampipe.spvars
│ │ │ ├── test_workspace_mod_var_set_from_auto.ppvars/
│ │ │ │ ├── README.md
│ │ │ │ ├── dep.auto.ppvars
│ │ │ │ └── mod.pp
│ │ │ ├── test_workspace_mod_var_set_from_auto.spvars/
│ │ │ │ ├── README.md
│ │ │ │ ├── dep.auto.spvars
│ │ │ │ └── mod.sp
│ │ │ ├── test_workspace_mod_var_set_from_command_line/
│ │ │ │ ├── README.md
│ │ │ │ └── mod.sp
│ │ │ ├── test_workspace_mod_var_set_from_explicit_ppvars/
│ │ │ │ ├── README.md
│ │ │ │ ├── deps.ppvars
│ │ │ │ └── mod.pp
│ │ │ ├── test_workspace_mod_var_set_from_explicit_spvars/
│ │ │ │ ├── README.md
│ │ │ │ ├── deps.spvars
│ │ │ │ └── mod.sp
│ │ │ ├── test_workspace_mod_var_set_from_steampipe.ppvars/
│ │ │ │ ├── README.md
│ │ │ │ ├── mod.pp
│ │ │ │ └── steampipe.ppvars
│ │ │ └── test_workspace_mod_var_set_from_steampipe.spvars/
│ │ │ ├── README.md
│ │ │ ├── mod.sp
│ │ │ └── steampipe.spvars
│ │ ├── snapshots/
│ │ │ ├── expected_sps_many_withs_dashboard.json
│ │ │ ├── expected_sps_sibling_containers_report.json
│ │ │ ├── expected_sps_testing_card_blocks_dashboard.json
│ │ │ ├── expected_sps_testing_dashboard_inputs.json
│ │ │ ├── expected_sps_testing_dashboard_inputs_with_base.json
│ │ │ ├── expected_sps_testing_nodes_and_edges_dashboard.json
│ │ │ ├── expected_sps_testing_text_blocks_dashboard.json
│ │ │ ├── source.json
│ │ │ └── target.json
│ │ ├── source_files/
│ │ │ ├── aggregator.spc
│ │ │ ├── blank_aggregator.spc
│ │ │ ├── chaos.json
│ │ │ ├── chaos2.json
│ │ │ ├── chaos2.yml
│ │ │ ├── chaos_case_sensitivity.spc
│ │ │ ├── chaos_conn_import_disabled.spc
│ │ │ ├── chaos_conn_name_escaping.spc
│ │ │ ├── chaos_no_options.spc
│ │ │ ├── chaos_options.json
│ │ │ ├── chaos_options.spc
│ │ │ ├── chaos_options.yml
│ │ │ ├── chaos_options_2.json
│ │ │ ├── chaos_options_2.spc
│ │ │ ├── chaos_options_2.yml
│ │ │ ├── chaos_ttl_options.spc
│ │ │ ├── config_tests/
│ │ │ │ ├── default.spc
│ │ │ │ ├── sp_install_dir_default/
│ │ │ │ │ └── README.md
│ │ │ │ ├── sp_install_dir_env/
│ │ │ │ │ └── README.md
│ │ │ │ ├── sp_install_dir_sample/
│ │ │ │ │ └── README.md
│ │ │ │ ├── workspace_profiles/
│ │ │ │ │ └── workspaces.spc
│ │ │ │ ├── workspace_profiles_options/
│ │ │ │ │ └── workspaces.spc
│ │ │ │ └── workspace_tests.json
│ │ │ ├── csv/
│ │ │ │ ├── a.csv
│ │ │ │ ├── a_extra_col.csv
│ │ │ │ └── b.csv
│ │ │ ├── csv_template.spc
│ │ │ ├── database_options_listen_placeholder.spc
│ │ │ ├── default_cache_ttl_10.spc
│ │ │ ├── default_search_path.spc
│ │ │ ├── dynamic_aggregator_tests/
│ │ │ │ ├── dynamic_aggregator_col_mismatch.spc
│ │ │ │ ├── dynamic_aggregator_col_type_mismatch.spc
│ │ │ │ ├── dynamic_aggregator_col_type_mismatch_2.spc
│ │ │ │ ├── dynamic_aggregator_col_type_mismatch_3.spc
│ │ │ │ ├── dynamic_aggregator_col_type_mismatch_4.spc
│ │ │ │ ├── dynamic_aggregator_same_table_cols.spc
│ │ │ │ └── dynamic_aggregator_table_mismatch.spc
│ │ │ ├── service.json
│ │ │ ├── servicenow.spc
│ │ │ ├── single_chaos.spc
│ │ │ ├── two_chaos.spc
│ │ │ ├── update_check_disabled.spc
│ │ │ ├── workspace_cache_disabled.spc
│ │ │ ├── workspace_cache_enabled.spc
│ │ │ └── workspace_cache_ttl.spc
│ │ └── templates/
│ │ ├── dynamic_aggregators_col_mismatch.json
│ │ ├── dynamic_aggregators_col_type_mismatch.json
│ │ ├── dynamic_aggregators_col_type_mismatch_2.json
│ │ ├── dynamic_aggregators_col_type_mismatch_3.json
│ │ ├── dynamic_aggregators_col_type_mismatch_4.json
│ │ ├── dynamic_aggregators_same_tables_cols_result.json
│ │ ├── dynamic_aggregators_table_mismatch_t1.json
│ │ ├── dynamic_aggregators_table_mismatch_t2.json
│ │ ├── expected_1.json
│ │ ├── expected_11.json
│ │ ├── expected_12.json
│ │ ├── expected_13.json
│ │ ├── expected_14.json
│ │ ├── expected_15.json
│ │ ├── expected_2.json
│ │ ├── expected_3.json
│ │ ├── expected_5.json
│ │ ├── expected_6.json
│ │ ├── expected_all_alarm.txt
│ │ ├── expected_blank_dimension.txt
│ │ ├── expected_check_all.json
│ │ ├── expected_check_csv.csv
│ │ ├── expected_check_csv_noheader.csv
│ │ ├── expected_check_csv_pipe_separator.csv
│ │ ├── expected_check_csv_sorted_tags.csv
│ │ ├── expected_check_html.html
│ │ ├── expected_check_json.json
│ │ ├── expected_check_markdown.md
│ │ ├── expected_check_nunit3.xml
│ │ ├── expected_check_separator_csv.csv
│ │ ├── expected_check_snapshot.sps
│ │ ├── expected_crosstab_results.txt
│ │ ├── expected_csv_header.csv
│ │ ├── expected_csv_no_header.csv
│ │ ├── expected_csv_separator_header.csv
│ │ ├── expected_csv_separator_no_header.csv
│ │ ├── expected_csv_with_null_values.csv
│ │ ├── expected_introspection_check_where.json
│ │ ├── expected_introspection_info_benchmark.json
│ │ ├── expected_introspection_info_control.json
│ │ ├── expected_introspection_info_dashboard.json
│ │ ├── expected_introspection_info_dashboard_card.json
│ │ ├── expected_introspection_info_dashboard_chart.json
│ │ ├── expected_introspection_info_dashboard_flow.json
│ │ ├── expected_introspection_info_dashboard_graph.json
│ │ ├── expected_introspection_info_dashboard_hierarchy.json
│ │ ├── expected_introspection_info_dashboard_image.json
│ │ ├── expected_introspection_info_dashboard_input.json
│ │ ├── expected_introspection_info_dashboard_table.json
│ │ ├── expected_introspection_info_dashboard_text.json
│ │ ├── expected_introspection_info_query.json
│ │ ├── expected_introspection_info_variable.json
│ │ ├── expected_json.json
│ │ ├── expected_line.txt
│ │ ├── expected_line_long.txt
│ │ ├── expected_long_title.txt
│ │ ├── expected_mixed_results.txt
│ │ ├── expected_named_query_current_folder.txt
│ │ ├── expected_plugin_help_output.txt
│ │ ├── expected_plugin_list_json.json
│ │ ├── expected_plugin_list_json_with_failed_plugins.json
│ │ ├── expected_plugin_list_json_with_missing_plugins.json
│ │ ├── expected_plugin_list_table.txt
│ │ ├── expected_plugin_list_table_with_failed_plugins.txt
│ │ ├── expected_plugin_list_table_with_missing_plugins.txt
│ │ ├── expected_query_csv.csv
│ │ ├── expected_query_csv_header_off.csv
│ │ ├── expected_query_empty_json.json
│ │ ├── expected_query_json.json
│ │ ├── expected_query_line.txt
│ │ ├── expected_query_table_header_off.txt
│ │ ├── expected_reasons.txt
│ │ ├── expected_search_path_1.txt
│ │ ├── expected_search_path_2.txt
│ │ ├── expected_search_path_3.txt
│ │ ├── expected_search_path_4.txt
│ │ ├── expected_search_path_5.txt
│ │ ├── expected_search_path_6.txt
│ │ ├── expected_search_path_internal_schema_once_1.txt
│ │ ├── expected_search_path_internal_schema_once_2.txt
│ │ ├── expected_service_help_output.txt
│ │ ├── expected_service_start_listen_local.txt
│ │ ├── expected_service_start_port.txt
│ │ ├── expected_short_title.txt
│ │ ├── expected_sql_file.txt
│ │ ├── expected_sql_glob.txt
│ │ ├── expected_sql_glob_csv_no_header.txt
│ │ ├── expected_static_query_csv_snapshot_mode.csv
│ │ ├── expected_static_query_json_snapshot_mode.json
│ │ ├── expected_static_query_table_snapshot_mode.txt
│ │ ├── expected_summary_output.txt
│ │ ├── expected_table_header.txt
│ │ ├── expected_table_no_header.txt
│ │ ├── expected_table_with_null_values.txt
│ │ ├── expected_unicode_title.txt
│ │ ├── expected_workspace.txt
│ │ └── expected_workspace_folder.txt
│ ├── test_files/
│ │ ├── blank_aggregators.bats
│ │ ├── brew.bats
│ │ ├── cache.bats
│ │ ├── chaos_and_query.bats
│ │ ├── cloud.bats
│ │ ├── config_precedence.bats
│ │ ├── connection_config.bats
│ │ ├── date_time_types.bats
│ │ ├── dynamic_aggregators.bats
│ │ ├── dynamic_schema.bats
│ │ ├── exit_codes.bats
│ │ ├── force_stop.bats
│ │ ├── installation.bats
│ │ ├── migration.bats
│ │ ├── mod.sp
│ │ ├── performance.bats
│ │ ├── plugin.bats
│ │ ├── schema_cloning.bats
│ │ ├── search_path.bats
│ │ ├── service.bats
│ │ ├── settings.bats
│ │ ├── snapshot.bats
│ │ └── ssl.bats
│ └── url_parse.sh
├── dockertesting/
│ ├── debian/
│ │ ├── Dockerfile
│ │ └── run-tests.sh
│ └── oraclelinux/
│ ├── Dockerfile
│ └── run-tests.sh
└── manual_testing/
├── args/
│ └── with1/
│ ├── dashboard.sp
│ ├── error_dash.sp
│ ├── json_dash.sp
│ ├── mod.sp
│ ├── query.sp
│ └── with_no_results.sp
├── base_inputs/
│ ├── dashboard.sp
│ └── mod.sp
├── dashboard_container_inputs/
│ ├── inputs.sp
│ └── mod.sp
├── dashboard_global_and_dashboard_inputs/
│ ├── inputs.sp
│ └── mod.sp
├── demo/
│ ├── control_demo/
│ │ ├── control.sp
│ │ ├── mod.sp
│ │ ├── queries/
│ │ │ ├── q2/
│ │ │ │ ├── q4/
│ │ │ │ │ └── q3.sql
│ │ │ │ └── q5.sql
│ │ │ ├── q2.sql
│ │ │ ├── q3.sql
│ │ │ └── q4.sql
│ │ └── query.sp
│ ├── control_demo_sql/
│ │ ├── q1.sql
│ │ ├── q2.sql
│ │ └── query.sp
│ ├── query_param_demo/
│ │ ├── control.sp
│ │ ├── control2.sp
│ │ ├── mod.sp
│ │ └── query.sp
│ ├── query_param_demo2/
│ │ ├── _00.sql
│ │ ├── _02.sql
│ │ ├── mod.sp
│ │ └── query.sp
│ ├── references/
│ │ ├── mod.sp
│ │ └── query.sp
│ └── variables_demo/
│ ├── query.sp
│ ├── steampipe.spvars
│ ├── vars.spvars
│ └── vars2.auto.spvars
├── duplicate_inputs/
│ ├── dashboard.sp
│ └── mod.sp
├── many controls/
│ ├── c1/
│ │ ├── control.sp
│ │ ├── control10.sp
│ │ ├── control11.sp
│ │ ├── control12.sp
│ │ ├── control13.sp
│ │ ├── control14.sp
│ │ ├── control2.sp
│ │ ├── control3.sp
│ │ ├── control4.sp
│ │ ├── control5.sp
│ │ ├── control6.sp
│ │ ├── control7.sp
│ │ ├── control8.sp
│ │ └── control9.sp
│ ├── c2/
│ │ ├── control.sp
│ │ ├── control10.sp
│ │ ├── control11.sp
│ │ ├── control12.sp
│ │ ├── control13.sp
│ │ ├── control14.sp
│ │ ├── control2.sp
│ │ ├── control3.sp
│ │ ├── control4.sp
│ │ ├── control5.sp
│ │ ├── control6.sp
│ │ ├── control7.sp
│ │ ├── control8.sp
│ │ └── control9.sp
│ ├── c3/
│ │ ├── control.sp
│ │ ├── control10.sp
│ │ ├── control11.sp
│ │ ├── control12.sp
│ │ ├── control13.sp
│ │ ├── control14.sp
│ │ ├── control2.sp
│ │ ├── control3.sp
│ │ ├── control4.sp
│ │ ├── control5.sp
│ │ ├── control6.sp
│ │ ├── control7.sp
│ │ ├── control8.sp
│ │ └── control9.sp
│ ├── c4/
│ │ ├── control.sp
│ │ ├── control10.sp
│ │ ├── control11.sp
│ │ ├── control12.sp
│ │ ├── control13.sp
│ │ ├── control14.sp
│ │ ├── control2.sp
│ │ ├── control3.sp
│ │ ├── control4.sp
│ │ ├── control5.sp
│ │ ├── control6.sp
│ │ ├── control7.sp
│ │ ├── control8.sp
│ │ └── control9.sp
│ ├── mod.sp
│ └── queries/
│ ├── q1.sql
│ ├── q10.sql
│ ├── q11.sql
│ ├── q12.sql
│ ├── q13.sql
│ ├── q14.sql
│ ├── q15.sql
│ ├── q16.sql
│ ├── q17.sql
│ ├── q18.sql
│ ├── q19.sql
│ ├── q2.sql
│ ├── q20.sql
│ ├── q3.sql
│ ├── q4.sql
│ ├── q5.sql
│ ├── q6.sql
│ ├── q7.sql
│ ├── q8.sql
│ └── q9.sql
├── node_reuse/
│ ├── base_ref/
│ │ ├── dashboard.sp
│ │ └── mod.sp
│ ├── base_table_with/
│ │ ├── dashboard.sp
│ │ └── mod.sp
│ ├── base_with_param_default/
│ │ ├── dashboard.sp
│ │ └── mod.sp
│ ├── graph_as_node_invalid/
│ │ ├── dashboard.sp
│ │ └── mod.sp
│ ├── inputs/
│ │ ├── dashboard.sp
│ │ └── mod.sp
│ ├── many_withs/
│ │ ├── dashboard.sp
│ │ └── mod.sp
│ ├── many_withs_base/
│ │ ├── dashboard.sp
│ │ └── mod.sp
│ ├── node_base_param_deps/
│ │ ├── dashboard.sp
│ │ └── mod.sp
│ ├── param_ref/
│ │ ├── dashboard.sp
│ │ └── mod.sp
│ ├── param_runtime_dep_invalid/
│ │ ├── dashboard.sp
│ │ └── mod.sp
│ ├── slow_dashboard/
│ │ ├── dashboard.sp
│ │ └── mod.sp
│ ├── with_dep_on_with/
│ │ ├── dashboard.sp
│ │ └── mod.sp
│ └── with_syntax/
│ ├── dashboard.sp
│ └── mod.sp
├── report_dep_control/
│ ├── mod.sp
│ └── report.sp
├── report_dupe_test/
│ └── report.sp
├── service/
│ ├── start-kill.sh
│ └── start-stop.sh
└── variables/
├── query.sp
├── steampipe.spvars
├── v1.spvars
└── vars2.auto.spvars
Showing preview only (206K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (1978 symbols across 270 files)
FILE: cmd/completion.go
function generateCompletionScriptsCmd (line 13) | func generateCompletionScriptsCmd() *cobra.Command {
function includeBashHelp (line 32) | func includeBashHelp(base string) string {
function includeZshHelp (line 58) | func includeZshHelp(base string) string {
function includeFishHelp (line 72) | func includeFishHelp(base string) string {
function completionHelp (line 87) | func completionHelp(cmd *cobra.Command, _ []string) {
function runGenCompletionScriptsCmd (line 110) | func runGenCompletionScriptsCmd(cmd *cobra.Command, args []string) {
FILE: cmd/login.go
function loginCmd (line 20) | func loginCmd() *cobra.Command {
function runLoginCmd (line 37) | func runLoginCmd(cmd *cobra.Command, _ []string) {
function getToken (line 68) | func getToken(ctx context.Context, id string) (loginToken string, err er...
function displayLoginMessage (line 103) | func displayLoginMessage(ctx context.Context, token string) {
function promptUserForString (line 112) | func promptUserForString(prompt string) (string, error) {
FILE: cmd/plugin.go
type installedPlugin (line 36) | type installedPlugin struct
type failedPlugin (line 42) | type failedPlugin struct
type pluginJsonOutput (line 48) | type pluginJsonOutput struct
function pluginCmd (line 55) | func pluginCmd() *cobra.Command {
function pluginInstallCmd (line 94) | func pluginInstallCmd() *cobra.Command {
function pluginUpdateCmd (line 134) | func pluginUpdateCmd() *cobra.Command {
function pluginListCmd (line 168) | func pluginListCmd() *cobra.Command {
function pluginUninstallCmd (line 199) | func pluginUninstallCmd() *cobra.Command {
function runPluginInstallCmd (line 234) | func runPluginInstallCmd(cmd *cobra.Command, args []string) {
function doPluginInstall (line 351) | func doPluginInstall(ctx context.Context, bar *uiprogress.Bar, pluginNam...
function runPluginUpdateCmd (line 389) | func runPluginUpdateCmd(cmd *cobra.Command, args []string) {
function doPluginUpdate (line 538) | func doPluginUpdate(ctx context.Context, bar *uiprogress.Bar, pvr pplugi...
function createProgressBar (line 573) | func createProgressBar(plugin string, parentProgressBars *uiprogress.Pro...
function installPlugin (line 581) | func installPlugin(ctx context.Context, resolvedPlugin pplugin.ResolvedP...
function isPluginNotFoundErr (line 641) | func isPluginNotFoundErr(err error) bool {
function resolveUpdatePluginsFromArgs (line 645) | func resolveUpdatePluginsFromArgs(args []string) ([]string, error) {
function runPluginListCmd (line 661) | func runPluginListCmd(cmd *cobra.Command, _ []string) {
function showPluginListOutput (line 690) | func showPluginListOutput(pluginList []plugin.PluginListItem, failedPlug...
function showPluginListAsTable (line 701) | func showPluginListAsTable(pluginList []plugin.PluginListItem, failedPlu...
function showPluginListAsJSON (line 751) | func showPluginListAsJSON(pluginList []plugin.PluginListItem, failedPlug...
function runPluginUninstallCmd (line 802) | func runPluginUninstallCmd(cmd *cobra.Command, args []string) {
function getPluginList (line 852) | func getPluginList(ctx context.Context) (pluginList []plugin.PluginListI...
function getPluginConnectionMap (line 886) | func getPluginConnectionMap(ctx context.Context) (pluginConnectionMap, f...
function getConnectionState (line 924) | func getConnectionState(ctx context.Context) (steampipeconfig.Connection...
FILE: cmd/plugin_manager.go
function pluginManagerCmd (line 27) | func pluginManagerCmd() *cobra.Command {
function runPluginManagerCmd (line 37) | func runPluginManagerCmd(cmd *cobra.Command, _ []string) {
function doRunPluginManager (line 53) | func doRunPluginManager(cmd *cobra.Command) error {
function createPluginManager (line 79) | func createPluginManager(cmd *cobra.Command) (*pluginmanager_service.Plu...
function shouldRunConnectionWatcher (line 114) | func shouldRunConnectionWatcher() bool {
function createPluginManagerLog (line 124) | func createPluginManagerLog() hclog.Logger {
FILE: cmd/query.go
type queryConfig (line 35) | type queryConfig struct
function queryCmd (line 42) | func queryCmd() *cobra.Command {
function runQueryCmd (line 95) | func runQueryCmd(cmd *cobra.Command, args []string) {
function validateQueryArgs (line 170) | func validateQueryArgs(ctx context.Context, args []string, cfg *queryCon...
function getPipedStdinData (line 198) | func getPipedStdinData() string {
FILE: cmd/query_test.go
function TestGetPipedStdinData_PreservesNewlines (line 14) | func TestGetPipedStdinData_PreservesNewlines(t *testing.T) {
function TestValidateQueryArgs_ConcurrentCalls (line 63) | func TestValidateQueryArgs_ConcurrentCalls(t *testing.T) {
function TestValidateQueryArgs_InteractiveModeWithSnapshot (line 105) | func TestValidateQueryArgs_InteractiveModeWithSnapshot(t *testing.T) {
function TestValidateQueryArgs_BatchModeWithSnapshot (line 125) | func TestValidateQueryArgs_BatchModeWithSnapshot(t *testing.T) {
function TestValidateQueryArgs_InvalidOutputFormat (line 149) | func TestValidateQueryArgs_InvalidOutputFormat(t *testing.T) {
FILE: cmd/root.go
function InitCmd (line 51) | func InitCmd() {
function hideRootFlags (line 85) | func hideRootFlags(flags ...string) {
function AddCommands (line 98) | func AddCommands() {
function ResetCommands (line 117) | func ResetCommands() {
function Execute (line 124) | func Execute() int {
function createRootContext (line 138) | func createRootContext() context.Context {
FILE: cmd/root_test.go
function TestHideRootFlags_NonExistentFlag (line 12) | func TestHideRootFlags_NonExistentFlag(t *testing.T) {
function TestAddCommands_Concurrent (line 24) | func TestAddCommands_Concurrent(t *testing.T) {
FILE: cmd/service.go
function serviceCmd (line 31) | func serviceCmd() *cobra.Command {
function serviceStartCmd (line 51) | func serviceStartCmd() *cobra.Command {
function serviceStatusCmd (line 81) | func serviceStatusCmd() *cobra.Command {
function serviceStopCmd (line 102) | func serviceStopCmd() *cobra.Command {
function serviceRestartCmd (line 120) | func serviceRestartCmd() *cobra.Command {
function runServiceStartCmd (line 137) | func runServiceStartCmd(cmd *cobra.Command, _ []string) {
function startService (line 180) | func startService(ctx context.Context, listenAddresses []string, port in...
function startServiceAndRefreshConnections (line 227) | func startServiceAndRefreshConnections(ctx context.Context, listenAddres...
function runServiceInForeground (line 245) | func runServiceInForeground(ctx context.Context) {
function runServiceRestartCmd (line 298) | func runServiceRestartCmd(cmd *cobra.Command, _ []string) {
function restartService (line 321) | func restartService(ctx context.Context) (_ *db_local.StartResult) {
function runServiceStatusCmd (line 374) | func runServiceStatusCmd(cmd *cobra.Command, _ []string) {
function composeStateError (line 403) | func composeStateError(dbStateErr error, pmStateErr error) error {
function runServiceStopCmd (line 418) | func runServiceStopCmd(cmd *cobra.Command, _ []string) {
function showAllStatus (line 505) | func showAllStatus(ctx context.Context) {
function getServiceProcessDetails (line 530) | func getServiceProcessDetails(process *psutils.Process) (string, string,...
function printStatus (line 552) | func printStatus(ctx context.Context, dbState *db_local.RunningDBInstanc...
function printRunningImplicit (line 662) | func printRunningImplicit(invoker constants.Invoker) {
function printClientsConnected (line 674) | func printClientsConnected() {
function buildForegroundClientsConnectedMsg (line 686) | func buildForegroundClientsConnectedMsg() string {
FILE: main.go
function main (line 34) | func main() {
function checkRoot (line 71) | func checkRoot(ctx context.Context) {
function checkWsl1 (line 95) | func checkWsl1(ctx context.Context) {
function checkOSXVersion (line 135) | func checkOSXVersion(ctx context.Context) {
function setVersionProperties (line 167) | func setVersionProperties() {
FILE: pkg/cmdconfig/app_specific.go
function SetAppSpecificConstants (line 17) | func SetAppSpecificConstants() {
FILE: pkg/cmdconfig/builder.go
type CmdBuilder (line 14) | type CmdBuilder struct
method AddStringFlag (line 80) | func (c *CmdBuilder) AddStringFlag(name string, defaultValue string, d...
method AddIntFlag (line 91) | func (c *CmdBuilder) AddIntFlag(name string, defaultValue int, desc st...
method AddBoolFlag (line 101) | func (c *CmdBuilder) AddBoolFlag(name string, defaultValue bool, desc ...
method AddCloudFlags (line 111) | func (c *CmdBuilder) AddCloudFlags() *CmdBuilder {
method AddWorkspaceDatabaseFlag (line 118) | func (c *CmdBuilder) AddWorkspaceDatabaseFlag() *CmdBuilder {
method AddStringSliceFlag (line 124) | func (c *CmdBuilder) AddStringSliceFlag(name string, defaultValue []st...
method AddStringArrayFlag (line 134) | func (c *CmdBuilder) AddStringArrayFlag(name string, defaultValue []st...
method AddStringMapStringFlag (line 144) | func (c *CmdBuilder) AddStringMapStringFlag(name string, defaultValue ...
method AddVarFlag (line 153) | func (c *CmdBuilder) AddVarFlag(value pflag.Value, name string, usage ...
function OnCmd (line 20) | func OnCmd(cmd *cobra.Command) *CmdBuilder {
FILE: pkg/cmdconfig/cmd_flags.go
type FlagOption (line 14) | type FlagOption
function requiredOpt (line 32) | func requiredOpt() FlagOption {
function hiddenOpt (line 45) | func hiddenOpt() FlagOption {
function deprecatedOpt (line 51) | func deprecatedOpt(replacement string) FlagOption {
function noOptDefValOpt (line 57) | func noOptDefValOpt(noOptDefVal string) FlagOption {
function withShortHand (line 63) | func withShortHand(shorthand string) FlagOption {
FILE: pkg/cmdconfig/cmd_hooks.go
function postRunHook (line 46) | func postRunHook(cmd *cobra.Command, args []string) {
function preRunHook (line 63) | func preRunHook(cmd *cobra.Command, args []string) {
function setMemoryLimit (line 128) | func setMemoryLimit() {
function runScheduledTasks (line 140) | func runScheduledTasks(ctx context.Context, cmd *cobra.Command, args []s...
function logLevelNeedsReset (line 175) | func logLevelNeedsReset() bool {
function envLogLevelSet (line 183) | func envLogLevelSet() bool {
function initGlobalConfig (line 199) | func initGlobalConfig() perror_helpers.ErrorAndWarnings {
function setCloudTokenDefault (line 268) | func setCloudTokenDefault(loader *parse.WorkspaceProfileLoader[*workspac...
function getWorkspaceProfileLoader (line 304) | func getWorkspaceProfileLoader(ctx context.Context) (*parse.WorkspacePro...
function validateConfig (line 338) | func validateConfig() perror_helpers.ErrorAndWarnings {
function createLogger (line 354) | func createLogger(logBuffer *bytes.Buffer, cmd *cobra.Command) {
function ensureInstallDir (line 404) | func ensureInstallDir() {
function displayDeprecationWarnings (line 419) | func displayDeprecationWarnings(errorsAndWarnings perror_helpers.ErrorAn...
function displayPpDeprecationWarning (line 430) | func displayPpDeprecationWarning() {
FILE: pkg/cmdconfig/cmd_hooks_test.go
function TestPostRunHook_WaitsForTasks (line 11) | func TestPostRunHook_WaitsForTasks(t *testing.T) {
function TestPostRunHook_Timeout (line 40) | func TestPostRunHook_Timeout(t *testing.T) {
function TestCmdBuilder_HookIntegration (line 78) | func TestCmdBuilder_HookIntegration(t *testing.T) {
function TestCmdBuilder_FlagBinding (line 119) | func TestCmdBuilder_FlagBinding(t *testing.T) {
function TestCmdBuilder_MultipleFlagTypes (line 152) | func TestCmdBuilder_MultipleFlagTypes(t *testing.T) {
function TestCmdBuilder_CloudFlags (line 186) | func TestCmdBuilder_CloudFlags(t *testing.T) {
function TestCmdBuilder_NilFlagPanic (line 205) | func TestCmdBuilder_NilFlagPanic(t *testing.T) {
FILE: pkg/cmdconfig/diagnostics.go
function DisplayConfig (line 17) | func DisplayConfig() {
FILE: pkg/cmdconfig/env_var_type.go
type EnvVarType (line 3) | type EnvVarType
constant String (line 6) | String EnvVarType = iota
constant Int (line 7) | Int
constant Bool (line 8) | Bool
FILE: pkg/cmdconfig/envvartype_string.go
function _ (line 7) | func _() {
constant _EnvVarType_name (line 16) | _EnvVarType_name = "StringIntBool"
method String (line 20) | func (i EnvVarType) String() string {
FILE: pkg/cmdconfig/validate.go
function ValidateSnapshotArgs (line 16) | func ValidateSnapshotArgs(ctx context.Context) error {
function validateSnapshotLocation (line 54) | func validateSnapshotLocation(ctx context.Context, cloudToken string) er...
function setSnapshotLocationFromDefaultWorkspace (line 86) | func setSnapshotLocationFromDefaultWorkspace(ctx context.Context, cloudT...
function validateSnapshotTags (line 98) | func validateSnapshotTags() error {
FILE: pkg/cmdconfig/validate_test.go
function TestValidateSnapshotTags_EdgeCases (line 13) | func TestValidateSnapshotTags_EdgeCases(t *testing.T) {
function TestValidateSnapshotArgs_Conflicts (line 99) | func TestValidateSnapshotArgs_Conflicts(t *testing.T) {
function TestValidateSnapshotLocation_FileValidation (line 165) | func TestValidateSnapshotLocation_FileValidation(t *testing.T) {
function TestValidateSnapshotArgs_MissingHost (line 227) | func TestValidateSnapshotArgs_MissingHost(t *testing.T) {
function TestValidateSnapshotTags_EmptyAndWhitespace (line 243) | func TestValidateSnapshotTags_EmptyAndWhitespace(t *testing.T) {
function TestValidateSnapshotLocation_TildePath (line 289) | func TestValidateSnapshotLocation_TildePath(t *testing.T) {
function TestValidateSnapshotArgs_WorkspaceIdentifierWithoutToken (line 308) | func TestValidateSnapshotArgs_WorkspaceIdentifierWithoutToken(t *testing...
function TestValidateSnapshotLocation_RelativePath (line 326) | func TestValidateSnapshotLocation_RelativePath(t *testing.T) {
FILE: pkg/cmdconfig/viper.go
function Viper (line 25) | func Viper() *viper.Viper {
function bootstrapViper (line 30) | func bootstrapViper(loader *parse.WorkspaceProfileLoader[*workspace_prof...
function tildefyPaths (line 62) | func tildefyPaths() error {
function SetDefaultsFromConfig (line 93) | func SetDefaultsFromConfig(configMap map[string]interface{}) {
function setBaseDefaults (line 107) | func setBaseDefaults() error {
type envMapping (line 142) | type envMapping struct
function setDirectoryDefaultsFromEnv (line 148) | func setDirectoryDefaultsFromEnv() {
function setDefaultsFromEnv (line 160) | func setDefaultsFromEnv() {
function setConfigFromEnv (line 200) | func setConfigFromEnv(envVar string, configs []string, varType EnvVarTyp...
function SetDefaultFromEnv (line 206) | func SetDefaultFromEnv(k string, configVar string, varType EnvVarType) {
FILE: pkg/cmdconfig/viper_test.go
function TestViper (line 13) | func TestViper(t *testing.T) {
function TestSetBaseDefaults (line 24) | func TestSetBaseDefaults(t *testing.T) {
function TestSetDefaultFromEnv_String (line 99) | func TestSetDefaultFromEnv_String(t *testing.T) {
function TestSetDefaultFromEnv_Bool (line 120) | func TestSetDefaultFromEnv_Bool(t *testing.T) {
function TestSetDefaultFromEnv_Int (line 190) | func TestSetDefaultFromEnv_Int(t *testing.T) {
function TestSetDefaultFromEnv_MissingEnvVar (line 254) | func TestSetDefaultFromEnv_MissingEnvVar(t *testing.T) {
function TestSetDefaultsFromConfig (line 274) | func TestSetDefaultsFromConfig(t *testing.T) {
function TestTildefyPaths (line 298) | func TestTildefyPaths(t *testing.T) {
function TestSetConfigFromEnv (line 318) | func TestSetConfigFromEnv(t *testing.T) {
function TestViperGlobalState_ConcurrentReads (line 341) | func TestViperGlobalState_ConcurrentReads(t *testing.T) {
function TestViperGlobalState_ConcurrentWrites (line 374) | func TestViperGlobalState_ConcurrentWrites(t *testing.T) {
function TestViperGlobalState_ConcurrentReadWrite (line 411) | func TestViperGlobalState_ConcurrentReadWrite(t *testing.T) {
function TestSetDefaultFromEnv_ConcurrentAccess (line 460) | func TestSetDefaultFromEnv_ConcurrentAccess(t *testing.T) {
function TestSetDefaultsFromConfig_ConcurrentCalls (line 496) | func TestSetDefaultsFromConfig_ConcurrentCalls(t *testing.T) {
function TestSetBaseDefaults_MultipleCalls (line 522) | func TestSetBaseDefaults_MultipleCalls(t *testing.T) {
function TestViperReset_StateCleanup (line 544) | func TestViperReset_StateCleanup(t *testing.T) {
function TestSetDefaultFromEnv_TypeConversionErrors (line 574) | func TestSetDefaultFromEnv_TypeConversionErrors(t *testing.T) {
function TestTildefyPaths_InvalidPaths (line 636) | func TestTildefyPaths_InvalidPaths(t *testing.T) {
FILE: pkg/connection/config_map.go
type ConnectionConfigMap (line 9) | type ConnectionConfigMap
method Diff (line 33) | func (m ConnectionConfigMap) Diff(otherMap ConnectionConfigMap) (added...
function NewConnectionConfigMap (line 13) | func NewConnectionConfigMap(connectionMap map[string]*modconfig.Steampip...
FILE: pkg/connection/connection_lifecycle_test.go
function TestExemplarSchemaMapConcurrentAccess (line 20) | func TestExemplarSchemaMapConcurrentAccess(t *testing.T) {
function TestExemplarSchemaMapRaceCondition (line 73) | func TestExemplarSchemaMapRaceCondition(t *testing.T) {
function TestRefreshConnectionState_ContextCancellation (line 124) | func TestRefreshConnectionState_ContextCancellation(t *testing.T) {
function TestLogRefreshConnectionResultsTypeAssertion (line 198) | func TestLogRefreshConnectionResultsTypeAssertion(t *testing.T) {
function TestExecuteUpdateSetsInParallelGoroutineLeak (line 300) | func TestExecuteUpdateSetsInParallelGoroutineLeak(t *testing.T) {
FILE: pkg/connection/connection_state_table_updater.go
type connectionStateTableUpdater (line 16) | type connectionStateTableUpdater struct
method start (line 32) | func (u *connectionStateTableUpdater) start(ctx context.Context) error {
method onConnectionReady (line 80) | func (u *connectionStateTableUpdater) onConnectionReady(ctx context.Co...
method onConnectionCommentsLoaded (line 94) | func (u *connectionStateTableUpdater) onConnectionCommentsLoaded(ctx c...
method onConnectionDeleted (line 108) | func (u *connectionStateTableUpdater) onConnectionDeleted(ctx context....
method onConnectionError (line 125) | func (u *connectionStateTableUpdater) onConnectionError(ctx context.Co...
function newConnectionStateTableUpdater (line 21) | func newConnectionStateTableUpdater(updates *steampipeconfig.ConnectionU...
FILE: pkg/connection/connection_watcher.go
type ConnectionWatcher (line 17) | type ConnectionWatcher struct
method handleFileWatcherEvent (line 63) | func (w *ConnectionWatcher) handleFileWatcherEvent([]fsnotify.Event) {
method Close (line 126) | func (w *ConnectionWatcher) Close() {
function NewConnectionWatcher (line 24) | func NewConnectionWatcher(pluginManager pluginManager) (*ConnectionWatch...
FILE: pkg/connection/interface.go
type pluginManager (line 13) | type pluginManager interface
FILE: pkg/connection/limiter_map.go
type LimiterMap (line 9) | type LimiterMap
method Equals (line 18) | func (l LimiterMap) Equals(other LimiterMap) bool {
method ToPluginLimiterMap (line 23) | func (l LimiterMap) ToPluginLimiterMap() PluginLimiterMap {
function NewLimiterMap (line 11) | func NewLimiterMap(limiters []*plugin.RateLimiter) LimiterMap {
FILE: pkg/connection/plugin_limiter_map.go
type PluginLimiterMap (line 9) | type PluginLimiterMap
method Equals (line 11) | func (l PluginLimiterMap) Equals(other PluginLimiterMap) bool {
type PluginMap (line 15) | type PluginMap
method ToPluginLimiterMap (line 17) | func (p PluginMap) ToPluginLimiterMap() PluginLimiterMap {
FILE: pkg/connection/refresh_connections.go
function RefreshConnections (line 19) | func RefreshConnections(ctx context.Context, pluginManager pluginManager...
FILE: pkg/connection/refresh_connections_state.go
type connectionError (line 34) | type connectionError struct
type refreshConnectionState (line 39) | type refreshConnectionState struct
method refreshConnections (line 102) | func (s *refreshConnectionState) refreshConnections(ctx context.Contex...
method setFailedConnectionsToError (line 207) | func (s *refreshConnectionState) setFailedConnectionsToError(ctx conte...
method updateRateLimiterDefinitions (line 225) | func (s *refreshConnectionState) updateRateLimiterDefinitions(ctx cont...
method updatePluginColumnTable (line 246) | func (s *refreshConnectionState) updatePluginColumnTable(ctx context.C...
method addMissingPluginWarnings (line 292) | func (s *refreshConnectionState) addMissingPluginWarnings() {
method logRefreshConnectionResults (line 317) | func (s *refreshConnectionState) logRefreshConnectionResults() {
method executeConnectionQueries (line 345) | func (s *refreshConnectionState) executeConnectionQueries(ctx context....
method executeUpdateQueries (line 382) | func (s *refreshConnectionState) executeUpdateQueries(ctx context.Cont...
method executeUpdatesInParallel (line 502) | func (s *refreshConnectionState) executeUpdatesInParallel(ctx context....
method executeUpdateSetsInParallel (line 519) | func (s *refreshConnectionState) executeUpdateSetsInParallel(ctx conte...
method executeUpdateForConnections (line 595) | func (s *refreshConnectionState) executeUpdateForConnections(ctx conte...
method executeUpdateQuery (line 643) | func (s *refreshConnectionState) executeUpdateQuery(ctx context.Contex...
method UpdateCommentsInParallel (line 688) | func (s *refreshConnectionState) UpdateCommentsInParallel(ctx context....
method updateCommentsForConnection (line 739) | func (s *refreshConnectionState) updateCommentsForConnection(ctx conte...
method executeCommentQuery (line 786) | func (s *refreshConnectionState) executeCommentQuery(ctx context.Conte...
method getInitialAndRemainingUpdates (line 829) | func (s *refreshConnectionState) getInitialAndRemainingUpdates() (init...
method executeDeleteQueries (line 873) | func (s *refreshConnectionState) executeDeleteQueries(ctx context.Cont...
method executeDeleteQuery (line 893) | func (s *refreshConnectionState) executeDeleteQuery(ctx context.Contex...
method setIncompleteConnectionStateToError (line 934) | func (s *refreshConnectionState) setIncompleteConnectionStateToError(c...
function newRefreshConnectionState (line 61) | func newRefreshConnectionState(ctx context.Context, pluginManager plugin...
function updateSetMapToArray (line 492) | func updateSetMapToArray(updateSetMap map[string][]*steampipeconfig.Conn...
function getCloneSchemaQuery (line 825) | func getCloneSchemaQuery(exemplarSchemaName string, connectionState *ste...
FILE: pkg/connection/refresh_connections_state_test.go
function TestRefreshConnectionState_ExemplarSchemaMapConcurrentWrites (line 22) | func TestRefreshConnectionState_ExemplarSchemaMapConcurrentWrites(t *tes...
function TestRefreshConnectionState_ExemplarSchemaMapConcurrentReadWrite (line 77) | func TestRefreshConnectionState_ExemplarSchemaMapConcurrentReadWrite(t *...
function TestRefreshConnectionState_ExemplarMapRaceCondition (line 145) | func TestRefreshConnectionState_ExemplarMapRaceCondition(t *testing.T) {
function TestUpdateSetMapToArray (line 212) | func TestUpdateSetMapToArray(t *testing.T) {
function TestGetCloneSchemaQuery (line 272) | func TestGetCloneSchemaQuery(t *testing.T) {
function TestRefreshConnectionState_DeferErrorHandling (line 313) | func TestRefreshConnectionState_DeferErrorHandling(t *testing.T) {
function TestRefreshConnectionState_NilResInDefer (line 340) | func TestRefreshConnectionState_NilResInDefer(t *testing.T) {
function TestRefreshConnectionState_MultiplePluginsSameExemplar (line 354) | func TestRefreshConnectionState_MultiplePluginsSameExemplar(t *testing.T) {
function TestRefreshConnectionState_ErrorChannelBlocking (line 396) | func TestRefreshConnectionState_ErrorChannelBlocking(t *testing.T) {
function TestRefreshConnectionState_ExemplarMapNilPlugin (line 449) | func TestRefreshConnectionState_ExemplarMapNilPlugin(t *testing.T) {
function TestConnectionError (line 471) | func TestConnectionError(t *testing.T) {
type mockPluginManager (line 490) | type mockPluginManager struct
method Pool (line 495) | func (m *mockPluginManager) Pool() *pgxpool.Pool {
method OnConnectionConfigChanged (line 500) | func (m *mockPluginManager) OnConnectionConfigChanged(context.Context,...
method GetConnectionConfig (line 503) | func (m *mockPluginManager) GetConnectionConfig() ConnectionConfigMap {
method HandlePluginLimiterChanges (line 507) | func (m *mockPluginManager) HandlePluginLimiterChanges(PluginLimiterMa...
method ShouldFetchRateLimiterDefs (line 511) | func (m *mockPluginManager) ShouldFetchRateLimiterDefs() bool {
method LoadPluginRateLimiters (line 515) | func (m *mockPluginManager) LoadPluginRateLimiters(map[string]string) ...
method SendPostgresSchemaNotification (line 519) | func (m *mockPluginManager) SendPostgresSchemaNotification(context.Con...
method SendPostgresErrorsAndWarningsNotification (line 523) | func (m *mockPluginManager) SendPostgresErrorsAndWarningsNotification(...
method UpdatePluginColumnsTable (line 526) | func (m *mockPluginManager) UpdatePluginColumnsTable(context.Context, ...
function TestNewRefreshConnectionState_NilPool (line 532) | func TestNewRefreshConnectionState_NilPool(t *testing.T) {
function TestRefreshConnectionState_ConnectionOrderEdgeCases (line 550) | func TestRefreshConnectionState_ConnectionOrderEdgeCases(t *testing.T) {
FILE: pkg/connection_sync/wait_for_search_path.go
function WaitForSearchPathSchemas (line 14) | func WaitForSearchPathSchemas(ctx context.Context, client db_common.Clie...
FILE: pkg/constants/app.go
constant ClientConnectionAppNamePrefix (line 4) | ClientConnectionAppNamePrefix = "steampipe_client"
constant ServiceConnectionAppNamePrefix (line 5) | ServiceConnectionAppNamePrefix = "steampipe_service"
constant ClientSystemConnectionAppNamePrefix (line 6) | ClientSystemConnectionAppNamePrefix = "steampipe_client_system"
FILE: pkg/constants/build.go
constant ConfigKeyVersion (line 4) | ConfigKeyVersion = "main.version"
constant ConfigKeyCommit (line 5) | ConfigKeyCommit = "main.commit"
constant ConfigKeyDate (line 6) | ConfigKeyDate = "main.date"
constant ConfigKeyBuiltBy (line 7) | ConfigKeyBuiltBy = "main.builtBy"
constant LocalBuild (line 9) | LocalBuild = DefaultBuiltBy
constant DefaultVersion (line 13) | DefaultVersion = "0.0.0"
constant DefaultCommit (line 14) | DefaultCommit = "none"
constant DefaultDate (line 15) | DefaultDate = "unknown"
constant DefaultBuiltBy (line 16) | DefaultBuiltBy = "local"
FILE: pkg/constants/cache.go
constant DefaultMaxCacheSizeMb (line 3) | DefaultMaxCacheSizeMb = 16384
FILE: pkg/constants/cmd_name.go
constant CmdNameQuery (line 4) | CmdNameQuery = "query"
constant CmdNameCheck (line 5) | CmdNameCheck = "check"
constant CmdNameDashboard (line 6) | CmdNameDashboard = "dashboard"
FILE: pkg/constants/config_keys.go
constant ConfigKeyInteractive (line 5) | ConfigKeyInteractive = "interactive"
constant ConfigKeyActiveCommand (line 6) | ConfigKeyActiveCommand = "cmd"
constant ConfigKeyActiveCommandArgs (line 7) | ConfigKeyActiveCommandArgs = "cmd_args"
constant ConfigInteractiveVariables (line 8) | ConfigInteractiveVariables = "interactive_var"
constant ConfigKeyIsTerminalTTY (line 9) | ConfigKeyIsTerminalTTY = "is_terminal"
constant ConfigKeyServerSearchPath (line 10) | ConfigKeyServerSearchPath = "server-search-path"
constant ConfigKeyServerSearchPathPrefix (line 11) | ConfigKeyServerSearchPathPrefix = "server-search-path-prefix"
constant ConfigKeyBypassHomeDirModfileWarning (line 12) | ConfigKeyBypassHomeDirModfileWarning = "bypass-home-dir-modfile-warning"
FILE: pkg/constants/control_execute.go
constant ControlQueryCancellationTimeoutSecs (line 5) | ControlQueryCancellationTimeoutSecs = 30
constant MaxControlRunAttempts (line 8) | MaxControlRunAttempts = 2
FILE: pkg/constants/control_status.go
constant ControlOk (line 4) | ControlOk = "ok"
constant ControlAlarm (line 5) | ControlAlarm = "alarm"
constant ControlSkip (line 6) | ControlSkip = "skip"
constant ControlInfo (line 7) | ControlInfo = "info"
constant ControlError (line 8) | ControlError = "error"
FILE: pkg/constants/db.go
constant MaxParallelClientInits (line 11) | MaxParallelClientInits = 3
constant MaxBackups (line 14) | MaxBackups = 100
constant DatabaseDefaultListenAddresses (line 18) | DatabaseDefaultListenAddresses = "localhost"
constant DatabaseDefaultPort (line 19) | DatabaseDefaultPort = 9193
constant DatabaseDefaultCheckQueryTimeout (line 20) | DatabaseDefaultCheckQueryTimeout = 240
constant DatabaseSuperUser (line 21) | DatabaseSuperUser = "root"
constant DatabaseUser (line 22) | DatabaseUser = "steampipe"
constant DatabaseName (line 23) | DatabaseName = "steampipe"
constant DatabaseUsersRole (line 24) | DatabaseUsersRole = "steampipe_users"
constant DefaultMaxConnections (line 25) | DefaultMaxConnections = 10
constant DatabaseVersion (line 30) | DatabaseVersion = "14.19.0"
constant FdwVersion (line 31) | FdwVersion = "2.2.0"
constant PostgresImageRef (line 34) | PostgresImageRef = "ghcr.io/turbot/steampipe/db:14.19.0"
constant PostgresImageDigest (line 35) | PostgresImageDigest = "sha256:84264ef41853178707bccb091f5450c22e835f8a98...
constant FdwImageRef (line 37) | FdwImageRef = "ghcr.io/turbot/steampipe/fdw:" + FdwVersion
constant FdwBinaryFileName (line 38) | FdwBinaryFileName = "steampipe_postgres_fdw.so"
constant LegacyInternalSchema (line 47) | LegacyInternalSchema = "internal"
constant InternalSchema (line 51) | InternalSchema = "steampipe_internal"
constant ServerSettingsTable (line 54) | ServerSettingsTable = "steampipe_server_settings"
constant RateLimiterDefinitionTable (line 57) | RateLimiterDefinitionTable = "steampipe_plugin_limiter"
constant PluginInstanceTable (line 59) | PluginInstanceTable = "steampipe_plugin"
constant PluginColumnTable (line 60) | PluginColumnTable = "steampipe_plugin_column"
constant LegacyConnectionStateTable (line 63) | LegacyConnectionStateTable = "steampipe_connection_state"
constant ConnectionTable (line 64) | ConnectionTable = "steampipe_connection"
constant ConnectionStatePending (line 65) | ConnectionStatePending = "pending"
constant ConnectionStatePendingIncomplete (line 66) | ConnectionStatePendingIncomplete = "incomplete"
constant ConnectionStateReady (line 67) | ConnectionStateReady = "ready"
constant ConnectionStateUpdating (line 68) | ConnectionStateUpdating = "updating"
constant ConnectionStateDeleting (line 69) | ConnectionStateDeleting = "deleting"
constant ConnectionStateDisabled (line 70) | ConnectionStateDisabled = "disabled"
constant ConnectionStateError (line 71) | ConnectionStateError = "error"
constant ForeignTableScanMetadataSummary (line 74) | ForeignTableScanMetadataSummary = "steampipe_scan_metadata_summary"
constant ForeignTableScanMetadata (line 75) | ForeignTableScanMetadata = "steampipe_scan_metadata"
constant ForeignTableSettings (line 76) | ForeignTableSettings = "steampipe_settings"
constant ForeignTableSettingsKeyColumn (line 77) | ForeignTableSettingsKeyColumn = "name"
constant ForeignTableSettingsValueColumn (line 78) | ForeignTableSettingsValueColumn = "value"
constant ForeignTableSettingsCacheKey (line 79) | ForeignTableSettingsCacheKey = "cache"
constant ForeignTableSettingsCacheTtlKey (line 80) | ForeignTableSettingsCacheTtlKey = "cache_ttl"
constant ForeignTableSettingsCacheClearTimeKey (line 81) | ForeignTableSettingsCacheClearTimeKey = "cache_clear_time"
constant FunctionCacheSet (line 83) | FunctionCacheSet = "meta_cache"
constant FunctionConnectionCacheClear (line 84) | FunctionConnectionCacheClear = "meta_connection_cache_clear"
constant FunctionCacheSetTtl (line 85) | FunctionCacheSetTtl = "meta_cache_ttl"
constant LegacyCommandSchema (line 88) | LegacyCommandSchema = "steampipe_command"
constant LegacyCommandTableCache (line 90) | LegacyCommandTableCache = "cache"
constant LegacyCommandTableCacheOperationColumn (line 91) | LegacyCommandTableCacheOperationColumn = "operation"
constant LegacyCommandCacheOn (line 92) | LegacyCommandCacheOn = "cache_on"
constant LegacyCommandCacheOff (line 93) | LegacyCommandCacheOff = "cache_off"
constant LegacyCommandCacheClear (line 94) | LegacyCommandCacheClear = "cache_clear"
constant LegacyCommandTableScanMetadata (line 96) | LegacyCommandTableScanMetadata = "scan_metadata"
constant ReservedConnectionNamePrefix (line 113) | ReservedConnectionNamePrefix = "steampipe_"
constant IntrospectionTableQuery (line 117) | IntrospectionTableQuery = "steampipe_query"
constant IntrospectionTableControl (line 118) | IntrospectionTableControl = "steampipe_control"
constant IntrospectionTableBenchmark (line 119) | IntrospectionTableBenchmark = "steampipe_benchmark"
constant IntrospectionTableMod (line 120) | IntrospectionTableMod = "steampipe_mod"
constant IntrospectionTableDashboard (line 121) | IntrospectionTableDashboard = "steampipe_dashboard"
constant IntrospectionTableDashboardContainer (line 122) | IntrospectionTableDashboardContainer = "steampipe_dashboard_container"
constant IntrospectionTableDashboardCard (line 123) | IntrospectionTableDashboardCard = "steampipe_dashboard_card"
constant IntrospectionTableDashboardChart (line 124) | IntrospectionTableDashboardChart = "steampipe_dashboard_chart"
constant IntrospectionTableDashboardFlow (line 125) | IntrospectionTableDashboardFlow = "steampipe_dashboard_flow"
constant IntrospectionTableDashboardGraph (line 126) | IntrospectionTableDashboardGraph = "steampipe_dashboard_graph"
constant IntrospectionTableDashboardHierarchy (line 127) | IntrospectionTableDashboardHierarchy = "steampipe_dashboard_hierarchy"
constant IntrospectionTableDashboardImage (line 128) | IntrospectionTableDashboardImage = "steampipe_dashboard_image"
constant IntrospectionTableDashboardInput (line 129) | IntrospectionTableDashboardInput = "steampipe_dashboard_input"
constant IntrospectionTableDashboardTable (line 130) | IntrospectionTableDashboardTable = "steampipe_dashboard_table"
constant IntrospectionTableDashboardText (line 131) | IntrospectionTableDashboardText = "steampipe_dashboard_text"
constant IntrospectionTableVariable (line 132) | IntrospectionTableVariable = "steampipe_variable"
constant IntrospectionTableReference (line 133) | IntrospectionTableReference = "steampipe_reference"
constant RuntimeParamsKeyApplicationName (line 137) | RuntimeParamsKeyApplicationName = "application_name"
type Invoker (line 141) | type Invoker
method IsValid (line 159) | func (i Invoker) IsValid() error {
constant InvokerService (line 145) | InvokerService Invoker = "service"
constant InvokerQuery (line 147) | InvokerQuery = "query"
constant InvokerCheck (line 149) | InvokerCheck = "check"
constant InvokerPlugin (line 151) | InvokerPlugin = "plugin"
constant InvokerDashboard (line 153) | InvokerDashboard = "dashboard"
constant InvokerConnectionWatcher (line 155) | InvokerConnectionWatcher = "connection-watcher"
FILE: pkg/constants/default_options.go
constant DefaultConnectionConfigContent (line 5) | DefaultConnectionConfigContent = `
FILE: pkg/constants/default_workspaces.go
constant DefaultWorkspaceContent (line 5) | DefaultWorkspaceContent = `
FILE: pkg/constants/display.go
constant SpinnerShowTimeout (line 8) | SpinnerShowTimeout = 1 * time.Second
constant MaxColumnWidth (line 10) | MaxColumnWidth = 1024
constant NullString (line 13) | NullString = "<null>"
FILE: pkg/constants/env.go
constant EnvUpdateCheck (line 5) | EnvUpdateCheck = "STEAMPIPE_UPDATE_CHECK"
constant EnvInstallDir (line 6) | EnvInstallDir = "STEAMPIPE_INSTALL_DIR"
constant EnvInstallDatabase (line 7) | EnvInstallDatabase = "STEAMPIPE_INITDB_DATABASE_NAME"
constant EnvServicePassword (line 8) | EnvServicePassword = "STEAMPIPE_DATABASE_PASSWORD"
constant EnvMaxParallel (line 9) | EnvMaxParallel = "STEAMPIPE_MAX_PARALLEL"
constant EnvDatabaseStartTimeout (line 11) | EnvDatabaseStartTimeout = "STEAMPIPE_DATABASE_START_TIMEOUT"
constant EnvDatabaseSSLPassword (line 12) | EnvDatabaseSSLPassword = "STEAMPIPE_DATABASE_SSL_PASSWORD"
constant EnvDashboardStartTimeout (line 13) | EnvDashboardStartTimeout = "STEAMPIPE_DASHBOARD_START_TIMEOUT"
constant EnvSnapshotLocation (line 15) | EnvSnapshotLocation = "STEAMPIPE_SNAPSHOT_LOCATION"
constant EnvWorkspaceDatabase (line 16) | EnvWorkspaceDatabase = "STEAMPIPE_WORKSPACE_DATABASE"
constant EnvWorkspaceProfile (line 17) | EnvWorkspaceProfile = "STEAMPIPE_WORKSPACE"
constant EnvPipesHost (line 19) | EnvPipesHost = "PIPES_HOST"
constant EnvPipesToken (line 20) | EnvPipesToken = "PIPES_TOKEN"
constant EnvPipesInstallDir (line 21) | EnvPipesInstallDir = "PIPES_INSTALL_DIR"
constant EnvDisplayWidth (line 23) | EnvDisplayWidth = "STEAMPIPE_DISPLAY_WIDTH"
constant EnvCacheEnabled (line 24) | EnvCacheEnabled = "STEAMPIPE_CACHE"
constant EnvCacheTTL (line 25) | EnvCacheTTL = "STEAMPIPE_CACHE_TTL"
constant EnvCacheMaxTTL (line 26) | EnvCacheMaxTTL = "STEAMPIPE_CACHE_MAX_TTL"
constant EnvCacheMaxSize (line 27) | EnvCacheMaxSize = "STEAMPIPE_CACHE_MAX_SIZE_MB"
constant EnvQueryTimeout (line 28) | EnvQueryTimeout = "STEAMPIPE_QUERY_TIMEOUT"
constant EnvConnectionWatcher (line 30) | EnvConnectionWatcher = "STEAMPIPE_CONNECTION_WATCHER"
constant EnvWorkspaceChDir (line 31) | EnvWorkspaceChDir = "STEAMPIPE_WORKSPACE_CHDIR"
constant EnvModLocation (line 32) | EnvModLocation = "STEAMPIPE_MOD_LOCATION"
constant EnvTelemetry (line 33) | EnvTelemetry = "STEAMPIPE_TELEMETRY"
constant EnvWorkspaceProfileLocation (line 34) | EnvWorkspaceProfileLocation = "STEAMPIPE_WORKSPACE_PROFILES_LOCATION"
constant EnvInputVarPrefix (line 37) | EnvInputVarPrefix = "SP_VAR_"
constant EnvConfigDump (line 40) | EnvConfigDump = "STEAMPIPE_CONFIG_DUMP"
constant EnvMemoryMaxMb (line 42) | EnvMemoryMaxMb = "STEAMPIPE_MEMORY_MAX_MB"
constant EnvMemoryMaxMbPlugin (line 43) | EnvMemoryMaxMbPlugin = "STEAMPIPE_PLUGIN_MEMORY_MAX_MB"
constant EnvPluginStartTimeout (line 45) | EnvPluginStartTimeout = "STEAMPIPE_PLUGIN_START_TIMEOUT"
FILE: pkg/constants/exit_codes.go
constant ExitCodeSuccessful (line 4) | ExitCodeSuccessful = 0
constant ExitCodeControlsAlarm (line 5) | ExitCodeControlsAlarm = 1
constant ExitCodeControlsError (line 6) | ExitCodeControlsError = 2
constant ExitCodePluginLoadingError (line 7) | ExitCodePluginLoadingError = 11
constant ExitCodePluginListFailure (line 8) | ExitCodePluginListFailure = 12
constant ExitCodePluginNotFound (line 9) | ExitCodePluginNotFound = 13
constant ExitCodePluginInstallFailure (line 10) | ExitCodePluginInstallFailure = 14
constant ExitCodeSnapshotCreationFailed (line 11) | ExitCodeSnapshotCreationFailed = 21
constant ExitCodeSnapshotUploadFailed (line 12) | ExitCodeSnapshotUploadFailed = 22
constant ExitCodeServiceSetupFailure (line 13) | ExitCodeServiceSetupFailure = 31
constant ExitCodeServiceStartupFailure (line 14) | ExitCodeServiceStartupFailure = 32
constant ExitCodeServiceStopFailure (line 15) | ExitCodeServiceStopFailure = 33
constant ExitCodeQueryExecutionFailed (line 16) | ExitCodeQueryExecutionFailed = 41
constant ExitCodeLoginCloudConnectionFailed (line 17) | ExitCodeLoginCloudConnectionFailed = 51
constant ExitCodeModInitFailed (line 18) | ExitCodeModInitFailed = 61
constant ExitCodeModInstallFailed (line 19) | ExitCodeModInstallFailed = 62
constant ExitCodeInvalidExecutionEnvironment (line 20) | ExitCodeInvalidExecutionEnvironment = 249
constant ExitCodeInitializationFailed (line 21) | ExitCodeInitializationFailed = 250
constant ExitCodeBindPortUnavailable (line 22) | ExitCodeBindPortUnavailable = 251
constant ExitCodeNoModFile (line 23) | ExitCodeNoModFile = 252
constant ExitCodeFileSystemAccessFailure (line 24) | ExitCodeFileSystemAccessFailure = 253
constant ExitCodeInsufficientOrWrongInputs (line 25) | ExitCodeInsufficientOrWrongInputs = 254
constant ExitCodeUnknownErrorPanic (line 26) | ExitCodeUnknownErrorPanic = 255
FILE: pkg/constants/extensions.go
constant ConfigExtension (line 8) | ConfigExtension = ".spc"
constant SnapshotExtension (line 9) | SnapshotExtension = ".sps"
constant TokenExtension (line 10) | TokenExtension = ".tptt"
constant LegacyTokenExtension (line 11) | LegacyTokenExtension = ".sptt"
FILE: pkg/constants/flags.go
type QueryOutputMode (line 8) | type QueryOutputMode
constant QueryOutputModeCsv (line 11) | QueryOutputModeCsv QueryOutputMode = iota
constant QueryOutputModeJson (line 12) | QueryOutputModeJson
constant QueryOutputModeLine (line 13) | QueryOutputModeLine
constant QueryOutputModeSnapshot (line 14) | QueryOutputModeSnapshot
constant QueryOutputModeSnapshotShort (line 15) | QueryOutputModeSnapshotShort
constant QueryOutputModeTable (line 16) | QueryOutputModeTable
constant OutputFormatSpSnapshotShort (line 20) | OutputFormatSpSnapshotShort = "sps"
type QueryTimingMode (line 31) | type QueryTimingMode
constant QueryTimingModeOff (line 34) | QueryTimingModeOff QueryTimingMode = iota
constant QueryTimingModeOn (line 35) | QueryTimingModeOn
constant QueryTimingModeVerbose (line 36) | QueryTimingModeVerbose
constant QueryTimingModeTrue (line 38) | QueryTimingModeTrue
constant QueryTimingModeFalse (line 39) | QueryTimingModeFalse
type CheckTimingMode (line 59) | type CheckTimingMode
constant CheckTimingModeOff (line 62) | CheckTimingModeOff CheckTimingMode = iota
constant CheckTimingModeOn (line 63) | CheckTimingModeOn
type CheckOutputMode (line 76) | type CheckOutputMode
constant CheckOutputModeText (line 79) | CheckOutputModeText CheckOutputMode = iota
constant CheckOutputModeBrief (line 80) | CheckOutputModeBrief CheckOutputMode = iota
constant CheckOutputModeCsv (line 81) | CheckOutputModeCsv
constant CheckOutputModeHTML (line 82) | CheckOutputModeHTML
constant CheckOutputModeJSON (line 83) | CheckOutputModeJSON
constant CheckOutputModeMd (line 84) | CheckOutputModeMd
constant CheckOutputModeSnapshot (line 85) | CheckOutputModeSnapshot
constant CheckOutputModeSnapshotShort (line 86) | CheckOutputModeSnapshotShort
constant CheckOutputModeNone (line 87) | CheckOutputModeNone
function FlagValues (line 102) | func FlagValues[T comparable](mappings map[T][]string) []string {
FILE: pkg/constants/history.go
constant HistoryFile (line 5) | HistoryFile = "history.json"
constant HistorySize (line 6) | HistorySize = 500
FILE: pkg/constants/image.go
constant BaseImageRef (line 8) | BaseImageRef = "ghcr.io/turbot/steampipe"
FILE: pkg/constants/metaquery_commands.go
constant CmdTableList (line 6) | CmdTableList = ".tables"
constant CmdOutput (line 7) | CmdOutput = ".output"
constant CmdTiming (line 8) | CmdTiming = ".timing"
constant CmdHeaders (line 9) | CmdHeaders = ".header"
constant CmdSeparator (line 10) | CmdSeparator = ".separator"
constant CmdExit (line 11) | CmdExit = ".exit"
constant CmdQuit (line 12) | CmdQuit = ".quit"
constant CmdInspect (line 13) | CmdInspect = ".inspect"
constant CmdConnections (line 14) | CmdConnections = ".connections"
constant CmdMulti (line 15) | CmdMulti = ".multi"
constant CmdClear (line 16) | CmdClear = ".clear"
constant CmdHelp (line 17) | CmdHelp = ".help"
constant CmdSearchPath (line 18) | CmdSearchPath = ".search_path"
constant CmdSearchPathPrefix (line 19) | CmdSearchPathPrefix = ".search_path_prefix"
constant CmdCache (line 20) | CmdCache = ".cache"
constant CmdCacheTtl (line 21) | CmdCacheTtl = ".cache_ttl"
constant CmdAutoComplete (line 22) | CmdAutoComplete = ".autocomplete"
FILE: pkg/constants/notifications.go
constant PostgresNotificationChannel (line 4) | PostgresNotificationChannel = "steampipe_notification"
FILE: pkg/constants/oci.go
constant SteampipeHubOCIBase (line 3) | SteampipeHubOCIBase = "hub.steampipe.io/"
FILE: pkg/constants/output_format.go
constant OutputFormatCSV (line 4) | OutputFormatCSV = "csv"
constant OutputFormatJSON (line 5) | OutputFormatJSON = "json"
constant OutputFormatTable (line 6) | OutputFormatTable = "table"
constant OutputFormatLine (line 7) | OutputFormatLine = "line"
constant OutputFormatNone (line 8) | OutputFormatNone = "none"
constant OutputFormatText (line 9) | OutputFormatText = "text"
constant OutputFormatBrief (line 10) | OutputFormatBrief = "brief"
constant OutputFormatSnapshot (line 11) | OutputFormatSnapshot = "snapshot"
constant OutputFormatSnapshotShort (line 12) | OutputFormatSnapshotShort = "sps"
FILE: pkg/constants/postgresql_conf.go
constant PostgresqlConfContent (line 3) | PostgresqlConfContent = `
constant SteampipeConfContent (line 26) | SteampipeConfContent = `
FILE: pkg/constants/ssl.go
constant ServerCertKey (line 5) | ServerCertKey = "server.key"
constant RootCertKey (line 6) | RootCertKey = "root.key"
constant ServerCert (line 7) | ServerCert = "server.crt"
constant RootCert (line 8) | RootCert = "root.crt"
constant SslConfDir (line 9) | SslConfDir = "/etc/ssl"
FILE: pkg/constants/telemetry.go
constant TelemetryNone (line 5) | TelemetryNone = "none"
constant TelemetryInfo (line 6) | TelemetryInfo = "info"
FILE: pkg/constants/workspace_profile.go
constant DefaultPipesHost (line 4) | DefaultPipesHost = "pipes.turbot.com"
constant LegacyDefaultPipesHost (line 5) | LegacyDefaultPipesHost = "cloud.steampipe.io"
constant DefaultWorkspaceDatabase (line 6) | DefaultWorkspaceDatabase = "local"
FILE: pkg/db/db_client/db_client.go
type DbClient (line 25) | type DbClient struct
method closePools (line 115) | func (c *DbClient) closePools() {
method loadServerSettings (line 124) | func (c *DbClient) loadServerSettings(ctx context.Context) error {
method shouldFetchTiming (line 141) | func (c *DbClient) shouldFetchTiming() bool {
method shouldFetchVerboseTiming (line 151) | func (c *DbClient) shouldFetchVerboseTiming() bool {
method lockSessions (line 157) | func (c *DbClient) lockSessions() {
method sessionsTryLock (line 167) | func (c *DbClient) sessionsTryLock() bool {
method sessionsUnlock (line 179) | func (c *DbClient) sessionsUnlock() {
method ServerSettings (line 191) | func (c *DbClient) ServerSettings() *db_common.ServerSettings {
method RegisterNotificationListener (line 197) | func (c *DbClient) RegisterNotificationListener(func(notification *pgc...
method Close (line 202) | func (c *DbClient) Close(context.Context) error {
method GetSchemaFromDB (line 218) | func (c *DbClient) GetSchemaFromDB(ctx context.Context) (*db_common.Sc...
method GetSchemaFromDBLegacy (line 271) | func (c *DbClient) GetSchemaFromDBLegacy(ctx context.Context, conn *pg...
method ResetPools (line 280) | func (c *DbClient) ResetPools(ctx context.Context) {
method buildSchemasQuery (line 292) | func (c *DbClient) buildSchemasQuery(schemas ...string) string {
method buildSchemasQueryLegacy (line 327) | func (c *DbClient) buildSchemasQueryLegacy() string {
function NewDbClient (line 67) | func NewDbClient(ctx context.Context, connectionString string, opts ...C...
FILE: pkg/db/db_client/db_client_connect.go
constant MaxConnLifeTime (line 19) | MaxConnLifeTime = 10 * time.Minute
constant MaxConnIdleTime (line 20) | MaxConnIdleTime = 1 * time.Minute
type DbConnectionCallback (line 23) | type DbConnectionCallback
method establishConnectionPool (line 25) | func (c *DbClient) establishConnectionPool(ctx context.Context, override...
method establishManagementConnectionPool (line 113) | func (c *DbClient) establishManagementConnectionPool(ctx context.Context...
function createManagementPoolConfig (line 129) | func createManagementPoolConfig(config *pgxpool.Config, overrides client...
FILE: pkg/db/db_client/db_client_execute.go
method ExecuteSync (line 31) | func (c *DbClient) ExecuteSync(ctx context.Context, query string, args ....
method ExecuteSyncInSession (line 48) | func (c *DbClient) ExecuteSyncInSession(ctx context.Context, session *db...
method Execute (line 80) | func (c *DbClient) Execute(ctx context.Context, query string, args ...an...
method ExecuteInSession (line 96) | func (c *DbClient) ExecuteInSession(ctx context.Context, session *db_com...
method getExecuteContext (line 166) | func (c *DbClient) getExecuteContext(ctx context.Context) context.Context {
method getQueryTiming (line 180) | func (c *DbClient) getQueryTiming(ctx context.Context, startTime time.Ti...
method loadTimingSummary (line 219) | func (c *DbClient) loadTimingSummary(ctx context.Context, session *db_co...
method loadTimingMetadata (line 244) | func (c *DbClient) loadTimingMetadata(ctx context.Context, session *db_c...
method startQuery (line 272) | func (c *DbClient) startQuery(ctx context.Context, conn *pgx.Conn, query...
method readRows (line 295) | func (c *DbClient) readRows(ctx context.Context, rows pgx.Rows, result *...
function readRow (line 342) | func readRow(rows pgx.Rows, cols []*pqueryresult.ColumnDef) ([]interface...
function populateRow (line 350) | func populateRow(columnValues []interface{}, cols []*pqueryresult.Column...
function isStreamingOutput (line 429) | func isStreamingOutput() bool {
function humanizeRowCount (line 435) | func humanizeRowCount(count int) string {
FILE: pkg/db/db_client/db_client_execute_retry.go
method startQueryWithRetries (line 20) | func (c *DbClient) startQueryWithRetries(ctx context.Context, session *d...
FILE: pkg/db/db_client/db_client_execute_test.go
function TestTimestamptzTextFormatImplemented (line 20) | func TestTimestamptzTextFormatImplemented(t *testing.T) {
function TestTimestamptzFormatCorrectness (line 75) | func TestTimestamptzFormatCorrectness(t *testing.T) {
function TestTimestamptzFormatDoesNotAffectOtherTypes (line 120) | func TestTimestamptzFormatDoesNotAffectOtherTypes(t *testing.T) {
FILE: pkg/db/db_client/db_client_options.go
type PoolOverrides (line 9) | type PoolOverrides struct
method apply (line 16) | func (c PoolOverrides) apply(config *pgxpool.Config) {
type clientConfig (line 28) | type clientConfig struct
type ClientOption (line 33) | type ClientOption
function WithUserPoolOverride (line 35) | func WithUserPoolOverride(s PoolOverrides) ClientOption {
function WithManagementPoolOverride (line 41) | func WithManagementPoolOverride(s PoolOverrides) ClientOption {
FILE: pkg/db/db_client/db_client_search_path.go
method SetRequiredSessionSearchPath (line 21) | func (c *DbClient) SetRequiredSessionSearchPath(ctx context.Context) err...
method LoadUserSearchPath (line 59) | func (c *DbClient) LoadUserSearchPath(ctx context.Context) error {
method loadUserSearchPath (line 68) | func (c *DbClient) loadUserSearchPath(ctx context.Context, connection *p...
method GetRequiredSessionSearchPath (line 80) | func (c *DbClient) GetRequiredSessionSearchPath() []string {
method GetCustomSearchPath (line 91) | func (c *DbClient) GetCustomSearchPath() []string {
method ensureSessionSearchPath (line 99) | func (c *DbClient) ensureSessionSearchPath(ctx context.Context, session ...
FILE: pkg/db/db_client/db_client_session.go
method AcquireManagementConnection (line 14) | func (c *DbClient) AcquireManagementConnection(ctx context.Context) (*pg...
method AcquireSession (line 18) | func (c *DbClient) AcquireSession(ctx context.Context) (sessionResult *d...
FILE: pkg/db/db_client/db_client_session_test.go
function TestDbClient_SessionRegistration (line 16) | func TestDbClient_SessionRegistration(t *testing.T) {
function TestDbClient_SessionUnregistration (line 40) | func TestDbClient_SessionUnregistration(t *testing.T) {
function TestDbClient_ConcurrentSessionRegistration (line 74) | func TestDbClient_ConcurrentSessionRegistration(t *testing.T) {
function TestDbClient_SessionMapGrowthUnbounded (line 109) | func TestDbClient_SessionMapGrowthUnbounded(t *testing.T) {
function TestDbClient_SearchPathUpdates (line 146) | func TestDbClient_SearchPathUpdates(t *testing.T) {
function TestSearchPathAccessShouldUseReadLocks (line 171) | func TestSearchPathAccessShouldUseReadLocks(t *testing.T) {
function TestDbClient_SessionConnectionNilSafety (line 189) | func TestDbClient_SessionConnectionNilSafety(t *testing.T) {
function TestDbClient_SessionSearchPathUpdatesThreadSafe (line 204) | func TestDbClient_SessionSearchPathUpdatesThreadSafe(t *testing.T) {
FILE: pkg/db/db_client/db_client_test.go
function TestSessionMapCleanupImplemented (line 22) | func TestSessionMapCleanupImplemented(t *testing.T) {
function TestBeforeCloseCleanupShouldBeNonBlocking (line 60) | func TestBeforeCloseCleanupShouldBeNonBlocking(t *testing.T) {
function TestDbClient_Close_Idempotent (line 89) | func TestDbClient_Close_Idempotent(t *testing.T) {
function TestDbClient_ConcurrentSessionAccess (line 119) | func TestDbClient_ConcurrentSessionAccess(t *testing.T) {
function TestDbClient_Close_ClearsSessionsMap (line 171) | func TestDbClient_Close_ClearsSessionsMap(t *testing.T) {
function TestDbClient_ConcurrentCloseAndRead (line 197) | func TestDbClient_ConcurrentCloseAndRead(t *testing.T) {
function TestDbClient_ConcurrentClose (line 249) | func TestDbClient_ConcurrentClose(t *testing.T) {
function TestDbClient_SessionsMapNilAfterClose (line 282) | func TestDbClient_SessionsMapNilAfterClose(t *testing.T) {
function TestDbClient_SessionsMutexProtectsMap (line 310) | func TestDbClient_SessionsMutexProtectsMap(t *testing.T) {
function TestDbClient_SessionMapDocumentation (line 328) | func TestDbClient_SessionMapDocumentation(t *testing.T) {
function TestDbClient_ClosePools_NilPoolsHandling (line 343) | func TestDbClient_ClosePools_NilPoolsHandling(t *testing.T) {
function TestResetPools (line 357) | func TestResetPools(t *testing.T) {
function TestDbClient_SessionsMapInitialized (line 377) | func TestDbClient_SessionsMapInitialized(t *testing.T) {
function TestDbClient_DeferredCleanupInNewDbClient (line 394) | func TestDbClient_DeferredCleanupInNewDbClient(t *testing.T) {
function TestDbClient_ParallelSessionInitLock (line 409) | func TestDbClient_ParallelSessionInitLock(t *testing.T) {
function TestDbClient_BeforeCloseCallbackNilSafety (line 425) | func TestDbClient_BeforeCloseCallbackNilSafety(t *testing.T) {
function TestDbClient_BeforeCloseHandlesNilSessions (line 444) | func TestDbClient_BeforeCloseHandlesNilSessions(t *testing.T) {
function TestDbClient_DisableTimingFlag (line 476) | func TestDbClient_DisableTimingFlag(t *testing.T) {
FILE: pkg/db/db_client/pgx_types.go
function columnTypeDatabaseTypeName (line 15) | func columnTypeDatabaseTypeName(field pgconn.FieldDescription, connectio...
function fieldDescriptionsToColumns (line 23) | func fieldDescriptionsToColumns(fieldDescriptions []pgconn.FieldDescript...
function ensureUniqueColumnName (line 43) | func ensureUniqueColumnName(cols []*queryresult.ColumnDef) error {
FILE: pkg/db/db_common/acquire_session_result.go
type AcquireSessionResult (line 7) | type AcquireSessionResult struct
FILE: pkg/db/db_common/appname.go
function IsClientAppName (line 9) | func IsClientAppName(appName string) bool {
function IsClientSystemAppName (line 13) | func IsClientSystemAppName(appName string) bool {
function IsServiceAppName (line 17) | func IsServiceAppName(appName string) bool {
FILE: pkg/db/db_common/cache_control.go
function SetCacheTtl (line 13) | func SetCacheTtl(ctx context.Context, duration time.Duration, connection...
function CacheClear (line 21) | func CacheClear(ctx context.Context, connection *pgx.Conn) error {
function SetCacheEnabled (line 26) | func SetCacheEnabled(ctx context.Context, enabled bool, connection *pgx....
function executeCacheSetFunction (line 34) | func executeCacheSetFunction(ctx context.Context, settingValue string, c...
function executeCacheTtlSetFunction (line 46) | func executeCacheTtlSetFunction(ctx context.Context, seconds string, con...
FILE: pkg/db/db_common/cache_settings.go
function ValidateClientCacheSettings (line 11) | func ValidateClientCacheSettings(c Client) error_helpers.ErrorAndWarnings {
function ValidateClientCacheEnabled (line 18) | func ValidateClientCacheEnabled(c Client) error_helpers.ErrorAndWarnings {
function ValidateClientCacheTtl (line 32) | func ValidateClientCacheTtl(c Client) error_helpers.ErrorAndWarnings {
function CanSetCacheTtl (line 48) | func CanSetCacheTtl(ss *ServerSettings, newTtl int) (bool, string) {
FILE: pkg/db/db_common/client.go
type Client (line 12) | type Client interface
FILE: pkg/db/db_common/db_session.go
type DatabaseSession (line 14) | type DatabaseSession struct
method Close (line 28) | func (s *DatabaseSession) Close(waitForCleanup bool) {
function NewDBSession (line 22) | func NewDBSession(backendPid uint32) *DatabaseSession {
FILE: pkg/db/db_common/errors.go
function IsRelationNotFoundError (line 9) | func IsRelationNotFoundError(err error) bool {
function GetMissingSchemaFromIsRelationNotFoundError (line 14) | func GetMissingSchemaFromIsRelationNotFoundError(err error) (string, str...
FILE: pkg/db/db_common/execute.go
function ExecuteQuery (line 11) | func ExecuteQuery(ctx context.Context, client Client, queryString string...
FILE: pkg/db/db_common/init_result.go
type InitResult (line 13) | type InitResult struct
method AddMessage (line 23) | func (r *InitResult) AddMessage(message string) {
method AddWarnings (line 27) | func (r *InitResult) AddWarnings(warnings ...string) {
method HasMessages (line 31) | func (r *InitResult) HasMessages() bool {
method DisplayMessages (line 35) | func (r *InitResult) DisplayMessages() {
FILE: pkg/db/db_common/max_connections.go
function MaxDbConnections (line 9) | func MaxDbConnections() int {
FILE: pkg/db/db_common/notification_cache.go
type NotificationListener (line 17) | type NotificationListener struct
method Stop (line 52) | func (c *NotificationListener) Stop(ctx context.Context) {
method RegisterListener (line 58) | func (c *NotificationListener) RegisterListener(onNotification func(*p...
method listenToPgNotificationsAsync (line 71) | func (c *NotificationListener) listenToPgNotificationsAsync(ctx contex...
function NewNotificationListener (line 26) | func NewNotificationListener(ctx context.Context, conn *pgx.Conn) (*Noti...
FILE: pkg/db/db_common/postgres.go
function PgEscapeName (line 10) | func PgEscapeName(name string) string {
function PgEscapeString (line 20) | func PgEscapeString(str string) string {
function PgEscapeSearchPath (line 25) | func PgEscapeSearchPath(searchPath []string) []string {
FILE: pkg/db/db_common/query_with_args.go
type QueryWithArgs (line 3) | type QueryWithArgs struct
FILE: pkg/db/db_common/schema.go
type schemaRecord (line 15) | type schemaRecord struct
function LoadForeignSchemaNames (line 27) | func LoadForeignSchemaNames(ctx context.Context, conn *pgx.Conn) ([]stri...
function LoadSchemaMetadata (line 48) | func LoadSchemaMetadata(ctx context.Context, conn *pgx.Conn, query strin...
function buildSchemaMetadata (line 65) | func buildSchemaMetadata(records []schemaRecord) (_ *SchemaMetadata, err...
function getSchemaRecordsFromRows (line 105) | func getSchemaRecordsFromRows(rows pgx.Rows) ([]schemaRecord, error) {
FILE: pkg/db/db_common/schema_metadata.go
function NewSchemaMetadata (line 12) | func NewSchemaMetadata() *SchemaMetadata {
type SchemaMetadata (line 19) | type SchemaMetadata struct
method GetSchemas (line 47) | func (m *SchemaMetadata) GetSchemas() []string {
method GetTablesInSchema (line 57) | func (m *SchemaMetadata) GetTablesInSchema(schemaName string) map[stri...
type TableSchema (line 27) | type TableSchema struct
type ColumnSchema (line 37) | type ColumnSchema struct
function IsSchemaNameValid (line 62) | func IsSchemaNameValid(name string) (bool, string) {
FILE: pkg/db/db_common/search_path.go
function EnsureInternalSchemaSuffix (line 14) | func EnsureInternalSchemaSuffix(searchPath []string) []string {
function AddSearchPathPrefix (line 22) | func AddSearchPathPrefix(searchPathPrefix []string, searchPath []string)...
function BuildSearchPathResult (line 35) | func BuildSearchPathResult(searchPathString string) ([]string, error) {
function GetUserSearchPath (line 50) | func GetUserSearchPath(ctx context.Context, conn *pgx.Conn) ([]string, e...
FILE: pkg/db/db_common/server_settings.go
type ServerSettings (line 7) | type ServerSettings struct
FILE: pkg/db/db_common/session_system.go
type SystemClientExecutor (line 17) | type SystemClientExecutor
function ExecuteSystemClientCall (line 21) | func ExecuteSystemClientCall(ctx context.Context, conn *pgx.Conn, execut...
FILE: pkg/db/db_common/sql_connections.go
function GetCommentsQueryForPlugin (line 9) | func GetCommentsQueryForPlugin(connectionName string, p map[string]*prot...
function GetUpdateConnectionQuery (line 29) | func GetUpdateConnectionQuery(connectionName, pluginSchemaName string) s...
function GetDeleteConnectionQuery (line 61) | func GetDeleteConnectionQuery(name string) string {
FILE: pkg/db/db_common/sql_function.go
type SQLFunction (line 4) | type SQLFunction struct
FILE: pkg/db/db_common/tls_config.go
function AddRootCertToConfig (line 8) | func AddRootCertToConfig(config *pgconn.Config, certLocation string) err...
FILE: pkg/db/db_common/wait_connection.go
type waitConfig (line 21) | type waitConfig struct
type WaitOption (line 26) | type WaitOption
function WithRetryInterval (line 28) | func WithRetryInterval(d time.Duration) WaitOption {
function WithTimeout (line 33) | func WithTimeout(d time.Duration) WaitOption {
function WaitForConnection (line 39) | func WaitForConnection(ctx context.Context, connStr string, options ...W...
function WaitForPool (line 76) | func WaitForPool(ctx context.Context, db *pgxpool.Pool, waitOptions ...W...
function WaitForConnectionPing (line 90) | func WaitForConnectionPing(ctx context.Context, connection *pgx.Conn, wa...
function WaitForRecovery (line 123) | func WaitForRecovery(ctx context.Context, connection *pgx.Conn, waitOpti...
FILE: pkg/db/db_local/backup.go
constant backupFormat (line 30) | backupFormat = "custom"
constant backupDumpFileExtension (line 31) | backupDumpFileExtension = "dump"
constant backupTextFileExtension (line 32) | backupTextFileExtension = "sql"
type pgRunningInfo (line 37) | type pgRunningInfo struct
method stop (line 48) | func (r *pgRunningInfo) stop(ctx context.Context) error {
constant noMatViewRefreshListFileName (line 57) | noMatViewRefreshListFileName = "without_refresh.lst"
constant onlyMatViewRefreshListFileName (line 58) | onlyMatViewRefreshListFileName = "only_refresh.lst"
function prepareBackup (line 63) | func prepareBackup(ctx context.Context) (*string, error) {
function killRunningDbInstance (line 100) | func killRunningDbInstance(ctx context.Context) error {
function takeBackup (line 127) | func takeBackup(ctx context.Context, config *pgRunningInfo) error {
function startDatabaseInLocation (line 153) | func startDatabaseInLocation(ctx context.Context, location string) (*pgR...
function findDifferentPgInstallation (line 199) | func findDifferentPgInstallation(ctx context.Context) (bool, string, err...
function restoreDBBackup (line 231) | func restoreDBBackup(ctx context.Context) error {
function runRestoreUsingList (line 314) | func runRestoreUsingList(ctx context.Context, info *RunningDBInstanceInf...
function partitionTableOfContents (line 351) | func partitionTableOfContents(ctx context.Context, tableOfContentsOfBack...
function getTableOfContentsFromBackup (line 369) | func getTableOfContentsFromBackup(ctx context.Context) ([]string, error) {
function retainBackup (line 409) | func retainBackup(ctx context.Context) error {
function pgDumpCmd (line 444) | func pgDumpCmd(ctx context.Context, args ...string) *exec.Cmd {
function pgRestoreCmd (line 462) | func pgRestoreCmd(ctx context.Context, args ...string) *exec.Cmd {
function trimBackups (line 481) | func trimBackups() {
FILE: pkg/db/db_local/backup_test.go
function TestTrimBackups (line 16) | func TestTrimBackups(t *testing.T) {
FILE: pkg/db/db_local/create_connection.go
function getLocalSteampipeConnectionString (line 23) | func getLocalSteampipeConnectionString(opts *CreateDbOptions) (string, e...
type CreateDbOptions (line 74) | type CreateDbOptions struct
function CreateLocalDbConnection (line 83) | func CreateLocalDbConnection(ctx context.Context, opts *CreateDbOptions)...
function CreateConnectionPool (line 121) | func CreateConnectionPool(ctx context.Context, opts *CreateDbOptions, ma...
function createMaintenanceClient (line 175) | func createMaintenanceClient(ctx context.Context, port int) (*pgx.Conn, ...
FILE: pkg/db/db_local/execute.go
function executeSqlAsRoot (line 13) | func executeSqlAsRoot(ctx context.Context, statements ...string) ([]pgco...
function ExecuteSqlInTransaction (line 24) | func ExecuteSqlInTransaction(ctx context.Context, conn *pgx.Conn, statem...
function ExecuteSqlWithArgsInTransaction (line 41) | func ExecuteSqlWithArgsInTransaction(ctx context.Context, conn *pgx.Conn...
FILE: pkg/db/db_local/install.go
function noBackupWarning (line 29) | func noBackupWarning() string {
function EnsureDBInstalled (line 40) | func EnsureDBInstalled(ctx context.Context) (err error) {
function downloadAndInstallDbFiles (line 127) | func downloadAndInstallDbFiles(ctx context.Context) error {
function IsDBInstalled (line 146) | func IsDBInstalled() bool {
function IsFDWInstalled (line 160) | func IsFDWInstalled() bool {
function prepareDb (line 175) | func prepareDb(ctx context.Context) error {
function fdwNeedsUpdate (line 227) | func fdwNeedsUpdate(versionInfo *versionfile.DatabaseVersionFile) bool {
function dbNeedsUpdate (line 231) | func dbNeedsUpdate(versionInfo *versionfile.DatabaseVersionFile) bool {
function installFDW (line 235) | func installFDW(ctx context.Context, firstSetup bool) (string, error) {
function needsInit (line 255) | func needsInit() bool {
function runInstall (line 263) | func runInstall(ctx context.Context, oldDbName *string) error {
function resolveDatabaseName (line 338) | func resolveDatabaseName(oldDbName *string) string {
function startServiceForInstall (line 352) | func startServiceForInstall(port int) (*psutils.Process, error) {
function isValidDatabaseName (line 380) | func isValidDatabaseName(databaseName string) bool {
function initDatabase (line 387) | func initDatabase() error {
function installDatabaseWithPermissions (line 438) | func installDatabaseWithPermissions(ctx context.Context, databaseName st...
function writePgHbaContent (line 506) | func writePgHbaContent(databaseName string, username string) error {
function installForeignServer (line 511) | func installForeignServer(ctx context.Context, rawClient *pgx.Conn) error {
function updateDownloadedBinarySignature (line 535) | func updateDownloadedBinarySignature() error {
FILE: pkg/db/db_local/install_test.go
function TestIsValidDatabaseName (line 7) | func TestIsValidDatabaseName(t *testing.T) {
function TestIsValidDatabaseName_EmptyString (line 23) | func TestIsValidDatabaseName_EmptyString(t *testing.T) {
FILE: pkg/db/db_local/internal.go
function dropLegacyInternalSchema (line 22) | func dropLegacyInternalSchema(ctx context.Context, conn *pgx.Conn) error {
function legacyInternalExists (line 42) | func legacyInternalExists(ctx context.Context, conn *pgx.Conn) (bool, er...
function setupInternal (line 122) | func setupInternal(ctx context.Context, conn *pgx.Conn) error {
function getFunctionAddStrings (line 165) | func getFunctionAddStrings(functions []db_common.SQLFunction) []string {
function getFunctionAddString (line 173) | func getFunctionAddString(function db_common.SQLFunction) string {
function validateFunction (line 202) | func validateFunction(f db_common.SQLFunction) error {
function initializeConnectionStateTable (line 214) | func initializeConnectionStateTable(ctx context.Context, conn *pgx.Conn)...
function PopulatePluginTable (line 255) | func PopulatePluginTable(ctx context.Context, conn *pgx.Conn) error {
FILE: pkg/db/db_local/local_db_client.go
type LocalDbClient (line 20) | type LocalDbClient struct
method initNotificationListener (line 96) | func (c *LocalDbClient) initNotificationListener(ctx context.Context) ...
method Close (line 117) | func (c *LocalDbClient) Close(ctx context.Context) error {
method RegisterNotificationListener (line 132) | func (c *LocalDbClient) RegisterNotificationListener(f func(notificati...
function GetLocalClient (line 27) | func GetLocalClient(ctx context.Context, invoker constants.Invoker, opts...
function newLocalClient (line 71) | func newLocalClient(ctx context.Context, invoker constants.Invoker, opts...
FILE: pkg/db/db_local/logs.go
constant logRetentionDays (line 12) | logRetentionDays = 7
function TrimLogs (line 14) | func TrimLogs() {
FILE: pkg/db/db_local/notify.go
function SendPostgresNotification (line 15) | func SendPostgresNotification(_ context.Context, conn *pgx.Conn, notific...
FILE: pkg/db/db_local/password.go
type Passwords (line 15) | type Passwords struct
function writePasswordFile (line 20) | func writePasswordFile(password string) error {
function readPasswordFile (line 27) | func readPasswordFile() (string, error) {
function generatePassword (line 42) | func generatePassword() string {
function migrateLegacyPasswordFile (line 55) | func migrateLegacyPasswordFile() error {
function getLegacyPasswords (line 69) | func getLegacyPasswords() (*Passwords, error) {
FILE: pkg/db/db_local/refresh_functions_test.go
function TestConcurrentPerms (line 14) | func TestConcurrentPerms(t *testing.T) {
function runQueriesAsync (line 62) | func runQueriesAsync(queries []string, wg *sync.WaitGroup, errChan chan ...
FILE: pkg/db/db_local/running_info.go
constant RunningDBStructVersion (line 19) | RunningDBStructVersion = 20220411
type RunningDBInstanceInfo (line 22) | type RunningDBInstanceInfo struct
method MatchWithGivenListenAddresses (line 96) | func (r *RunningDBInstanceInfo) MatchWithGivenListenAddresses(listenAd...
method Save (line 108) | func (r *RunningDBInstanceInfo) Save() error {
method String (line 119) | func (r *RunningDBInstanceInfo) String() string {
function newRunningDBInstanceInfo (line 36) | func newRunningDBInstanceInfo(cmd *exec.Cmd, listenAddresses []string, p...
function getListenAddresses (line 54) | func getListenAddresses(listenAddresses []string) []string {
function loadRunningInstanceInfo (line 137) | func loadRunningInstanceInfo() (*RunningDBInstanceInfo, error) {
function removeRunningInstanceInfo (line 158) | func removeRunningInstanceInfo() error {
FILE: pkg/db/db_local/search_path.go
function SetUserSearchPath (line 18) | func SetUserSearchPath(ctx context.Context, pool *pgxpool.Pool) ([]strin...
function getDefaultSearchPath (line 81) | func getDefaultSearchPath() []string {
FILE: pkg/db/db_local/server_settings.go
function setupServerSettingsTable (line 20) | func setupServerSettingsTable(ctx context.Context, conn *pgx.Conn) error {
FILE: pkg/db/db_local/service.go
function GetState (line 17) | func GetState() (*RunningDBInstanceInfo, error) {
function errorIfUnknownService (line 50) | func errorIfUnknownService() error {
FILE: pkg/db/db_local/sql_clone.go
constant cloneForeignSchemaSQL (line 3) | cloneForeignSchemaSQL = `CREATE OR REPLACE FUNCTION clone_foreign_schema(
constant cloneCommentsSQL (line 79) | cloneCommentsSQL = `
FILE: pkg/db/db_local/ssl.go
constant CertIssuer (line 27) | CertIssuer = "steampipe.io"
constant ServerCertValidityPeriod (line 28) | ServerCertValidityPeriod = 3 * (365 * (24 * time.Hour))
function removeExpiringSelfIssuedCertificates (line 33) | func removeExpiringSelfIssuedCertificates() error {
function isRootCertificateSelfIssued (line 65) | func isRootCertificateSelfIssued() bool {
function isServerCertificateSelfIssued (line 73) | func isServerCertificateSelfIssued() bool {
function certificatesExist (line 82) | func certificatesExist() bool {
function removeServerCertificate (line 87) | func removeServerCertificate() error {
function removeAllCertificates (line 98) | func removeAllCertificates() error {
function isRootCertificateExpiring (line 111) | func isRootCertificateExpiring() bool {
function isServerCertificateExpiring (line 122) | func isServerCertificateExpiring() bool {
function ensureCertificates (line 134) | func ensureCertificates() (err error) {
function rootCertificateAndKeyExists (line 162) | func rootCertificateAndKeyExists() bool {
function serverCertificateAndKeyExist (line 167) | func serverCertificateAndKeyExist() bool {
function isCerticateExpiring (line 172) | func isCerticateExpiring(certificate *x509.Certificate) bool {
function generateRootCertificate (line 185) | func generateRootCertificate() (*x509.Certificate, *rsa.PrivateKey, erro...
function generateServerCertificate (line 220) | func generateServerCertificate(caCertificateData *x509.Certificate, caPr...
function getSerialNumber (line 261) | func getSerialNumber(t time.Time) *big.Int {
function sslStatus (line 271) | func sslStatus() string {
function dsnSSLParams (line 279) | func dsnSSLParams() map[string]string {
function ensureRootPrivateKey (line 306) | func ensureRootPrivateKey() (*rsa.PrivateKey, error) {
function loadRootPrivateKey (line 328) | func loadRootPrivateKey() (*rsa.PrivateKey, error) {
FILE: pkg/db/db_local/start_services.go
type StartResult (line 33) | type StartResult struct
method SetError (line 41) | func (r *StartResult) SetError(err error) *StartResult {
type StartDbStatus (line 48) | type StartDbStatus
constant ServiceStarted (line 52) | ServiceStarted StartDbStatus = iota + 1
constant ServiceAlreadyRunning (line 53) | ServiceAlreadyRunning
constant ServiceFailedToStart (line 54) | ServiceFailedToStart
type StartListenType (line 58) | type StartListenType
method ToListenAddresses (line 68) | func (slt StartListenType) ToListenAddresses() []string {
constant ListenTypeNetwork (line 62) | ListenTypeNetwork StartListenType = "network"
constant ListenTypeLocal (line 64) | ListenTypeLocal = "local"
function StartServices (line 78) | func StartServices(ctx context.Context, listenAddresses []string, port i...
function ensurePluginManager (line 143) | func ensurePluginManager(ctx context.Context) (*pluginmanager.PluginMana...
function postServiceStart (line 169) | func postServiceStart(ctx context.Context, res *StartResult) error {
function startDB (line 219) | func startDB(ctx context.Context, listenAddresses []string, port int, in...
function ensureService (line 321) | func ensureService(ctx context.Context, databaseName string) error {
function getDatabaseName (line 351) | func getDatabaseName(ctx context.Context, port int) (string, error) {
function resolvePassword (line 362) | func resolvePassword() (string, error) {
function startPostgresProcess (line 378) | func startPostgresProcess(ctx context.Context, listenAddresses []string,...
function retrieveDatabaseNameFromService (line 399) | func retrieveDatabaseNameFromService(ctx context.Context, port int) (str...
function writePGConf (line 417) | func writePGConf(ctx context.Context) error {
function updateDatabaseNameInRunningInfo (line 436) | func updateDatabaseNameInRunningInfo(ctx context.Context, databaseName s...
function createCmd (line 445) | func createCmd(ctx context.Context, port int, listenAddresses []string) ...
function setupLogCollection (line 499) | func setupLogCollection(cmd *exec.Cmd) {
function traceoutServiceLogs (line 511) | func traceoutServiceLogs(logChannel chan string, stopLogStreamFn func()) {
function setServicePassword (line 521) | func setServicePassword(ctx context.Context, password string) error {
function setupLogCollector (line 535) | func setupLogCollector(postgresCmd *exec.Cmd) (chan string, func(), erro...
function ensurePgExtensions (line 585) | func ensurePgExtensions(ctx context.Context, rootClient *pgx.Conn) error {
function ensureSteampipeServer (line 604) | func ensureSteampipeServer(ctx context.Context, rootClient *pgx.Conn) er...
function ensureTempTablePermissions (line 618) | func ensureTempTablePermissions(ctx context.Context, databaseName string...
function killInstanceIfAny (line 630) | func killInstanceIfAny(ctx context.Context) bool {
function FindAllSteampipePostgresInstances (line 647) | func FindAllSteampipePostgresInstances(ctx context.Context) ([]*psutils....
function isSteampipePostgresProcess (line 667) | func isSteampipePostgresProcess(ctx context.Context, cmdline []string) b...
FILE: pkg/db/db_local/stop_services.go
type StopStatus (line 25) | type StopStatus
constant ServiceStopped (line 29) | ServiceStopped StopStatus = iota + 1
constant ServiceNotRunning (line 30) | ServiceNotRunning
constant ServiceStopFailed (line 31) | ServiceStopFailed
constant ServiceStopTimedOut (line 32) | ServiceStopTimedOut
function ShutdownService (line 36) | func ShutdownService(ctx context.Context, invoker constants.Invoker) {
type ClientCount (line 82) | type ClientCount struct
function GetClientCount (line 101) | func GetClientCount(ctx context.Context) (*ClientCount, error) {
function StopServices (line 163) | func StopServices(ctx context.Context, force bool, invoker constants.Inv...
function stopDBService (line 188) | func stopDBService(ctx context.Context, force bool) (StopStatus, error) {
function doThreeStepPostgresExit (line 252) | func doThreeStepPostgresExit(ctx context.Context, process *psutils.Proce...
function waitForProcessExit (line 297) | func waitForProcessExit(process *psutils.Process, waitFor time.Duration)...
function getPrintableProcessDetails (line 319) | func getPrintableProcessDetails(process *psutils.Process, indent int) st...
FILE: pkg/db/platform/platform_paths.go
type PlatformPaths (line 4) | type PlatformPaths struct
FILE: pkg/db/sslio/sslio.go
function ParseCertificateInLocation (line 15) | func ParseCertificateInLocation(location string) (*x509.Certificate, err...
function WriteCertificate (line 33) | func WriteCertificate(path string, certificate []byte) error {
function WritePrivateKey (line 37) | func WritePrivateKey(path string, key *rsa.PrivateKey) error {
function writeAsPEM (line 41) | func writeAsPEM(location string, pemType string, b []byte) error {
FILE: pkg/display/timing.go
function DisplayTiming (line 17) | func DisplayTiming(result *queryresult.Result, rowCount int) {
function getTiming (line 30) | func getTiming(result *queryresult.Result, count int) *queryresult.Timin...
function buildTimingString (line 47) | func buildTimingString(timingResult *queryresult.TimingResult) string {
function getDurationString (line 94) | func getDurationString(durationMs int64, p *message.Printer) string {
function getVerboseTimingString (line 103) | func getVerboseTimingString(sb *strings.Builder, p *message.Printer, tim...
function formatQuals (line 145) | func formatQuals(scan *queryresult.ScanMetadataRow) string {
function formatQualValue (line 187) | func formatQualValue(val any) string {
FILE: pkg/error_helpers/cancelled.go
function IsContextCanceled (line 8) | func IsContextCanceled(ctx context.Context) bool {
function IsContextCancelledError (line 12) | func IsContextCancelledError(err error) bool {
FILE: pkg/error_helpers/cloud.go
function IsInvalidWorkspaceDatabaseArg (line 3) | func IsInvalidWorkspaceDatabaseArg(err error) bool {
function IsInvalidCloudToken (line 7) | func IsInvalidCloudToken(err error) bool {
FILE: pkg/error_helpers/diags.go
function DiagsToError (line 13) | func DiagsToError(prefix string, diags tfdiags.Diagnostics) error {
FILE: pkg/error_helpers/postgres.go
function DecodePgError (line 10) | func DecodePgError(err error) error {
FILE: pkg/error_helpers/utils.go
function init (line 19) | func init() {
function WrapError (line 23) | func WrapError(err error) error {
function FailOnError (line 30) | func FailOnError(err error) {
function FailOnErrorWithMessage (line 37) | func FailOnErrorWithMessage(err error, message string) {
function ShowError (line 44) | func ShowError(ctx context.Context, err error) {
function ShowErrorWithMessage (line 54) | func ShowErrorWithMessage(ctx context.Context, err error, message string) {
function TransformErrorToSteampipe (line 66) | func TransformErrorToSteampipe(err error) error {
function HandleCancelError (line 90) | func HandleCancelError(err error) error {
function HandleQueryTimeoutError (line 98) | func HandleQueryTimeoutError(err error) error {
function IsCancelledError (line 105) | func IsCancelledError(err error) bool {
function ShowWarning (line 109) | func ShowWarning(warning string) {
function CombineErrorsWithPrefix (line 116) | func CombineErrorsWithPrefix(prefix string, errors ...error) error {
function allErrorsNil (line 144) | func allErrorsNil(errors ...error) bool {
function CombineErrors (line 153) | func CombineErrors(errors ...error) error {
function PrefixError (line 157) | func PrefixError(err error, prefix string) error {
FILE: pkg/export/exporter.go
type ExportSourceData (line 6) | type ExportSourceData interface
type Exporter (line 10) | type Exporter interface
type ExporterBase (line 17) | type ExporterBase struct
method Alias (line 19) | func (*ExporterBase) Alias() string {
FILE: pkg/export/helpers.go
function GenerateDefaultExportFileName (line 11) | func GenerateDefaultExportFileName(executionName, fileExtension string) ...
function Write (line 17) | func Write(filePath string, exportData io.Reader) error {
FILE: pkg/export/helpers_test.go
type errorReader (line 12) | type errorReader struct
method Read (line 18) | func (e *errorReader) Read(p []byte) (n int, err error) {
function TestWrite_PartialFileCleanup (line 44) | func TestWrite_PartialFileCleanup(t *testing.T) {
FILE: pkg/export/manager.go
type Manager (line 18) | type Manager struct
method Register (line 31) | func (m *Manager) Register(exporter Exporter) error {
method registerExporterByExtension (line 59) | func (m *Manager) registerExporterByExtension(exporter Exporter, ext s...
method resolveTargetsFromArgs (line 93) | func (m *Manager) resolveTargetsFromArgs(exportArgs []string, executio...
method getExportTarget (line 121) | func (m *Manager) getExportTarget(export, executionName string) (*Targ...
method DoExport (line 147) | func (m *Manager) DoExport(ctx context.Context, targetName string, sou...
method HasNamedExport (line 175) | func (m *Manager) HasNamedExport(exports []string) bool {
method ValidateExportFormat (line 186) | func (m *Manager) ValidateExportFormat(exports []string) error {
function NewManager (line 24) | func NewManager() *Manager {
function isDefaultExporterForExtension (line 89) | func isDefaultExporterForExtension(existing Exporter) bool {
FILE: pkg/export/manager_test.go
type testExporter (line 10) | type testExporter struct
method Export (line 16) | func (t *testExporter) Export(ctx context.Context, input ExportSourceD...
method FileExtension (line 19) | func (t *testExporter) FileExtension() string { return t.extension }
method Name (line 20) | func (t *testExporter) Name() string { return t.name }
method Alias (line 21) | func (t *testExporter) Alias() string { return t.alias }
type exporterTestCase (line 29) | type exporterTestCase struct
function TestDoExport (line 93) | func TestDoExport(t *testing.T) {
function TestManager_ConcurrentRegistration (line 141) | func TestManager_ConcurrentRegistration(t *testing.T) {
FILE: pkg/export/snapshot_exporter.go
type SnapshotExporter (line 12) | type SnapshotExporter struct
method Export (line 16) | func (e *SnapshotExporter) Export(_ context.Context, input ExportSourc...
method FileExtension (line 31) | func (e *SnapshotExporter) FileExtension() string {
method Name (line 35) | func (e *SnapshotExporter) Name() string {
method Alias (line 39) | func (*SnapshotExporter) Alias() string {
FILE: pkg/export/target.go
type Target (line 9) | type Target struct
method Export (line 15) | func (t *Target) Export(ctx context.Context, input ExportSourceData) (...
FILE: pkg/export/target_test.go
function TestTarget_Export_NilExporter (line 11) | func TestTarget_Export_NilExporter(t *testing.T) {
type mockExportSourceData (line 39) | type mockExportSourceData struct
method IsExportSourceData (line 41) | func (m *mockExportSourceData) IsExportSourceData() {}
FILE: pkg/filepaths/db_path.go
function ServiceExecutableRelativeLocation (line 12) | func ServiceExecutableRelativeLocation() string {
function DatabaseInstanceDir (line 16) | func DatabaseInstanceDir() string {
function GetDatabaseLocation (line 25) | func GetDatabaseLocation() string {
function GetDataLocation (line 34) | func GetDataLocation() string {
function DatabaseBackupFilePath (line 45) | func DatabaseBackupFilePath() string {
function GetDatabaseLibPath (line 49) | func GetDatabaseLibPath() string {
function GetRootCertLocation (line 53) | func GetRootCertLocation() string {
function GetRootCertKeyLocation (line 57) | func GetRootCertKeyLocation() string {
function GetServerCertLocation (line 61) | func GetServerCertLocation() string {
function GetServerCertKeyLocation (line 65) | func GetServerCertKeyLocation() string {
function GetInitDbBinaryExecutablePath (line 69) | func GetInitDbBinaryExecutablePath() string {
function GetPostgresBinaryExecutablePath (line 73) | func GetPostgresBinaryExecutablePath() string {
function PgDumpBinaryExecutablePath (line 77) | func PgDumpBinaryExecutablePath() string {
function PgRestoreBinaryExecutablePath (line 81) | func PgRestoreBinaryExecutablePath() string {
function GetDBSignatureLocation (line 85) | func GetDBSignatureLocation() string {
function getDatabaseLibDirectory (line 90) | func getDatabaseLibDirectory() string {
function GetFDWBinaryDir (line 94) | func GetFDWBinaryDir() string {
function GetFDWBinaryLocation (line 98) | func GetFDWBinaryLocation() string {
function GetFDWSQLAndControlDir (line 102) | func GetFDWSQLAndControlDir() string {
function GetFDWSQLAndControlLocation (line 106) | func GetFDWSQLAndControlLocation() (string, string) {
function GetPostmasterPidLocation (line 113) | func GetPostmasterPidLocation() string {
function GetPgHbaConfLocation (line 117) | func GetPgHbaConfLocation() string {
function GetPostgresqlConfLocation (line 121) | func GetPostgresqlConfLocation() string {
function GetPostgresqlConfDLocation (line 125) | func GetPostgresqlConfDLocation() string {
function GetSteampipeConfLocation (line 129) | func GetSteampipeConfLocation() string {
function GetLegacyPasswordFileLocation (line 133) | func GetLegacyPasswordFileLocation() string {
function GetPasswordFileLocation (line 137) | func GetPasswordFileLocation() string {
FILE: pkg/filepaths/steampipe.go
constant connectionsStateFileName (line 16) | connectionsStateFileName = "connection.json"
constant versionFileName (line 17) | versionFileName = "versions.json"
constant databaseRunningInfoFileName (line 18) | databaseRunningInfoFileName = "steampipe.json"
constant pluginManagerStateFileName (line 19) | pluginManagerStateFileName = "plugin_manager.json"
constant dashboardServerStateFileName (line 20) | dashboardServerStateFileName = "dashboard_service.json"
constant stateFileName (line 21) | stateFileName = "update_check.json"
constant legacyStateFileName (line 22) | legacyStateFileName = "update-check.json"
constant availableVersionsFileName (line 23) | availableVersionsFileName = "available_versions.json"
constant legacyNotificationsFileName (line 24) | legacyNotificationsFileName = "notifications.json"
constant localPluginFolder (line 25) | localPluginFolder = "local"
function ensureSteampipeSubDir (line 28) | func ensureSteampipeSubDir(dirName string) string {
function steampipeSubDir (line 39) | func steampipeSubDir(dirName string) string {
function EnsureTemplateDir (line 47) | func EnsureTemplateDir() string {
function EnsureInternalDir (line 52) | func EnsureInternalDir() string {
function EnsureBackupsDir (line 57) | func EnsureBackupsDir() string {
function BackupsDir (line 62) | func BackupsDir() string {
function WorkspaceProfileDir (line 72) | func WorkspaceProfileDir(installDir string) (string, error) {
function EnsureDatabaseDir (line 81) | func EnsureDatabaseDir() string {
function EnsureLogDir (line 86) | func EnsureLogDir() string {
function EnsureDashboardAssetsDir (line 90) | func EnsureDashboardAssetsDir() string {
function LegacyDashboardAssetsDir (line 95) | func LegacyDashboardAssetsDir() string {
function LegacyStateFilePath (line 100) | func LegacyStateFilePath() string {
function StateFilePath (line 105) | func StateFilePath() string {
function AvailableVersionsFilePath (line 110) | func AvailableVersionsFilePath() string {
function LegacyNotificationsFilePath (line 115) | func LegacyNotificationsFilePath() string {
function ConnectionStatePath (line 120) | func ConnectionStatePath() string {
function LegacyVersionFilePath (line 125) | func LegacyVersionFilePath() string {
function DatabaseVersionFilePath (line 130) | func DatabaseVersionFilePath() string {
function ReportAssetsVersionFilePath (line 135) | func ReportAssetsVersionFilePath() string {
function RunningInfoFilePath (line 139) | func RunningInfoFilePath() string {
function PluginManagerStateFilePath (line 143) | func PluginManagerStateFilePath() string {
function DashboardServiceStateFilePath (line 147) | func DashboardServiceStateFilePath() string {
function StateFileName (line 151) | func StateFileName() string {
FILE: pkg/filepaths/workspace.go
constant WorkspaceConfigFileName (line 4) | WorkspaceConfigFileName = "workspace.spc"
FILE: pkg/initialisation/cloud_metadata.go
function getPipesMetadata (line 14) | func getPipesMetadata(ctx context.Context) (*steampipeconfig.PipesMetada...
FILE: pkg/initialisation/init_data.go
type InitData (line 23) | type InitData struct
method RegisterExporters (line 47) | func (i *InitData) RegisterExporters(exporters ...export.Exporter) *In...
method Init (line 62) | func (i *InitData) Init(ctx context.Context, invoker constants.Invoker...
method Cleanup (line 139) | func (i *InitData) Cleanup(ctx context.Context) {
function NewErrorInitData (line 32) | func NewErrorInitData(err error) *InitData {
function NewInitData (line 38) | func NewInitData() *InitData {
function GetDbClient (line 123) | func GetDbClient(ctx context.Context, invoker constants.Invoker, opts .....
FILE: pkg/initialisation/init_data_test.go
function TestInitData_ResourceLeakOnPipesMetadataError (line 16) | func TestInitData_ResourceLeakOnPipesMetadataError(t *testing.T) {
function TestInitData_ResourceLeakOnClientError (line 55) | func TestInitData_ResourceLeakOnClientError(t *testing.T) {
function TestInitData_CleanupIdempotency (line 92) | func TestInitData_CleanupIdempotency(t *testing.T) {
function TestInitData_NilExporter (line 112) | func TestInitData_NilExporter(t *testing.T) {
function TestInitData_PartialInitialization (line 127) | func TestInitData_PartialInitialization(t *testing.T) {
function TestInitData_GoroutineLeak (line 171) | func TestInitData_GoroutineLeak(t *testing.T) {
function TestNewErrorInitData (line 220) | func TestNewErrorInitData(t *testing.T) {
function TestInitData_ContextCancellation (line 242) | func TestInitData_ContextCancellation(t *testing.T) {
function TestInitData_PanicRecovery (line 273) | func TestInitData_PanicRecovery(t *testing.T) {
function TestInitData_DoubleInit (line 283) | func TestInitData_DoubleInit(t *testing.T) {
function TestGetDbClient_WithConnectionString (line 321) | func TestGetDbClient_WithConnectionString(t *testing.T) {
function TestGetDbClient_WithoutConnectionString (line 356) | func TestGetDbClient_WithoutConnectionString(t *testing.T) {
FILE: pkg/installationstate/state.go
constant StateStructVersion (line 15) | StateStructVersion = 20220411
type InstallationState (line 17) | type InstallationState struct
method Save (line 53) | func (s *InstallationState) Save() error {
method IsValid (line 70) | func (s *InstallationState) IsValid() bool {
function newInstallationState (line 23) | func newInstallationState() InstallationState {
function Load (line 30) | func Load() (InstallationState, error) {
function newInstallationID (line 74) | func newInstallationID() string {
function nowTimeString (line 78) | func nowTimeString() string {
FILE: pkg/interactive/autocomplete_suggestions.go
constant maxSchemasInSuggestions (line 12) | maxSchemasInSuggestions = 100
constant maxTablesPerSchema (line 14) | maxTablesPerSchema = 500
constant maxQueriesPerMod (line 16) | maxQueriesPerMod = 500
type autoCompleteSuggestions (line 19) | type autoCompleteSuggestions struct
method setTablesForSchema (line 39) | func (s *autoCompleteSuggestions) setTablesForSchema(schemaName string...
method setQueriesForMod (line 60) | func (s *autoCompleteSuggestions) setQueriesForMod(modName string, que...
method sort (line 78) | func (s *autoCompleteSuggestions) sort() {
function newAutocompleteSuggestions (line 29) | func newAutocompleteSuggestions() *autoCompleteSuggestions {
FILE: pkg/interactive/autocomplete_suggestions_test.go
function TestAutoCompleteSuggestions_ConcurrentSort (line 13) | func TestAutoCompleteSuggestions_ConcurrentSort(t *testing.T) {
FILE: pkg/interactive/autocomplete_test.go
function TestNewAutocompleteSuggestions (line 10) | func TestNewAutocompleteSuggestions(t *testing.T) {
function TestAutocompleteSuggestionsSort (line 30) | func TestAutocompleteSuggestionsSort(t *testing.T) {
function TestAutocompleteSuggestionsEmptySort (line 84) | func TestAutocompleteSuggestionsEmptySort(t *testing.T) {
function TestAutocompleteSuggestionsSortWithDuplicates (line 98) | func TestAutocompleteSuggestionsSortWithDuplicates(t *testing.T) {
function TestAutocompleteSuggestionsWithUnicode (line 124) | func TestAutocompleteSuggestionsWithUnicode(t *testing.T) {
function TestAutocompleteSuggestionsLargeDataset (line 148) | func TestAutocompleteSuggestionsLargeDataset(t *testing.T) {
function TestAutocompleteSuggestionsMemoryUsage (line 182) | func TestAutocompleteSuggestionsMemoryUsage(t *testing.T) {
function TestAutocompleteSuggestionsSizeLimits (line 211) | func TestAutocompleteSuggestionsSizeLimits(t *testing.T) {
function TestAutocompleteSuggestionsEdgeCases (line 292) | func TestAutocompleteSuggestionsEdgeCases(t *testing.T) {
FILE: pkg/interactive/cancel_test.go
function TestCreatePromptContext (line 13) | func TestCreatePromptContext(t *testing.T) {
function TestCreatePromptContextReplacesOld (line 39) | func TestCreatePromptContextReplacesOld(t *testing.T) {
function TestCreateQueryContext (line 73) | func TestCreateQueryContext(t *testing.T) {
function TestCreateQueryContextDoesNotCancelOld (line 99) | func TestCreateQueryContextDoesNotCancelOld(t *testing.T) {
function TestCancelActiveQueryIfAnyIdempotent (line 139) | func TestCancelActiveQueryIfAnyIdempotent(t *testing.T) {
function TestCancelActiveQueryIfAnyNil (line 166) | func TestCancelActiveQueryIfAnyNil(t *testing.T) {
function TestClosePrompt (line 187) | func TestClosePrompt(t *testing.T) {
function TestClosePromptNilCancelPanic (line 231) | func TestClosePromptNilCancelPanic(t *testing.T) {
function TestContextCancellationPropagation (line 250) | func TestContextCancellationPropagation(t *testing.T) {
function TestContextCancellationTimeout (line 270) | func TestContextCancellationTimeout(t *testing.T) {
function TestRapidContextCreation (line 291) | func TestRapidContextCreation(t *testing.T) {
function TestCancelAfterContextAlreadyCancelled (line 316) | func TestCancelAfterContextAlreadyCancelled(t *testing.T) {
function TestContextCancellationTiming (line 343) | func TestContextCancellationTiming(t *testing.T) {
function TestCancelFuncReplacement (line 374) | func TestCancelFuncReplacement(t *testing.T) {
function TestNoGoroutineLeaks (line 434) | func TestNoGoroutineLeaks(t *testing.T) {
function TestConcurrentCancellation (line 458) | func TestConcurrentCancellation(t *testing.T) {
function TestMultipleConcurrentCancellations (line 496) | func TestMultipleConcurrentCancellations(t *testing.T) {
FILE: pkg/interactive/highlighter.go
type Highlighter (line 10) | type Highlighter struct
method Highlight (line 24) | func (h *Highlighter) Highlight(d prompt.Document) ([]byte, error) {
function newHighlighter (line 16) | func newHighlighter(lexer chroma.Lexer, formatter chroma.Formatter, styl...
FILE: pkg/interactive/highlighter_test.go
function TestNewHighlighter (line 14) | func TestNewHighlighter(t *testing.T) {
function TestHighlighterHighlight (line 39) | func TestHighlighterHighlight(t *testing.T) {
function TestGetHighlighter (line 134) | func TestGetHighlighter(t *testing.T) {
function TestHighlighterConcurrency (line 173) | func TestHighlighterConcurrency(t *testing.T) {
function TestHighlighterMemoryLeak (line 215) | func TestHighlighterMemoryLeak(t *testing.T) {
FILE: pkg/interactive/interactive_client.go
type AfterPromptCloseAction (line 39) | type AfterPromptCloseAction
constant AfterPromptCloseExit (line 42) | AfterPromptCloseExit AfterPromptCloseAction = iota
constant AfterPromptCloseRestart (line 43) | AfterPromptCloseRestart
type InteractiveClient (line 47) | type InteractiveClient struct
method InteractivePrompt (line 109) | func (c *InteractiveClient) InteractivePrompt(parentContext context.Co...
method ClosePrompt (line 172) | func (c *InteractiveClient) ClosePrompt(afterClose AfterPromptCloseAct...
method loadSchema (line 181) | func (c *InteractiveClient) loadSchema() error {
method runInteractivePromptAsync (line 196) | func (c *InteractiveClient) runInteractivePromptAsync(ctx context.Cont...
method runInteractivePrompt (line 203) | func (c *InteractiveClient) runInteractivePrompt(ctx context.Context) {
method breakMultilinePrompt (line 341) | func (c *InteractiveClient) breakMultilinePrompt(buffer *prompt.Buffer) {
method executor (line 345) | func (c *InteractiveClient) executor(ctx context.Context, line string) {
method executeQuery (line 392) | func (c *InteractiveClient) executeQuery(ctx context.Context, queryCtx...
method getQuery (line 414) | func (c *InteractiveClient) getQuery(ctx context.Context, line string)...
method executeMetaquery (line 515) | func (c *InteractiveClient) executeMetaquery(ctx context.Context, quer...
method getConnectionState (line 546) | func (c *InteractiveClient) getConnectionState(ctx context.Context) (s...
method restartInteractiveSession (line 560) | func (c *InteractiveClient) restartInteractiveSession() {
method shouldExecute (line 565) | func (c *InteractiveClient) shouldExecute(line string) bool {
method queryCompleter (line 582) | func (c *InteractiveClient) queryCompleter(d prompt.Document) []prompt...
method getFirstWordSuggestions (line 619) | func (c *InteractiveClient) getFirstWordSuggestions(word string) []pro...
method getTableAndConnectionSuggestions (line 646) | func (c *InteractiveClient) getTableAndConnectionSuggestions(word stri...
method startCancelHandler (line 662) | func (c *InteractiveClient) startCancelHandler() chan bool {
method listenToPgNotifications (line 692) | func (c *InteractiveClient) listenToPgNotifications(ctx context.Contex...
method handlePostgresNotification (line 698) | func (c *InteractiveClient) handlePostgresNotification(ctx context.Con...
method handleErrorsAndWarningsNotification (line 722) | func (c *InteractiveClient) handleErrorsAndWarningsNotification(ctx co...
method handleConnectionUpdateNotification (line 736) | func (c *InteractiveClient) handleConnectionUpdateNotification(ctx con...
function getHighlighter (line 77) | func getHighlighter(theme string) *Highlighter {
function newInteractiveClient (line 85) | func newInteractiveClient(ctx context.Context, initData *query.InitData,...
function cleanBufferForWSL (line 329) | func cleanBufferForWSL(s string) (string, bool) {
FILE: pkg/interactive/interactive_client_autocomplete.go
method initialiseSuggestions (line 17) | func (c *InteractiveClient) initialiseSuggestions(ctx context.Context) e...
method initialiseSchemaAndTableSuggestions (line 42) | func (c *InteractiveClient) initialiseSchemaAndTableSuggestions(connecti...
method initialiseQuerySuggestions (line 112) | func (c *InteractiveClient) initialiseQuerySuggestions() {
function sanitiseTableName (line 116) | func sanitiseTableName(strToEscape string) string {
FILE: pkg/interactive/interactive_client_autocomplete_test.go
function TestInitialiseSchemaAndTableSuggestions_NilClient (line 14) | func TestInitialiseSchemaAndTableSuggestions_NilClient(t *testing.T) {
FILE: pkg/interactive/interactive_client_cancel.go
method createPromptContext (line 9) | func (c *InteractiveClient) createPromptContext(parentContext context.Co...
method createQueryContext (line 19) | func (c *InteractiveClient) createQueryContext(ctx context.Context) cont...
method cancelActiveQueryIfAny (line 27) | func (c *InteractiveClient) cancelActiveQueryIfAny() {
FILE: pkg/interactive/interactive_client_init.go
method handleInitResult (line 16) | func (c *InteractiveClient) handleInitResult(ctx context.Context, initRe...
method showMessages (line 49) | func (c *InteractiveClient) showMessages(ctx context.Context, showMessag...
method readInitDataStream (line 87) | func (c *InteractiveClient) readInitDataStream(ctx context.Context) {
method isInitialised (line 129) | func (c *InteractiveClient) isInitialised() bool {
method waitForInitData (line 133) | func (c *InteractiveClient) waitForInitData(ctx context.Context) error {
method client (line 152) | func (c *InteractiveClient) client() db_common.Client {
FILE: pkg/interactive/interactive_client_test.go
function TestGetTableAndConnectionSuggestions_ReturnsEmptySliceNotNil (line 24) | func TestGetTableAndConnectionSuggestions_ReturnsEmptySliceNotNil(t *tes...
function TestShouldExecute (line 78) | func TestShouldExecute(t *testing.T) {
function TestShouldExecuteEdgeCases (line 166) | func TestShouldExecuteEdgeCases(t *testing.T) {
function TestBreakMultilinePrompt (line 219) | func TestBreakMultilinePrompt(t *testing.T) {
function TestBreakMultilinePromptEmpty (line 232) | func TestBreakMultilinePromptEmpty(t *testing.T) {
function TestBreakMultilinePromptNil (line 251) | func TestBreakMultilinePromptNil(t *testing.T) {
function TestIsInitialised (line 274) | func TestIsInitialised(t *testing.T) {
function TestClientNil (line 307) | func TestClientNil(t *testing.T) {
function TestAfterPromptCloseAction (line 320) | func TestAfterPromptCloseAction(t *testing.T) {
function TestGetFirstWordSuggestionsEmptyWord (line 337) | func TestGetFirstWordSuggestionsEmptyWord(t *testing.T) {
function TestGetFirstWordSuggestionsQualifiedQuery (line 357) | func TestGetFirstWordSuggestionsQualifiedQuery(t *testing.T) {
function TestGetTableAndConnectionSuggestionsEdgeCases (line 405) | func TestGetTableAndConnectionSuggestionsEdgeCases(t *testing.T) {
function TestCancelActiveQueryIfAny (line 471) | func TestCancelActiveQueryIfAny(t *testing.T) {
function TestInitialisationComplete_RaceCondition (line 545) | func TestInitialisationComplete_RaceCondition(t *testing.T) {
function TestGetQueryInfo_FromDetection (line 594) | func TestGetQueryInfo_FromDetection(t *testing.T) {
function TestExecuteMetaquery_NotInitialised (line 646) | func TestExecuteMetaquery_NotInitialised(t *testing.T) {
FILE: pkg/interactive/interactive_helpers.go
type queryCompletionInfo (line 9) | type queryCompletionInfo struct
function getQueryInfo (line 14) | func getQueryInfo(text string) *queryCompletionInfo {
function isEditingTable (line 24) | func isEditingTable(prevWord string) bool {
function getTable (line 28) | func getTable(text string) string {
function getPreviousWord (line 42) | func getPreviousWord(text string) string {
function lastIndexByteNot (line 60) | func lastIndexByteNot(s string, c byte) int {
function isFirstWord (line 70) | func isFirstWord(text string) bool {
function lastWord (line 75) | func lastWord(text string) string {
FILE: pkg/interactive/interactive_helpers_test.go
function TestIsFirstWord (line 9) | func TestIsFirstWord(t *testing.T) {
function TestLastWord (line 69) | func TestLastWord(t *testing.T) {
function TestLastIndexByteNot (line 129) | func TestLastIndexByteNot(t *testing.T) {
function TestGetPreviousWord (line 191) | func TestGetPreviousWord(t *testing.T) {
function TestGetTable (line 250) | func TestGetTable(t *testing.T) {
function TestIsEditingTable (line 324) | func TestIsEditingTable(t *testing.T) {
function TestGetQueryInfo (line 374) | func TestGetQueryInfo(t *testing.T) {
function TestCleanBufferForWSL (line 445) | func TestCleanBufferForWSL(t *testing.T) {
function TestSanitiseTableName (line 504) | func TestSanitiseTableName(t *testing.T) {
function TestHelperFunctionsWithExtremeInput (line 563) | func TestHelperFunctionsWithExtremeInput(t *testing.T) {
FILE: pkg/interactive/metaquery/completers.go
type CompleterInput (line 10) | type CompleterInput struct
type completer (line 15) | type completer
function Complete (line 18) | func Complete(input *CompleterInput) []prompt.Suggest {
function completerFromArgsOf (line 32) | func completerFromArgsOf(cmd string) completer {
function inspectCompleter (line 43) | func inspectCompleter(input *CompleterInput) []prompt.Suggest {
FILE: pkg/interactive/metaquery/definitions.go
type metaQueryArg (line 8) | type metaQueryArg struct
type metaQueryDefinition (line 13) | type metaQueryDefinition struct
function init (line 24) | func init() {
FILE: pkg/interactive/metaquery/handler_cache.go
function cacheControl (line 18) | func cacheControl(ctx context.Context, input *HandlerInput) error {
function cacheTTL (line 58) | func cacheTTL(ctx context.Context, input *HandlerInput) error {
function showCache (line 85) | func showCache(_ context.Context, input *HandlerInput) error {
function showCacheTtl (line 112) | func showCacheTtl(ctx context.Context, input *HandlerInput) error {
function getEffectiveCacheTtl (line 127) | func getEffectiveCacheTtl(serverSettings *db_common.ServerSettings, clie...
FILE: pkg/interactive/metaquery/handler_help.go
function doHelp (line 15) | func doHelp(_ context.Context, _ *HandlerInput) error {
function getMetaQueryHelpRows (line 35) | func getMetaQueryHelpRows(cmds []string, arrange bool) [][]string {
FILE: pkg/interactive/metaquery/handler_input.go
type ConnectionStateGetter (line 11) | type ConnectionStateGetter
type HandlerInput (line 14) | type HandlerInput struct
method args (line 25) | func (h *HandlerInput) args() []string {
FILE: pkg/interactive/metaquery/handler_inspect.go
function inspect (line 21) | func inspect(ctx context.Context, input *HandlerInput) error {
function inspectSchemaOrUnqualifiedTable (line 66) | func inspectSchemaOrUnqualifiedTable(ctx context.Context, tableOrConnect...
function listTables (line 98) | func listTables(ctx context.Context, input *HandlerInput) error {
function listConnections (line 148) | func listConnections(ctx context.Context, input *HandlerInput) error {
function showStateSummaryTable (line 202) | func showStateSummaryTable(connectionState steampipeconfig.ConnectionSta...
function inspectQualifiedTable (line 215) | func inspectQualifiedTable(ctx context.Context, connectionName string, t...
function inspectConnection (line 254) | func inspectConnection(ctx context.Context, connectionName string, input...
FILE: pkg/interactive/metaquery/handler_inspect_legacy.go
function inspectLegacy (line 14) | func inspectLegacy(ctx context.Context, input *HandlerInput) error {
function listConnectionsLegacy (line 92) | func listConnectionsLegacy(ctx context.Context, input *HandlerInput) err...
function inspectConnectionLegacy (line 120) | func inspectConnectionLegacy(connectionName string, input *HandlerInput)...
function inspectTableLegacy (line 144) | func inspectTableLegacy(connectionName string, tableName string, input *...
FILE: pkg/interactive/metaquery/handler_search_path.go
function setOrGetSearchPath (line 14) | func setOrGetSearchPath(ctx context.Context, input *HandlerInput) error {
function setSearchPathPrefix (line 44) | func setSearchPathPrefix(ctx context.Context, input *HandlerInput) error {
FILE: pkg/interactive/metaquery/handlers.go
type handler (line 15) | type handler
function Handle (line 18) | func Handle(ctx context.Context, input *HandlerInput) error {
function setHeader (line 30) | func setHeader(_ context.Context, input *HandlerInput) error {
function setMultiLine (line 37) | func setMultiLine(_ context.Context, input *HandlerInput) error {
function setTiming (line 44) | func setTiming(ctx context.Context, input *HandlerInput) error {
function showTimingFlag (line 54) | func showTimingFlag() {
function setViperConfigFromArg (line 68) | func setViperConfigFromArg(viperKey string) handler {
function doExit (line 76) | func doExit(_ context.Context, input *HandlerInput) error {
function clearScreen (line 82) | func clearScreen(_ context.Context, input *HandlerInput) error {
function setAutoComplete (line 88) | func setAutoComplete(_ context.Context, input *HandlerInput) error {
FILE: pkg/interactive/metaquery/suggestions.go
function PromptSuggestions (line 10) | func PromptSuggestions() []prompt.Suggest {
FILE: pkg/interactive/metaquery/utils.go
function IsMetaQuery (line 11) | func IsMetaQuery(query string) bool {
function getCmdAndArgs (line 24) | func getCmdAndArgs(query string) (string, []string) {
function getArguments (line 36) | func getArguments(query string) []string {
function buildTable (line 42) | func buildTable(rows [][]string, autoMerge bool) string {
FILE: pkg/interactive/metaquery/utils_test.go
type CmdAndArgsExpected (line 8) | type CmdAndArgsExpected struct
function TestGetCmdAndArgs (line 13) | func TestGetCmdAndArgs(t *testing.T) {
FILE: pkg/interactive/metaquery/validators.go
type ValidationResult (line 16) | type ValidationResult struct
type validator (line 22) | type validator
function Validate (line 25) | func Validate(query string) ValidationResult {
function titleSentenceCase (line 38) | func titleSentenceCase(title string) string {
function booleanValidator (line 48) | func booleanValidator(metaquery, arg string, validators ...validator) va...
function composeValidator (line 87) | func composeValidator(validators ...validator) validator {
function validatorFromArgsOf (line 93) | func validatorFromArgsOf(cmd string) validator {
function buildValidationResult (line 169) | func buildValidationResult(val []string, validators []validator) Validat...
FILE: pkg/interactive/run.go
type RunInteractivePromptResult (line 13) | type RunInteractivePromptResult struct
function RunInteractivePrompt (line 19) | func RunInteractivePrompt(ctx context.Context, initData *query.InitData)...
FILE: pkg/introspection/connection_table_sql.go
function GetConnectionStateTableDropSql (line 13) | func GetConnectionStateTableDropSql() []db_common.QueryWithArgs {
function GetConnectionStateTableCreateSql (line 18) | func GetConnectionStateTableCreateSql() []db_common.QueryWithArgs {
function GetConnectionStateTableGrantSql (line 41) | func GetConnectionStateTableGrantSql() []db_common.QueryWithArgs {
function GetConnectionStateErrorSql (line 50) | func GetConnectionStateErrorSql(connectionName string, err error) []db_c...
function GetIncompleteConnectionStateErrorSql (line 64) | func GetIncompleteConnectionStateErrorSql(err error) []db_common.QueryWi...
function GetUpsertConnectionStateSql (line 80) | func GetUpsertConnectionStateSql(c *steampipeconfig.ConnectionState) []d...
function GetNewConnectionStateFromConnectionInsertSql (line 139) | func GetNewConnectionStateFromConnectionInsertSql(c *modconfig.Steampipe...
function GetSetConnectionStateSql (line 182) | func GetSetConnectionStateSql(connectionName string, state string) []db_...
function GetDeleteConnectionStateSql (line 194) | func GetDeleteConnectionStateSql(connectionName string) []db_common.Quer...
function GetSetConnectionStateCommentLoadedSql (line 200) | func GetSetConnectionStateCommentLoadedSql(connectionName string, commen...
function getConnectionStateQueries (line 208) | func getConnectionStateQueries(queryFormat string, args []any) []db_comm...
FILE: pkg/introspection/introspection_test.go
function TestGetSetConnectionStateSql_SQLInjection (line 24) | func TestGetSetConnectionStateSql_SQLInjection(t *testing.T) {
function TestGetConnectionStateErrorSql_ConstantUsage (line 88) | func TestGetConnectionStateErrorSql_ConstantUsage(t *testing.T) {
function TestGetConnectionStateErrorSql_EmptyConnectionName (line 111) | func TestGetConnectionStateErrorSql_EmptyConnectionName(t *testing.T) {
function TestGetSetConnectionStateSql_EmptyInputs (line 118) | func TestGetSetConnectionStateSql_EmptyInputs(t *testing.T) {
function TestGetDeleteConnectionStateSql_EmptyName (line 138) | func TestGetDeleteConnectionStateSql_EmptyName(t *testing.T) {
function TestGetUpsertConnectionStateSql_NilFields (line 144) | func TestGetUpsertConnectionStateSql_NilFields(t *testing.T) {
function TestGetNewConnectionStateFromConnectionInsertSql_MinimalConnection (line 157) | func TestGetNewConnectionStateFromConnectionInsertSql_MinimalConnection(...
function TestGetSetConnectionStateSql_SpecialCharacters (line 173) | func TestGetSetConnectionStateSql_SpecialCharacters(t *testing.T) {
function TestGetConnectionStateErrorSql_SpecialCharactersInError (line 204) | func TestGetConnectionStateErrorSql_SpecialCharactersInError(t *testing....
function TestGetDeleteConnectionStateSql_SpecialCharacters (line 227) | func TestGetDeleteConnectionStateSql_SpecialCharacters(t *testing.T) {
function TestGetPluginTableCreateSql_ValidSQL (line 250) | func TestGetPluginTableCreateSql_ValidSQL(t *testing.T) {
function TestGetPluginTablePopulateSql_AllFields (line 265) | func TestGetPluginTablePopulateSql_AllFields(t *testing.T) {
function TestGetPluginTablePopulateSql_SpecialCharacters (line 290) | func TestGetPluginTablePopulateSql_SpecialCharacters(t *testing.T) {
function TestGetPluginTableDropSql_ValidSQL (line 329) | func TestGetPluginTableDropSql_ValidSQL(t *testing.T) {
function TestGetPluginTableGrantSql_ValidSQL (line 338) | func TestGetPluginTableGrantSql_ValidSQL(t *testing.T) {
function TestGetPluginColumnTableCreateSql_ValidSQL (line 350) | func TestGetPluginColumnTableCreateSql_ValidSQL(t *testing.T) {
function TestGetPluginColumnTablePopulateSql_AllFieldTypes (line 360) | func TestGetPluginColumnTablePopulateSql_AllFieldTypes(t *testing.T) {
function TestGetPluginColumnTablePopulateSql_SQLInjectionAttempts (line 433) | func TestGetPluginColumnTablePopulateSql_SQLInjectionAttempts(t *testing...
function TestGetPluginColumnTableDeletePluginSql_SpecialCharacters (line 490) | func TestGetPluginColumnTableDeletePluginSql_SpecialCharacters(t *testin...
function TestGetRateLimiterTableCreateSql_ValidSQL (line 511) | func TestGetRateLimiterTableCreateSql_ValidSQL(t *testing.T) {
function TestGetRateLimiterTablePopulateSql_AllFields (line 522) | func TestGetRateLimiterTablePopulateSql_AllFields(t *testing.T) {
function TestGetRateLimiterTablePopulateSql_SQLInjection (line 555) | func TestGetRateLimiterTablePopulateSql_SQLInjection(t *testing.T) {
function TestGetRateLimiterTablePopulateSql_SpecialCharacters (line 611) | func TestGetRateLimiterTablePopulateSql_SpecialCharacters(t *testing.T) {
function TestGetRateLimiterTableGrantSql_ValidSQL (line 657) | func TestGetRateLimiterTableGrantSql_ValidSQL(t *testing.T) {
function TestGetConnectionStateQueries_ReturnsMultipleQueries (line 669) | func TestGetConnectionStateQueries_ReturnsMultipleQueries(t *testing.T) {
function TestVeryLongIdentifiers (line 691) | func TestVeryLongIdentifiers(t *testing.T) {
FILE: pkg/introspection/plugin_column_table_sql.go
function GetPluginColumnTableCreateSql (line 13) | func GetPluginColumnTableCreateSql() db_common.QueryWithArgs {
function GetPluginColumnTablePopulateSqlForPlugin (line 29) | func GetPluginColumnTablePopulateSqlForPlugin(pluginName string, schema ...
function GetPluginColumnTablePopulateSql (line 47) | func GetPluginColumnTablePopulateSql(
function GetPluginColumnTableDropSql (line 111) | func GetPluginColumnTableDropSql() db_common.QueryWithArgs {
function GetPluginColumnTableDeletePluginSql (line 121) | func GetPluginColumnTableDeletePluginSql(plugin string) db_common.QueryW...
function GetPluginColumnTableGrantSql (line 133) | func GetPluginColumnTableGrantSql() db_common.QueryWithArgs {
type keyColumn (line 144) | type keyColumn struct
method MarshalJSON (line 182) | func (s keyColumn) MarshalJSON() ([]byte, error) {
function newKeyColumn (line 150) | func newKeyColumn(operators []string, require string, cacheMatch string)...
function cleanOperators (line 159) | func cleanOperators(operators []string) []string {
FILE: pkg/introspection/plugin_table_sql.go
function GetPluginTableCreateSql (line 11) | func GetPluginTableCreateSql() db_common.QueryWithArgs {
function GetPluginTablePopulateSql (line 26) | func GetPluginTablePopulateSql(plugin *plugin.Plugin) db_common.QueryWit...
function GetPluginTableDropSql (line 52) | func GetPluginTableDropSql() db_common.QueryWithArgs {
function GetPluginTableGrantSql (line 62) | func GetPluginTableGrantSql() db_common.QueryWithArgs {
FILE: pkg/introspection/rate_limiters_table_sql.go
function GetRateLimiterTableCreateSql (line 11) | func GetRateLimiterTableCreateSql() db_common.QueryWithArgs {
function GetRateLimiterTableDropSql (line 31) | func GetRateLimiterTableDropSql() db_common.QueryWithArgs {
function GetRateLimiterTablePopulateSql (line 41) | func GetRateLimiterTablePopulateSql(settings *plugin.RateLimiter) db_com...
function GetRateLimiterTableGrantSql (line 77) | func GetRateLimiterTableGrantSql() db_common.QueryWithArgs {
FILE: pkg/ociinstaller/asset_downloader.go
type assetsDownloader (line 9) | type assetsDownloader struct
method EmptyConfig (line 13) | func (p *assetsDownloader) EmptyConfig() *assetsImageConfig {
method GetImageData (line 28) | func (p *assetsDownloader) GetImageData(layers []ocispec.Descriptor) (...
function newAssetDownloader (line 17) | func newAssetDownloader() *assetsDownloader {
FILE: pkg/ociinstaller/assets_image.go
type assetsImage (line 5) | type assetsImage struct
method Type (line 9) | func (s *assetsImage) Type() ociinstaller.ImageType {
type assetsImageConfig (line 14) | type assetsImageConfig struct
FILE: pkg/ociinstaller/db.go
function InstallDB (line 18) | func InstallDB(ctx context.Context, dblocation string) (string, error) {
function updateVersionFileDB (line 51) | func updateVersionFileDB(image *ociinstaller.OciImage[*dbImage, *dbImage...
function installDbFiles (line 66) | func installDbFiles(image *ociinstaller.OciImage[*dbImage, *dbImageConfi...
FILE: pkg/ociinstaller/db_downloader.go
type dbDownloader (line 11) | type dbDownloader struct
method EmptyConfig (line 15) | func (p *dbDownloader) EmptyConfig() *dbImageConfig {
method GetImageData (line 30) | func (p *dbDownloader) GetImageData(layers []ocispec.Descriptor) (*dbI...
function newDbDownloader (line 19) | func newDbDownloader() *dbDownloader {
FILE: pkg/ociinstaller/db_image.go
type dbImage (line 5) | type dbImage struct
method Type (line 11) | func (s *dbImage) Type() ociinstaller.ImageType {
type dbImageConfig (line 15) | type dbImageConfig struct
FILE: pkg/ociinstaller/db_test.go
function TestDownloadImageData_InvalidLayerCount_DB (line 13) | func TestDownloadImageData_InvalidLayerCount_DB(t *testing.T) {
function TestDbDownloader_EmptyConfig (line 49) | func TestDbDownloader_EmptyConfig(t *testing.T) {
function TestDbImage_Type (line 59) | func TestDbImage_Type(t *testing.T) {
function TestDbDownloader_GetImageData_WithValidLayers (line 67) | func TestDbDownloader_GetImageData_WithValidLayers(t *testing.T) {
function TestInstallDbFiles_SimpleMove (line 115) | func TestInstallDbFiles_SimpleMove(t *testing.T) {
function TestInstallDB_DiskSpaceExhaustion_BugDocumentation (line 163) | func TestInstallDB_DiskSpaceExhaustion_BugDocumentation(t *testing.T) {
function TestUpdateVersionFileDB_FailureHandling_BugDocumentation (line 207) | func TestUpdateVersionFileDB_FailureHandling_BugDocumentation(t *testing...
FILE: pkg/ociinstaller/diskspace.go
function getAvailableDiskSpace (line 12) | func getAvailableDiskSpace(path string) (uint64, error) {
function estimateRequiredSpace (line 44) | func estimateRequiredSpace(imageRef string) uint64 {
function validateDiskSpace (line 56) | func validateDiskSpace(path string, imageRef string) error {
FILE: pkg/ociinstaller/fdw.go
function InstallFdw (line 20) | func InstallFdw(ctx context.Context, dbLocation string) (string, error) {
function copyFile (line 55) | func copyFile(src, dst string) error {
function updateVersionFileFdw (line 76) | func updateVersionFileFdw(image *ociinstaller.OciImage[*fdwImage, *FdwIm...
function installFdwFiles (line 91) | func installFdwFiles(image *ociinstaller.OciImage[*fdwImage, *FdwImageCo...
FILE: pkg/ociinstaller/fdw_downloader.go
type fdwDownloader (line 11) | type fdwDownloader struct
method EmptyConfig (line 15) | func (p *fdwDownloader) EmptyConfig() *FdwImageConfig {
method GetImageData (line 30) | func (p *fdwDownloader) GetImageData(layers []ocispec.Descriptor) (*fd...
function newFdwDownloader (line 19) | func newFdwDownloader() *fdwDownloader {
FILE: pkg/ociinstaller/fdw_image.go
type fdwImage (line 5) | type fdwImage struct
method Type (line 13) | func (s *fdwImage) Type() ociinstaller.ImageType {
type FdwImageConfig (line 17) | type FdwImageConfig struct
FILE: pkg/ociinstaller/fdw_test.go
function createValidGzipFile (line 14) | func createValidGzipFile(path string, content []byte) error {
function TestDownloadImageData_InvalidLayerCount (line 38) | func TestDownloadImageData_InvalidLayerCount(t *testing.T) {
function TestValidGzipFileCreation (line 56) | func TestValidGzipFileCreation(t *testing.T) {
function TestMediaTypeProvider_PlatformDetection (line 82) | func TestMediaTypeProvider_PlatformDetection(t *testing.T) {
function TestInstallFdwFiles_CorruptGzipFile_BugDocumentation (line 143) | func TestInstallFdwFiles_CorruptGzipFile_BugDocumentation(t *testing.T) {
FILE: pkg/ociinstaller/mediatypes.go
constant MediaTypeDbDocLayer (line 14) | MediaTypeDbDocLayer = "application/vnd.turbot.steampipe.db.doc.lay...
constant MediaTypeDbLicenseLayer (line 15) | MediaTypeDbLicenseLayer = "application/vnd.turbot.steampipe.db.license...
constant MediaTypeFdwDocLayer (line 16) | MediaTypeFdwDocLayer = "application/vnd.turbot.steampipe.fdw.doc.la...
constant MediaTypeFdwLicenseLayer (line 17) | MediaTypeFdwLicenseLayer = "application/vnd.turbot.steampipe.fdw.licens...
constant MediaTypeFdwControlLayer (line 18) | MediaTypeFdwControlLayer = "application/vnd.turbot.steampipe.fdw.contro...
constant MediaTypeFdwSqlLayer (line 19) | MediaTypeFdwSqlLayer = "application/vnd.turbot.steampipe.fdw.sql.la...
constant MediaTypeAssetReportLayer (line 20) | MediaTypeAssetReportLayer = "application/vnd.turbot.steampipe.assets.rep...
type SteampipeMediaTypeProvider (line 23) | type SteampipeMediaTypeProvider struct
method GetAllMediaTypes (line 25) | func (p SteampipeMediaTypeProvider) GetAllMediaTypes(imageType ociinst...
method MediaTypeForPlatform (line 37) | func (SteampipeMediaTypeProvider) MediaTypeForPlatform(imageType ociin...
method SharedMediaTypes (line 69) | func (SteampipeMediaTypeProvider) SharedMediaTypes(imageType ociinstal...
method ConfigMediaTypes (line 84) | func (SteampipeMediaTypeProvider) ConfigMediaTypes() []string {
FILE: pkg/ociinstaller/oci_image_types.go
constant ImageTypeDatabase (line 8) | ImageTypeDatabase ociinstaller.ImageType = "db"
constant ImageTypeFdw (line 9) | ImageTypeFdw ociinstaller.ImageType = "fdw"
constant ImageTypeAssets (line 10) | ImageTypeAssets ociinstaller.ImageType = "assets"
FILE: pkg/ociinstaller/versionfile/db_version_file.go
constant DatabaseStructVersion (line 13) | DatabaseStructVersion = 20220411
type DatabaseVersionFile (line 15) | type DatabaseVersionFile struct
method IsValid (line 31) | func (s DatabaseVersionFile) IsValid() bool {
method Save (line 56) | func (f *DatabaseVersionFile) Save() error {
method write (line 64) | func (f *DatabaseVersionFile) write(path string) error {
function NewDBVersionFile (line 21) | func NewDBVersionFile() *DatabaseVersionFile {
function LoadDatabaseVersionFile (line 36) | func LoadDatabaseVersionFile() (*DatabaseVersionFile, error) {
function readDatabaseVersionFile (line 44) | func readDatabaseVersionFile(path string) (*DatabaseVersionFile, error) {
FILE: pkg/ociinstaller/versionfile/db_version_file_test.go
function TestWriteDatabaseVersionFile (line 9) | func TestWriteDatabaseVersionFile(t *testing.T) {
FILE: pkg/options/database.go
type Database (line 11) | type Database struct
method ConfigMap (line 23) | func (d *Database) ConfigMap() map[string]interface{} {
method Merge (line 60) | func (d *Database) Merge(otherOptions options.Options) {
method String (line 90) | func (d *Database) String() string {
function searchPathToArray (line 138) | func searchPathToArray(searchPathString string) []string {
FILE: pkg/options/general.go
type General (line 12) | type General struct
method SetBaseProperties (line 21) | func (g *General) SetBaseProperties(otherOptions options.Options) {
method ConfigMap (line 46) | func (g *General) ConfigMap() map[string]interface{} {
method Merge (line 70) | func (g *General) Merge(otherOptions options.Options) {
method String (line 81) | func (g *General) String() string {
FILE: pkg/options/plugin.go
type Plugin (line 11) | type Plugin struct
method ConfigMap (line 17) | func (t *Plugin) ConfigMap() map[string]interface{} {
method Merge (line 32) | func (t *Plugin) Merge(otherOptions options.Options) {
method String (line 44) | func (t *Plugin) String() string {
FILE: pkg/parse/plugin.go
function DecodePlugin (line 12) | func DecodePlugin(block *hcl.Block) (*plugin.Plugin, hcl.Diagnostics) {
FILE: pkg/plugin/actions.go
function Remove (line 21) | func Remove(ctx context.Context, image string, pluginConnections map[str...
function Install (line 53) | func Install(ctx context.Context, plugin plugin.ResolvedPluginVersion, s...
type PluginListItem (line 60) | type PluginListItem struct
function List (line 67) | func List(ctx context.Context, pluginConnectionMap map[string][]PluginCo...
function detectLocalPlugin (line 121) | func detectLocalPlugin(installation *versionfile.InstalledVersion, plugi...
FILE: pkg/plugin/installed.go
function GetInstalledPlugins (line 14) | func GetInstalledPlugins(ctx context.Context, pluginVersions map[string]...
FILE: pkg/plugin/plugin_connection.go
type PluginConnection (line 5) | type PluginConnection interface
FILE: pkg/plugin/plugin_remove.go
type PluginRemoveReport (line 13) | type PluginRemoveReport struct
type PluginRemoveReports (line 19) | type PluginRemoveReports
method Print (line 21) | func (r PluginRemoveReports) Print() {
FILE: pkg/pluginmanager/lifecycle.go
function StartNewInstance (line 25) | func StartNewInstance(steampipeExecutablePath string) (*State, error) {
function start (line 48) | func start(steampipeExecutablePath string) (*State, error) {
function Stop (line 104) | func Stop() error {
function stop (line 120) | func stop(state *State) error {
function GetPluginManager (line 147) | func GetPluginManager() (pluginshared.PluginManager, error) {
function getPluginManager (line 154) | func getPluginManager(startIfNeeded bool) (pluginshared.PluginManager, e...
FILE: pkg/pluginmanager/plugin_manager_client.go
type PluginManagerClient (line 16) | type PluginManagerClient struct
method attachToPluginManager (line 35) | func (c *PluginManagerClient) attachToPluginManager() error {
method Get (line 71) | func (c *PluginManagerClient) Get(req *pb.GetRequest) (*pb.GetResponse...
method RefreshConnections (line 79) | func (c *PluginManagerClient) RefreshConnections(req *pb.RefreshConnec...
method Shutdown (line 87) | func (c *PluginManagerClient) Shutdown(req *pb.ShutdownRequest) (*pb.S...
function NewPluginManagerClient (line 22) | func NewPluginManagerClient(pluginManagerState *State) (*PluginManagerCl...
FILE: pkg/pluginmanager/state.go
constant PluginManagerStructVersion (line 19) | PluginManagerStructVersion = 20220411
type State (line 24) | type State struct
method Save (line 82) | func (s *State) Save() error {
method reattachConfig (line 116) | func (s *State) reattachConfig() *plugin.ReattachConfig {
method verifyRunning (line 130) | func (s *State) verifyRunning() (bool, error) {
method kill (line 151) | func (s *State) kill() (err error) {
method delete (line 181) | func (s *State) delete() {
function NewState (line 36) | func NewState(executable string, reattach *plugin.ReattachConfig) *State {
function LoadState (line 47) | func LoadState() (*State, error) {
FILE: pkg/pluginmanager/state_test.go
function TestStateWithNilAddr (line 19) | func TestStateWithNilAddr(t *testing.T) {
function TestStateFileRaceCondition (line 37) | func TestStateFileRaceCondition(t *testing.T) {
FILE: pkg/pluginmanager_service/get_response.go
type getResponse (line 10) | type getResponse struct
method AddFailure (line 26) | func (r *getResponse) AddFailure(instance string, s string) {
method AddReattach (line 32) | func (r *getResponse) AddReattach(c string, reattach *pb.ReattachConfi...
function newGetResponse (line 17) | func newGetResponse() *getResponse {
FILE: pkg/pluginmanager_service/grpc/proto/plugin_manager.pb.go
constant _ (line 18) | _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
constant _ (line 20) | _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
type GetRequest (line 23) | type GetRequest struct
method Reset (line 31) | func (x *GetRequest) Reset() {
method String (line 40) | func (x *GetRequest) String() string {
method ProtoMessage (line 44) | func (*GetRequest) ProtoMessage() {}
method ProtoReflect (line 46) | func (x *GetRequest) ProtoReflect() protoreflect.Message {
method Descriptor (line 59) | func (*GetRequest) Descriptor() ([]byte, []int) {
method GetConnections (line 63) | func (x *GetRequest) GetConnections() []string {
type GetResponse (line 70) | type GetResponse struct
method Reset (line 79) | func (x *GetResponse) Reset() {
method String (line 88) | func (x *GetResponse) String() string {
method ProtoMessage (line 92) | func (*GetResponse) ProtoMessage() {}
method ProtoReflect (line 94) | func (x *GetResponse) ProtoReflect() protoreflect.Message {
method Descriptor (line 107) | func (*GetResponse) Descriptor() ([]byte, []int) {
method GetReattachMap (line 111) | func (x *GetResponse) GetReattachMap() map[string]*ReattachConfig {
method GetFailureMap (line 118) | func (x *GetResponse) GetFailureMap() map[string]string {
type RefreshConnectionsRequest (line 125) | type RefreshConnectionsRequest struct
method Reset (line 131) | func (x *RefreshConnectionsRequest) Reset() {
method String (line 140) | func (x *RefreshConnectionsRequest) String() string {
method ProtoMessage (line 144) | func (*RefreshConnectionsRequest) ProtoMessage() {}
method ProtoReflect (line 146) | func (x *RefreshConnectionsRequest) ProtoReflect() protoreflect.Message {
method Descriptor (line 159) | func (*RefreshConnectionsRequest) Descriptor() ([]byte, []int) {
type RefreshConnectionsResponse (line 163) | type RefreshConnectionsResponse struct
method Reset (line 169) | func (x *RefreshConnectionsResponse) Reset() {
method String (line 178) | func (x *RefreshConnectionsResponse) String() string {
method ProtoMessage (line 182) | func (*RefreshConnectionsResponse) ProtoMessage() {}
method ProtoReflect (line 184) | func (x *RefreshConnectionsResponse) ProtoReflect() protoreflect.Messa...
method Descriptor (line 197) | func (*RefreshConnectionsResponse) Descriptor() ([]byte, []int) {
type ShutdownRequest (line 201) | type ShutdownRequest struct
method Reset (line 207) | func (x *ShutdownRequest) Reset() {
method String (line 216) | func (x *ShutdownRequest) String() string {
method ProtoMessage (line 220) | func (*ShutdownRequest) ProtoMessage() {}
method ProtoReflect (line 222) | func (x *ShutdownRequest) ProtoReflect() protoreflect.Message {
method Descriptor (line 235) | func (*ShutdownRequest) Descriptor() ([]byte, []int) {
type ShutdownResponse (line 239) | type ShutdownResponse struct
method Reset (line 245) | func (x *ShutdownResponse) Reset() {
method String (line 254) | func (x *ShutdownResponse) String() string {
method ProtoMessage (line 258) | func (*ShutdownResponse) ProtoMessage() {}
method ProtoReflect (line 260) | func (x *ShutdownResponse) ProtoReflect() protoreflect.Message {
method Descriptor (line 273) | func (*ShutdownResponse) Descriptor() ([]byte, []int) {
type ReattachConfig (line 277) | type ReattachConfig struct
method Reset (line 291) | func (x *ReattachConfig) Reset() {
method String (line 300) | func (x *ReattachConfig) String() string {
method ProtoMessage (line 304) | func (*ReattachConfig) ProtoMessage() {}
method ProtoReflect (line 306) | func (x *ReattachConfig) ProtoReflect() protoreflect.Message {
method Descriptor (line 319) | func (*ReattachConfig) Descriptor() ([]byte, []int) {
method GetProtocol (line 323) | func (x *ReattachConfig) GetProtocol() string {
method GetProtocolVersion (line 330) | func (x *ReattachConfig) GetProtocolVersion() int64 {
method GetAddr (line 337) | func (x *ReattachConfig) GetAddr() *NetAddr {
method GetPid (line 344) | func (x *ReattachConfig) GetPid() int64 {
method GetSupportedOperations (line 351) | func (x *ReattachConfig) GetSupportedOperations() *SupportedOperations {
method GetConnections (line 358) | func (x *ReattachConfig) GetConnections() []string {
method GetPlugin (line 365) | func (x *ReattachConfig) GetPlugin() string {
type SupportedOperations (line 373) | type SupportedOperations struct
method Reset (line 385) | func (x *SupportedOperations) Reset() {
method String (line 394) | func (x *SupportedOperations) String() string {
method ProtoMessage (line 398) | func (*SupportedOperations) ProtoMessage() {}
method ProtoReflect (line 400) | func (x *SupportedOperations) ProtoReflect() protoreflect.Message {
method Descriptor (line 413) | func (*SupportedOperations) Descriptor() ([]byte, []int) {
method GetQueryCache (line 417) | func (x *SupportedOperations) GetQueryCache() bool {
method GetMultipleConnections (line 424) | func (x *SupportedOperations) GetMultipleConnections() bool {
method GetMessageStream (line 431) | func (x *SupportedOperations) GetMessageStream() bool {
method GetSetCacheOptions (line 438) | func (x *SupportedOperations) GetSetCacheOptions() bool {
method GetRateLimiters (line 445) | func (x *SupportedOperations) GetRateLimiters() bool {
type NetAddr (line 452) | type NetAddr struct
method Reset (line 461) | func (x *NetAddr) Reset() {
method String (line 470) | func (x *NetAddr) String() string {
method ProtoMessage (line 474) | func (*NetAddr) ProtoMessage() {}
method ProtoReflect (line 476) | func (x *NetAddr) ProtoReflect() protoreflect.Message {
method Descriptor (line 489) | func (*NetAddr) Descriptor() ([]byte, []int) {
method GetNetwork (line 493) | func (x *NetAddr) GetNetwork() string {
method GetAddress (line 500) | func (x *NetAddr) GetAddress() string {
function file_plugin_manager_proto_rawDescGZIP (line 598) | func file_plugin_manager_proto_rawDescGZIP() []byte {
function init (line 638) | func init() { file_plugin_manager_proto_init() }
function file_plugin_manager_proto_init (line 639) | func file_plugin_manager_proto_init() {
FILE: pkg/pluginmanager_service/grpc/proto/plugin_manager_grpc.pb.go
constant _ (line 19) | _ = grpc.SupportPackageIsVersion7
constant PluginManager_Get_FullMethodName (line 22) | PluginManager_Get_FullMethodName = "/proto.PluginManager/...
constant PluginManager_RefreshConnections_FullMethodName (line 23) | PluginManager_RefreshConnections_FullMethodName = "/proto.PluginManager/...
constant PluginManager_Shutdown_FullMethodName (line 24) | PluginManager_Shutdown_FullMethodName = "/proto.PluginManager/...
type PluginManagerClient (line 30) | type PluginManagerClient interface
type pluginManagerClient (line 36) | type pluginManagerClient struct
method Get (line 44) | func (c *pluginManagerClient) Get(ctx context.Context, in *GetRequest,...
method RefreshConnections (line 53) | func (c *pluginManagerClient) RefreshConnections(ctx context.Context, ...
method Shutdown (line 62) | func (c *pluginManagerClient) Shutdown(ctx context.Context, in *Shutdo...
function NewPluginManagerClient (line 40) | func NewPluginManagerClient(cc grpc.ClientConnInterface) PluginManagerCl...
type PluginManagerServer (line 74) | type PluginManagerServer interface
type UnimplementedPluginManagerServer (line 82) | type UnimplementedPluginManagerServer struct
method Get (line 85) | func (UnimplementedPluginManagerServer) Get(context.Context, *GetReque...
method RefreshConnections (line 88) | func (UnimplementedPluginManagerServer) RefreshConnections(context.Con...
method Shutdown (line 91) | func (UnimplementedPluginManagerServer) Shutdown(context.Context, *Shu...
method mustEmbedUnimplementedPluginManagerServer (line 94) | func (UnimplementedPluginManagerServer) mustEmbedUnimplementedPluginMa...
type UnsafePluginManagerServer (line 99) | type UnsafePluginManagerServer interface
function RegisterPluginManagerServer (line 103) | func RegisterPluginManagerServer(s grpc.ServiceRegistrar, srv PluginMana...
function _PluginManager_Get_Handler (line 107) | func _PluginManager_Get_Handler(srv interface{}, ctx context.Context, de...
function _PluginManager_RefreshConnections_Handler (line 125) | func _PluginManager_RefreshConnections_Handler(srv interface{}, ctx cont...
function _PluginManager_Shutdown_Handler (line 143) | func _PluginManager_Shutdown_Handler(srv interface{}, ctx context.Contex...
FILE: pkg/pluginmanager_service/grpc/proto/reattach_config.go
function NewReattachConfig (line 10) | func NewReattachConfig(pluginName string, src *plugin.ReattachConfig, su...
method Convert (line 26) | func (r *ReattachConfig) Convert() *plugin.ReattachConfig {
method AddConnection (line 38) | func (r *ReattachConfig) AddConnection(connection string) {
method RemoveConnection (line 43) | func (r *ReattachConfig) RemoveConnection(connection string) {
method UpdateConnections (line 53) | func (r *ReattachConfig) UpdateConnections(configs []*proto.ConnectionCo...
FILE: pkg/pluginmanager_service/grpc/proto/simple_addr.go
type SimpleAddr (line 5) | type SimpleAddr struct
method Network (line 17) | func (s SimpleAddr) Network() string {
method String (line 22) | func (s SimpleAddr) String() string {
function NewSimpleAddr (line 10) | func NewSimpleAddr(addr net.Addr) *SimpleAddr {
FILE: pkg/pluginmanager_service/grpc/proto/supported_operations.go
function SupportedOperationsFromSdk (line 7) | func SupportedOperationsFromSdk(s *sdkproto.GetSupportedOperationsRespon...
FILE: pkg/pluginmanager_service/grpc/shared/grpc.go
type GRPCClient (line 10) | type GRPCClient struct
method Get (line 18) | func (c *GRPCClient) Get(req *proto.GetRequest) (*proto.GetResponse, e...
method RefreshConnections (line 21) | func (c *GRPCClient) RefreshConnections(req *proto.RefreshConnectionsR...
method Shutdown (line 25) | func (c *GRPCClient) Shutdown(req *proto.ShutdownRequest) (*proto.Shut...
type GRPCServer (line 30) | type GRPCServer struct
method Get (line 36) | func (m *GRPCServer) Get(_ context.Context, req *proto.GetRequest) (*p...
method RefreshConnections (line 39) | func (m *GRPCServer) RefreshConnections(_ context.Context, req *proto....
method Shutdown (line 43) | func (m *GRPCServer) Shutdown(_ context.Context, req *proto.ShutdownRe...
FILE: pkg/pluginmanager_service/grpc/shared/interface.go
constant PluginName (line 13) | PluginName = "steampipe_plugin_manager"
type PluginManager (line 28) | type PluginManager interface
type PluginManagerPlugin (line 35) | type PluginManagerPlugin struct
method GRPCServer (line 42) | func (p *PluginManagerPlugin) GRPCServer(_ *plugin.GRPCBroker, s *grpc...
method GRPCClient (line 49) | func (p *PluginManagerPlugin) GRPCClient(ctx context.Context, _ *plugi...
FILE: pkg/pluginmanager_service/grpc/start_failure.go
function HandleStartFailure (line 24) | func HandleStartFailure(err error) error {
FILE: pkg/pluginmanager_service/message_server.go
type PluginMessageServer (line 10) | type PluginMessageServer struct
method AddConnection (line 21) | func (m *PluginMessageServer) AddConnection(pluginClient *sdkgrpc.Plug...
method openMessageStream (line 39) | func (m *PluginMessageServer) openMessageStream(pluginClient *sdkgrpc....
method runMessageListener (line 59) | func (m *PluginMessageServer) runMessageListener(stream sdkproto.Wrapp...
method logReceiveError (line 73) | func (m *PluginMessageServer) logReceiveError(err error, connection st...
method handleMessage (line 91) | func (m *PluginMessageServer) handleMessage(stream sdkproto.WrapperPlu...
function NewPluginMessageServer (line 14) | func NewPluginMessageServer(pluginManager *PluginManager) (*PluginMessag...
FILE: pkg/pluginmanager_service/message_server_test.go
function newTestMessageServer (line 17) | func newTestMessageServer(t *testing.T) *PluginMessageServer {
function TestNewPluginMessageServer (line 27) | func TestNewPluginMessageServer(t *testing.T) {
function TestPluginManager_MessageServerInitialization (line 39) | func TestPluginManager_MessageServerInitialization(t *testing.T) {
function TestPluginMessageServer_ConcurrentAccess (line 48) | func TestPluginMessageServer_ConcurrentAccess(t *testing.T) {
function TestPluginMessageServer_LogReceiveError (line 67) | func TestPluginMessageServer_LogReceiveError(t *testing.T) {
function TestPluginMessageServer_LogReceiveError_NilError (line 77) | func TestPluginMessageServer_LogReceiveError_NilError(t *testing.T) {
function TestPluginManager_MultipleMessageServers (line 90) | func TestPluginManager_MultipleMessageServers(t *testing.T) {
function TestPluginMessageServer_NilPluginManager (line 108) | func TestPluginMessageServer_NilPluginManager(t *testing.T) {
function TestPluginMessageServer_GoroutineCleanup (line 118) | func TestPluginMessageServer_GoroutineCleanup(t *testing.T) {
function TestPluginMessage_SchemaUpdatedType (line 135) | func TestPluginMessage_SchemaUpdatedType(t *testing.T) {
function TestPluginMessageServer_LogReceiveError_ErrorTypes (line 147) | func TestPluginMessageServer_LogReceiveError_ErrorTypes(t *testing.T) {
function TestPluginManager_MessageServer_Consistency (line 164) | func TestPluginManager_MessageServer_Consistency(t *testing.T) {
function TestPluginMessageServer_SurvivesPluginManagerOperations (line 179) | func TestPluginMessageServer_SurvivesPluginManagerOperations(t *testing....
function TestNewPluginMessageServer_Concurrent (line 195) | func TestNewPluginMessageServer_Concurrent(t *testing.T) {
function TestPluginMessageServer_PointerStability (line 223) | func TestPluginMessageServer_PointerStability(t *testing.T) {
function TestPluginMessageServer_LogReceiveError_Concurrent (line 235) | func TestPluginMessageServer_LogReceiveError_Concurrent(t *testing.T) {
function TestPluginMessageServer_FieldAccess (line 258) | func TestPluginMessageServer_FieldAccess(t *testing.T) {
function TestPluginMessageServer_DoesNotBlockPluginManager (line 269) | func TestPluginMessageServer_DoesNotBlockPluginManager(t *testing.T) {
function TestPluginMessageServer_StressConcurrentAccess (line 287) | func TestPluginMessageServer_StressConcurrentAccess(t *testing.T) {
function TestPluginManager_UpdateConnectionSchema_NilPool (line 326) | func TestPluginManager_UpdateConnectionSchema_NilPool(t *testing.T) {
function TestPluginManager_UpdateConnectionSchema_NilPool_Concurrent (line 344) | func TestPluginManager_UpdateConnectionSchema_NilPool_Concurrent(t *test...
FILE: pkg/pluginmanager_service/plugin_manager.go
type PluginManager (line 40) | type PluginManager struct
method Serve (line 141) | func (m *PluginManager) Serve() {
method Get (line 154) | func (m *PluginManager) Get(req *pb.GetRequest) (_ *pb.GetResponse, er...
method ensurePluginAsync (line 182) | func (m *PluginManager) ensurePluginAsync(req *pb.GetRequest, resp *ge...
method buildRequiredPluginMap (line 208) | func (m *PluginManager) buildRequiredPluginMap(req *pb.GetRequest) (ma...
method Pool (line 231) | func (m *PluginManager) Pool() *pgxpool.Pool {
method RefreshConnections (line 235) | func (m *PluginManager) RefreshConnections(*pb.RefreshConnectionsReque...
method doRefresh (line 246) | func (m *PluginManager) doRefresh() {
method OnConnectionConfigChanged (line 255) | func (m *PluginManager) OnConnectionConfigChanged(ctx context.Context,...
method GetConnectionConfig (line 284) | func (m *PluginManager) GetConnectionConfig() connection.ConnectionCon...
method Shutdown (line 288) | func (m *PluginManager) Shutdown(*pb.ShutdownRequest) (resp *pb.Shutdo...
method killPlugin (line 322) | func (m *PluginManager) killPlugin(p *runningPlugin) {
method ensurePlugin (line 335) | func (m *PluginManager) ensurePlugin(pluginInstance string, connection...
method startPluginIfNeeded (line 370) | func (m *PluginManager) startPluginIfNeeded(pluginInstance string, con...
method startPlugin (line 407) | func (m *PluginManager) startPlugin(pluginInstance string, connectionC...
method addRunningPlugin (line 474) | func (m *PluginManager) addRunningPlugin(pluginInstance string) (*runn...
method startPluginProcess (line 511) | func (m *PluginManager) startPluginProcess(pluginInstance string, conn...
method setPluginMaxMemory (line 562) | func (m *PluginManager) setPluginMaxMemory(pluginConfig *plugin.Plugin...
method initializePlugin (line 578) | func (m *PluginManager) initializePlugin(connectionConfigs []*sdkproto...
method isShuttingDown (line 652) | func (m *PluginManager) isShuttingDown() bool {
method populatePluginConnectionConfigs (line 659) | func (m *PluginManager) populatePluginConnectionConfigs() {
method setPluginCacheSizeMap (line 667) | func (m *PluginManager) setPluginCacheSizeMap() {
method notifyNewDynamicSchemas (line 697) | func (m *PluginManager) notifyNewDynamicSchemas(pluginClient *sdkgrpc....
method waitForPluginLoad (line 710) | func (m *PluginManager) waitForPluginLoad(p *runningPlugin, req *pb.Ge...
method setAllConnectionConfigs (line 779) | func (m *PluginManager) setAllConnectionConfigs(connectionConfigs []*s...
method setCacheOptions (line 799) | func (m *PluginManager) setCacheOptions(pluginClient *sdkgrpc.PluginCl...
method setRateLimiters (line 809) | func (m *PluginManager) setRateLimiters(pluginInstance string, pluginC...
method setRateLimitersInternal (line 815) | func (m *PluginManager) setRateLimitersInternal(pluginInstance string,...
method updateConnectionSchema (line 832) | func (m *PluginManager) updateConnectionSchema(ctx context.Context, co...
method nonAggregatorConnectionCount (line 867) | func (m *PluginManager) nonAggregatorConnectionCount() int {
method getPluginExemplarConnections (line 876) | func (m *PluginManager) getPluginExemplarConnections() map[string]stri...
method tableExists (line 884) | func (m *PluginManager) tableExists(ctx context.Context, schema, table...
function NewPluginManager (line 103) | func NewPluginManager(ctx context.Context, connectionConfig map[string]*...
function nonAggregatorConnectionCount (line 903) | func nonAggregatorConnectionCount(connections []*sdkproto.ConnectionConf...
FILE: pkg/pluginmanager_service/plugin_manager_connection_config.go
method getConnectionConfig (line 12) | func (m *PluginManager) getConnectionConfig(connectionName string) (*sdk...
method handleConnectionConfigChanges (line 20) | func (m *PluginManager) handleConnectionConfigChanges(ctx context.Contex...
method sendUpdateConnectionConfigs (line 44) | func (m *PluginManager) sendUpdateConnectionConfigs(requestMap map[strin...
method handleAddedConnections (line 68) | func (m *PluginManager) handleAddedConnections(addedConnections map[stri...
method handleDeletedConnections (line 99) | func (m *PluginManager) handleDeletedConnections(deletedConnections map[...
method handleUpdatedConnections (line 125) | func (m *PluginManager) handleUpdatedConnections(updatedConnections map[...
FILE: pkg/pluginmanager_service/plugin_manager_notifications.go
method SendPostgresSchemaNotification (line 12) | func (m *PluginManager) SendPostgresSchemaNotification(ctx context.Conte...
method SendPostgresErrorsAndWarningsNotification (line 20) | func (m *PluginManager) SendPostgresErrorsAndWarningsNotification(ctx co...
method sendPostgresNotification (line 27) | func (m *PluginManager) sendPostgresNotification(ctx context.Context, no...
FILE: pkg/pluginmanager_service/plugin_manager_plugin_columns.go
method initialisePluginColumns (line 21) | func (m *PluginManager) initialisePluginColumns(ctx context.Context) err...
method shouldBootstrapPluginColumnTable (line 28) | func (m *PluginManager) shouldBootstrapPluginColumnTable(ctx context.Con...
method bootstrapPluginColumnTable (line 64) | func (m *PluginManager) bootstrapPluginColumnTable(ctx context.Context) ...
method createPluginColumnsTable (line 81) | func (m *PluginManager) createPluginColumnsTable(ctx context.Context) er...
method populatePluginColumnsTable (line 98) | func (m *PluginManager) populatePluginColumnsTable(ctx context.Context, ...
method removePluginsFromPluginColumnsTable (line 130) | func (m *PluginManager) removePluginsFromPluginColumnsTable(ctx context....
method loadPluginSchemas (line 153) | func (m *PluginManager) loadPluginSchemas(pluginConnectionMap map[string...
method UpdatePluginColumnsTable (line 186) | func (m *PluginManager) UpdatePluginColumnsTable(ctx context.Context, up...
FILE: pkg/pluginmanager_service/plugin_manager_plugin_instance.go
method handlePluginInstanceChanges (line 12) | func (m *PluginManager) handlePluginInstanceChanges(ctx context.Context,...
FILE: pkg/pluginmanager_service/plugin_manager_rate_limiters.go
method ShouldFetchRateLimiterDefs (line 24) | func (m *PluginManager) ShouldFetchRateLimiterDefs() bool {
method HandlePluginLimiterChanges (line 31) | func (m *PluginManager) HandlePluginLimiterChanges(newLimiters connectio...
method refreshRateLimiterTable (line 51) | func (m *PluginManager) refreshRateLimiterTable(ctx context.Context) err...
method refreshRateLimiterTableInternal (line 57) | func (m *PluginManager) refreshRateLimiterTableInternal(ctx context.Cont...
method handleUserLimiterChanges (line 105) | func (m *PluginManager) handleUserLimiterChanges(_ context.Context, plug...
method setRateLimitersForPlugin (line 145) | func (m *PluginManager) setRateLimitersForPlugin(pluginShortName string)...
method getPluginsWithChangedLimiters (line 171) | func (m *PluginManager) getPluginsWithChangedLimiters(newLimiters connec...
method getPluginsWithChangedLimitersInternal (line 177) | func (m *PluginManager) getPluginsWithChangedLimitersInternal(newLimiter...
method updateRateLimiterStatus (line 197) | func (m *PluginManager) updateRateLimiterStatus() {
method updateRateLimiterStatusInternal (line 203) | func (m *PluginManager) updateRateLimiterStatusInternal() {
method getUserDefinedLimitersForPlugin (line 222) | func (m *PluginManager) getUserDefinedLimitersForPlugin(plugin string) c...
method getUserDefinedLimitersForPluginInternal (line 230) | func (m *PluginManager) getUserDefinedLimitersForPluginInternal(plugin s...
method initialiseRateLimiterDefs (line 238) | func (m *PluginManager) initialiseRateLimiterDefs(ctx context.Context) (...
method bootstrapRateLimiterTable (line 274) | func (m *PluginManager) bootstrapRateLimiterTable(ctx context.Context) e...
method loadRateLimitersFromTable (line 284) | func (m *PluginManager) loadRateLimitersFromTable(ctx context.Context) (...
method getUserAndPluginLimitersFromTableResult (line 305) | func (m *PluginManager) getUserAndPluginLimitersFromTableResult(rateLimi...
method LoadPluginRateLimiters (line 329) | func (m *PluginManager) LoadPluginRateLimiters(pluginConnectionMap map[s...
FILE: pkg/pluginmanager_service/plugin_manager_test.go
function newTestPluginManager (line 22) | func newTestPluginManager(t *testing.T) *PluginManager {
function newTestConnectionConfig (line 43) | func newTestConnectionConfig(plugin, instance, connection string) *sdkpr...
function TestPluginManager_New (line 53) | func TestPluginManager_New(t *testing.T) {
function TestPluginManager_GetConnectionConfig_NotFound (line 64) | func TestPluginManager_GetConnectionConfig_NotFound(t *testing.T) {
function TestPluginManager_GetConnectionConfig_Found (line 73) | func TestPluginManager_GetConnectionConfig_Found(t *testing.T) {
function TestPluginManager_GetConnectionConfig_NilMap (line 85) | func TestPluginManager_GetConnectionConfig_NilMap(t *testing.T) {
function TestPluginManager_PopulatePluginConnectionConfigs (line 96) | func TestPluginManager_PopulatePluginConnectionConfigs(t *testing.T) {
function TestPluginManager_BuildRequiredPluginMap (line 118) | func TestPluginManager_BuildRequiredPluginMap(t *testing.T) {
function TestPluginManager_ConcurrentMapAccess (line 147) | func TestPluginManager_ConcurrentMapAccess(t *testing.T) {
function TestPluginManager_Shutdown_SetsShuttingDownFlag (line 181) | func TestPluginManager_Shutdown_SetsShuttingDownFlag(t *testing.T) {
function TestPluginManager_Shutdown_WaitsForPluginStart (line 194) | func TestPluginManager_Shutdown_WaitsForPluginStart(t *testing.T) {
function TestPluginManager_AddRunningPlugin_Success (line 235) | func TestPluginManager_AddRunningPlugin_Success(t *testing.T) {
function TestPluginManager_AddRunningPlugin_AlreadyExists (line 259) | func TestPluginManager_AddRunningPlugin_AlreadyExists(t *testing.T) {
function TestPluginManager_AddRunningPlugin_NoConfig (line 278) | func TestPluginManager_AddRunningPlugin_NoConfig(t *testing.T) {
function TestPluginManager_ConcurrentAddRunningPlugin (line 291) | func TestPluginManager_ConcurrentAddRunningPlugin(t *testing.T) {
function TestPluginManager_IsShuttingDown_Concurrent (line 330) | func TestPluginManager_IsShuttingDown_Concurrent(t *testing.T) {
function TestPluginManager_SetPluginCacheSizeMap_NoCacheLimit (line 364) | func TestPluginManager_SetPluginCacheSizeMap_NoCacheLimit(t *testing.T) {
function TestPluginManager_NonAggregatorConnectionCount (line 384) | func TestPluginManager_NonAggregatorConnectionCount(t *testing.T) {
function TestPluginManager_GetPluginExemplarConnections (line 424) | func TestPluginManager_GetPluginExemplarConnections(t *testing.T) {
function TestPluginManager_NoGoroutineLeak_OnError (line 447) | func TestPluginManager_NoGoroutineLeak_OnError(t *testing.T) {
function TestPluginManager_Pool (line 478) | func TestPluginManager_Pool(t *testing.T) {
function TestPluginManager_RefreshConnections (line 487) | func TestPluginManager_RefreshConnections(t *testing.T) {
function TestPluginManager_GetConnectionConfig_Concurrent (line 500) | func TestPluginManager_GetConnectionConfig_Concurrent(t *testing.T) {
function TestRunningPlugin_Initialization (line 525) | func TestRunningPlugin_Initialization(t *testing.T) {
function TestPluginManager_ConcurrentRefreshConnections (line 554) | func TestPluginManager_ConcurrentRefreshConnections(t *testing.T) {
function TestNonAggregatorConnectionCount (line 574) | func TestNonAggregatorConnectionCount(t *testing.T) {
function TestNewGetResponse (line 630) | func TestNewGetResponse(t *testing.T) {
function TestPluginManager_EnsurePlugin_ShuttingDown (line 641) | func TestPluginManager_EnsurePlugin_ShuttingDown(t *testing.T) {
function TestPluginManager_KillPlugin_NilClient (line 660) | func TestPluginManager_KillPlugin_NilClient(t *testing.T) {
function TestPluginManager_StressConcurrentMapAccess (line 674) | func TestPluginManager_StressConcurrentMapAccess(t *testing.T) {
function TestPluginManager_OnConnectionConfigChanged_EmptyToNonEmpty (line 724) | func TestPluginManager_OnConnectionConfigChanged_EmptyToNonEmpty(t *test...
function TestPluginManager_Shutdown_NoPlugins (line 753) | func TestPluginManager_Shutdown_NoPlugins(t *testing.T) {
function TestWaitForPluginLoadWithNilReattach (line 781) | func TestWaitForPluginLoadWithNilReattach(t *testing.T) {
FILE: pkg/pluginmanager_service/rate_limiter.go
function RateLimiterFromProto (line 9) | func RateLimiterFromProto(p *proto.RateLimiterDefinition, pluginImageRef...
function RateLimiterAsProto (line 33) | func RateLimiterAsProto(l *plugin.RateLimiter) *proto.RateLimiterDefinit...
FILE: pkg/pluginmanager_service/rate_limiters_helpers_test.go
function newTestRateLimiter (line 14) | func newTestRateLimiter(pluginName, name string, source string) *plugin....
function TestPluginManager_ShouldFetchRateLimiterDefs_Nil (line 25) | func TestPluginManager_ShouldFetchRateLimiterDefs_Nil(t *testing.T) {
function TestPluginManager_ShouldFetchRateLimiterDefs_NotNil (line 34) | func TestPluginManager_ShouldFetchRateLimiterDefs_NotNil(t *testing.T) {
function TestPluginManager_GetPluginsWithChangedLimiters_NoChanges (line 45) | func TestPluginManager_GetPluginsWithChangedLimiters_NoChanges(t *testin...
function TestPluginManager_GetPluginsWithChangedLimiters_NewPlugin (line 66) | func TestPluginManager_GetPluginsWithChangedLimiters_NewPlugin(t *testin...
function TestPluginManager_GetPluginsWithChangedLimiters_RemovedPlugin (line 82) | func TestPluginManager_GetPluginsWithChangedLimiters_RemovedPlugin(t *te...
function TestPluginManager_UpdateRateLimiterStatus_NoOverride (line 100) | func TestPluginManager_UpdateRateLimiterStatus_NoOverride(t *testing.T) {
function TestPluginManager_UpdateRateLimiterStatus_WithOverride (line 118) | func TestPluginManager_UpdateRateLimiterStatus_WithOverride(t *testing.T) {
function TestPluginManager_UpdateRateLimiterStatus_MultiplePlugins (line 142) | func TestPluginManager_UpdateRateLimiterStatus_MultiplePlugins(t *testin...
function TestPluginManager_GetUserDefinedLimitersForPlugin_Exists (line 175) | func TestPluginManager_GetUserDefinedLimitersForPlugin_Exists(t *testing...
function TestPluginManager_GetUserDefinedLimitersForPlugin_NotExists (line 191) | func TestPluginManager_GetUserDefinedLimitersForPlugin_NotExists(t *test...
function TestPluginManager_GetUserAndPluginLimitersFromTableResult (line 203) | func TestPluginManager_GetUserAndPluginLimitersFromTableResult(t *testin...
function TestPluginManager_GetUserAndPluginLimitersFromTableResult_Empty (line 224) | func TestPluginManager_GetUserAndPluginLimitersFromTableResult_Empty(t *...
function TestPluginManager_GetPluginsWithChangedLimiters_Concurrent (line 239) | func TestPluginManager_GetPluginsWithChangedLimiters_Concurrent(t *testi...
function TestPluginManager_UpdateRateLimiterStatus_MultipleLimiters (line 275) | func TestPluginManager_UpdateRateLimiterStatus_MultipleLimiters(t *testi...
function TestPluginManager_GetUserAndPluginLimitersFromTableResult_DuplicateNames (line 306) | func TestPluginManager_GetUserAndPluginLimitersFromTableResult_Duplicate...
function TestPluginManager_UpdateRateLimiterStatus_EmptyMaps (line 324) | func TestPluginManager_UpdateRateLimiterStatus_EmptyMaps(t *testing.T) {
function TestPluginManager_GetPluginsWithChangedLimiters_NilComparison (line 335) | func TestPluginManager_GetPluginsWithChangedLimiters_NilComparison(t *te...
function TestPluginManager_ShouldFetchRateLimiterDefs_Concurrent (line 355) | func TestPluginManager_ShouldFetchRateLimiterDefs_Concurrent(t *testing....
function TestPluginManager_GetUserDefinedLimitersForPlugin_Concurrent (line 375) | func TestPluginManager_GetUserDefinedLimitersForPlugin_Concurrent(t *tes...
function TestPluginManager_GetUserAndPluginLimitersFromTableResult_Concurrent (line 400) | func TestPluginManager_GetUserAndPluginLimitersFromTableResult_Concurren...
FILE: pkg/pluginmanager_service/rate_limiters_test.go
function TestPluginManager_ConcurrentRateLimiterMapAccess (line 21) | func TestPluginManager_ConcurrentRateLimiterMapAccess(t *testing.T) {
function TestPluginManager_ConcurrentUpdateRateLimiterStatus (line 98) | func TestPluginManager_ConcurrentUpdateRateLimiterStatus(t *testing.T) {
function TestPluginManager_ConcurrentRateLimiterMapAccess2 (line 153) | func TestPluginManager_ConcurrentRateLimiterMapAccess2(t *testing.T) {
function TestPluginManager_HandlePluginLimiterChanges_NilPool (line 216) | func TestPluginManager_HandlePluginLimiterChanges_NilPool(t *testing.T) {
FILE: pkg/pluginmanager_service/running_plugin.go
type runningPlugin (line 8) | type runningPlugin struct
FILE: pkg/query/init_data.go
type InitData (line 22) | type InitData struct
method Cancel (line 53) | func (i *InitData) Cancel() {
method Cleanup (line 62) | func (i *InitData) Cleanup(ctx context.Context) {
method init (line 80) | func (i *InitData) init(ctx context.Context, args []string) {
function NewInitData (line 35) | func NewInitData(ctx context.Context, args []string) *InitData {
function queryExporters (line 49) | func queryExporters() []export.Exporter {
function getQueriesFromArgs (line 135) | func getQueriesFromArgs(args []string) ([]*modconfig.ResolvedQuery, erro...
function ResolveQueryAndArgsFromSQLString (line 154) | func ResolveQueryAndArgsFromSQLString(sqlString string) (*modconfig.Reso...
function getQueryFromFile (line 185) | func getQueryFromFile(input string) (*modconfig.ResolvedQuery, bool, err...
FILE: pkg/query/queryexecute/execute.go
function RunInteractiveSession (line 32) | func RunInteractiveSession(ctx context.Context, initData *query.InitData...
function RunBatchSession (line 52) | func RunBatchSession(ctx context.Context, initData *query.InitData) (int...
function executeQueries (line 98) | func executeQueries(ctx context.Context, initData *query.InitData) int {
function executeQuery (line 135) | func executeQuery(ctx context.Context, initData *query.InitData, resolve...
function needSnapshot (line 225) | func needSnapshot() bool {
function publishSnapshotIfNeeded (line 240) | func publishSnapshotIfNeeded(ctx context.Context, snapshot *steampipecon...
function handlePublishSnapshotError (line 259) | func handlePublishSnapshotError(err error) error {
function showBlankLineBetweenResults (line 267) | func showBlankLineBetweenResults() bool {
FILE: pkg/query/queryexecute/execute_test.go
function createMockInitData (line 23) | func createMockInitData(t *testing.T) *query.InitData {
function closeInitDataLoaded (line 41) | func closeInitDataLoaded(initData *query.InitData) {
function TestRunBatchSession_NilInitData (line 52) | func TestRunBatchSession_NilInitData(t *testing.T) {
function TestRunBatchSession_EmptyQueries (line 67) | func TestRunBatchSession_EmptyQueries(t *testing.T) {
function TestRunBatchSession_InitError (line 84) | func TestRunBatchSession_InitError(t *testing.T) {
function TestRunBatchSession_NilClient (line 103) | func TestRunBatchSession_NilClient(t *testing.T) {
function TestRunBatchSession_LoadedTimeout (line 128) | func TestRunBatchSession_LoadedTimeout(t *testing.T) {
function TestNeedSnapshot_DefaultValues (line 165) | func TestNeedSnapshot_DefaultValues(t *testing.T) {
function TestShowBlankLineBetweenResults_DefaultValues (line 176) | func TestShowBlankLineBetweenResults_DefaultValues(t *testing.T) {
function TestHandlePublishSnapshotError_PaymentRequired (line 186) | func TestHandlePublishSnapshotError_PaymentRequired(t *testing.T) {
function TestHandlePublishSnapshotError_OtherError (line 199) | func TestHandlePublishSnapshotError_OtherError(t *testing.T) {
function TestExecuteQueries_EmptyQueriesList (line 212) | func TestExecuteQueries_EmptyQueriesList(t *testing.T) {
function TestExecuteQueries_NilClient (line 227) | func TestExecuteQueries_NilClient(t *testing.T) {
function TestRunBatchSession_CancelHandlerSetup (line 257) | func TestRunBatchSession_CancelHandlerSetup(t *testing.T) {
function TestWrapResult_NotNil (line 275) | func TestWrapResult_NotNil(t *testing.T) {
type mockError (line 289) | type mockError struct
method Error (line 293) | func (e *mockError) Error() string {
type mockClient (line 298) | type mockClient struct
method Close (line 303) | func (m *mockClient) Close(ctx context.Context) error {
method LoadUserSearchPath (line 307) | func (m *mockClient) LoadUserSearchPath(ctx context.Context) error {
method SetRequiredSessionSearchPath (line 311) | func (m *mockClient) SetRequiredSessionSearchPath(ctx context.Context)...
method GetRequiredSessionSearchPath (line 315) | func (m *mockClient) GetRequiredSessionSearchPath() []string {
method GetCustomSearchPath (line 319) | func (m *mockClient) GetCustomSearchPath() []string {
method AcquireManagementConnection (line 323) | func (m *mockClient) AcquireManagementConnection(ctx context.Context) ...
method AcquireSession (line 327) | func (m *mockClient) AcquireSession(ctx context.Context) *db_common.Ac...
method ExecuteSync (line 331) | func (m *mockClient) ExecuteSync(ctx context.Context, query string, ar...
method Execute (line 335) | func (m *mockClient) Execute(ctx context.Context, query string, args ....
method ExecuteSyncInSession (line 339) | func (m *mockClient) ExecuteSyncInSession(ctx context.Context, session...
method ExecuteInSession (line 343) | func (m *mockClient) ExecuteInSession(ctx context.Context, session *db...
method ResetPools (line 347) | func (m *mockClient) ResetPools(ctx context.Context) {
method GetSchemaFromDB (line 350) | func (m *mockClient) GetSchemaFromDB(ctx context.Context) (*db_common....
method ServerSettings (line 354) | func (m *mockClient) ServerSettings() *db_common.ServerSettings {
method RegisterNotificationListener (line 358) | func (m *mockClient) RegisterNotificationListener(f func(notification ...
FILE: pkg/query/queryhistory/history.go
type QueryHistory (line 15) | type QueryHistory struct
method Push (line 30) | func (q *QueryHistory) Push(query string) {
method Peek (line 50) | func (q *QueryHistory) Peek() *string {
method Persist (line 58) | func (q *QueryHistory) Persist() error {
method Get (line 79) | func (q *QueryHistory) Get() []string {
method enforceLimit (line 86) | func (q *QueryHistory) enforceLimit() {
method load (line 95) | func (q *QueryHistory) load() error {
function New (line 20) | func New() (*QueryHistory, error) {
FILE: pkg/query/queryhistory/history_test.go
function TestQueryHistory_BoundedSize (line 15) | func TestQueryHistory_BoundedSize(t *testing.T) {
FILE: pkg/query/queryresult/result.go
type Result (line 11) | type Result struct
method Close (line 25) | func (r *Result) Close() {
method StreamRow (line 35) | func (r *Result) StreamRow(row []interface{}) {
function NewResult (line 18) | func NewResult(cols []*queryresult.ColumnDef) *Result {
function WrapResult (line 45) | func WrapResult(r *queryresult.Result[TimingResultStream]) *Result {
function NewResultStreamer (line 57) | func NewResultStreamer() *ResultStreamer {
FILE: pkg/query/queryresult/result_test.go
function TestResultClose_DoubleClose (line 12) | func TestResultClose_DoubleClose(t *testing.T) {
function TestResult_ConcurrentReadAndClose (line 31) | func TestResult_ConcurrentReadAndClose(t *testing.T) {
function TestWrapResult_NilResult (line 69) | func TestWrapResult_NilResult(t *testing.T) {
FILE: pkg/query/queryresult/scan_metadata.go
type ScanMetadataRow (line 9) | type ScanMetadataRow struct
method AsResultRow (line 46) | func (m ScanMetadataRow) AsResultRow() map[string]any {
function NewScanMetadataRow (line 23) | func NewScanMetadataRow(connection string, table string, columns []strin...
type QueryRowSummary (line 67) | type QueryRowSummary struct
method AsResultRow (line 82) | func (s *QueryRowSummary) AsResultRow() map[string]any {
method Update (line 94) | func (s *QueryRowSummary) Update(m ScanMetadataRow) {
function NewQueryRowSummary (line 77) | func NewQueryRowSummary() *QueryRowSummary {
FILE: pkg/query/queryresult/timing_result.go
type TimingResultStream (line 3) | type TimingResultStream struct
method GetTiming (line 8) | func (t TimingResultStream) GetTiming() any {
method SetTiming (line 12) | func (t TimingResultStream) SetTiming(result *TimingResult) {
function NewTimingResultStream (line 16) | func NewTimingResultStream() TimingResultStream {
type TimingResult (line 22) | type TimingResult struct
method Initialise (line 33) | func (r *TimingResult) Initialise(summary *QueryRowSummary, scans []*S...
method GetTiming (line 44) | func (t TimingResult) GetTiming() any {
FILE: pkg/serversettings/load.go
function Load (line 14) | func Load(ctx context.Context, pool *pgxpool.Pool) (serverSettings *db_c...
FILE: pkg/serversettings/setup.go
function GetPopulateServerSettingsSql (line 11) | func GetPopulateServerSettingsSql(ctx context.Context, settings db_commo...
function CreateServerSettingsTable (line 32) | func CreateServerSettingsTable(ctx context.Context) db_common.QueryWithA...
function GrantsOnServerSettingsTable (line 45) | func GrantsOnServerSettingsTable(ctx context.Context) db_common.QueryWit...
function DropServerSettingsTable (line 56) | func DropServerSettingsTable(ctx context.Context) db_common.QueryWithArgs {
FILE: pkg/snapshot/snapshot.go
constant schemaVersion (line 20) | schemaVersion = "20221222"
type PanelData (line 25) | type PanelData struct
method IsSnapshotPanel (line 43) | func (*PanelData) IsSnapshotPanel() {}
type LeafData (line 37) | type LeafData struct
function QueryResultToSnapshot (line 46) | func QueryResultToSnapshot[T queryresult.TimingContainer](ctx context.Co...
function getPanelDashboard (line 72) | func getPanelDashboard[T queryresult.TimingContainer](ctx context.Contex...
function getPanelTable (line 89) | func getPanelTable[T queryresult.TimingContainer](ctx context.Context, r...
type snapshotPanelData (line 110) | type snapshotPanelData struct
function newSnapshotPanelData (line 116) | func newSnapshotPanelData() *snapshotPanelData {
function getData (line 122) | func getData[T queryresult.TimingContainer](ctx context.Context, result ...
function getLayout (line 158) | func getLayout[T queryresult.TimingContainer](result *queryresult.Result...
function SnapshotToQueryResult (line 178) | func SnapshotToQueryResult[T queryresult.TimingContainer](snap *steampip...
FILE: pkg/snapshot/snapshot_test.go
function TestRoundTripDataIntegrity_EmptyResult (line 19) | func TestRoundTripDataIntegrity_EmptyResult(t *testing.T) {
function TestRoundTripDataIntegrity_BasicData (line 50) | func TestRoundTripDataIntegrity_BasicData(t *testing.T) {
function TestRoundTripDataIntegrity_NullValues (line 110) | func TestRoundTripDataIntegrity_NullValues(t *testing.T) {
function TestConcurrentSnapshotToQueryResult_Race (line 154) | func TestConcurrentSnapshotToQueryResult_Race(t *testing.T) {
function TestSnapshotToQueryResult_GoroutineCleanup (line 206) | func TestSnapshotToQueryResult_GoroutineCleanup(t *testing.T) {
function TestSnapshotToQueryResult_PartialConsumption (line 246) | func TestSnapshotToQueryResult_PartialConsumption(t *testing.T) {
function TestLargeDataHandling (line 285) | func TestLargeDataHandling(t *testing.T) {
function TestSnapshotToQueryResult_InvalidSnapshot (line 339) | func TestSnapshotToQueryResult_InvalidSnapshot(t *testing.T) {
function TestSnapshotToQueryResult_WrongPanelType (line 353) | func TestSnapshotToQueryResult_WrongPanelType(t *testing.T) {
function TestConcurrentDataAccess_MultipleGoroutines (line 373) | func TestConcurrentDataAccess_MultipleGoroutines(t *testing.T) {
function TestDataIntegrity_SpecialCharacters (line 419) | func TestDataIntegrity_SpecialCharacters(t *testing.T) {
function TestHashCollision_DifferentQueries (line 468) | func TestHashCollision_DifferentQueries(t *testing.T) {
function TestMemoryLeak_RepeatedConversions (line 517) | func TestMemoryLeak_RepeatedConversions(t *testing.T) {
FILE: pkg/statushooks/context.go
function DisableStatusHooks (line 16) | func DisableStatusHooks(ctx context.Context) context.Context {
function AddStatusHooksToContext (line 20) | func AddStatusHooksToContext(ctx context.Context, statusHooks StatusHook...
function StatusHooksFromContext (line 24) | func StatusHooksFromContext(ctx context.Context) StatusHooks {
function AddSnapshotProgressToContext (line 35) | func AddSnapshotProgressToContext(ctx context.Context, snapshotProgress ...
function SnapshotProgressFromContext (line 39) | func SnapshotProgressFromContext(ctx context.Context) SnapshotProgress {
function AddMessageRendererToContext (line 50) | func AddMessageRendererToContext(ctx context.Context, messageRenderer Me...
function SetStatus (line 54) | func SetStatus(ctx context.Context, msg string) {
function Done (line 58) | func Done(ctx context.Context) {
function Warn (line 64) | func Warn(ctx context.Context, warning string) {
function Show (line 68) | func Show(ctx context.Context) {
function Message (line 72) | func Message(ctx context.Context, msgs ...string) {
type MessageRenderer (line 76) | type MessageRenderer
function MessageRendererFromContext (line 78) | func MessageRendererFromContext(ctx context.Context) MessageRenderer {
FILE: pkg/statushooks/null_hooks.go
type NullStatusHook (line 5) | type NullStatusHook struct
method SetStatus (line 7) | func (*NullStatusHook) SetStatus(string) {}
method Hide (line 8) | func (*NullStatusHook) Hide() {}
method Message (line 9) | func (*NullStatusHook) Message(...string) {}
method Show (line 10) | func (*NullStatusHook) Show() {}
method Warn (line 11) | func (*NullStatusHook) Warn(string) {}
FILE: pkg/statushooks/null_snapshot_progress.go
type NullSnapshotProgress (line 8) | type NullSnapshotProgress struct
method UpdateRowCount (line 10) | func (*NullSnapshotProgress) UpdateRowCount(context.Context, int) {}
method UpdateErrorCount (line 11) | func (*NullSnapshotProgress) UpdateErrorCount(context.Context, int) {}
FILE: pkg/statushooks/snapshot_progress.go
type SnapshotProgress (line 5) | type SnapshotProgress interface
function SnapshotError (line 10) | func SnapshotError(ctx context.Context) {
function UpdateSnapshotProgress (line 14) | func UpdateSnapshotProgress(ctx context.Context, completedRows int) {
FILE: pkg/statushooks/snapshot_progress_reporter.go
type SnapshotProgressReporter (line 13) | type SnapshotProgressReporter struct
method UpdateRowCount (line 27) | func (r *SnapshotProgressReporter) UpdateRowCount(ctx context.Context,...
method UpdateErrorCount (line 34) | func (r *SnapshotProgressReporter) UpdateErrorCount(ctx context.Contex...
method showProgress (line 41) | func (r *SnapshotProgressReporter) showProgress(ctx context.Context) {
function NewSnapshotProgressReporter (line 20) | func NewSnapshotProgressReporter(target string) *SnapshotProgressReporter {
FILE: pkg/statushooks/spinner.go
constant minSpinnerWidth (line 24) | minSpinnerWidth = 7
type StatusSpinner (line 27) | type StatusSpinner struct
method SetStatus (line 73) | func (s *StatusSpinner) SetStatus(msg string) {
method Message (line 77) | func (s *StatusSpinner) Message(msgs ...string) {
method Warn (line 87) | func (s *StatusSpinner) Warn(msg string) {
method Hide (line 96) | func (s *StatusSpinner) Hide() {
method Show (line 106) | func (s *StatusSpinner) Show() {
method UpdateSpinnerMessage (line 117) | func (s *StatusSpinner) UpdateSpinnerMessage(newMessage string) {
method closeSpinner (line 128) | func (s *StatusSpinner) closeSpinner() {
method truncateSpinnerMessageToScreen (line 134) | func (s *StatusSpinner) truncateSpinnerMessageToScreen(msg string) str...
type StatusSpinnerOpt (line 35) | type StatusSpinnerOpt
function WithMessage (line 37) | func WithMessage(msg string) StatusSpinnerOpt {
function WithDelay (line 43) | func WithDelay(delay time.Duration) StatusSpinnerOpt {
function NewStatusSpinnerHook (line 56) | func NewStatusSpinnerHook(opts ...StatusSpinnerOpt) *StatusSpinner {
FILE: pkg/statushooks/status_hooks.go
type StatusHooks (line 3) | type StatusHooks interface
FILE: pkg/statushooks/statushooks_test.go
function TestSpinnerCancelChannelNeverInitialized (line 14) | func TestSpinnerCancelChannelNeverInitialized(t *testing.T) {
function TestSpinnerConcurrentShowHide (line 31) | func TestSpinnerConcurrentShowHide(t *testing.T) {
function TestSpinnerConcurrentUpdate (line 57) | func TestSpinnerConcurrentUpdate(t *testing.T) {
function TestSpinnerMessageDeferredRestart (line 81) | func TestSpinnerMessageDeferredRestart(t *testing.T) {
function TestSpinnerWarnDeferredRestart (line 108) | func TestSpinnerWarnDeferredRestart(t *testing.T) {
function TestSpinnerConcurrentMessageAndHide (line 135) | func TestSpinnerConcurrentMessageAndHide(t *testing.T) {
function TestProgressReporterConcurrentUpdates (line 171) | func TestProgressReporterConcurrentUpdates(t *testing.T) {
function TestSpinnerGoroutineLeak (line 198) | func TestSpinnerGoroutineLeak(t *testing.T) {
function TestSpinnerUpdateAfterHide (line 229) | func TestSpinnerUpdateAfterHide(t *testing.T) {
function TestSpinnerSetStatusRace (line 244) | func TestSpinnerSetStatusRace(t *testing.T) {
function TestContextFunctionsNilContext (line 266) | func TestContextFunctionsNilContext(t *testing.T) {
function TestSnapshotProgressHelperFunctions (line 285) | func TestSnapshotProgressHelperFunctions(t *testing.T) {
function TestSpinnerShowWithoutMessage (line 303) | func TestSpinnerShowWithoutMessage(t *testing.T) {
function TestSpinnerMultipleStartStopCycles (line 314) | func TestSpinnerMultipleStartStopCycles(t *testing.T) {
function TestSpinnerConcurrentSetStatusAndHide (line 329) | func TestSpinnerConcurrentSetStatusAndHide(t *testing.T) {
FILE: pkg/steampipeconfig/connection_plugin.go
type ConnectionPluginData (line 22) | type ConnectionPluginData struct
type ConnectionPlugin (line 32) | type ConnectionPlugin struct
method addConnection (line 42) | func (p ConnectionPlugin) addConnection(name string, config string, co...
method GetSchema (line 51) | func (p ConnectionPlugin) GetSchema(connectionName string) (schema *sd...
function NewConnectionPlugin (line 79) | func NewConnectionPlugin(pluginShortName, pluginName string, pluginClien...
function CreateConnectionPlugins (line 89) | func CreateConnectionPlugins(pluginManager pluginshared.PluginManager, c...
function handleGetFailures (line 173) | func handleGetFailures(getResponse *proto.GetResponse, res *RefreshConne...
function populateConnectionPluginSchemas (line 218) | func populateConnectionPluginSchemas(requestedConnectionPluginMap map[st...
function fullConnectionPluginMap (line 270) | func fullConnectionPluginMap(sparseConnectionPluginMap map[string]*Conne...
function createConnectionPlugin (line 285) | func createConnectionPlugin(connection *modconfig.SteampipeConnection, r...
function attachToPlugin (line 336) | func attachToPlugin(reattach *plugin.ReattachConfig, pluginName string) ...
FILE: pkg/steampipeconfig/connection_schemas.go
type ConnectionSchemaMap (line 12) | type ConnectionSchemaMap
function NewConnectionSchemaMap (line 17) | func NewConnectionSchemaMap(ctx context.Context, connectionStateMap Conn...
FILE: pkg/steampipeconfig/connection_state.go
type ConnectionState (line 17) | type ConnectionState struct
method setFilename (line 67) | func (d *ConnectionState) setFilename(connection *modconfig.SteampipeC...
method Equals (line 73) | func (d *ConnectionState) Equals(other *ConnectionState) bool {
method pluginModTimeChanged (line 104) | func (d *ConnectionState) pluginModTimeChanged(other *ConnectionState)...
method CanCloneSchema (line 108) | func (d *ConnectionState) CanCloneSchema() bool {
method Error (line 113) | func (d *ConnectionState) Error() string {
method SetError (line 117) | func (d *ConnectionState) SetError(err string) {
method Loaded (line 124) | func (d *ConnectionState) Loaded() bool {
method Disabled (line 128) | func (d *ConnectionState) Disabled() bool {
method GetType (line 132) | func (d *ConnectionState) GetType() string {
function NewConnectionState (line 49) | func NewConnectionState(connection *modconfig.SteampipeConnection, creat...
FILE: pkg/steampipeconfig/connection_state_map.go
type ConnectionStateSummary (line 19) | type ConnectionStateSummary
type ConnectionStateMap (line 21) | type ConnectionStateMap
method GetSummary (line 94) | func (m ConnectionStateMap) GetSummary() ConnectionStateSummary {
method Pending (line 104) | func (m ConnectionStateMap) Pending() bool {
method Loaded (line 110) | func (m ConnectionStateMap) Loaded(connections ...string) bool {
method ConnectionsInState (line 131) | func (m ConnectionStateMap) ConnectionsInState(states ...string) bool {
method Save (line 142) | func (m ConnectionStateMap) Save() error {
method Equals (line 152) | func (m ConnectionStateMap) Equals(other ConnectionStateMap) bool {
method ConnectionModTime (line 171) | func (m ConnectionStateMap) ConnectionModTime() time.Time {
method GetFirstSearchPathConnectionForPlugins (line 181) | func (m ConnectionStateMap) GetFirstSearchPathConnectionForPlugins(sea...
method GetPluginToConnectionMap (line 194) | func (m ConnectionStateMap) GetPluginToConnectionMap() map[string][]st...
method getFirstSearchPathConnectionMapForPlugins (line 205) | func (m ConnectionStateMap) getFirstSearchPathConnectionMapForPlugins(...
method SetConnectionsToPendingOrIncomplete (line 228) | func (m ConnectionStateMap) SetConnectionsToPendingOrIncomplete() {
method PopulateFilename (line 242) | func (m ConnectionStateMap) PopulateFilename() {
function GetRequiredConnectionStateMap (line 24) | func GetRequiredConnectionStateMap(connectionMap map[string]*modconfig.S...
function newErrorConnectionState (line 88) | func newErrorConnectionState(connection *modconfig.SteampipeConnection) ...
FILE: pkg/steampipeconfig/connection_state_map_test.go
function TestConnectionStateMapGetSummary (line 10) | func TestConnectionStateMapGetSummary(t *testing.T) {
function TestConnectionStateMapPending (line 45) | func TestConnectionStateMapPending(t *testing.T) {
function TestConnectionStateMapLoaded (line 106) | func TestConnectionStateMapLoaded(t *testing.T) {
function TestConnectionStateMapConnectionsInState (line 181) | func TestConnectionStateMapConnectionsInState(t *testing.T) {
function TestConnectionStateMapEquals (line 234) | func TestConnectionStateMapEquals(t *testing.T) {
function TestConnectionStateMapConnectionModTime (line 319) | func TestConnectionStateMapConnectionModTime(t *testing.T) {
function TestConnectionStateMapConnectionModTimeEmpty (line 346) | func TestConnectionStateMapConnectionModTimeEmpty(t *testing.T) {
function TestConnectionStateMapGetPluginToConnectionMap (line 356) | func TestConnectionStateMapGetPluginToConnectionMap(t *testing.T) {
function TestConnectionStateMapSetConnectionsToPendingOrIncomplete (line 383) | func TestConnectionStateMapSetConnectionsToPendingOrIncomplete(t *testin...
FILE: pkg/steampipeconfig/connection_test.go
function TestConnectionsUpdateEqual (line 11) | func TestConnectionsUpdateEqual(t *testing.T) {
function TestConnectionStateLoaded (line 122) | func TestConnectionStateLoaded(t *testing.T) {
function TestConnectionStateDisabled (line 180) | func TestConnectionStateDisabled(t *testing.T) {
function TestConnectionStateGetType (line 222) | func TestConnectionStateGetType(t *testing.T) {
function TestConnectionStateError (line 256) | func TestConnectionStateError(t *testing.T) {
function TestConnectionStateSetError (line 290) | func TestConnectionStateSetError(t *testing.T) {
FILE: pkg/steampipeconfig/connection_updates.go
type ConnectionUpdates (line 24) | type ConnectionUpdates struct
method updateRequiredStateWithSchemaProperties (line 293) | func (u *ConnectionUpdates) updateRequiredStateWithSchemaProperties(dy...
method populateConnectionPlugins (line 322) | func (u *ConnectionUpdates) populateConnectionPlugins(alreadyCreatedCo...
method getConnectionsToCreate (line 353) | func (u *ConnectionUpdates) getConnectionsToCreate(alreadyCreatedConne...
method HasUpdates (line 378) | func (u *ConnectionUpdates) HasUpdates() bool {
method String (line 382) | func (u *ConnectionUpdates) String() string {
method setError (line 402) | func (u *ConnectionUpdates) setError(connectionName string, error stri...
method IdentifyMissingComments (line 416) | func (u *ConnectionUpdates) IdentifyMissingComments() {
method DynamicUpdates (line 436) | func (u *ConnectionUpdates) DynamicUpdates() []string {
method populateAggregators (line 446) | func (u *ConnectionUpdates) populateAggregators() {
method getSchemaHashesForDynamicSchemas (line 483) | func (u *ConnectionUpdates) getSchemaHashesForDynamicSchemas(requiredC...
method GetConnectionsToDelete (line 517) | func (u *ConnectionUpdates) GetConnectionsToDelete() []string {
function NewConnectionUpdates (line 48) | func NewConnectionUpdates(ctx context.Context, pool *pgxpool.Pool, plugi...
function populateConnectionUpdates (line 64) | func populateConnectionUpdates(ctx context.Context, pool *pgxpool.Pool, ...
type connectionRequiresUpdateResult (line 238) | type connectionRequiresUpdateResult struct
function connectionRequiresUpdate (line 243) | func connectionRequiresUpdate(forceUpdateConnectionNames []string, name ...
function pluginSchemaHash (line 521) | func pluginSchemaHash(s *proto.Schema) string {
FILE: pkg/steampipeconfig/connection_updates_opts.go
type connectionUpdatesConfig (line 3) | type connectionUpdatesConfig struct
type ConnectionUpdatesOption (line 7) | type ConnectionUpdatesOption
function WithForceUpdate (line 9) | func WithForceUpdate(connections []string) ConnectionUpdatesOption {
FILE: pkg/steampipeconfig/connection_updates_test.go
function TestConnectionUpdates_IdentifyMissingComments (line 14) | func TestConnectionUpdates_IdentifyMissingComments(t *testing.T) {
FILE: pkg/steampipeconfig/connection_updates_validate.go
method validate (line 13) | func (u *ConnectionUpdates) validate() {
method validatePluginsAndConnections (line 19) | func (u *ConnectionUpdates) validatePluginsAndConnections() {
method validateUpdates (line 37) | func (u *ConnectionUpdates) validateUpdates() {
function validateConnectionName (line 72) | func validateConnectionName(connectionName string, p *ConnectionPlugin) ...
function validateProtocolVersion (line 86) | func validateProtocolVersion(connectionName string, p *ConnectionPlugin)...
function BuildValidationWarningString (line 108) | func BuildValidationWarningString(failures []*ValidationFailure) string {
FILE: pkg/steampipeconfig/dependency_path.go
constant pathSeparator (line 5) | pathSeparator = " -> "
type DependencyPathKey (line 11) | type DependencyPathKey
method GetParent (line 17) | func (k DependencyPathKey) GetParent() DependencyPathKey {
method PathLength (line 26) | func (k DependencyPathKey) PathLength() int {
function newDependencyPathKey (line 13) | func newDependencyPathKey(dependencyPath ...string) DependencyPathKey {
FILE: pkg/steampipeconfig/load_config.go
function LoadSteampipeConfig (line 46) | func LoadSteampipeConfig(ctx context.Context, modLocation string, comman...
function LoadConnectionConfig (line 65) | func LoadConnectionConfig(ctx context.Context) (*SteampipeConfig, perror...
function ensureDefaultConfigFile (line 69) | func ensureDefaultConfigFile(configFolder string) error {
function loadSteampipeConfig (line 133) | func loadSteampipeConfig(ctx context.Context, modLocation string, comman...
function logValidationResult (line 197) | func logValidationResult(warnings []string, errors []string) {
function buildValidationLogString (line 208) | func buildValidationLogString(items []string, validationType string) str...
type loadConfigOptions (line 226) | type loadConfigOptions struct
function loadConfig (line 231) | func loadConfig(ctx context.Context, configFolder string, steampipeConfi...
function getDuplicateConnectionError (line 347) | func getDuplicateConnectionError(existingConnection, newConnection *modc...
function optionsBlockPermitted (line 353) | func optionsBlockPermitted(block *hcl.Block, blockMap map[string]bool, o...
function SteampipeOptionsBlockMapping (line 370) | func SteampipeOptionsBlockMapping(block *hcl.Block) (poptions.Options, h...
FILE: pkg/steampipeconfig/load_config_test.go
type loadConfigTest (line 20) | type loadConfigTest struct
function TestLoadConfig (line 80) | func TestLoadConfig(t *testing.T) {
function SteampipeConfigEquals (line 133) | func SteampipeConfigEquals(left, right *SteampipeConfig) bool {
FILE: pkg/steampipeconfig/load_connection_state.go
function LoadConnectionState (line 21) | func LoadConnectionState(ctx context.Context, conn *pgx.Conn, opts ...Lo...
function loadConnectionState (line 93) | func loadConnectionState(ctx context.Context, conn *pgx.Conn, opts ...lo...
function checkConnectionsAreReady (line 142) | func checkConnectionsAreReady(ctx context.Context, connectionStateMap Co...
function allConnectionsInError (line 151) | func allConnectionsInError(connectionsNames []string, connectionStateMap...
function GetLoadingConnectionStatusMessage (line 169) | func GetLoadingConnectionStatusMessage(connectionStateMap ConnectionStat...
function SaveConnectionStateFile (line 188) | func SaveConnectionStateFile(res *RefreshConnectionResult, connectionUpd...
function DeleteConnectionStateFile (line 205) | func DeleteConnectionStateFile() {
type loadConnectionStateConfig (line 209) | type loadConnectionStateConfig struct
type loadConnectionStateOption (line 212) | type loadConnectionStateOption
FILE: pkg/steampipeconfig/load_connection_state_option.go
type WaitModeValue (line 3) | type WaitModeValue
constant NoWait (line 6) | NoWait WaitModeValue = iota
constant WaitForLoading (line 7) | WaitForLoading
constant WaitForReady (line 8) | WaitForReady
constant WaitForSearchPath (line 9) | WaitForSearchPath
type LoadConnectionStateConfiguration (line 12) | type LoadConnectionStateConfiguration struct
FILE: pkg/steampipeconfig/postgres_notification.go
constant PostgresNotificationStructVersion (line 7) | PostgresNotificationStructVersion = 20230306
type PostgresNotificationType (line 9) | type PostgresNotificationType
constant PgNotificationSchemaUpdate (line 12) | PgNotificationSchemaUpdate PostgresNotificationType = iota + 1
constant PgNotificationConnectionError (line 13) | PgNotificationConnectionError
type PostgresNotification (line 16) | type PostgresNotification struct
type ErrorsAndWarningsNotification (line 21) | type ErrorsAndWarningsNotification struct
function NewSchemaUpdateNotification (line 27) | func NewSchemaUpdateNotification() *PostgresNotification {
function NewErrorsAndWarningsNotification (line 34) | func NewErrorsAndWarningsNotification(errorAndWarnings error_helpers.Err...
FILE: pkg/steampipeconfig/refresh_connections_result.go
type RefreshConnectionResult (line 12) | type RefreshConnectionResult struct
method Merge (line 22) | func (r *RefreshConnectionResult) Merge(other *RefreshConnectionResult) {
method String (line 40) | func (r *RefreshConnectionResult) String() string {
method AddFailedConnection (line 52) | func (r *RefreshConnectionResult) AddFailedConnection(c string, failur...
function NewErrorRefreshConnectionResult (line 18) | func NewErrorRefreshConnectionResult(err error) *RefreshConnectionResult {
FILE: pkg/steampipeconfig/shared_test.go
type findPluginFolderTest (line 13) | type findPluginFolderTest struct
function setupTestData (line 20) | func setupTestData() {
function TestFindPluginFolderTest (line 38) | func TestFindPluginFolderTest(t *testing.T) {
function setupFindPluginFolderTest (line 67) | func setupFindPluginFolderTest(directories []string) {
function cleanupFindPluginFolderTest (line 76) | func cleanupFindPluginFolderTest(directories []string) {
FILE: pkg/steampipeconfig/steampipeconfig.go
type SteampipeConfig (line 26) | type SteampipeConfig struct
method Validate (line 53) | func (c *SteampipeConfig) Validate() (validationWarnings, validationEr...
method ConfigMap (line 74) | func (c *SteampipeConfig) ConfigMap() map[string]interface{} {
method SetOptions (line 95) | func (c *SteampipeConfig) SetOptions(opts poptions.Options) (errorsAnd...
method String (line 121) | func (c *SteampipeConfig) String() string {
method ConnectionsForPlugin (line 155) | func (c *SteampipeConfig) ConnectionsForPlugin(pluginLongName string, ...
method ConnectionNames (line 177) | func (c *SteampipeConfig) ConnectionNames() []string {
method ConnectionList (line 187) | func (c *SteampipeConfig) ConnectionList() []*modconfig.SteampipeConne...
method addPlugin (line 199) | func (c *SteampipeConfig) addPlugin(plugin *plugin.Plugin) error {
method initializePlugins (line 232) | func (c *SteampipeConfig) initializePlugins() {
method resolvePluginInstanceForConnection (line 281) | func (c *SteampipeConfig) resolvePluginInstanceForConnection(connectio...
method GetNonSearchPathConnections (line 351) | func (c *SteampipeConfig) GetNonSearchPathConnections(searchPath []str...
function NewSteampipeConfig (line 43) | func NewSteampipeConfig(commandName string) *SteampipeConfig {
function duplicatePluginError (line 223) | func duplicatePluginError(existingPlugin, newPlugin *plugin.Plugin) error {
FILE: pkg/steampipeconfig/validate.go
function ValidateConnectionName (line 11) | func ValidateConnectionName(connectionName string) error {
FILE: pkg/steampipeconfig/validation_failure.go
type ValidationFailure (line 7) | type ValidationFailure struct
method String (line 14) | func (v ValidationFailure) String() string {
FILE: pkg/steampipeconfig/validation_failure_test.go
function TestValidationFailureString (line 8) | func TestValidationFailureString(t *testing.T) {
function TestValidationFailureStringFormat (line 71) | func TestValidationFailureStringFormat(t *testing.T) {
FILE: pkg/task/available_versions.go
type AvailableVersionCache (line 18) | type AvailableVersionCache struct
method asTable (line 24) | func (av *AvailableVersionCache) asTable(ctx context.Context) (*bytes....
method buildNotification (line 53) | func (av *AvailableVersionCache) buildNotification(ctx context.Context...
method cliNotificationMessage (line 64) | func (av *AvailableVersionCache) cliNotificationMessage() ([]string, e...
method pluginNotificationMessage (line 101) | func (av *AvailableVersionCache) pluginNotificationMessage(ctx context...
method getPluginNotificationLines (line 116) | func (av *AvailableVersionCache) getPluginNotificationLines(reports []...
FILE: pkg/task/config.go
type TaskRunOption (line 5) | type TaskRunOption
type HookFn
Condensed preview — 1010 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (2,966K chars).
[
{
"path": ".acceptance.goreleaser.yml",
"chars": 473,
"preview": "before:\n hooks:\n - go mod tidy\n - go clean -testcache && go test -timeout 30s ./...\nbuilds:\n - env:\n - CGO_"
},
{
"path": ".ai/.gitignore",
"chars": 150,
"preview": "# AI Working Directory\n# Temporary files created by AI agents during development\n\nwip/\n*.tmp\n*.swp\n*.bak\n*~\n\n# Keep dire"
},
{
"path": ".ai/README.md",
"chars": 1359,
"preview": "# AI Development Guide for Steampipe\n\nThis directory contains documentation, templates, and conventions for AI-assisted "
},
{
"path": ".ai/docs/bug-fix-prs.md",
"chars": 8915,
"preview": "# Bug Fix PR Guide\n\n## Two-Commit Pattern\n\nEvery bug fix PR must have **exactly 2 commits**:\n1. **Commit 1**: Demonstrat"
},
{
"path": ".ai/docs/bug-workflow.md",
"chars": 2328,
"preview": "# GitHub Issue Guidelines\n\nGuidelines for creating bug reports and issues.\n\n## Bug Issue Format\n\n**Title:**\n```\nBUG: Bri"
},
{
"path": ".ai/docs/parallel-coordination.md",
"chars": 2882,
"preview": "# Parallel Agent Coordination\n\nSimple patterns for coordinating multiple AI agents working in parallel.\n\n## Basic Patter"
},
{
"path": ".ai/docs/test-generation-guide.md",
"chars": 5432,
"preview": "# Test Generation Guide\n\nGuidelines for writing effective tests.\n\n## Focus on Value\n\nPrioritize tests that:\n- Catch real"
},
{
"path": ".ai/templates/bugfix-pr-template.md",
"chars": 923,
"preview": "# Bug Fix PR Template\n\n## PR Title\n\n```\nBrief description closes #<issue>\n```\n\n## PR Description\n\n```markdown\n## Summary"
},
{
"path": ".ai/templates/test-pr-template.md",
"chars": 923,
"preview": "# Test Suite PR Template\n\n## PR Title\n\n```\nAdd tests for pkg/{package1,package2}\n```\n\n## PR Description\n\n```markdown\n## "
},
{
"path": ".claude/commands/fix-vulnerabilities.md",
"chars": 2223,
"preview": "---\ndescription: Check and fix Dependabot security vulnerabilities\nallowed-tools: Bash(gh api:*), Bash(gh release:*), Ba"
},
{
"path": ".gitattributes",
"chars": 30,
"preview": "**/*.sp linguist-language=HCL\n"
},
{
"path": ".github/ISSUE_TEMPLATE/bug_report.md",
"chars": 489,
"preview": "---\nname: Bug report\nabout: Create a report to help us improve\ntitle: ''\nlabels: bug\nassignees: ''\n\n---\n\n**Describe the "
},
{
"path": ".github/ISSUE_TEMPLATE/feature_request.md",
"chars": 604,
"preview": "---\nname: Feature request\nabout: Suggest an idea for this project\ntitle: ''\nlabels: enhancement\nassignees: ''\n\n---\n\n**Is"
},
{
"path": ".github/ISSUE_TEMPLATE/release_issue.md",
"chars": 1009,
"preview": "---\nname: Steampipe Release\nabout: Steampipe Release\ntitle: \"Steampipe v<INSERT_VERSION_HERE>\"\nlabels: release\n---\n\n####"
},
{
"path": ".github/dependabot.yml",
"chars": 729,
"preview": "# See https://docs.github.com/en/github/administering-a-repository/configuration-options-for-dependency-updates#package-"
},
{
"path": ".github/workflows/01-steampipe-release.yaml",
"chars": 11747,
"preview": "name: \"01 - Steampipe: Release\"\n\non:\n workflow_dispatch:\n inputs:\n environment:\n type: choice\n de"
},
{
"path": ".github/workflows/02-steampipe-db-image-build.yaml",
"chars": 6814,
"preview": "name: \"02 - Steampipe: Build and Publish DB Image\"\n\n# Controls when the action will run.\non:\n workflow_dispatch:\n in"
},
{
"path": ".github/workflows/10-test-lint.yaml",
"chars": 1296,
"preview": "name: \"10 - Test: Linting\"\non:\n push:\n tags:\n - v*\n branches:\n - main\n - \"v*\"\n workflow_dispatch:"
},
{
"path": ".github/workflows/11-test-acceptance.yaml",
"chars": 7410,
"preview": "name: \"11 - Test: Acceptance\"\non:\n pull_request:\n\nenv:\n STEAMPIPE_UPDATE_CHECK: false\n SPIPETOOLS_PG_CONN_STRING: ${{"
},
{
"path": ".github/workflows/12-test-post-release-linux-distros.yaml",
"chars": 10105,
"preview": "name: \"12 - Test: Linux Distros (Post-release)\"\n\non:\n workflow_dispatch:\n inputs:\n version:\n description"
},
{
"path": ".github/workflows/30-stale.yaml",
"chars": 1600,
"preview": "name: \"30 - Admin: Stale Issues and PRs\"\non:\n schedule:\n - cron: \"0 8 * * *\"\n workflow_dispatch:\n inputs:\n "
},
{
"path": ".github/workflows/31-add-issues-to-pipeling-issue-tracker.yaml",
"chars": 319,
"preview": "name: Assign Issue to Project\n\non:\n issues:\n types: [opened]\n\njobs:\n add-to-project:\n uses: turbot/steampipe-wor"
},
{
"path": ".gitignore",
"chars": 616,
"preview": "# Editor cache and lock files\n*.swp\n*.swo\n.idea/\n.vscode/\n.DS_Store\n\n# Binaries for programs and plugins\n*.exe\n*.exe~\n*."
},
{
"path": ".gitmodules",
"chars": 342,
"preview": "[submodule \"bats-core\"]\n\tpath = tests/acceptance/lib/bats-core\n\turl = https://github.com/bats-core/bats-core\n[submodule "
},
{
"path": ".golangci.yml",
"chars": 1861,
"preview": "version: \"2\"\n\nlinters:\n default: none\n enable:\n # default rules\n - errcheck\n - govet\n - ineffassign\n - "
},
{
"path": ".goreleaser.yml",
"chars": 2527,
"preview": "version: 2\n\nbefore:\n hooks:\n - go mod tidy\nbuilds:\n - env:\n - CGO_ENABLED=0\n - GO111MODULE=on\n goos:\n "
},
{
"path": "CHANGELOG.md",
"chars": 122831,
"preview": "## v2.4.0 [2026-02-27]\n_Whats new_\n- Compiled with Go 1.26.\n\n## v2.3.6 [2026-02-20]\n_Bug fixes_\n- Fix `date` and `timest"
},
{
"path": "CLAUDE.md",
"chars": 20661,
"preview": "# Steampipe\n\nSteampipe is a zero-ETL tool that lets you query cloud APIs using SQL. It embeds PostgreSQL and uses a Fore"
},
{
"path": "CONTRIBUTING.md",
"chars": 1129,
"preview": "# Contributing to Steampipe\n\nBecause Open Source plays a major part in how we build our products,\nwe see it as a matter "
},
{
"path": "LICENSE",
"chars": 34523,
"preview": " GNU AFFERO GENERAL PUBLIC LICENSE\n Version 3, 19 November 2007\n\n Copyright (C)"
},
{
"path": "Makefile",
"chars": 616,
"preview": "OUTPUT_DIR?=/usr/local/bin\n\nbuild:\n\t$(eval TIMESTAMP := $(shell date +%Y%m%d%H%M%S))\n\t$(eval GIT_BRANCH := $(shell git r"
},
{
"path": "README.md",
"chars": 6873,
"preview": "[<picture><source media=\"(prefers-color-scheme: dark)\" srcset=\"https://steampipe.io/images/steampipe-color-logo-and-word"
},
{
"path": "cmd/completion.go",
"chars": 3015,
"preview": "package cmd\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\t\"runtime\"\n\n\t\"github.com/spf13/cobra\"\n\t\"github.com/turbot/pipe-fittings/v2/constants\""
},
{
"path": "cmd/doc.go",
"chars": 89,
"preview": "// Package cmd contains Cobra command definitions for all Steampipe commands\npackage cmd\n"
},
{
"path": "cmd/login.go",
"chars": 3222,
"preview": "package cmd\n\nimport (\n\t\"bufio\"\n\t\"context\"\n\t\"fmt\"\n\t\"log\"\n\t\"os\"\n\n\t\"github.com/spf13/cobra\"\n\t\"github.com/spf13/viper\"\n\tpcon"
},
{
"path": "cmd/plugin.go",
"chars": 30839,
"preview": "package cmd\n\nimport (\n\t\"context\"\n\t\"encoding/json\"\n\t\"errors\"\n\t\"fmt\"\n\t\"strings\"\n\t\"sync\"\n\t\"time\"\n\n\t\"github.com/gosuri/uipro"
},
{
"path": "cmd/plugin_manager.go",
"chars": 4247,
"preview": "package cmd\n\nimport (\n\t\"fmt\"\n\t\"log\"\n\t\"os\"\n\t\"os/signal\"\n\t\"strings\"\n\t\"syscall\"\n\t\"time\"\n\n\t\"github.com/hashicorp/go-hclog\"\n\t"
},
{
"path": "cmd/query.go",
"chars": 8060,
"preview": "package cmd\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"io\"\n\t\"os\"\n\t\"slices\"\n\t\"strings\"\n\n\t\"github.com/spf13/cobra\"\n\t\"github.com/spf13/v"
},
{
"path": "cmd/query_test.go",
"chars": 4736,
"preview": "package cmd\n\nimport (\n\t\"context\"\n\t\"os\"\n\t\"strings\"\n\t\"sync\"\n\t\"testing\"\n\n\t\"github.com/stretchr/testify/assert\"\n\t\"github.com"
},
{
"path": "cmd/root.go",
"chars": 4484,
"preview": "package cmd\n\nimport (\n\t\"context\"\n\t\"os\"\n\t\"sync\"\n\n\t\"github.com/mattn/go-isatty\"\n\t\"github.com/spf13/cobra\"\n\t\"github.com/spf"
},
{
"path": "cmd/root_test.go",
"chars": 987,
"preview": "package cmd\n\nimport (\n\t\"sync\"\n\t\"testing\"\n\n\t\"github.com/stretchr/testify/assert\"\n)\n\n// TestHideRootFlags_NonExistentFlag "
},
{
"path": "cmd/service.go",
"chars": 21257,
"preview": "package cmd\n\nimport (\n\t\"context\"\n\t\"errors\"\n\t\"fmt\"\n\t\"log\"\n\t\"os\"\n\t\"os/signal\"\n\t\"strings\"\n\t\"time\"\n\n\tpsutils \"github.com/shi"
},
{
"path": "design/adding_to_workspace_profile.md",
"chars": 1853,
"preview": "# Workspace Profile (work in progress)\n\n## Adding properties to Workspace Profile\n\n### Adding simple properties to `Work"
},
{
"path": "design/connection_status_table.md",
"chars": 4247,
"preview": "# Connection State \n\n## Overview\nConnection state is stored in multiple locations\n\n- The connection config (spc files) -"
},
{
"path": "design/embedded_postgres_build_instructions.md",
"chars": 5574,
"preview": "# PostgreSQL Source Build Instructions\n\nThis document provides step-by-step instructions for building the embedded Postg"
},
{
"path": "design/internal_introspection_tables.md",
"chars": 3521,
"preview": "# Introspection tables in the internal schema\n\n## Overview\nThe internal schema contains the following introspection tabl"
},
{
"path": "design/internal_introspection_tables_tests.md",
"chars": 1701,
"preview": "# connection and plugin config tests\n\n## 1 Connection has invalid plugin \n\n```hcl\nconnection \"aws\" {\n plugin = \"aws_bar"
},
{
"path": "design/mod_deps.md",
"chars": 903,
"preview": "\nModParseContext has LoadedDependencyMods modconfig.ModMap\n\ncurrently keyed by mod name - change to key by full name of "
},
{
"path": "design/search_path.md",
"chars": 5379,
"preview": "# Search Path\n\n## Configuring the search path\n\n## Server search path\nServer side search path (the 'steampipe' user searc"
},
{
"path": "design/sperr.md",
"chars": 9047,
"preview": "# New package `sperr`\n\n## `sperr.Error`\n\nAn `sperr.Error` is a stateful object with a `StackTrace` till the point of cre"
},
{
"path": "design/steampipe_data_files.md",
"chars": 1906,
"preview": "# Steampipe data files\n\n## .steampipe/db\n\n- `versions.json` - Stores information about the embedded database and the FDW"
},
{
"path": "design/steampipe_service_db_connections.md",
"chars": 1656,
"preview": "## Queries that need to be executed over a client connection:\n\n- Get scan metadata\n - read automatically if `--timing` "
},
{
"path": "design/timing_output.md",
"chars": 6459,
"preview": "# Steampipe CLI .timing output \n\n## CLI Implementation\nWhen the `--timing` flag is enabled, the Steampipe CLI outputs th"
},
{
"path": "go.mod",
"chars": 11481,
"preview": "module github.com/turbot/steampipe/v2\n\ngo 1.26.0\n\nreplace (\n\tgithub.com/c-bata/go-prompt => github.com/turbot/go-prompt "
},
{
"path": "go.sum",
"chars": 201215,
"preview": "cel.dev/expr v0.23.0 h1:wUb94w6OYQS4uXraxo9U+wUAs9jT47Xvl4iPgAwM2ss=\ncel.dev/expr v0.23.0/go.mod h1:hLPLo1W4QUmuYdA72RBX"
},
{
"path": "main.go",
"chars": 5145,
"preview": "package main\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"os\"\n\t\"os/exec\"\n\t\"runtime\"\n\t\"strings\"\n\n\t\"github.com/Masterminds/semver/v3\"\n\tgo"
},
{
"path": "pkg/cmdconfig/app_specific.go",
"chars": 2141,
"preview": "package cmdconfig\n\nimport (\n\t\"os\"\n\n\t\"github.com/Masterminds/semver/v3\"\n\t\"github.com/spf13/viper\"\n\tpfilepaths \"github.com"
},
{
"path": "pkg/cmdconfig/builder.go",
"chars": 5309,
"preview": "package cmdconfig\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/spf13/cobra\"\n\t\"github.com/spf13/pflag\"\n\t\"github.com/spf13/viper\"\n\tpcons"
},
{
"path": "pkg/cmdconfig/cmd_flags.go",
"chars": 1753,
"preview": "package cmdconfig\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/fatih/color\"\n\t\"github.com/spf13/cobra\"\n\t\"github.com/spf13/viper\"\n\t\"gith"
},
{
"path": "pkg/cmdconfig/cmd_hooks.go",
"chars": 15576,
"preview": "package cmdconfig\n\nimport (\n\t\"bytes\"\n\t\"context\"\n\t\"fmt\"\n\t\"io\"\n\t\"log\"\n\t\"os\"\n\t\"runtime/debug\"\n\t\"slices\"\n\t\"strings\"\n\t\"time\"\n"
},
{
"path": "pkg/cmdconfig/cmd_hooks_test.go",
"chars": 5729,
"preview": "package cmdconfig\n\nimport (\n\t\"testing\"\n\t\"time\"\n\n\t\"github.com/spf13/cobra\"\n\t\"github.com/spf13/viper\"\n)\n\nfunc TestPostRunH"
},
{
"path": "pkg/cmdconfig/diagnostics.go",
"chars": 1724,
"preview": "package cmdconfig\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"os\"\n\t\"slices\"\n\t\"sort\"\n\t\"strings\"\n\n\t\"github.com/spf13/viper\"\n\t\"gith"
},
{
"path": "pkg/cmdconfig/doc.go",
"chars": 169,
"preview": "// Package cmd_config contains helper functions to support constructing Cobra commands, validating arguments\n// and popu"
},
{
"path": "pkg/cmdconfig/env_var_type.go",
"chars": 158,
"preview": "package cmdconfig\n\ntype EnvVarType int\n\nconst (\n\tString EnvVarType = iota\n\tInt\n\tBool\n)\n\n//go:generate go run golang.org/"
},
{
"path": "pkg/cmdconfig/envvartype_string.go",
"chars": 653,
"preview": "// Code generated by \"stringer -type=EnvVarType\"; DO NOT EDIT.\n\npackage cmdconfig\n\nimport \"strconv\"\n\nfunc _() {\n\t// An \""
},
{
"path": "pkg/cmdconfig/validate.go",
"chars": 3216,
"preview": "package cmdconfig\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"strings\"\n\n\t\"github.com/spf13/viper\"\n\tfilehelpers \"github.com/turbot/go-k"
},
{
"path": "pkg/cmdconfig/validate_test.go",
"chars": 9743,
"preview": "package cmdconfig\n\nimport (\n\t\"context\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"testing\"\n\n\t\"github.com/spf13/viper\"\n\tpconstants \"github."
},
{
"path": "pkg/cmdconfig/viper.go",
"chars": 8221,
"preview": "package cmdconfig\n\nimport (\n\t\"fmt\"\n\t\"log\"\n\t\"os\"\n\t\"sync\"\n\n\tpfilepaths \"github.com/turbot/pipe-fittings/v2/filepaths\"\n\n\t\"g"
},
{
"path": "pkg/cmdconfig/viper_test.go",
"chars": 15687,
"preview": "package cmdconfig\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\t\"testing\"\n\n\t\"github.com/spf13/viper\"\n\tpconstants \"github.com/turbot/pipe-fitti"
},
{
"path": "pkg/connection/config_map.go",
"chars": 2429,
"preview": "package connection\n\nimport (\n\ttypehelpers \"github.com/turbot/go-kit/types\"\n\t\"github.com/turbot/pipe-fittings/v2/modconfi"
},
{
"path": "pkg/connection/connection_lifecycle_test.go",
"chars": 11232,
"preview": "package connection\n\nimport (\n\t\"context\"\n\t\"errors\"\n\t\"runtime\"\n\t\"sync\"\n\t\"sync/atomic\"\n\t\"testing\"\n\t\"time\"\n\n\t\"github.com/spf"
},
{
"path": "pkg/connection/connection_state_table_updater.go",
"chars": 5250,
"preview": "package connection\n\nimport (\n\t\"context\"\n\t\"log\"\n\n\t\"github.com/jackc/pgx/v5\"\n\t\"github.com/jackc/pgx/v5/pgxpool\"\n\t\"github.c"
},
{
"path": "pkg/connection/connection_watcher.go",
"chars": 4899,
"preview": "package connection\n\nimport (\n\t\"context\"\n\t\"log\"\n\n\t\"github.com/fsnotify/fsnotify\"\n\tfilehelpers \"github.com/turbot/go-kit/f"
},
{
"path": "pkg/connection/interface.go",
"chars": 904,
"preview": "package connection\n\nimport (\n\t\"context\"\n\n\t\"github.com/jackc/pgx/v5/pgxpool\"\n\t\"github.com/turbot/pipe-fittings/v2/error_h"
},
{
"path": "pkg/connection/limiter_map.go",
"chars": 970,
"preview": "package connection\n\nimport (\n\t\"github.com/turbot/pipe-fittings/v2/plugin\"\n\t\"golang.org/x/exp/maps\"\n)\n\n// LimiterMap is a"
},
{
"path": "pkg/connection/plugin_limiter_map.go",
"chars": 685,
"preview": "package connection\n\nimport (\n\t\"github.com/turbot/pipe-fittings/v2/plugin\"\n\t\"golang.org/x/exp/maps\"\n)\n\n// PluginLimiterMa"
},
{
"path": "pkg/connection/refresh_connections.go",
"chars": 1922,
"preview": "package connection\n\nimport (\n\t\"context\"\n\t\"log\"\n\t\"sync\"\n\t\"time\"\n\n\t\"github.com/turbot/go-kit/helpers\"\n\t\"github.com/turbot/"
},
{
"path": "pkg/connection/refresh_connections_state.go",
"chars": 35763,
"preview": "package connection\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"log\"\n\t\"os\"\n\t\"slices\"\n\t\"strconv\"\n\t\"strings\"\n\t\"sync\"\n\t\"time\"\n\n\t\"github.co"
},
{
"path": "pkg/connection/refresh_connections_state_test.go",
"chars": 16416,
"preview": "package connection\n\nimport (\n\t\"context\"\n\t\"errors\"\n\t\"fmt\"\n\t\"strings\"\n\t\"sync\"\n\t\"testing\"\n\t\"time\"\n\n\t\"github.com/jackc/pgx/v"
},
{
"path": "pkg/connection_sync/wait_for_search_path.go",
"chars": 1007,
"preview": "package connection_sync\n\nimport (\n\t\"context\"\n\n\t\"github.com/turbot/steampipe/v2/pkg/db/db_common\"\n\t\"github.com/turbot/ste"
},
{
"path": "pkg/constants/app.go",
"chars": 211,
"preview": "package constants\n\nconst (\n\tClientConnectionAppNamePrefix = \"steampipe_client\"\n\tServiceConnectionAppNamePrefix "
},
{
"path": "pkg/constants/build.go",
"chars": 311,
"preview": "package constants\n\nconst (\n\tConfigKeyVersion = \"main.version\"\n\tConfigKeyCommit = \"main.commit\"\n\tConfigKeyDate = \"mai"
},
{
"path": "pkg/constants/cache.go",
"chars": 55,
"preview": "package constants\n\nconst DefaultMaxCacheSizeMb = 16384\n"
},
{
"path": "pkg/constants/cmd_name.go",
"chars": 117,
"preview": "package constants\n\nconst (\n\tCmdNameQuery = \"query\"\n\tCmdNameCheck = \"check\"\n\tCmdNameDashboard = \"dashboard\"\n)\n"
},
{
"path": "pkg/constants/config_keys.go",
"chars": 516,
"preview": "package constants\n\n// viper config keys\nconst (\n\tConfigKeyInteractive = \"interactive\"\n\tConfigKeyActiveCo"
},
{
"path": "pkg/constants/control_execute.go",
"chars": 351,
"preview": "package constants\n\nconst (\n\t// ControlQueryCancellationTimeoutSecs is maximum number of seconds to wait for control quer"
},
{
"path": "pkg/constants/control_status.go",
"chars": 144,
"preview": "package constants\n\nconst (\n\tControlOk = \"ok\"\n\tControlAlarm = \"alarm\"\n\tControlSkip = \"skip\"\n\tControlInfo = \"info\"\n\tC"
},
{
"path": "pkg/constants/db.go",
"chars": 6160,
"preview": "package constants\n\nimport (\n\t\"fmt\"\n)\n\n// Client constants\nconst (\n\t// MaxParallelClientInits is the number of clients to"
},
{
"path": "pkg/constants/default_options.go",
"chars": 1720,
"preview": "package constants\n\n// DefaultConnectionConfigContent is the content of the sample connection config file(default.spc.sam"
},
{
"path": "pkg/constants/default_workspaces.go",
"chars": 1344,
"preview": "package constants\n\n// DefaultWorkspaceContent is the content of the sample workspaces config file(workspaces.spc.sample)"
},
{
"path": "pkg/constants/display.go",
"chars": 297,
"preview": "package constants\n\nimport \"time\"\n\n// Display constants\nconst (\n\t// SpinnerShowTimeout is the duration after which spinne"
},
{
"path": "pkg/constants/doc.go",
"chars": 99,
"preview": "// Package constants contains constant values that are used throughout Steampipe\npackage constants\n"
},
{
"path": "pkg/constants/duration.go",
"chars": 371,
"preview": "package constants\n\nimport \"time\"\n\nvar (\n\tDashboardStartTimeout = 30 * time.Second\n\tDBStartTimeout = 30 * ti"
},
{
"path": "pkg/constants/env.go",
"chars": 1753,
"preview": "package constants\n\n// Environment Variables\nconst (\n\tEnvUpdateCheck = \"STEAMPIPE_UPDATE_CHECK\"\n\tEnvInstallDir ="
},
{
"path": "pkg/constants/exit_codes.go",
"chars": 1899,
"preview": "package constants\n\nconst (\n\tExitCodeSuccessful = 0\n\tExitCodeControlsAlarm = 1 // check "
},
{
"path": "pkg/constants/extensions.go",
"chars": 297,
"preview": "package constants\n\nvar ModDataExtensions = []string{\".sp\"}\nvar VariablesExtensions = []string{\".spvars\"}\nvar AutoVariabl"
},
{
"path": "pkg/constants/flags.go",
"chars": 2931,
"preview": "package constants\n\nimport (\n\t\"github.com/thediveo/enumflag/v2\"\n\t\"github.com/turbot/pipe-fittings/v2/constants\"\n)\n\ntype Q"
},
{
"path": "pkg/constants/history.go",
"chars": 188,
"preview": "package constants\n\n// Constants for History\nconst (\n\tHistoryFile = \"history.json\" // File to store historical data\n\tHist"
},
{
"path": "pkg/constants/image.go",
"chars": 297,
"preview": "package constants\n\nconst (\n\t// The BaseImageRef is the common prefix for all turbot managed steampipe images\n\t// Embedde"
},
{
"path": "pkg/constants/metaquery_commands.go",
"chars": 1211,
"preview": "package constants\n\n// Metaquery commands\n\nconst (\n\tCmdTableList = \".tables\" // List all tables\n\tCmdOu"
},
{
"path": "pkg/constants/notifications.go",
"chars": 85,
"preview": "package constants\n\nconst (\n\tPostgresNotificationChannel = \"steampipe_notification\"\n)\n"
},
{
"path": "pkg/constants/oci.go",
"chars": 67,
"preview": "package constants\n\nconst SteampipeHubOCIBase = \"hub.steampipe.io/\"\n"
},
{
"path": "pkg/constants/output_format.go",
"chars": 357,
"preview": "package constants\n\nconst (\n\tOutputFormatCSV = \"csv\"\n\tOutputFormatJSON = \"json\"\n\tOutputFormatTable "
},
{
"path": "pkg/constants/pg_hba.go",
"chars": 1401,
"preview": "package constants\n\nvar MinimalPgHbaContent string = `\nhostssl all root samehost trust\nhost all root samehost trust\n`\n\n//"
},
{
"path": "pkg/constants/postgresql_conf.go",
"chars": 2451,
"preview": "package constants\n\nconst PostgresqlConfContent = `\n# -----------------------------\n# PostgreSQL configuration file\n# ---"
},
{
"path": "pkg/constants/runtime/execution_id.go",
"chars": 810,
"preview": "package runtime\n\nimport (\n\t\"fmt\"\n\t\"time\"\n\n\t\"github.com/turbot/go-kit/helpers\"\n\t\"github.com/turbot/steampipe/v2/pkg/const"
},
{
"path": "pkg/constants/runtime/runtime_constants.go",
"chars": 183,
"preview": "// The runtime package contains values which\n// are not constants during compilation, but should remain\n// constant duri"
},
{
"path": "pkg/constants/ssl.go",
"chars": 214,
"preview": "package constants\n\n// constants for ssl key and certificate\nconst (\n\tServerCertKey = \"server.key\"\n\tRootCertKey = \"root"
},
{
"path": "pkg/constants/telemetry.go",
"chars": 178,
"preview": "package constants\n\n// constants for telemetry config flag\nconst (\n\tTelemetryNone = \"none\"\n\tTelemetryInfo = \"info\"\n)\n\nvar"
},
{
"path": "pkg/constants/workspace_profile.go",
"chars": 161,
"preview": "package constants\n\nconst (\n\tDefaultPipesHost = \"pipes.turbot.com\"\n\tLegacyDefaultPipesHost = \"cloud.steampipe.i"
},
{
"path": "pkg/db/db_client/db_client.go",
"chars": 11392,
"preview": "package db_client\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"log\"\n\t\"strings\"\n\t\"sync\"\n\t\"sync/atomic\"\n\n\t\"github.com/jackc/pgx/v5/pgconn"
},
{
"path": "pkg/db/db_client/db_client_connect.go",
"chars": 5178,
"preview": "package db_client\n\nimport (\n\t\"context\"\n\t\"slices\"\n\t\"time\"\n\n\t\"github.com/jackc/pgx/v5\"\n\t\"github.com/jackc/pgx/v5/pgxpool\"\n"
},
{
"path": "pkg/db/db_client/db_client_execute.go",
"chars": 14262,
"preview": "package db_client\n\nimport (\n\t\"context\"\n\t\"database/sql\"\n\t\"fmt\"\n\t\"log\"\n\t\"net/netip\"\n\t\"slices\"\n\t\"strings\"\n\t\"time\"\n\n\t\"github"
},
{
"path": "pkg/db/db_client/db_client_execute_retry.go",
"chars": 5531,
"preview": "package db_client\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"log\"\n\t\"time\"\n\n\t\"github.com/jackc/pgx/v5\"\n\t\"github.com/sethvargo/go-retry"
},
{
"path": "pkg/db/db_client/db_client_execute_test.go",
"chars": 6131,
"preview": "package db_client\n\nimport (\n\t\"os\"\n\t\"strings\"\n\t\"testing\"\n\n\t\"github.com/stretchr/testify/assert\"\n\t\"github.com/stretchr/tes"
},
{
"path": "pkg/db/db_client/db_client_options.go",
"chars": 907,
"preview": "package db_client\n\nimport (\n\t\"time\"\n\n\t\"github.com/jackc/pgx/v5/pgxpool\"\n)\n\ntype PoolOverrides struct {\n\tSize int\n"
},
{
"path": "pkg/db/db_client/db_client_search_path.go",
"chars": 4204,
"preview": "package db_client\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"log\"\n\t\"strings\"\n\n\t\"github.com/jackc/pgx/v5\"\n\t\"github.com/spf13/viper\"\n\t\""
},
{
"path": "pkg/db/db_client/db_client_session.go",
"chars": 3211,
"preview": "package db_client\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"time\"\n\n\t\"github.com/jackc/pgx/v5/pgxpool\"\n\t\"github.com/spf13/viper\"\n\t\"gi"
},
{
"path": "pkg/db/db_client/db_client_session_test.go",
"chars": 7770,
"preview": "package db_client\n\nimport (\n\t\"context\"\n\t\"os\"\n\t\"strings\"\n\t\"sync\"\n\t\"testing\"\n\n\t\"github.com/stretchr/testify/assert\"\n\t\"gith"
},
{
"path": "pkg/db/db_client/db_client_test.go",
"chars": 18096,
"preview": "package db_client\n\nimport (\n\t\"context\"\n\t\"os\"\n\t\"strings\"\n\t\"sync\"\n\t\"testing\"\n\n\t\"github.com/stretchr/testify/assert\"\n\t\"gith"
},
{
"path": "pkg/db/db_client/pgx_types.go",
"chars": 1742,
"preview": "package db_client\n\nimport (\n\t\"fmt\"\n\t\"strconv\"\n\t\"strings\"\n\n\t\"github.com/jackc/pgx/v5\"\n\t\"github.com/jackc/pgx/v5/pgconn\"\n\t"
},
{
"path": "pkg/db/db_common/acquire_session_result.go",
"chars": 178,
"preview": "package db_common\n\nimport (\n\t\"github.com/turbot/pipe-fittings/v2/error_helpers\"\n)\n\ntype AcquireSessionResult struct {\n\tS"
},
{
"path": "pkg/db/db_common/appname.go",
"chars": 551,
"preview": "package db_common\n\nimport (\n\t\"strings\"\n\n\t\"github.com/turbot/steampipe/v2/pkg/constants\"\n)\n\nfunc IsClientAppName(appName "
},
{
"path": "pkg/db/db_common/cache_control.go",
"chars": 1590,
"preview": "package db_common\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"time\"\n\n\t\"github.com/jackc/pgx/v5\"\n\t\"github.com/turbot/steampipe/v2/pkg/c"
},
{
"path": "pkg/db/db_common/cache_settings.go",
"chars": 1846,
"preview": "package db_common\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/spf13/viper\"\n\t\"github.com/turbot/pipe-fittings/v2/constants\"\n\t\"github.c"
},
{
"path": "pkg/db/db_common/client.go",
"chars": 1314,
"preview": "package db_common\n\nimport (\n\t\"context\"\n\n\t\"github.com/jackc/pgx/v5/pgconn\"\n\t\"github.com/jackc/pgx/v5/pgxpool\"\n\tpqueryresu"
},
{
"path": "pkg/db/db_common/db_session.go",
"chars": 1189,
"preview": "package db_common\n\nimport (\n\t\"log\"\n\t\"time\"\n\n\t\"github.com/jackc/pgx/v5/pgxpool\"\n)\n\n// DatabaseSession wraps over the raw "
},
{
"path": "pkg/db/db_common/errors.go",
"chars": 927,
"preview": "package db_common\n\nimport (\n\t\"errors\"\n\t\"github.com/jackc/pgx/v5/pgconn\"\n\t\"regexp\"\n)\n\nfunc IsRelationNotFoundError(err er"
},
{
"path": "pkg/db/db_common/execute.go",
"chars": 737,
"preview": "package db_common\n\nimport (\n\t\"context\"\n\n\t\"github.com/turbot/pipe-fittings/v2/utils\"\n\t\"github.com/turbot/steampipe/v2/pkg"
},
{
"path": "pkg/db/db_common/functions.go",
"chars": 1720,
"preview": "package db_common\n\nimport \"github.com/turbot/steampipe/v2/pkg/constants\"\n\n// Functions is a list of SQLFunction objects "
},
{
"path": "pkg/db/db_common/init_result.go",
"chars": 1390,
"preview": "package db_common\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\n\t\"github.com/spf13/viper\"\n\tpconstants \"github.com/turbot/pipe-fittings/v2"
},
{
"path": "pkg/db/db_common/max_connections.go",
"chars": 368,
"preview": "package db_common\n\nimport (\n\t\"github.com/spf13/viper\"\n\tpconstants \"github.com/turbot/pipe-fittings/v2/constants\"\n\t\"githu"
},
{
"path": "pkg/db/db_common/notification_cache.go",
"chars": 2725,
"preview": "package db_common\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"log\"\n\t\"sync\"\n\n\t\"github.com/turbot/steampipe-plugin-sdk/v5/sperr\"\n\n\t\"gith"
},
{
"path": "pkg/db/db_common/postgres.go",
"chars": 1000,
"preview": "package db_common\n\nimport (\n\t\"fmt\"\n\t\"strings\"\n)\n\n// PgEscapeName escapes strings which will be usaed for Podsdtgres obje"
},
{
"path": "pkg/db/db_common/query_with_args.go",
"chars": 76,
"preview": "package db_common\n\ntype QueryWithArgs struct {\n\tQuery string\n\tArgs []any\n}\n"
},
{
"path": "pkg/db/db_common/schema.go",
"chars": 4215,
"preview": "package db_common\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"sort\"\n\t\"strings\"\n\n\t\"github.com/jackc/pgx/v5\"\n\ttypeHelpers \"github.com/tu"
},
{
"path": "pkg/db/db_common/schema_metadata.go",
"chars": 2620,
"preview": "package db_common\n\nimport (\n\t\"regexp\"\n\t\"sort\"\n\t\"strings\"\n\n\t\"github.com/turbot/pipe-fittings/v2/utils\"\n\t\"golang.org/x/exp"
},
{
"path": "pkg/db/db_common/search_path.go",
"chars": 1921,
"preview": "package db_common\n\nimport (\n\t\"context\"\n\t\"errors\"\n\t\"slices\"\n\t\"strings\"\n\n\t\"github.com/jackc/pgx/v5\"\n\t\"github.com/turbot/go"
},
{
"path": "pkg/db/db_common/server_settings.go",
"chars": 367,
"preview": "package db_common\n\nimport (\n\t\"time\"\n)\n\ntype ServerSettings struct {\n\tStartTime time.Time `db:\"start_time\"`\n\tSteam"
},
{
"path": "pkg/db/db_common/session_system.go",
"chars": 2041,
"preview": "package db_common\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"log\"\n\n\t\"github.com/jackc/pgx/v5\"\n\t\"github.com/turbot/steampipe-plugin-sd"
},
{
"path": "pkg/db/db_common/sql_connections.go",
"chars": 2708,
"preview": "package db_common\n\nimport (\n\t\"fmt\"\n\t\"github.com/turbot/steampipe-plugin-sdk/v5/grpc/proto\"\n\t\"strings\"\n)\n\nfunc GetComment"
},
{
"path": "pkg/db/db_common/sql_function.go",
"chars": 185,
"preview": "package db_common\n\n// SQLFunction is a struct for an sqlFunc\ntype SQLFunction struct {\n\tName string\n\tParams map[st"
},
{
"path": "pkg/db/db_common/tls_config.go",
"chars": 345,
"preview": "package db_common\n\nimport (\n\t\"github.com/jackc/pgx/v5/pgconn\"\n\t\"github.com/turbot/steampipe/v2/pkg/db/sslio\"\n)\n\nfunc Add"
},
{
"path": "pkg/db/db_common/wait_connection.go",
"chars": 4989,
"preview": "package db_common\n\nimport (\n\t\"context\"\n\t\"log\"\n\t\"sync\"\n\t\"time\"\n\n\t\"github.com/jackc/pgx/v5\"\n\t\"github.com/jackc/pgx/v5/pgxp"
},
{
"path": "pkg/db/db_local/backup.go",
"chars": 17165,
"preview": "package db_local\n\nimport (\n\t\"bufio\"\n\t\"context\"\n\t\"fmt\"\n\t\"io/fs\"\n\t\"log\"\n\t\"os\"\n\t\"os/exec\"\n\t\"path/filepath\"\n\t\"sort\"\n\t\"string"
},
{
"path": "pkg/db/db_local/backup_test.go",
"chars": 1157,
"preview": "package db_local\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"testing\"\n\t\"time\"\n\n\tfilehelpers \"github.com/turbot/go-kit/file"
},
{
"path": "pkg/db/db_local/create_connection.go",
"chars": 7482,
"preview": "package db_local\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"log\"\n\t\"strings\"\n\t\"time\"\n\n\t\"github.com/jackc/pgx/v5\"\n\t\"github.com/jackc/pg"
},
{
"path": "pkg/db/db_local/execute.go",
"chars": 1757,
"preview": "package db_local\n\nimport (\n\t\"context\"\n\t\"log\"\n\n\t\"github.com/jackc/pgx/v5\"\n\t\"github.com/jackc/pgx/v5/pgconn\"\n\t\"github.com/"
},
{
"path": "pkg/db/db_local/install.go",
"chars": 18863,
"preview": "package db_local\n\nimport (\n\t\"context\"\n\t\"errors\"\n\t\"fmt\"\n\t\"log\"\n\t\"os\"\n\t\"os/exec\"\n\t\"sync\"\n\n\t\"github.com/fatih/color\"\n\t\"gith"
},
{
"path": "pkg/db/db_local/install_test.go",
"chars": 743,
"preview": "package db_local\n\nimport (\n\t\"testing\"\n)\n\nfunc TestIsValidDatabaseName(t *testing.T) {\n\ttests := map[string]bool{\n\t\t\"vali"
},
{
"path": "pkg/db/db_local/internal.go",
"chars": 10039,
"preview": "package db_local\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"log\"\n\t\"strings\"\n\n\t\"github.com/jackc/pgx/v5\"\n\t\"github.com/turbot/pipe-fitt"
},
{
"path": "pkg/db/db_local/local_db_client.go",
"chars": 4600,
"preview": "package db_local\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"log\"\n\n\t\"github.com/jackc/pgx/v5/pgconn\"\n\t\"github.com/spf13/viper\"\n\tpconst"
},
{
"path": "pkg/db/db_local/logs.go",
"chars": 834,
"preview": "package db_local\n\nimport (\n\t\"log\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"time\"\n\n\t\"github.com/turbot/steampipe/v2/pkg/filepaths\"\n)\n\ncon"
},
{
"path": "pkg/db/db_local/notify.go",
"chars": 843,
"preview": "package db_local\n\nimport (\n\t\"context\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"log\"\n\n\t\"github.com/jackc/pgx/v5\"\n\t\"github.com/turbot/ste"
},
{
"path": "pkg/db/db_local/password.go",
"chars": 2216,
"preview": "package db_local\n\nimport (\n\t\"encoding/json\"\n\t\"os\"\n\t\"strings\"\n\n\t\"github.com/google/uuid\"\n\tfilehelpers \"github.com/turbot/"
},
{
"path": "pkg/db/db_local/refresh_functions_test.go",
"chars": 1587,
"preview": "package db_local\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"sync\"\n\t\"testing\"\n\n\t\"github.com/turbot/pipe-fittings/v2/app_specific\"\n\t\"gi"
},
{
"path": "pkg/db/db_local/running_info.go",
"chars": 4786,
"preview": "package db_local\n\nimport (\n\t\"bytes\"\n\t\"encoding/json\"\n\t\"log\"\n\t\"os\"\n\t\"os/exec\"\n\t\"slices\"\n\t\"sort\"\n\n\tfilehelpers \"github.com"
},
{
"path": "pkg/db/db_local/search_path.go",
"chars": 3257,
"preview": "package db_local\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"log\"\n\t\"sort\"\n\t\"strings\"\n\n\t\"github.com/jackc/pgx/v5/pgxpool\"\n\t\"github.com/"
},
{
"path": "pkg/db/db_local/server_settings.go",
"chars": 1357,
"preview": "package db_local\n\nimport (\n\t\"context\"\n\t\"log\"\n\t\"time\"\n\n\t\"github.com/jackc/pgx/v5\"\n\t\"github.com/spf13/viper\"\n\tpconstants \""
},
{
"path": "pkg/db/db_local/service.go",
"chars": 2593,
"preview": "package db_local\n\nimport (\n\t\"fmt\"\n\t\"log\"\n\t\"os\"\n\t\"strconv\"\n\t\"strings\"\n\n\tfilehelpers \"github.com/turbot/go-kit/files\"\n\t\"gi"
},
{
"path": "pkg/db/db_local/sql_clone.go",
"chars": 4696,
"preview": "package db_local\n\nconst cloneForeignSchemaSQL = `CREATE OR REPLACE FUNCTION clone_foreign_schema(\n source_schema text"
},
{
"path": "pkg/db/db_local/ssl.go",
"chars": 12152,
"preview": "package db_local\n\nimport (\n\t\"crypto/rand\"\n\t\"crypto/rsa\"\n\t\"crypto/x509\"\n\t\"crypto/x509/pkix\"\n\t\"encoding/pem\"\n\t\"fmt\"\n\t\"log\""
},
{
"path": "pkg/db/db_local/start_services.go",
"chars": 20976,
"preview": "package db_local\n\nimport (\n\t\"bufio\"\n\t\"context\"\n\t\"fmt\"\n\t\"log\"\n\t\"os\"\n\t\"os/exec\"\n\t\"slices\"\n\t\"strings\"\n\t\"sync\"\n\t\"syscall\"\n\n\t"
},
{
"path": "pkg/db/db_local/stop_services.go",
"chars": 10963,
"preview": "package db_local\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"log\"\n\t\"os\"\n\t\"strings\"\n\t\"syscall\"\n\t\"time\"\n\n\tpsutils \"github.com/shirou/gop"
},
{
"path": "pkg/db/platform/paths_darwin_amd64.go",
"chars": 285,
"preview": "//go:build darwin && amd64\n// +build darwin,amd64\n\npackage platform\n\nvar Paths = PlatformPaths{\n\tTarFileName: \"p"
},
{
"path": "pkg/db/platform/paths_darwin_arm64.go",
"chars": 285,
"preview": "//go:build darwin && arm64\n// +build darwin,arm64\n\npackage platform\n\nvar Paths = PlatformPaths{\n\tTarFileName: \"p"
},
{
"path": "pkg/db/platform/paths_linux_386.go",
"chars": 278,
"preview": "//go:build linux && 386\n// +build linux,386\n\npackage platform\n\nvar Paths = PlatformPaths{\n\tTarFileName: \"postgre"
},
{
"path": "pkg/db/platform/paths_linux_amd64.go",
"chars": 282,
"preview": "//go:build linux && amd64\n// +build linux,amd64\n\npackage platform\n\nvar Paths = PlatformPaths{\n\tTarFileName: \"pos"
},
{
"path": "pkg/db/platform/paths_linux_arm.go",
"chars": 278,
"preview": "//go:build linux && arm\n// +build linux,arm\n\npackage platform\n\nvar Paths = PlatformPaths{\n\tTarFileName: \"postgre"
},
{
"path": "pkg/db/platform/paths_linux_arm64.go",
"chars": 282,
"preview": "//go:build linux && arm64\n// +build linux,arm64\n\npackage platform\n\nvar Paths = PlatformPaths{\n\tTarFileName: \"pos"
},
{
"path": "pkg/db/platform/paths_windows_amd64.go",
"chars": 296,
"preview": "//go:build windows && amd64\n// +build windows,amd64\n\npackage platform\n\nvar Paths = PlatformPaths{\n\tTarFileName: "
},
{
"path": "pkg/db/platform/platform_paths.go",
"chars": 241,
"preview": "package platform\n\n// PlatformPaths data struct for different platforms\ntype PlatformPaths struct {\n\tTarFileName "
},
{
"path": "pkg/db/sslio/sslio.go",
"chars": 1463,
"preview": "package sslio\n\nimport (\n\t\"bytes\"\n\t\"crypto/rsa\"\n\t\"crypto/x509\"\n\t\"encoding/pem\"\n\t\"fmt\"\n\t\"log\"\n\t\"os\"\n\n\t\"github.com/turbot/p"
},
{
"path": "pkg/display/timing.go",
"chars": 5537,
"preview": "package display\n\nimport (\n\t\"fmt\"\n\t\"log\"\n\t\"os\"\n\t\"reflect\"\n\t\"strings\"\n\n\t\"github.com/spf13/viper\"\n\tpconstants \"github.com/t"
},
{
"path": "pkg/error_helpers/cancelled.go",
"chars": 336,
"preview": "package error_helpers\n\nimport (\n\t\"context\"\n\tsdkerrorhelpers \"github.com/turbot/steampipe-plugin-sdk/v5/error_helpers\"\n)\n"
},
{
"path": "pkg/error_helpers/cloud.go",
"chars": 233,
"preview": "package error_helpers\n\nfunc IsInvalidWorkspaceDatabaseArg(err error) bool {\n\treturn err != nil && err.Error() == \"404 No"
},
{
"path": "pkg/error_helpers/diags.go",
"chars": 1363,
"preview": "package error_helpers\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"slices\"\n\t\"strings\"\n\n\t\"github.com/turbot/terraform-components/tfdiags\""
},
{
"path": "pkg/error_helpers/errors.go",
"chars": 700,
"preview": "package error_helpers\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\n\t\"github.com/turbot/pipe-fittings/v2/constants\"\n)\n\nvar MissingCloudTok"
},
{
"path": "pkg/error_helpers/postgres.go",
"chars": 238,
"preview": "package error_helpers\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\n\t\"github.com/jackc/pgconn\"\n)\n\nfunc DecodePgError(err error) error {\n\tv"
},
{
"path": "pkg/error_helpers/utils.go",
"chars": 3832,
"preview": "package error_helpers\n\nimport (\n\t\"context\"\n\t\"errors\"\n\t\"fmt\"\n\t\"os\"\n\t\"strings\"\n\n\t\"golang.org/x/exp/maps\"\n\n\t\"github.com/fat"
},
{
"path": "pkg/export/exporter.go",
"chars": 438,
"preview": "package export\n\nimport \"context\"\n\n// ExportSourceData is an interface implemented by all types which can be used as an i"
},
{
"path": "pkg/export/helpers.go",
"chars": 1410,
"preview": "package export\n\nimport (\n\t\"fmt\"\n\t\"io\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"time\"\n)\n\nfunc GenerateDefaultExportFileName(executionName"
},
{
"path": "pkg/export/helpers_test.go",
"chars": 1770,
"preview": "package export\n\nimport (\n\t\"errors\"\n\t\"io\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"testing\"\n)\n\n// errorReader simulates a reader that fai"
},
{
"path": "pkg/export/manager.go",
"chars": 6112,
"preview": "package export\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"path\"\n\t\"strings\"\n\t\"sync\"\n\n\t\"github.com/turbot/pipe-fittings/v2/utils\"\n\t\"git"
},
{
"path": "pkg/export/manager_test.go",
"chars": 4993,
"preview": "package export\n\nimport (\n\t\"context\"\n\t\"testing\"\n\n\t\"github.com/turbot/steampipe/v2/pkg/constants\"\n)\n\ntype testExporter str"
},
{
"path": "pkg/export/snapshot_exporter.go",
"chars": 896,
"preview": "package export\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"strings\"\n\n\t\"github.com/turbot/pipe-fittings/v2/steampipeconfig\"\n\t\"github.co"
},
{
"path": "pkg/export/target.go",
"chars": 490,
"preview": "package export\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"os\"\n)\n\ntype Target struct {\n\texporter Exporter\n\tfilePath string\n\t"
},
{
"path": "pkg/export/target_test.go",
"chars": 1128,
"preview": "package export\n\nimport (\n\t\"context\"\n\t\"testing\"\n)\n\n// TestTarget_Export_NilExporter tests that Target.Export() handles a "
},
{
"path": "pkg/filepaths/db_path.go",
"chars": 4059,
"preview": "package filepaths\n\nimport (\n\t\"os\"\n\t\"path/filepath\"\n\n\t\"github.com/turbot/steampipe/v2/pkg/constants\"\n\t\"github.com/turbot/"
},
{
"path": "pkg/filepaths/steampipe.go",
"chars": 5152,
"preview": "package filepaths\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\t\"path/filepath\"\n\n\tfilehelpers \"github.com/turbot/go-kit/files\"\n\t\"github.com/tu"
},
{
"path": "pkg/filepaths/workspace.go",
"chars": 72,
"preview": "package filepaths\n\nconst (\n\tWorkspaceConfigFileName = \"workspace.spc\"\n)\n"
},
{
"path": "pkg/initialisation/cloud_metadata.go",
"chars": 1563,
"preview": "package initialisation\n\nimport (\n\t\"context\"\n\t\"strings\"\n\n\t\"github.com/spf13/viper\"\n\t\"github.com/turbot/pipe-fittings/v2/c"
},
{
"path": "pkg/initialisation/init_data.go",
"chars": 4253,
"preview": "package initialisation\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"log\"\n\n\t\"github.com/spf13/viper\"\n\t\"github.com/turbot/go-kit/helpers\""
},
{
"path": "pkg/initialisation/init_data_test.go",
"chars": 13396,
"preview": "package initialisation\n\nimport (\n\t\"context\"\n\t\"runtime\"\n\t\"testing\"\n\t\"time\"\n\n\t\"github.com/spf13/viper\"\n\tpconstants \"github"
},
{
"path": "pkg/installationstate/state.go",
"chars": 2097,
"preview": "package installationstate\n\nimport (\n\t\"encoding/json\"\n\t\"log\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"time\"\n\n\t\"github.com/google/uuid\"\n\t\""
},
{
"path": "pkg/interactive/autocomplete_suggestions.go",
"chars": 2855,
"preview": "package interactive\n\nimport (\n\t\"sort\"\n\t\"sync\"\n\n\t\"github.com/c-bata/go-prompt\"\n)\n\nconst (\n\t// Maximum number of schemas/c"
},
{
"path": "pkg/interactive/autocomplete_suggestions_test.go",
"chars": 1523,
"preview": "package interactive\n\nimport (\n\t\"sync\"\n\t\"testing\"\n\n\t\"github.com/c-bata/go-prompt\"\n)\n\n// TestAutoCompleteSuggestions_Concu"
},
{
"path": "pkg/interactive/autocomplete_test.go",
"chars": 9168,
"preview": "package interactive\n\nimport (\n\t\"testing\"\n\n\t\"github.com/c-bata/go-prompt\"\n)\n\n// TestNewAutocompleteSuggestions tests the "
},
{
"path": "pkg/interactive/cancel_test.go",
"chars": 13649,
"preview": "package interactive\n\nimport (\n\t\"context\"\n\t\"sync\"\n\t\"testing\"\n\t\"time\"\n\n\t\"go.uber.org/goleak\"\n)\n\n// TestCreatePromptContext"
},
{
"path": "pkg/interactive/highlighter.go",
"chars": 676,
"preview": "package interactive\n\nimport (\n\t\"bytes\"\n\n\t\"github.com/alecthomas/chroma\"\n\t\"github.com/c-bata/go-prompt\"\n)\n\ntype Highlight"
}
]
// ... and 810 more files (download for full content)
About this extraction
This page contains the full source code of the turbot/steampipe GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 1010 files (2.6 MB), approximately 737.4k tokens, and a symbol index with 1978 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.