Skip to content
This repository was archived by the owner on Oct 15, 2024. It is now read-only.

Commit 6b604db

Browse files
authored
check the query string (#118)
1 parent 39d4561 commit 6b604db

5 files changed

Lines changed: 20 additions & 25 deletions

File tree

rpc/core/tx.go

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,6 @@ import (
44
"fmt"
55

66
cmn "github.com/tendermint/tendermint/libs/common"
7-
8-
tmquery "github.com/tendermint/tendermint/libs/pubsub/query"
97
ctypes "github.com/tendermint/tendermint/rpc/core/types"
108
rpctypes "github.com/tendermint/tendermint/rpc/lib/types"
119
"github.com/tendermint/tendermint/state/txindex/null"
@@ -193,12 +191,7 @@ func TxSearch(ctx *rpctypes.Context, query string, prove bool, page, perPage int
193191
return nil, fmt.Errorf("Transaction indexing is disabled")
194192
}
195193

196-
q, err := tmquery.New(query)
197-
if err != nil {
198-
return nil, err
199-
}
200-
201-
results, err := txIndexer.Search(q)
194+
results, err := txIndexer.Search(query)
202195
if err != nil {
203196
return nil, err
204197
}

state/txindex/indexer.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ package txindex
33
import (
44
"errors"
55

6-
"github.com/tendermint/tendermint/libs/pubsub/query"
76
"github.com/tendermint/tendermint/types"
87
)
98

@@ -21,7 +20,7 @@ type TxIndexer interface {
2120
Get(hash []byte) (*types.TxResult, error)
2221

2322
// Search allows you to query for transactions.
24-
Search(q *query.Query) ([]*types.TxResult, error)
23+
Search(q string) ([]*types.TxResult, error)
2524
}
2625

2726
//----------------------------------------------------

state/txindex/kv/kv.go

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,15 @@ func (txi *TxIndex) Index(result *types.TxResult) error {
151151
// result for it (2) for range queries it is better for the client to provide
152152
// both lower and upper bounds, so we are not performing a full scan. Results
153153
// from querying indexes are then intersected and returned to the caller.
154-
func (txi *TxIndex) Search(q *query.Query) ([]*types.TxResult, error) {
154+
func (txi *TxIndex) Search(queryStr string) ([]*types.TxResult, error) {
155+
if !txi.enableRangeQuery && strings.ContainsAny(queryStr, "<>") {
156+
return nil, fmt.Errorf("range query is not supported by this node, detected invalid operators['>', '<', '<=', '>='] in the query statement")
157+
}
158+
159+
q, err := query.New(queryStr)
160+
if err != nil {
161+
return nil, err
162+
}
155163
var hashes [][]byte
156164
var hashesInitialized bool
157165

@@ -177,9 +185,6 @@ func (txi *TxIndex) Search(q *query.Query) ([]*types.TxResult, error) {
177185
// if both upper and lower bounds exist, it's better to get them in order not
178186
// no iterate over kvs that are not within range.
179187
ranges, rangeIndexes := lookForRanges(conditions)
180-
if !txi.enableRangeQuery && len(rangeIndexes) > 0 {
181-
return nil, fmt.Errorf("range query is not supported by this node, detected invalid operators['>', '<', '<=', '>='] in the query statement")
182-
}
183188

184189
if len(ranges) > 0 {
185190
skipIndexes = append(skipIndexes, rangeIndexes...)

state/txindex/kv/kv_test.go

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,8 @@ import (
1010
"github.com/stretchr/testify/require"
1111
abci "github.com/tendermint/tendermint/abci/types"
1212
cmn "github.com/tendermint/tendermint/libs/common"
13-
db "github.com/tendermint/tendermint/libs/db"
13+
"github.com/tendermint/tendermint/libs/db"
1414

15-
"github.com/tendermint/tendermint/libs/pubsub/query"
1615
"github.com/tendermint/tendermint/state/txindex"
1716
"github.com/tendermint/tendermint/types"
1817
)
@@ -97,7 +96,7 @@ func TestTxSearch(t *testing.T) {
9796

9897
for _, tc := range testCases {
9998
t.Run(tc.q, func(t *testing.T) {
100-
results, err := indexer.Search(query.MustParse(tc.q))
99+
results, err := indexer.Search(tc.q)
101100
assert.NoError(t, err)
102101

103102
assert.Len(t, results, tc.resultsLength)
@@ -120,7 +119,7 @@ func TestTxSearchOneTxWithMultipleSameTagsButDifferentValues(t *testing.T) {
120119
err := indexer.Index(txResult)
121120
require.NoError(t, err)
122121

123-
results, err := indexer.Search(query.MustParse("account.number >= 1"))
122+
results, err := indexer.Search("account.number >= 1")
124123
assert.NoError(t, err)
125124

126125
assert.Len(t, results, 1)
@@ -173,7 +172,7 @@ func TestTxSearchMultipleTxs(t *testing.T) {
173172
err = indexer.Index(txResult4)
174173
require.NoError(t, err)
175174

176-
results, err := indexer.Search(query.MustParse("account.number >= 1"))
175+
results, err := indexer.Search("account.number >= 1")
177176
assert.NoError(t, err)
178177

179178
require.Len(t, results, 3)
@@ -191,12 +190,12 @@ func TestIndexAllTags(t *testing.T) {
191190
err := indexer.Index(txResult)
192191
require.NoError(t, err)
193192

194-
results, err := indexer.Search(query.MustParse("account.number >= 1"))
193+
results, err := indexer.Search("account.number >= 1")
195194
assert.NoError(t, err)
196195
assert.Len(t, results, 1)
197196
assert.Equal(t, []*types.TxResult{txResult}, results)
198197

199-
results, err = indexer.Search(query.MustParse("account.owner = 'Ivan'"))
198+
results, err = indexer.Search("account.owner = 'Ivan'")
200199
assert.NoError(t, err)
201200
assert.Len(t, results, 1)
202201
assert.Equal(t, []*types.TxResult{txResult}, results)
@@ -205,9 +204,9 @@ func TestIndexAllTags(t *testing.T) {
205204
func TestDisableRangeQuery(t *testing.T) {
206205
indexer := NewTxIndex(db.NewMemDB(), IndexAllTags())
207206

208-
_, err := indexer.Search(query.MustParse("account.number >= 1"))
207+
_, err := indexer.Search("account.number >= 1")
209208
assert.Error(t, err)
210-
_, err = indexer.Search(query.MustParse("account.number >= 1 AND account.sequence < 100 AND tx.height > 200 AND tx.height <= 300"))
209+
_, err = indexer.Search("account.number >= 1 AND account.sequence < 100 AND tx.height > 200 AND tx.height <= 300")
211210
assert.Error(t, err)
212211
}
213212

state/txindex/null/null.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ package null
33
import (
44
"errors"
55

6-
"github.com/tendermint/tendermint/libs/pubsub/query"
76
"github.com/tendermint/tendermint/state/txindex"
87
"github.com/tendermint/tendermint/types"
98
)
@@ -28,6 +27,6 @@ func (txi *TxIndex) Index(result *types.TxResult) error {
2827
return nil
2928
}
3029

31-
func (txi *TxIndex) Search(q *query.Query) ([]*types.TxResult, error) {
30+
func (txi *TxIndex) Search(q string) ([]*types.TxResult, error) {
3231
return []*types.TxResult{}, nil
3332
}

0 commit comments

Comments
 (0)