github.com/turbot/steampipe@v1.7.0-rc.0.0.20240517123944-7cef272d4458/pkg/db/db_local/execute.go (about)

     1  package db_local
     2  
     3  import (
     4  	"context"
     5  	"log"
     6  
     7  	"github.com/jackc/pgx/v5"
     8  	"github.com/jackc/pgx/v5/pgconn"
     9  	"github.com/turbot/steampipe/pkg/constants"
    10  	"github.com/turbot/steampipe/pkg/db/db_common"
    11  )
    12  
    13  func executeSqlAsRoot(ctx context.Context, statements ...string) ([]pgconn.CommandTag, error) {
    14  	log.Println("[DEBUG] executeSqlAsRoot start")
    15  	defer log.Println("[DEBUG] executeSqlAsRoot end")
    16  
    17  	rootClient, err := CreateLocalDbConnection(ctx, &CreateDbOptions{Username: constants.DatabaseSuperUser})
    18  	if err != nil {
    19  		return nil, err
    20  	}
    21  	return ExecuteSqlInTransaction(ctx, rootClient, statements...)
    22  }
    23  
    24  func ExecuteSqlInTransaction(ctx context.Context, conn *pgx.Conn, statements ...string) (results []pgconn.CommandTag, err error) {
    25  	log.Println("[DEBUG] ExecuteSqlInTransaction start")
    26  	defer log.Println("[DEBUG] ExecuteSqlInTransaction end")
    27  
    28  	err = pgx.BeginFunc(ctx, conn, func(tx pgx.Tx) error {
    29  		for _, statement := range statements {
    30  			result, err := tx.Exec(ctx, statement)
    31  			if err != nil {
    32  				return err
    33  			}
    34  			results = append(results, result)
    35  		}
    36  		return nil
    37  	})
    38  	return results, err
    39  }
    40  
    41  func ExecuteSqlWithArgsInTransaction(ctx context.Context, conn *pgx.Conn, queries ...db_common.QueryWithArgs) (results []pgconn.CommandTag, err error) {
    42  	log.Println("[DEBUG] ExecuteSqlWithArgsInTransaction start")
    43  	defer log.Println("[DEBUG] ExecuteSqlWithArgsInTransaction end")
    44  
    45  	err = pgx.BeginFunc(ctx, conn, func(tx pgx.Tx) error {
    46  		for _, q := range queries {
    47  			result, err := tx.Exec(ctx, q.Query, q.Args...)
    48  			if err != nil {
    49  				// set the results to nil - so that we don't return stuff in an error return
    50  				results = nil
    51  				return err
    52  			}
    53  			results = append(results, result)
    54  		}
    55  		return nil
    56  	})
    57  	return results, err
    58  }