github.com/Ali-iotechsys/sqlboiler/v4@v4.0.0-20221208124957-6aec9a5f1f71/drivers/sqlboiler-sqlite3/driver/override/test/singleton/sqlite3_main_test.go.tpl (about)

     1  var rgxSQLitekey = regexp.MustCompile(`(?mi)((,\n)?\s+foreign key.*?\n)+`)
     2  
     3  type sqliteTester struct {
     4  	dbConn *sql.DB
     5  
     6  	dbName	string
     7  	testDBName string
     8  }
     9  
    10  func init() {
    11  	dbMain = &sqliteTester{}
    12  }
    13  
    14  func (s *sqliteTester) setup() error {
    15  	var err error
    16  
    17      s.dbName = viper.GetString("sqlite3.dbname")
    18      if len(s.dbName) == 0 {
    19          return errors.New("no dbname specified")
    20      }
    21  
    22  	s.testDBName = filepath.Join(os.TempDir(), fmt.Sprintf("boil-sqlite3-%d.sql", rand.Int()))
    23  
    24  	dumpCmd := exec.Command("sqlite3", "-cmd", ".dump", s.dbName)
    25  	createCmd := exec.Command("sqlite3", s.testDBName)
    26  
    27  	r, w := io.Pipe()
    28  	dumpCmd.Stdout = w
    29  	createCmd.Stdin = newFKeyDestroyer(rgxSQLitekey, r)
    30  
    31  	if err = dumpCmd.Start(); err != nil {
    32  		return errors.Wrap(err, "failed to start sqlite3 dump command")
    33  	}
    34  	if err = createCmd.Start(); err != nil {
    35  		return errors.Wrap(err, "failed to start sqlite3 create command")
    36  	}
    37  
    38  	if err = dumpCmd.Wait(); err != nil {
    39  		fmt.Println(err)
    40  		return errors.Wrap(err, "failed to wait for sqlite3 dump command")
    41  	}
    42  
    43  	w.Close() // After dumpCmd is done, close the write end of the pipe
    44  
    45  	if err = createCmd.Wait(); err != nil {
    46  		fmt.Println(err)
    47  		return errors.Wrap(err, "failed to wait for sqlite3 create command")
    48  	}
    49  
    50  	return nil
    51  }
    52  
    53  func (s *sqliteTester) teardown() error {
    54  	if s.dbConn != nil {
    55  		s.dbConn.Close()
    56  	}
    57  
    58  	return os.Remove(s.testDBName)
    59  }
    60  
    61  func (s *sqliteTester) conn() (*sql.DB, error) {
    62  	if s.dbConn != nil {
    63          return s.dbConn, nil
    64  	}
    65  
    66  	var err error
    67  	s.dbConn, err = sql.Open("sqlite", fmt.Sprintf("file:%s?cache=shared&_loc=UTC", s.testDBName))
    68          if err != nil {
    69          return nil, err
    70  	}
    71  
    72  	return s.dbConn, nil
    73  }