mirror of
https://github.com/lightningnetwork/lnd.git
synced 2025-10-11 10:43:00 +02:00
83 lines
2.1 KiB
Go
83 lines
2.1 KiB
Go
//go:build test_native_sql
|
|
|
|
package lnd
|
|
|
|
import (
|
|
"context"
|
|
"database/sql"
|
|
"fmt"
|
|
|
|
graphdb "github.com/lightningnetwork/lnd/graph/db"
|
|
"github.com/lightningnetwork/lnd/kvdb"
|
|
"github.com/lightningnetwork/lnd/lncfg"
|
|
"github.com/lightningnetwork/lnd/sqldb"
|
|
"github.com/lightningnetwork/lnd/sqldb/sqlc"
|
|
)
|
|
|
|
// RunTestSQLMigration is a build tag that indicates whether the test_native_sql
|
|
// build tag is set.
|
|
var RunTestSQLMigration = true
|
|
|
|
// getGraphStore returns a graphdb.V1Store backed by a graphdb.SQLStore
|
|
// implementation.
|
|
func (d *DefaultDatabaseBuilder) getGraphStore(baseDB *sqldb.BaseDB,
|
|
_ kvdb.Backend, opts ...graphdb.StoreOptionModifier) (graphdb.V1Store,
|
|
error) {
|
|
|
|
graphExecutor := sqldb.NewTransactionExecutor(
|
|
baseDB, func(tx *sql.Tx) graphdb.SQLQueries {
|
|
return baseDB.WithTx(tx)
|
|
},
|
|
)
|
|
|
|
queryConfig := d.cfg.DB.Sqlite.QueryConfig
|
|
if d.cfg.DB.Backend == lncfg.PostgresBackend {
|
|
queryConfig = d.cfg.DB.Postgres.QueryConfig
|
|
}
|
|
|
|
return graphdb.NewSQLStore(
|
|
&graphdb.SQLStoreConfig{
|
|
ChainHash: *d.cfg.ActiveNetParams.GenesisHash,
|
|
QueryCfg: &queryConfig,
|
|
},
|
|
graphExecutor, opts...,
|
|
)
|
|
}
|
|
|
|
// graphSQLMigration is the version number for the graph migration
|
|
// that migrates the KV graph to the native SQL schema.
|
|
const graphSQLMigration = 9
|
|
|
|
// getSQLMigration returns a migration function for the given version.
|
|
func (d *DefaultDatabaseBuilder) getSQLMigration(ctx context.Context,
|
|
version int, kvBackend kvdb.Backend) (func(tx *sqlc.Queries) error,
|
|
bool) {
|
|
|
|
cfg := &graphdb.SQLStoreConfig{
|
|
ChainHash: *d.cfg.ActiveNetParams.GenesisHash,
|
|
QueryCfg: &d.cfg.DB.Sqlite.QueryConfig,
|
|
}
|
|
if d.cfg.DB.Backend == lncfg.PostgresBackend {
|
|
cfg.QueryCfg = &d.cfg.DB.Postgres.QueryConfig
|
|
}
|
|
|
|
switch version {
|
|
case graphSQLMigration:
|
|
return func(tx *sqlc.Queries) error {
|
|
err := graphdb.MigrateGraphToSQL(
|
|
ctx, cfg, kvBackend, tx,
|
|
)
|
|
if err != nil {
|
|
return fmt.Errorf("failed to migrate graph "+
|
|
"to SQL: %w", err)
|
|
}
|
|
|
|
return nil
|
|
}, true
|
|
}
|
|
|
|
// No version was matched, so we return false to indicate that no
|
|
// migration is known for the given version.
|
|
return nil, false
|
|
}
|