diff --git a/statediff/indexer/database/dump/indexer.go b/statediff/indexer/database/dump/indexer.go index 5d9fb1c05..15a541b9c 100644 --- a/statediff/indexer/database/dump/indexer.go +++ b/statediff/indexer/database/dump/indexer.go @@ -500,3 +500,7 @@ func (sdi *StateDiffIndexer) Close() error { func (sdi *StateDiffIndexer) PushKnownGaps(startingBlockNumber *big.Int, endingBlockNumber *big.Int, checkedOut bool, processingKey int64) error { return nil } + +func (sdi *StateDiffIndexer) QueryDb(queryString string) (string, error) { + return "", nil +} diff --git a/statediff/indexer/database/file/indexer.go b/statediff/indexer/database/file/indexer.go index 9b7b2c00d..949aac6d1 100644 --- a/statediff/indexer/database/file/indexer.go +++ b/statediff/indexer/database/file/indexer.go @@ -482,3 +482,7 @@ func (sdi *StateDiffIndexer) Close() error { func (sdi *StateDiffIndexer) PushKnownGaps(startingBlockNumber *big.Int, endingBlockNumber *big.Int, checkedOut bool, processingKey int64) error { return nil } + +func (sdi *StateDiffIndexer) QueryDb(queryString string) (string, error) { + return "", nil +} diff --git a/statediff/indexer/database/sql/indexer.go b/statediff/indexer/database/sql/indexer.go index 512d7f772..275f8f303 100644 --- a/statediff/indexer/database/sql/indexer.go +++ b/statediff/indexer/database/sql/indexer.go @@ -554,7 +554,7 @@ func (sdi *StateDiffIndexer) Close() error { return sdi.dbWriter.Close() } -// CLEAN UP!! +// Update the known gaps table with the gap information. func (sdi *StateDiffIndexer) PushKnownGaps(startingBlockNumber *big.Int, endingBlockNumber *big.Int, checkedOut bool, processingKey int64) error { knownGap := models.KnownGapsModel{ StartingBlockNumber: startingBlockNumber.String(), @@ -567,3 +567,16 @@ func (sdi *StateDiffIndexer) PushKnownGaps(startingBlockNumber *big.Int, endingB } return nil } + +// This is a simple wrapper function which will run QueryRow on the DB +func (sdi *StateDiffIndexer) QueryDb(queryString string) (string, error) { + var name string + err := sdi.dbWriter.db.QueryRow(context.Background(), queryString).Scan(&name) + // err := sdi.dbWriter.db.QueryRow(context.Background(), "SELECT ename FROM emp ORDER BY sal DESC LIMIT 1;").Scan(&name) + if err != nil { + return "", err + } + fmt.Println(name) + + return name, nil +} diff --git a/statediff/indexer/database/sql/mainnet_tests/indexer_test.go b/statediff/indexer/database/sql/mainnet_tests/indexer_test.go index 02e6c86cf..b75ea1b7b 100644 --- a/statediff/indexer/database/sql/mainnet_tests/indexer_test.go +++ b/statediff/indexer/database/sql/mainnet_tests/indexer_test.go @@ -118,22 +118,28 @@ func tearDown(t *testing.T) { } func TestKnownGapsUpsert(t *testing.T) { - var blockNumber int64 = 111 - startBlock := big.NewInt(blockNumber) - endBlock := big.NewInt(blockNumber + 10) - + var startBlockNumber int64 = 111 + var endBlockNumber int64 = 121 ind, err := setupDb(t) if err != nil { t.Fatal(err) } require.NoError(t, err) + testKnownGapsUpsert(t, startBlockNumber, endBlockNumber, ind) + //str, err := ind.QueryDb("SELECT MAX(block_number) FROM eth.header_cids") // Figure out the string. + queryString := fmt.Sprintf("SELECT starting_block_number from eth.known_gaps WHERE starting_block_number = %d AND ending_block_number = %d", startBlockNumber, endBlockNumber) + _, queryErr := ind.QueryDb(queryString) // Figure out the string. + require.NoError(t, queryErr) + +} +func testKnownGapsUpsert(t *testing.T, startBlockNumber int64, endBlockNumber int64, ind interfaces.StateDiffIndexer) { + startBlock := big.NewInt(startBlockNumber) + endBlock := big.NewInt(endBlockNumber) + processGapError := ind.PushKnownGaps(startBlock, endBlock, false, 1) if processGapError != nil { t.Fatal(processGapError) } - - // Read data from the database! - // And compare require.NoError(t, processGapError) } diff --git a/statediff/indexer/database/sql/postgres/database.go b/statediff/indexer/database/sql/postgres/database.go index 4b6f74cf5..33bfa9757 100644 --- a/statediff/indexer/database/sql/postgres/database.go +++ b/statediff/indexer/database/sql/postgres/database.go @@ -101,7 +101,8 @@ func (db *DB) InsertIPLDsStm() string { return `INSERT INTO public.blocks (key, data) VALUES (unnest($1::TEXT[]), unnest($2::BYTEA[])) ON CONFLICT (key) DO NOTHING` } +// InsertKnownGapsStm satisfies the sql.Statements interface func (db *DB) InsertKnownGapsStm() string { - return `INSERT INTO eth.known_gaps (starting_block_number, ending_block_number, checked_out, processing_key) VALUES ($1, $2, $3, $4)` + return `INSERT INTO eth.known_gaps (starting_block_number, ending_block_number, checked_out, processing_key) VALUES ($1, $2, $3, $4) ON CONFLICT (starting_block_number) DO NOTHING` //return `INSERT INTO eth.known_gaps (starting_block_number, ending_block_number, checked_out, processing_key) VALUES (1, 2, true, 1)` } diff --git a/statediff/indexer/database/sql/writer.go b/statediff/indexer/database/sql/writer.go index ff06a424a..34ea5bbfc 100644 --- a/statediff/indexer/database/sql/writer.go +++ b/statediff/indexer/database/sql/writer.go @@ -184,6 +184,8 @@ func (w *Writer) upsertStorageCID(tx Tx, storageCID models.StorageNodeModel) err return nil } +// Upserts known gaps to the DB. +// INSERT INTO eth.known_gaps (starting_block_number, ending_block_number, checked_out, processing_key) VALUES ($1, $2, $3, $4) func (w *Writer) upsertKnownGaps(knownGaps models.KnownGapsModel) error { _, err := w.db.Exec(context.Background(), w.db.InsertKnownGapsStm(), knownGaps.StartingBlockNumber, knownGaps.EndingBlockNumber, knownGaps.CheckedOut, knownGaps.ProcessingKey) diff --git a/statediff/indexer/interfaces/interfaces.go b/statediff/indexer/interfaces/interfaces.go index bf87c7f9a..62123418c 100644 --- a/statediff/indexer/interfaces/interfaces.go +++ b/statediff/indexer/interfaces/interfaces.go @@ -33,6 +33,7 @@ type StateDiffIndexer interface { PushCodeAndCodeHash(tx Batch, codeAndCodeHash sdtypes.CodeAndCodeHash) error ReportDBMetrics(delay time.Duration, quit <-chan bool) PushKnownGaps(startingBlockNumber *big.Int, endingBlockNumber *big.Int, checkedOut bool, processingKey int64) error + QueryDb(queryString string) (string, error) io.Closer }