mirror of
https://github.com/turbot/steampipe.git
synced 2026-02-15 13:00:08 -05:00
62 lines
1.8 KiB
Go
62 lines
1.8 KiB
Go
package db
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
"log"
|
|
|
|
"github.com/turbot/steampipe/query/queryresult"
|
|
"github.com/turbot/steampipe/utils"
|
|
)
|
|
|
|
// EnsureDbAndStartService :: ensure db is installed and start service if necessary
|
|
func EnsureDbAndStartService(invoker Invoker) error {
|
|
utils.LogTime("db.EnsureDbAndStartService start")
|
|
defer utils.LogTime("db.EnsureDbAndStartService end")
|
|
|
|
log.Println("[TRACE] db.EnsureDbAndStartService start")
|
|
|
|
EnsureDBInstalled()
|
|
status, err := GetStatus()
|
|
if err != nil {
|
|
return errors.New("could not retrieve service status")
|
|
}
|
|
|
|
if status == nil {
|
|
// the db service is not started - start it
|
|
StartImplicitService(invoker)
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// RunInteractivePrompt :: start the interactive query prompt
|
|
func RunInteractivePrompt(workspace WorkspaceResourceProvider, client *Client) (*queryresult.ResultStreamer, error) {
|
|
resultsStreamer := queryresult.NewResultStreamer()
|
|
|
|
interactiveClient, err := newInteractiveClient(workspace, client, resultsStreamer)
|
|
if err != nil {
|
|
utils.ShowErrorWithMessage(err, "interactive client failed to initialize")
|
|
Shutdown(client, InvokerQuery)
|
|
return nil, err
|
|
}
|
|
|
|
// start the interactive prompt in a go routine
|
|
go interactiveClient.InteractiveQuery()
|
|
|
|
return resultsStreamer, nil
|
|
}
|
|
|
|
// ExecuteQuery :: execute a single query. If shutdownAfterCompletion is true, shutdown the client after completion
|
|
func ExecuteQuery(ctx context.Context, queryString string, client *Client) (*queryresult.ResultStreamer, error) {
|
|
utils.LogTime("db.ExecuteQuery start")
|
|
defer utils.LogTime("db.ExecuteQuery end")
|
|
|
|
resultsStreamer := queryresult.NewResultStreamer()
|
|
result, err := client.ExecuteQuery(ctx, queryString, false)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
go resultsStreamer.StreamSingleResult(result)
|
|
return resultsStreamer, nil
|
|
}
|