@@ -53,6 +53,15 @@ def set_mysql_session_charset_and_collation(connection, branch):
5353 return
5454
5555
56+ def set_sqlite_pragma (dbapi_connection , connection_record ):
57+ # Issue #477: Enables high-concurrency for SQLite staging databases
58+ cursor = dbapi_connection .cursor ()
59+ cursor .execute ("PRAGMA journal_mode=WAL" )
60+ cursor .execute ("PRAGMA synchronous=NORMAL" )
61+ cursor .execute ("PRAGMA busy_timeout=5000" )
62+ cursor .close ()
63+
64+
5665def create_app (env_name = 'prod' , config = None ):
5766 # rendering is handled by MessageMiddleware
5867 ui_routes = (PUBLIC_UI_ROUTES + JUROR_UI_ROUTES
@@ -68,7 +77,13 @@ def create_app(env_name='prod', config=None):
6877 config = load_env_config (env_name = env_name )
6978 print ('== loaded config file: %s' % (config ['__file__' ],))
7079
71- engine = create_engine (config .get ('db_url' , DEFAULT_DB_URL ), pool_recycle = 60 )
80+ db_url = config .get ('db_url' , DEFAULT_DB_URL )
81+ engine = create_engine (db_url , pool_recycle = 60 )
82+
83+ if 'sqlite' in db_url :
84+ event .listen (engine , 'connect' , set_sqlite_pragma )
85+ elif 'mysql' in db_url :
86+ event .listen (engine , 'engine_connect' , set_mysql_session_charset_and_collation )
7287 session_type = sessionmaker ()
7388 session_type .configure (bind = engine )
7489 tmp_rdb_session = session_type ()
@@ -122,6 +137,8 @@ def get_engine():
122137
123138 if 'mysql' in db_url :
124139 event .listen (engine , 'engine_connect' , set_mysql_session_charset_and_collation )
140+ elif 'sqlite' in db_url :
141+ event .listen (engine , 'connect' , set_sqlite_pragma )
125142
126143 return engine
127144
0 commit comments