SQLite: defer cancel's in select statements (#2717)
Signed-off-by: ItalyPaleAle <43508+ItalyPaleAle@users.noreply.github.com>
This commit is contained in:
parent
297c97ca95
commit
33f9c6ecef
|
@ -255,8 +255,8 @@ func (a *sqliteDBAccess) Get(parentCtx context.Context, req *state.GetRequest) (
|
||||||
key = ?
|
key = ?
|
||||||
AND (expiration_time IS NULL OR expiration_time > CURRENT_TIMESTAMP)`
|
AND (expiration_time IS NULL OR expiration_time > CURRENT_TIMESTAMP)`
|
||||||
ctx, cancel := context.WithTimeout(parentCtx, a.metadata.timeout)
|
ctx, cancel := context.WithTimeout(parentCtx, a.metadata.timeout)
|
||||||
|
defer cancel()
|
||||||
row := a.db.QueryRowContext(ctx, stmt, req.Key)
|
row := a.db.QueryRowContext(ctx, stmt, req.Key)
|
||||||
cancel()
|
|
||||||
_, value, etag, err := readRow(row)
|
_, value, etag, err := readRow(row)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if errors.Is(err, sql.ErrNoRows) {
|
if errors.Is(err, sql.ErrNoRows) {
|
||||||
|
@ -291,8 +291,8 @@ func (a *sqliteDBAccess) BulkGet(parentCtx context.Context, req []state.GetReque
|
||||||
key IN (` + inClause + `)
|
key IN (` + inClause + `)
|
||||||
AND (expiration_time IS NULL OR expiration_time > CURRENT_TIMESTAMP)`
|
AND (expiration_time IS NULL OR expiration_time > CURRENT_TIMESTAMP)`
|
||||||
ctx, cancel := context.WithTimeout(parentCtx, a.metadata.timeout)
|
ctx, cancel := context.WithTimeout(parentCtx, a.metadata.timeout)
|
||||||
|
defer cancel()
|
||||||
rows, err := a.db.QueryContext(ctx, stmt, params...)
|
rows, err := a.db.QueryContext(ctx, stmt, params...)
|
||||||
cancel()
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return true, nil, err
|
return true, nil, err
|
||||||
}
|
}
|
||||||
|
@ -431,8 +431,8 @@ func (a *sqliteDBAccess) doSet(parentCtx context.Context, db querier, req *state
|
||||||
(key, value, is_binary, etag, update_time, expiration_time)
|
(key, value, is_binary, etag, update_time, expiration_time)
|
||||||
VALUES(?, ?, ?, ?, CURRENT_TIMESTAMP, ` + expiration + `)`
|
VALUES(?, ?, ?, ?, CURRENT_TIMESTAMP, ` + expiration + `)`
|
||||||
ctx, cancel := context.WithTimeout(context.Background(), a.metadata.timeout)
|
ctx, cancel := context.WithTimeout(context.Background(), a.metadata.timeout)
|
||||||
|
defer cancel()
|
||||||
res, err = db.ExecContext(ctx, stmt, req.Key, requestValue, isBinary, newEtag, req.Key)
|
res, err = db.ExecContext(ctx, stmt, req.Key, requestValue, isBinary, newEtag, req.Key)
|
||||||
cancel()
|
|
||||||
} else {
|
} else {
|
||||||
stmt = `UPDATE ` + a.metadata.TableName + ` SET
|
stmt = `UPDATE ` + a.metadata.TableName + ` SET
|
||||||
value = ?,
|
value = ?,
|
||||||
|
@ -445,8 +445,8 @@ func (a *sqliteDBAccess) doSet(parentCtx context.Context, db querier, req *state
|
||||||
AND etag = ?
|
AND etag = ?
|
||||||
AND (expiration_time IS NULL OR expiration_time > CURRENT_TIMESTAMP)`
|
AND (expiration_time IS NULL OR expiration_time > CURRENT_TIMESTAMP)`
|
||||||
ctx, cancel := context.WithTimeout(context.Background(), a.metadata.timeout)
|
ctx, cancel := context.WithTimeout(context.Background(), a.metadata.timeout)
|
||||||
|
defer cancel()
|
||||||
res, err = db.ExecContext(ctx, stmt, requestValue, newEtag, isBinary, req.Key, *req.ETag)
|
res, err = db.ExecContext(ctx, stmt, requestValue, newEtag, isBinary, req.Key, *req.ETag)
|
||||||
cancel()
|
|
||||||
}
|
}
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
@ -536,19 +536,17 @@ func (a *sqliteDBAccess) doDelete(parentCtx context.Context, db querier, req *st
|
||||||
return fmt.Errorf("missing key in delete operation")
|
return fmt.Errorf("missing key in delete operation")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ctx, cancel := context.WithTimeout(parentCtx, a.metadata.timeout)
|
||||||
|
defer cancel()
|
||||||
var result sql.Result
|
var result sql.Result
|
||||||
if req.ETag == nil || *req.ETag == "" {
|
if req.ETag == nil || *req.ETag == "" {
|
||||||
// Sprintf is required for table name because sql.DB does not substitute parameters for table names.
|
// Concatenation is required for table name because sql.DB does not substitute parameters for table names.
|
||||||
stmt := "DELETE FROM " + a.metadata.TableName + " WHERE key = ?"
|
result, err = db.ExecContext(ctx, "DELETE FROM "+a.metadata.TableName+" WHERE key = ?",
|
||||||
ctx, cancel := context.WithTimeout(parentCtx, a.metadata.timeout)
|
req.Key)
|
||||||
result, err = db.ExecContext(ctx, stmt, req.Key)
|
|
||||||
cancel()
|
|
||||||
} else {
|
} else {
|
||||||
// Sprintf is required for table name because sql.DB does not substitute parameters for table names.
|
// Concatenation is required for table name because sql.DB does not substitute parameters for table names.
|
||||||
stmt := "DELETE FROM " + a.metadata.TableName + " WHERE key = ? AND etag = ?"
|
result, err = db.ExecContext(ctx, "DELETE FROM "+a.metadata.TableName+" WHERE key = ? AND etag = ?",
|
||||||
ctx, cancel := context.WithTimeout(parentCtx, a.metadata.timeout)
|
req.Key, *req.ETag)
|
||||||
result, err = db.ExecContext(ctx, stmt, req.Key, *req.ETag)
|
|
||||||
cancel()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
@ -476,7 +476,7 @@ func ConformanceTests(t *testing.T, props map[string]string, statestore state.St
|
||||||
"partitionKey": "myPartition",
|
"partitionKey": "myPartition",
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
assert.Nil(t, err)
|
require.NoError(t, err)
|
||||||
for _, scenario := range scenarios {
|
for _, scenario := range scenarios {
|
||||||
if scenario.transactionOnly {
|
if scenario.transactionOnly {
|
||||||
if scenario.transactionGroup == transactionGroup {
|
if scenario.transactionGroup == transactionGroup {
|
||||||
|
@ -489,7 +489,7 @@ func ConformanceTests(t *testing.T, props map[string]string, statestore state.St
|
||||||
"partitionKey": "myPartition",
|
"partitionKey": "myPartition",
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
assert.Nil(t, err)
|
require.NoError(t, err)
|
||||||
assertEquals(t, scenario.value, res)
|
assertEquals(t, scenario.value, res)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -503,7 +503,7 @@ func ConformanceTests(t *testing.T, props map[string]string, statestore state.St
|
||||||
"partitionKey": "myPartition",
|
"partitionKey": "myPartition",
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
assert.Nil(t, err)
|
require.NoError(t, err)
|
||||||
assert.Nil(t, res.Data)
|
assert.Nil(t, res.Data)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue