SQL doesn't allow AUTOINCREMENT on non PRIMARY KEY columns.

paul/schema_breaking_changes
Erik Johnston 2014-08-18 16:00:46 +01:00
parent b4a1f2ccb5
commit 709a92cee8
4 changed files with 23 additions and 3 deletions

View File

@ -45,6 +45,9 @@ class DataStore(RoomMemberStore, RoomStore,
self.event_factory = hs.get_event_factory()
self.hs = hs
self.min_token_deferred = self._get_min_token()
self.min_token = None
@defer.inlineCallbacks
def persist_event(self, event, backfilled=False):
if event.type == RoomMemberEvent.TYPE:
@ -82,7 +85,7 @@ class DataStore(RoomMemberStore, RoomStore,
@defer.inlineCallbacks
def _store_event(self, event, backfilled):
# FIXME (erikj): This should be removed when we start amalgamating
# event and pdu storage.
# event and pdu storage
yield self.hs.get_federation().fill_out_prev_events(event)
vals = {
@ -95,7 +98,10 @@ class DataStore(RoomMemberStore, RoomStore,
}
if backfilled:
vals["token_ordering"] = "-1"
if not self.min_token_deferred.called:
yield self.min_token_deferred
self.min_token -= 1
vals["token_ordering"] = self.min_token
unrec = {
k: v
@ -151,6 +157,17 @@ class DataStore(RoomMemberStore, RoomStore,
defer.returnValue([self._parse_event_from_row(r) for r in results])
@defer.inlineCallbacks
def _get_min_token(self):
row = yield self._execute(
None,
"SELECT MIN(token_ordering) FROM events"
)
self.min_token = rows[0][0] if rows and rows[0] else 0
defer.returnValue(self.min_token)
def schema_path(schema):
""" Get a filesystem path for the named database schema

View File

@ -14,7 +14,7 @@
*/
CREATE TABLE IF NOT EXISTS events(
token_ordering INTEGER AUTOINCREMENT,
token_ordering INTEGER PRIMARY KEY AUTOINCREMENT,
topological_ordering INTEGER NOT NULL,
event_id TEXT NOT NULL,
type TEXT NOT NULL,

View File

@ -51,6 +51,7 @@ class PresenceStateTestCase(unittest.TestCase):
hs = HomeServer("test",
db_pool=None,
http_client=None,
datastore=None,
resource_for_client=self.mock_server,
resource_for_federation=self.mock_server,
)
@ -109,6 +110,7 @@ class PresenceListTestCase(unittest.TestCase):
hs = HomeServer("test",
db_pool=None,
http_client=None,
datastore=None,
resource_for_client=self.mock_server,
resource_for_federation=self.mock_server
)

View File

@ -46,6 +46,7 @@ class ProfileTestCase(unittest.TestCase):
resource_for_client=self.mock_server,
federation=Mock(),
replication_layer=Mock(),
datastore=None,
)
def _get_user_by_token(token=None):