Description
What I Did
My codes:
stmt, _ := tx.PrepareContext(ctx, "/cmd/insert into test_simple_table_2 (accountID, Name, Status) VALUES(:accountID, :Name, :Status)")
_, err = stmt.Exec(sql.Named("accountID", "12345"), sql.Named("Name", "Steve"), sql.Named("status", "done"))
What I Expected
The above codes have ":Status" in PrepareContext and "status" (lower case) in stmt.Exec
I expect Hera to do case-insensitive matching check for binding name, query should be executed successfully
What I Saw Instead
Error: bindname not found in query: :status - processing 2 8:2 status,
Here is log:
14:22:33.483756 verbose: [WORKER shd3 0 workerservice.go:169] worker_sp0 : occworker read <<< 11:2 accountID,
14:22:33.483759 debug: [WORKER shd0 0 cmdprocessor.go:541] query result 236
14:22:33.483786 debug: [WORKER shd3 0 cmdprocessor.go:173] process command 11:2 accountID,
14:22:33.483826 verbose: [WORKER shd3 0 workerservice.go:169] worker_sp0 : occworker read <<< 7:3 12345,
14:22:33.483825 debug: [WORKER shd0 0 cmdprocessor.go:541] query result 1
14:22:33.483843 debug: [WORKER shd3 0 cmdprocessor.go:173] process command 7:3 12345,
14:22:33.483875 debug: [WORKER shd0 0 cmdprocessor.go:541] query result Y
14:22:33.483901 debug: [WORKER shd0 0 cmdprocessor.go:541] query result Y
14:22:33.483903 verbose: [WORKER shd3 0 cmdprocessor.go:313] BindValue: :accountID : 0 : {12345 true}
14:22:33.483921 verbose: [WORKER shd3 0 workerservice.go:169] worker_sp0 : occworker read <<< 6:2 Name,
14:22:33.483929 debug: [WORKER shd0 0 cmdprocessor.go:541] query result 237
14:22:33.483933 debug: [WORKER shd3 0 cmdprocessor.go:173] process command 6:2 Name,
14:22:33.483949 verbose: [WORKER shd3 0 workerservice.go:169] worker_sp0 : occworker read <<< 7:3 Steve,
14:22:33.483954 debug: [WORKER shd0 0 cmdprocessor.go:541] query result 2
14:22:33.483962 debug: [WORKER shd3 0 cmdprocessor.go:173] process command 7:3 Steve,
14:22:33.483978 debug: [WORKER shd0 0 cmdprocessor.go:541] query result Y
14:22:33.483998 verbose: [WORKER shd3 0 cmdprocessor.go:313] BindValue: :Name : 0 : {Steve true}
14:22:33.484002 debug: [WORKER shd0 0 cmdprocessor.go:541] query result Y
14:22:33.484015 verbose: [WORKER shd3 0 workerservice.go:169] worker_sp0 : occworker read <<< 8:2 status,
14:22:33.484028 debug: [WORKER shd3 0 cmdprocessor.go:173] process command 8:2 status,
14:22:33.484029 debug: [WORKER shd0 0 cmdprocessor.go:541] query result 238
14:22:33.484063 warn: [WORKER shd3 0 cmdprocessor.go:253] nonexisting bindname :status
14:22:33.484067 debug: [WORKER shd0 0 cmdprocessor.go:541] query result 3
14:22:33.484117 warn: [WORKER shd3 0 workerservice.go:181] Error: bindname not found in query: :status - processing 2 8:2 status,
14:22:33.484124 debug: [WORKER shd0 0 cmdprocessor.go:541] query result Y
Or when changing case for binding name from :accountID to AccountID, I get this error:
14:55:15.571877 debug: [WORKER shd3 0 cmdprocessor.go:173] process command 11:2 AccountID,
14:55:15.571915 warn: [WORKER shd3 0 cmdprocessor.go:253] nonexisting bindname :AccountID
14:55:15.571947 warn: [WORKER shd3 0 workerservice.go:181] Error: bindname not found in query: :AccountID - processing 2 11:2 AccountID,
Activity
ModEtchFill commentedon Oct 3, 2023
We are inconsistent. For shard key name matching, we do case insensitive check, isShardKey https://github.com/paypal/hera/blob/af6bc1d04dfc16241f851ef25ca925df1cd839a8/lib/coordinatorsharding.go#L261C1-L274C44
The error comes from
https://github.com/paypal/hera/blob/main/worker/shared/cmdprocessor.go#L335