Git Product home page Git Product logo

Comments (3)

AdamSLevy avatar AdamSLevy commented on June 12, 2024 1

So this issue is not so much an issue with this Go package so much as a subtlety to both PRAGMA foreign_keys = ON and sqlitex.ExecScript.

First understand that sqlitex.ExecScript wraps the entire script in a SAVEPOINT.

You are running PRAGMA foreign_keys = ON within this SAVEPOINT, and as such it will have no effect. This is a quirk of sqlite3 that is not well documented, but you can try it for yourself.

PRAGMA foreign_keys;
0
SAVEPOINT "a";
PRAGMA foreign_keys=ON;
PRAGMA foreign_keys;
0
COMMIT;
PRAGMA foreign_keys;
0
PRAGMA foreign_keys=ON;
PRAGMA foreign_keys;
1

You can address this by running PRAGMA foreign_keys = ON using sqlitex.Exec instead. You must do this once on each connection in the sqlitex.Pool each time you start the program or open a new connection.

	const PoolSize = 10
	dbpool, err := sqlitex.Open("file:./sample.db", 0, PoolSize)
	if err != nil {
		panic(err)
	}
	for i := 0; i < PoolSize; i++ {
		conn := dbpool.Get(nil)
		err := sqlitex.Exec(conn, `PRAGMA foreign_keys = ON;`, nil)
		if err != nil {
			panic(err)
		}
	}

from sqlite.

alinz avatar alinz commented on June 12, 2024 1

Thanks for the explanation.

from sqlite.

AdamSLevy avatar AdamSLevy commented on June 12, 2024

Note that once you set the pragma on all connections in the pool, that setting will remain on the connections and so there is no need to run it again as you pull connections of the pool later.

from sqlite.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.