Remove SQLite BigInteger/Integer translation logic
This patch removes code that was causing the SQLAlchemy BigInteger type to render as INTEGER on the SQLite backend only. The comment in create_shadow_table() in nova/db/sqlalchemy/utils.py which states that BigInteger isn't supported by SQLite is not correct. SQLite has an "affinity"-based, dynamic typing model [1] that allows virtually any name to be used for a type; datatypes are actually determined on a row-by-row basis, but any type name that has the substring INT inside of it is automatically given integer affinity by default, so there is no limitation on this type. There is one difference on SQLite between INTEGER and BIGINT, and that is that SQLite's "rowid" feature only takes effect for a primary key column if it is named "INTEGER PRIMARY KEY" [2]. However, as all tests pass here it does not seem to be the case that we are using BigInteger primary keys in tests, and if we were, I'd rather approach SQLite's quirk here in a different way. Note that this patch relies upon the assumption that **SQLite is only used in Nova as a test database, not in actual deployments**. If this statement is not true, then information on these other use cases will be needed. Due to Alembic issue #341 [3] which has been resolved for version 0.8.4 [4], the comparison of INTEGER/BIGINT/SMALLINT is now significant by default, so this change (or alternatively, one that changes Nova's type comparison rules within migration tests) is needed in order for Nova to pass the test_migrations test; the error condition that raises with the latest Alembic is shown in [5]. [1] http://sqlite.org/datatype3.html [2] http://sqlite.org/lang_createtable.html#rowid [3] https://bitbucket.org/zzzeek/alembic/issues/341/integer-vs-biginteger-diffrence-are-not [4] http://alembic.readthedocs.org/en/latest/changelog.html#change-f8a974100f54b74d7f90ef765edae1ed [5] http://paste.openstack.org/show/480966/ Change-Id: I05469578a748a33fdf3c0aa5a5fee1bbe69b94cd
This commit is contained in:
@@ -1,23 +0,0 @@
|
||||
# Copyright 2010 United States Government as represented by the
|
||||
# Administrator of the National Aeronautics and Space Administration.
|
||||
# All Rights Reserved.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
from sqlalchemy import BigInteger
|
||||
from sqlalchemy.ext.compiler import compiles
|
||||
|
||||
|
||||
@compiles(BigInteger, 'sqlite')
|
||||
def compile_big_int_sqlite(type_, compiler, **kw):
|
||||
return 'INTEGER'
|
||||
|
Reference in New Issue
Block a user