sqlite icon indicating copy to clipboard operation
sqlite copied to clipboard

Multiple sqlitex.Pools giving off by 1 values

Open delaneyj opened this issue 4 years ago • 2 comments

Using sonyflake IDs and getting odd behavior

image

Most of the time its the correct value however I'm getting a ton of off by 1 values image

When doing something like AggregateID:= stmt.GetInt64("agg_id"). These values all well within 64 bits so not sure what the issue could be. Any thoughts on what I could be doing wrong?

If I call it explicitly via

stmt2 := db.Prep("select * from events where agg_id=132345566607552512;")
	for {
		has, err := stmt2.Step()
		if err != nil {
			log.Fatal(err)
		}
		if !has {
			break
		}
		log.Print(stmt2.GetInt64("agg_id"), stmt2.GetInt64("version"))
	}

EDIT: also oddly I'm getting off by one the other direction as well. 132361724597481473 in sqlite but coming through as 132361724597481472

EDIT2: So I changed ALL ids from int64 to string. Exact same issue! So I narrowed it down.

  1. Have 2 goroutines (A,B) with completely different pools and databases (A.sqlite & B.sqlite)
  2. Get errors
  3. Comment out either pool
  4. Works as expected.
  5. Enable both and delete previous databases
  6. Get errors
  7. A.sqlite contains what I'd expect the contents of B.sqlite to be, B.sqlite is empty!

So is having multiple pools of separate not supported in the same process?

delaneyj avatar Dec 31 '20 05:12 delaneyj

Ping, any one else the similar behavior?

delaneyj avatar Sep 11 '21 01:09 delaneyj

@delaneyj I can't debug this with the information you've provided. I need a complete minimal and reproducible code example please.

AdamSLevy avatar Nov 07 '21 01:11 AdamSLevy