summary refs log tree commit diff
path: root/synapse/storage/schema
diff options
context:
space:
mode:
authorRichard van der Hoff <richard@matrix.org>2018-07-26 14:54:04 +0100
committerRichard van der Hoff <richard@matrix.org>2018-07-26 14:54:04 +0100
commit51d7df19158de0f21e659625bf43716ff0a700bc (patch)
tree94227792b40b49528653b573685ef7007c41e528 /synapse/storage/schema
parentStop populating events.content (diff)
downloadsynapse-51d7df19158de0f21e659625bf43716ff0a700bc.tar.xz
Create the column nullable
There's no real point in ever making the column non-nullable, and doing so
breaks the sytests.
Diffstat (limited to 'synapse/storage/schema')
-rw-r--r--synapse/storage/schema/delta/50/make_event_content_nullable.py15
-rw-r--r--synapse/storage/schema/full_schemas/16/im.sql7
2 files changed, 13 insertions, 9 deletions
diff --git a/synapse/storage/schema/delta/50/make_event_content_nullable.py b/synapse/storage/schema/delta/50/make_event_content_nullable.py
index fa4a289514..7d27342e39 100644
--- a/synapse/storage/schema/delta/50/make_event_content_nullable.py
+++ b/synapse/storage/schema/delta/50/make_event_content_nullable.py
@@ -60,6 +60,10 @@ logger = logging.getLogger(__name__)
 
 
 def run_create(cur, database_engine, *args, **kwargs):
+    pass
+
+
+def run_upgrade(cur, database_engine, *args, **kwargs):
     if isinstance(database_engine, PostgresEngine):
         cur.execute("""
             ALTER TABLE events ALTER COLUMN content DROP NOT NULL;
@@ -67,27 +71,22 @@ def run_create(cur, database_engine, *args, **kwargs):
         return
 
     # sqlite is an arse about this. ref: https://www.sqlite.org/lang_altertable.html
-    cur.execute("PRAGMA schema_version")
-    (oldver,) = cur.fetchone()
 
     cur.execute("SELECT sql FROM sqlite_master WHERE tbl_name='events' AND type='table'")
     (oldsql,) = cur.fetchone()
+
     sql = oldsql.replace("content TEXT NOT NULL", "content TEXT")
     if sql == oldsql:
         raise Exception("Couldn't find null constraint to drop in %s" % oldsql)
 
     logger.info("Replacing definition of 'events' with: %s", sql)
 
+    cur.execute("PRAGMA schema_version")
+    (oldver,) = cur.fetchone()
     cur.execute("PRAGMA writable_schema=ON")
-
     cur.execute(
         "UPDATE sqlite_master SET sql=? WHERE tbl_name='events' AND type='table'",
         (sql, ),
     )
-
     cur.execute("PRAGMA schema_version=%i" % (oldver+1,))
     cur.execute("PRAGMA writable_schema=OFF")
-
-
-def run_upgrade(*args, **kwargs):
-    pass
diff --git a/synapse/storage/schema/full_schemas/16/im.sql b/synapse/storage/schema/full_schemas/16/im.sql
index ba5346806e..5f5cb8d01d 100644
--- a/synapse/storage/schema/full_schemas/16/im.sql
+++ b/synapse/storage/schema/full_schemas/16/im.sql
@@ -19,7 +19,12 @@ CREATE TABLE IF NOT EXISTS events(
     event_id TEXT NOT NULL,
     type TEXT NOT NULL,
     room_id TEXT NOT NULL,
-    content TEXT NOT NULL,
+
+    -- 'content' used to be created NULLable, but as of delta 50 we drop that constraint.
+    -- the hack we use to drop the constraint doesn't work for an in-memory sqlite
+    -- database, which breaks the sytests. Hence, we no longer make it nullable.
+    content TEXT,
+
     unrecognized_keys TEXT,
     processed BOOL NOT NULL,
     outlier BOOL NOT NULL,