Files
steampipe/db/query.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
}